summaryrefslogtreecommitdiff
path: root/lib/dojo/request/util.js.uncompressed.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dojo/request/util.js.uncompressed.js')
-rw-r--r--lib/dojo/request/util.js.uncompressed.js145
1 files changed, 145 insertions, 0 deletions
diff --git a/lib/dojo/request/util.js.uncompressed.js b/lib/dojo/request/util.js.uncompressed.js
new file mode 100644
index 000000000..988eb6746
--- /dev/null
+++ b/lib/dojo/request/util.js.uncompressed.js
@@ -0,0 +1,145 @@
+define("dojo/request/util", [
+ 'exports',
+ '../errors/RequestError',
+ '../errors/CancelError',
+ '../Deferred',
+ '../io-query',
+ '../_base/array',
+ '../_base/lang'
+], function(exports, RequestError, CancelError, Deferred, ioQuery, array, lang){
+ exports.deepCopy = function deepCopy(target, source){
+ for(var name in source){
+ var tval = target[name],
+ sval = source[name];
+ if(tval !== sval){
+ if(tval && typeof tval === 'object' && sval && typeof sval === 'object'){
+ exports.deepCopy(tval, sval);
+ }else{
+ target[name] = sval;
+ }
+ }
+ }
+ return target;
+ };
+
+ exports.deepCreate = function deepCreate(source, properties){
+ properties = properties || {};
+ var target = lang.delegate(source),
+ name, value;
+
+ for(name in source){
+ value = source[name];
+
+ if(value && typeof value === 'object'){
+ target[name] = exports.deepCreate(value, properties[name]);
+ }
+ }
+ return exports.deepCopy(target, properties);
+ };
+
+ var freeze = Object.freeze || function(obj){ return obj; };
+ function okHandler(response){
+ return freeze(response);
+ }
+
+ exports.deferred = function deferred(response, cancel, isValid, isReady, handleResponse, last){
+ var def = new Deferred(function(reason){
+ cancel && cancel(def, response);
+
+ if(!reason || !(reason instanceof RequestError) && !(reason instanceof CancelError)){
+ return new CancelError('Request canceled', response);
+ }
+ return reason;
+ });
+
+ def.response = response;
+ def.isValid = isValid;
+ def.isReady = isReady;
+ def.handleResponse = handleResponse;
+
+ function errHandler(error){
+ error.response = response;
+ throw error;
+ }
+ var responsePromise = def.then(okHandler).otherwise(errHandler);
+
+ if(exports.notify){
+ responsePromise.then(
+ lang.hitch(exports.notify, 'emit', 'load'),
+ lang.hitch(exports.notify, 'emit', 'error')
+ );
+ }
+
+ var dataPromise = responsePromise.then(function(response){
+ return response.data || response.text;
+ });
+
+ var promise = freeze(lang.delegate(dataPromise, {
+ response: responsePromise
+ }));
+
+
+ if(last){
+ def.then(function(response){
+ last.call(def, response);
+ }, function(error){
+ last.call(def, response, error);
+ });
+ }
+
+ def.promise = promise;
+ def.then = promise.then;
+
+ return def;
+ };
+
+ exports.addCommonMethods = function addCommonMethods(provider, methods){
+ array.forEach(methods||['GET', 'POST', 'PUT', 'DELETE'], function(method){
+ provider[(method === 'DELETE' ? 'DEL' : method).toLowerCase()] = function(url, options){
+ options = lang.delegate(options||{});
+ options.method = method;
+ return provider(url, options);
+ };
+ });
+ };
+
+ exports.parseArgs = function parseArgs(url, options, skipData){
+ var data = options.data,
+ query = options.query;
+
+ if(data && !skipData){
+ if(typeof data === 'object'){
+ options.data = ioQuery.objectToQuery(data);
+ }
+ }
+
+ if(query){
+ if(typeof query === 'object'){
+ query = ioQuery.objectToQuery(query);
+ }
+ if(options.preventCache){
+ query += (query ? '&' : '') + 'request.preventCache=' + (+(new Date));
+ }
+ }else if(options.preventCache){
+ query = 'request.preventCache=' + (+(new Date));
+ }
+
+ if(url && query){
+ url += (~url.indexOf('?') ? '&' : '?') + query;
+ }
+
+ return {
+ url: url,
+ options: options,
+ getHeader: function(headerName){ return null; }
+ };
+ };
+
+ exports.checkStatus = function(stat){
+ stat = stat || 0;
+ return (stat >= 200 && stat < 300) || // allow any 2XX response code
+ stat === 304 || // or, get it out of the cache
+ stat === 1223 || // or, Internet Explorer mangled the status code
+ !stat; // or, we're Titanium/browser chrome/chrome extension requesting a local file
+ };
+});