diff options
author | Barak Korren <[email protected]> | 2013-04-02 20:38:07 +0300 |
---|---|---|
committer | Barak Korren <[email protected]> | 2013-04-02 20:38:07 +0300 |
commit | 58a2577d48790c79adfd44bcfd662c980ce6cfe4 (patch) | |
tree | 523d814ea0b7b6f617fe515b186099c6e83fed72 /lib/dojo/_base/xhr.js.uncompressed.js | |
parent | e470a273cf09562fb2f9c0c899002303f19c8d16 (diff) | |
parent | cc332603431102a682feda22b9cf0093a29f0176 (diff) |
Merge branch 'master' of https://github.com/gothfox/Tiny-Tiny-RSS.git
Diffstat (limited to 'lib/dojo/_base/xhr.js.uncompressed.js')
-rw-r--r-- | lib/dojo/_base/xhr.js.uncompressed.js | 710 |
1 files changed, 0 insertions, 710 deletions
diff --git a/lib/dojo/_base/xhr.js.uncompressed.js b/lib/dojo/_base/xhr.js.uncompressed.js deleted file mode 100644 index ee78af504..000000000 --- a/lib/dojo/_base/xhr.js.uncompressed.js +++ /dev/null @@ -1,710 +0,0 @@ -define("dojo/_base/xhr", [ - "./kernel", - "./sniff", - "require", - "../io-query", - /*===== "./declare", =====*/ - "../dom", - "../dom-form", - "./Deferred", - "./config", - "./json", - "./lang", - "./array", - "../on", - "../aspect", - "../request/watch", - "../request/xhr", - "../request/util" -], function(dojo, has, require, ioq, /*===== declare, =====*/ dom, domForm, Deferred, config, json, lang, array, on, aspect, watch, _xhr, util){ - // module: - // dojo/_base/xhr - - /*===== - dojo._xhrObj = function(){ - // summary: - // does the work of portably generating a new XMLHTTPRequest object. - }; - =====*/ - dojo._xhrObj = _xhr._create; - - var cfg = dojo.config; - - // mix in io-query and dom-form - dojo.objectToQuery = ioq.objectToQuery; - dojo.queryToObject = ioq.queryToObject; - dojo.fieldToObject = domForm.fieldToObject; - dojo.formToObject = domForm.toObject; - dojo.formToQuery = domForm.toQuery; - dojo.formToJson = domForm.toJson; - - // need to block async callbacks from snatching this thread as the result - // of an async callback might call another sync XHR, this hangs khtml forever - // must checked by watchInFlight() - - dojo._blockAsync = false; - - // MOW: remove dojo._contentHandlers alias in 2.0 - var handlers = dojo._contentHandlers = dojo.contentHandlers = { - // summary: - // A map of available XHR transport handle types. Name matches the - // `handleAs` attribute passed to XHR calls. - // description: - // A map of available XHR transport handle types. Name matches the - // `handleAs` attribute passed to XHR calls. Each contentHandler is - // called, passing the xhr object for manipulation. The return value - // from the contentHandler will be passed to the `load` or `handle` - // functions defined in the original xhr call. - // example: - // Creating a custom content-handler: - // | xhr.contentHandlers.makeCaps = function(xhr){ - // | return xhr.responseText.toUpperCase(); - // | } - // | // and later: - // | dojo.xhrGet({ - // | url:"foo.txt", - // | handleAs:"makeCaps", - // | load: function(data){ /* data is a toUpper version of foo.txt */ } - // | }); - - "text": function(xhr){ - // summary: - // A contentHandler which simply returns the plaintext response data - return xhr.responseText; - }, - "json": function(xhr){ - // summary: - // A contentHandler which returns a JavaScript object created from the response data - return json.fromJson(xhr.responseText || null); - }, - "json-comment-filtered": function(xhr){ - // summary: - // A contentHandler which expects comment-filtered JSON. - // description: - // A contentHandler which expects comment-filtered JSON. - // the json-comment-filtered option was implemented to prevent - // "JavaScript Hijacking", but it is less secure than standard JSON. Use - // standard JSON instead. JSON prefixing can be used to subvert hijacking. - // - // Will throw a notice suggesting to use application/json mimetype, as - // json-commenting can introduce security issues. To decrease the chances of hijacking, - // use the standard `json` contentHandler, and prefix your "JSON" with: {}&& - // - // use djConfig.useCommentedJson = true to turn off the notice - if(!config.useCommentedJson){ - console.warn("Consider using the standard mimetype:application/json." - + " json-commenting can introduce security issues. To" - + " decrease the chances of hijacking, use the standard the 'json' handler and" - + " prefix your json with: {}&&\n" - + "Use djConfig.useCommentedJson=true to turn off this message."); - } - - var value = xhr.responseText; - var cStartIdx = value.indexOf("\/*"); - var cEndIdx = value.lastIndexOf("*\/"); - if(cStartIdx == -1 || cEndIdx == -1){ - throw new Error("JSON was not comment filtered"); - } - return json.fromJson(value.substring(cStartIdx+2, cEndIdx)); - }, - "javascript": function(xhr){ - // summary: - // A contentHandler which evaluates the response data, expecting it to be valid JavaScript - - // FIXME: try Moz and IE specific eval variants? - return dojo.eval(xhr.responseText); - }, - "xml": function(xhr){ - // summary: - // A contentHandler returning an XML Document parsed from the response data - var result = xhr.responseXML; - - if(has("ie")){ - if((!result || !result.documentElement)){ - //WARNING: this branch used by the xml handling in dojo.io.iframe, - //so be sure to test dojo.io.iframe if making changes below. - var ms = function(n){ return "MSXML" + n + ".DOMDocument"; }; - var dp = ["Microsoft.XMLDOM", ms(6), ms(4), ms(3), ms(2)]; - array.some(dp, function(p){ - try{ - var dom = new ActiveXObject(p); - dom.async = false; - dom.loadXML(xhr.responseText); - result = dom; - }catch(e){ return false; } - return true; - }); - } - } - return result; // DOMDocument - }, - "json-comment-optional": function(xhr){ - // summary: - // A contentHandler which checks the presence of comment-filtered JSON and - // alternates between the `json` and `json-comment-filtered` contentHandlers. - if(xhr.responseText && /^[^{\[]*\/\*/.test(xhr.responseText)){ - return handlers["json-comment-filtered"](xhr); - }else{ - return handlers["json"](xhr); - } - } - }; - - /*===== - - // kwargs function parameter definitions. Assigning to dojo namespace rather than making them local variables - // because they are used by dojo/io modules too - - dojo.__IoArgs = declare(null, { - // url: String - // URL to server endpoint. - // content: Object? - // Contains properties with string values. These - // properties will be serialized as name1=value2 and - // passed in the request. - // timeout: Integer? - // Milliseconds to wait for the response. If this time - // passes, the then error callbacks are called. - // form: DOMNode? - // DOM node for a form. Used to extract the form values - // and send to the server. - // preventCache: Boolean? - // Default is false. If true, then a - // "dojo.preventCache" parameter is sent in the request - // with a value that changes with each request - // (timestamp). Useful only with GET-type requests. - // handleAs: String? - // Acceptable values depend on the type of IO - // transport (see specific IO calls for more information). - // rawBody: String? - // Sets the raw body for an HTTP request. If this is used, then the content - // property is ignored. This is mostly useful for HTTP methods that have - // a body to their requests, like PUT or POST. This property can be used instead - // of postData and putData for dojo/_base/xhr.rawXhrPost and dojo/_base/xhr.rawXhrPut respectively. - // ioPublish: Boolean? - // Set this explicitly to false to prevent publishing of topics related to - // IO operations. Otherwise, if djConfig.ioPublish is set to true, topics - // will be published via dojo/topic.publish() for different phases of an IO operation. - // See dojo/main.__IoPublish for a list of topics that are published. - - load: function(response, ioArgs){ - // summary: - // This function will be - // called on a successful HTTP response code. - // ioArgs: dojo/main.__IoCallbackArgs - // Provides additional information about the request. - // response: Object - // The response in the format as defined with handleAs. - }, - - error: function(response, ioArgs){ - // summary: - // This function will - // be called when the request fails due to a network or server error, the url - // is invalid, etc. It will also be called if the load or handle callback throws an - // exception, unless djConfig.debugAtAllCosts is true. This allows deployed applications - // to continue to run even when a logic error happens in the callback, while making - // it easier to troubleshoot while in debug mode. - // ioArgs: dojo/main.__IoCallbackArgs - // Provides additional information about the request. - // response: Object - // The response in the format as defined with handleAs. - }, - - handle: function(loadOrError, response, ioArgs){ - // summary: - // This function will - // be called at the end of every request, whether or not an error occurs. - // loadOrError: String - // Provides a string that tells you whether this function - // was called because of success (load) or failure (error). - // response: Object - // The response in the format as defined with handleAs. - // ioArgs: dojo/main.__IoCallbackArgs - // Provides additional information about the request. - } - }); - - dojo.__IoCallbackArgs = declare(null, { - // args: Object - // the original object argument to the IO call. - // xhr: XMLHttpRequest - // For XMLHttpRequest calls only, the - // XMLHttpRequest object that was used for the - // request. - // url: String - // The final URL used for the call. Many times it - // will be different than the original args.url - // value. - // query: String - // For non-GET requests, the - // name1=value1&name2=value2 parameters sent up in - // the request. - // handleAs: String - // The final indicator on how the response will be - // handled. - // id: String - // For dojo/io/script calls only, the internal - // script ID used for the request. - // canDelete: Boolean - // For dojo/io/script calls only, indicates - // whether the script tag that represents the - // request can be deleted after callbacks have - // been called. Used internally to know when - // cleanup can happen on JSONP-type requests. - // json: Object - // For dojo/io/script calls only: holds the JSON - // response for JSONP-type requests. Used - // internally to hold on to the JSON responses. - // You should not need to access it directly -- - // the same object should be passed to the success - // callbacks directly. - }); - - dojo.__IoPublish = declare(null, { - // summary: - // This is a list of IO topics that can be published - // if djConfig.ioPublish is set to true. IO topics can be - // published for any Input/Output, network operation. So, - // dojo.xhr, dojo.io.script and dojo.io.iframe can all - // trigger these topics to be published. - // start: String - // "/dojo/io/start" is sent when there are no outstanding IO - // requests, and a new IO request is started. No arguments - // are passed with this topic. - // send: String - // "/dojo/io/send" is sent whenever a new IO request is started. - // It passes the dojo.Deferred for the request with the topic. - // load: String - // "/dojo/io/load" is sent whenever an IO request has loaded - // successfully. It passes the response and the dojo.Deferred - // for the request with the topic. - // error: String - // "/dojo/io/error" is sent whenever an IO request has errored. - // It passes the error and the dojo.Deferred - // for the request with the topic. - // done: String - // "/dojo/io/done" is sent whenever an IO request has completed, - // either by loading or by erroring. It passes the error and - // the dojo.Deferred for the request with the topic. - // stop: String - // "/dojo/io/stop" is sent when all outstanding IO requests have - // finished. No arguments are passed with this topic. - }); - =====*/ - - - dojo._ioSetArgs = function(/*dojo/main.__IoArgs*/args, - /*Function*/canceller, - /*Function*/okHandler, - /*Function*/errHandler){ - // summary: - // sets up the Deferred and ioArgs property on the Deferred so it - // can be used in an io call. - // args: - // The args object passed into the public io call. Recognized properties on - // the args object are: - // canceller: - // The canceller function used for the Deferred object. The function - // will receive one argument, the Deferred object that is related to the - // canceller. - // okHandler: - // The first OK callback to be registered with Deferred. It has the opportunity - // to transform the OK response. It will receive one argument -- the Deferred - // object returned from this function. - // errHandler: - // The first error callback to be registered with Deferred. It has the opportunity - // to do cleanup on an error. It will receive two arguments: error (the - // Error object) and dfd, the Deferred object returned from this function. - - var ioArgs = {args: args, url: args.url}; - - //Get values from form if requested. - var formObject = null; - if(args.form){ - var form = dom.byId(args.form); - //IE requires going through getAttributeNode instead of just getAttribute in some form cases, - //so use it for all. See #2844 - var actnNode = form.getAttributeNode("action"); - ioArgs.url = ioArgs.url || (actnNode ? actnNode.value : null); - formObject = domForm.toObject(form); - } - - // set up the query params - var miArgs = [{}]; - - if(formObject){ - // potentially over-ride url-provided params w/ form values - miArgs.push(formObject); - } - if(args.content){ - // stuff in content over-rides what's set by form - miArgs.push(args.content); - } - if(args.preventCache){ - miArgs.push({"dojo.preventCache": new Date().valueOf()}); - } - ioArgs.query = ioq.objectToQuery(lang.mixin.apply(null, miArgs)); - - // .. and the real work of getting the deferred in order, etc. - ioArgs.handleAs = args.handleAs || "text"; - var d = new Deferred(function(dfd){ - dfd.canceled = true; - canceller && canceller(dfd); - - var err = dfd.ioArgs.error; - if(!err){ - err = new Error("request cancelled"); - err.dojoType="cancel"; - dfd.ioArgs.error = err; - } - return err; - }); - d.addCallback(okHandler); - - //Support specifying load, error and handle callback functions from the args. - //For those callbacks, the "this" object will be the args object. - //The callbacks will get the deferred result value as the - //first argument and the ioArgs object as the second argument. - var ld = args.load; - if(ld && lang.isFunction(ld)){ - d.addCallback(function(value){ - return ld.call(args, value, ioArgs); - }); - } - var err = args.error; - if(err && lang.isFunction(err)){ - d.addErrback(function(value){ - return err.call(args, value, ioArgs); - }); - } - var handle = args.handle; - if(handle && lang.isFunction(handle)){ - d.addBoth(function(value){ - return handle.call(args, value, ioArgs); - }); - } - - // Attach error handler last (not including topic publishing) - // to catch any errors that may have been generated from load - // or handle functions. - d.addErrback(function(error){ - return errHandler(error, d); - }); - - //Plug in topic publishing, if dojo.publish is loaded. - if(cfg.ioPublish && dojo.publish && ioArgs.args.ioPublish !== false){ - d.addCallbacks( - function(res){ - dojo.publish("/dojo/io/load", [d, res]); - return res; - }, - function(res){ - dojo.publish("/dojo/io/error", [d, res]); - return res; - } - ); - d.addBoth(function(res){ - dojo.publish("/dojo/io/done", [d, res]); - return res; - }); - } - - d.ioArgs = ioArgs; - - // FIXME: need to wire up the xhr object's abort method to something - // analogous in the Deferred - return d; - }; - - var _deferredOk = function(/*Deferred*/dfd){ - // summary: - // okHandler function for dojo._ioSetArgs call. - - var ret = handlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); - return ret === undefined ? null : ret; - }; - var _deferError = function(/*Error*/error, /*Deferred*/dfd){ - // summary: - // errHandler function for dojo._ioSetArgs call. - - if(!dfd.ioArgs.args.failOk){ - console.error(error); - } - return error; - }; - - //Use a separate count for knowing if we are starting/stopping io calls. - var _checkPubCount = function(dfd){ - if(_pubCount <= 0){ - _pubCount = 0; - if(cfg.ioPublish && dojo.publish && (!dfd || dfd && dfd.ioArgs.args.ioPublish !== false)){ - dojo.publish("/dojo/io/stop"); - } - } - }; - - var _pubCount = 0; - aspect.after(watch, "_onAction", function(){ - _pubCount -= 1; - }); - aspect.after(watch, "_onInFlight", _checkPubCount); - - dojo._ioCancelAll = watch.cancelAll; - /*===== - dojo._ioCancelAll = function(){ - // summary: - // Cancels all pending IO requests, regardless of IO type - // (xhr, script, iframe). - }; - =====*/ - - dojo._ioNotifyStart = function(/*Deferred*/dfd){ - // summary: - // If dojo.publish is available, publish topics - // about the start of a request queue and/or the - // the beginning of request. - // - // Used by IO transports. An IO transport should - // call this method before making the network connection. - if(cfg.ioPublish && dojo.publish && dfd.ioArgs.args.ioPublish !== false){ - if(!_pubCount){ - dojo.publish("/dojo/io/start"); - } - _pubCount += 1; - dojo.publish("/dojo/io/send", [dfd]); - } - }; - - dojo._ioWatch = function(dfd, validCheck, ioCheck, resHandle){ - // summary: - // Watches the io request represented by dfd to see if it completes. - // dfd: Deferred - // The Deferred object to watch. - // validCheck: Function - // Function used to check if the IO request is still valid. Gets the dfd - // object as its only argument. - // ioCheck: Function - // Function used to check if basic IO call worked. Gets the dfd - // object as its only argument. - // resHandle: Function - // Function used to process response. Gets the dfd - // object as its only argument. - - var args = dfd.ioArgs.options = dfd.ioArgs.args; - lang.mixin(dfd, { - response: dfd.ioArgs, - isValid: function(response){ - return validCheck(dfd); - }, - isReady: function(response){ - return ioCheck(dfd); - }, - handleResponse: function(response){ - return resHandle(dfd); - } - }); - watch(dfd); - - _checkPubCount(dfd); - }; - - var _defaultContentType = "application/x-www-form-urlencoded"; - - dojo._ioAddQueryToUrl = function(/*dojo.__IoCallbackArgs*/ioArgs){ - // summary: - // Adds query params discovered by the io deferred construction to the URL. - // Only use this for operations which are fundamentally GET-type operations. - if(ioArgs.query.length){ - ioArgs.url += (ioArgs.url.indexOf("?") == -1 ? "?" : "&") + ioArgs.query; - ioArgs.query = null; - } - }; - - /*===== - dojo.__XhrArgs = declare(dojo.__IoArgs, { - // summary: - // In addition to the properties listed for the dojo._IoArgs type, - // the following properties are allowed for dojo.xhr* methods. - // handleAs: String? - // Acceptable values are: text (default), json, json-comment-optional, - // json-comment-filtered, javascript, xml. See `dojo/_base/xhr.contentHandlers` - // sync: Boolean? - // false is default. Indicates whether the request should - // be a synchronous (blocking) request. - // headers: Object? - // Additional HTTP headers to send in the request. - // failOk: Boolean? - // false is default. Indicates whether a request should be - // allowed to fail (and therefore no console error message in - // the event of a failure) - // contentType: String|Boolean - // "application/x-www-form-urlencoded" is default. Set to false to - // prevent a Content-Type header from being sent, or to a string - // to send a different Content-Type. - }); - =====*/ - - dojo.xhr = function(/*String*/ method, /*dojo.__XhrArgs*/ args, /*Boolean?*/ hasBody){ - // summary: - // Deprecated. Use dojo/request instead. - // description: - // Sends an HTTP request with the given method. - // See also dojo.xhrGet(), xhrPost(), xhrPut() and dojo.xhrDelete() for shortcuts - // for those HTTP methods. There are also methods for "raw" PUT and POST methods - // via dojo.rawXhrPut() and dojo.rawXhrPost() respectively. - // method: - // HTTP method to be used, such as GET, POST, PUT, DELETE. Should be uppercase. - // hasBody: - // If the request has an HTTP body, then pass true for hasBody. - - var rDfd; - //Make the Deferred object for this xhr request. - var dfd = dojo._ioSetArgs(args, function(dfd){ - rDfd && rDfd.cancel(); - }, _deferredOk, _deferError); - var ioArgs = dfd.ioArgs; - - //Allow for specifying the HTTP body completely. - if("postData" in args){ - ioArgs.query = args.postData; - }else if("putData" in args){ - ioArgs.query = args.putData; - }else if("rawBody" in args){ - ioArgs.query = args.rawBody; - }else if((arguments.length > 2 && !hasBody) || "POST|PUT".indexOf(method.toUpperCase()) === -1){ - //Check for hasBody being passed. If no hasBody, - //then only append query string if not a POST or PUT request. - dojo._ioAddQueryToUrl(ioArgs); - } - - var options = { - method: method, - handleAs: "text", - timeout: args.timeout, - withCredentials: args.withCredentials, - ioArgs: ioArgs - }; - - if(typeof args.headers !== 'undefined'){ - options.headers = args.headers; - } - if(typeof args.contentType !== 'undefined'){ - if(!options.headers){ - options.headers = {}; - } - options.headers['Content-Type'] = args.contentType; - } - if(typeof ioArgs.query !== 'undefined'){ - options.data = ioArgs.query; - } - if(typeof args.sync !== 'undefined'){ - options.sync = args.sync; - } - - dojo._ioNotifyStart(dfd); - try{ - rDfd = _xhr(ioArgs.url, options, true); - }catch(e){ - // If XHR creation fails, dojo/request/xhr throws - // When this happens, cancel the deferred - dfd.cancel(); - return dfd; - } - - // sync ioArgs - dfd.ioArgs.xhr = rDfd.response.xhr; - - rDfd.then(function(){ - dfd.resolve(dfd); - }).otherwise(function(error){ - ioArgs.error = error; - if(error.response){ - error.status = error.response.status; - error.responseText = error.response.text; - error.xhr = error.response.xhr; - } - dfd.reject(error); - }); - return dfd; // dojo/_base/Deferred - }; - - dojo.xhrGet = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP GET request to the server. - return dojo.xhr("GET", args); // dojo/_base/Deferred - }; - - dojo.rawXhrPost = dojo.xhrPost = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP POST request to the server. In addition to the properties - // listed for the dojo.__XhrArgs type, the following property is allowed: - // postData: - // String. Send raw data in the body of the POST request. - return dojo.xhr("POST", args, true); // dojo/_base/Deferred - }; - - dojo.rawXhrPut = dojo.xhrPut = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP PUT request to the server. In addition to the properties - // listed for the dojo.__XhrArgs type, the following property is allowed: - // putData: - // String. Send raw data in the body of the PUT request. - return dojo.xhr("PUT", args, true); // dojo/_base/Deferred - }; - - dojo.xhrDelete = function(/*dojo.__XhrArgs*/ args){ - // summary: - // Sends an HTTP DELETE request to the server. - return dojo.xhr("DELETE", args); // dojo/_base/Deferred - }; - - /* - dojo.wrapForm = function(formNode){ - // summary: - // A replacement for FormBind, but not implemented yet. - - // FIXME: need to think harder about what extensions to this we might - // want. What should we allow folks to do w/ this? What events to - // set/send? - throw new Error("dojo.wrapForm not yet implemented"); - } - */ - - dojo._isDocumentOk = function(x){ - return util.checkStatus(x.status); - }; - - dojo._getText = function(url){ - var result; - dojo.xhrGet({url:url, sync:true, load:function(text){ - result = text; - }}); - return result; - }; - - // Add aliases for static functions to dojo.xhr since dojo.xhr is what's returned from this module - lang.mixin(dojo.xhr, { - _xhrObj: dojo._xhrObj, - fieldToObject: domForm.fieldToObject, - formToObject: domForm.toObject, - objectToQuery: ioq.objectToQuery, - formToQuery: domForm.toQuery, - formToJson: domForm.toJson, - queryToObject: ioq.queryToObject, - contentHandlers: handlers, - _ioSetArgs: dojo._ioSetArgs, - _ioCancelAll: dojo._ioCancelAll, - _ioNotifyStart: dojo._ioNotifyStart, - _ioWatch: dojo._ioWatch, - _ioAddQueryToUrl: dojo._ioAddQueryToUrl, - _isDocumentOk: dojo._isDocumentOk, - _getText: dojo._getText, - get: dojo.xhrGet, - post: dojo.xhrPost, - put: dojo.xhrPut, - del: dojo.xhrDelete // because "delete" is a reserved word - }); - - return dojo.xhr; -}); |