summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/io/xhrWindowNamePlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/io/xhrWindowNamePlugin.js')
-rw-r--r--js/dojo/dojox/io/xhrWindowNamePlugin.js61
1 files changed, 61 insertions, 0 deletions
diff --git a/js/dojo/dojox/io/xhrWindowNamePlugin.js b/js/dojo/dojox/io/xhrWindowNamePlugin.js
new file mode 100644
index 0000000..729f36e
--- /dev/null
+++ b/js/dojo/dojox/io/xhrWindowNamePlugin.js
@@ -0,0 +1,61 @@
+//>>built
+define("dojox/io/xhrWindowNamePlugin", [
+ "dojo/_base/kernel",
+ "dojo/_base/json",
+ "dojo/_base/xhr",
+ "dojox/io/xhrPlugins",
+ "dojox/io/windowName",
+ "dojox/io/httpParse",
+ "dojox/secure/capability"
+], function(dojo, json, xhr, xhrPlugins, windowName, httpParse, capability){
+dojo.getObject("io.xhrWindowNamePlugin", true, dojox);
+
+dojox.io.xhrWindowNamePlugin = function(/*String*/url, /*Function?*/httpAdapter, /*Boolean?*/trusted){
+ // summary:
+ // Adds the windowName transport as an XHR plugin for the given site. See
+ // dojox.io.windowName for more information on the transport.
+ // url:
+ // Url prefix of the site which can handle windowName requests.
+ // httpAdapter: This allows for adapting HTTP requests that could not otherwise be
+ // sent with window.name, so you can use a convention for headers and PUT/DELETE methods.
+ xhrPlugins.register(
+ "windowName",
+ function(method,args){
+ return args.sync !== true &&
+ (method == "GET" || method == "POST" || httpAdapter) &&
+ (args.url.substring(0,url.length) == url);
+ },
+ function(method,args,hasBody){
+ var send = windowName.send;
+ var load = args.load;
+ args.load = undefined; //we don't want send to set this callback
+ var dfd = (httpAdapter ? httpAdapter(send, true) : send)(method, args, hasBody); // use the windowName transport
+ dfd.addCallback(function(result){
+ var ioArgs = dfd.ioArgs;
+ ioArgs.xhr = {
+ getResponseHeader: function(name){
+ // convert the hash to an object to act like response headers
+ return dojo.queryToObject(ioArgs.hash.match(/[^#]*$/)[0])[name];
+ }
+ }
+ // use the XHR content handlers for handling
+ if(ioArgs.handleAs == 'json'){
+ // use a secure json verifier, using object capability validator for now
+ if(!trusted){
+ capability.validate(result,["Date"],{});
+ }
+ return dojo.fromJson(result);
+ }
+ return dojo._contentHandlers[ioArgs.handleAs || "text"]({responseText:result});
+ });
+ args.load = load;
+ if(load){
+ dfd.addCallback(load);
+ }
+ return dfd;
+ }
+ );
+};
+
+return dojox.io.xhrWindowNamePlugin;
+});