diff options
author | Andrew Dolgov <[email protected]> | 2010-11-15 10:39:52 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2010-11-15 10:39:52 +0300 |
commit | 2f01fe57a8d37767827d6db42850aef86a767c53 (patch) | |
tree | 516a95ffce2fc2435aed8d9976e444dbcba7dce3 /lib/dojo/_base/xhr.js | |
parent | 951906dcecb1d3c7bcf751976a03e0c196ca6db0 (diff) |
add dijit/dojo stuff; initial ui mockup
Diffstat (limited to 'lib/dojo/_base/xhr.js')
-rw-r--r-- | lib/dojo/_base/xhr.js | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/lib/dojo/_base/xhr.js b/lib/dojo/_base/xhr.js new file mode 100644 index 000000000..5823371cf --- /dev/null +++ b/lib/dojo/_base/xhr.js @@ -0,0 +1,437 @@ +/* + Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dojo._base.xhr"]){ +dojo._hasResource["dojo._base.xhr"]=true; +dojo.provide("dojo._base.xhr"); +dojo.require("dojo._base.Deferred"); +dojo.require("dojo._base.json"); +dojo.require("dojo._base.lang"); +dojo.require("dojo._base.query"); +(function(){ +var _1=dojo,_2=_1.config; +function _3(_4,_5,_6){ +if(_6===null){ +return; +} +var _7=_4[_5]; +if(typeof _7=="string"){ +_4[_5]=[_7,_6]; +}else{ +if(_1.isArray(_7)){ +_7.push(_6); +}else{ +_4[_5]=_6; +} +} +}; +dojo.fieldToObject=function(_8){ +var _9=null; +var _a=_1.byId(_8); +if(_a){ +var _b=_a.name; +var _c=(_a.type||"").toLowerCase(); +if(_b&&_c&&!_a.disabled){ +if(_c=="radio"||_c=="checkbox"){ +if(_a.checked){ +_9=_a.value; +} +}else{ +if(_a.multiple){ +_9=[]; +_1.query("option",_a).forEach(function(_d){ +if(_d.selected){ +_9.push(_d.value); +} +}); +}else{ +_9=_a.value; +} +} +} +} +return _9; +}; +dojo.formToObject=function(_e){ +var _f={}; +var _10="file|submit|image|reset|button|"; +_1.forEach(dojo.byId(_e).elements,function(_11){ +var _12=_11.name; +var _13=(_11.type||"").toLowerCase(); +if(_12&&_13&&_10.indexOf(_13)==-1&&!_11.disabled){ +_3(_f,_12,_1.fieldToObject(_11)); +if(_13=="image"){ +_f[_12+".x"]=_f[_12+".y"]=_f[_12].x=_f[_12].y=0; +} +} +}); +return _f; +}; +dojo.objectToQuery=function(map){ +var enc=encodeURIComponent; +var _14=[]; +var _15={}; +for(var _16 in map){ +var _17=map[_16]; +if(_17!=_15[_16]){ +var _18=enc(_16)+"="; +if(_1.isArray(_17)){ +for(var i=0;i<_17.length;i++){ +_14.push(_18+enc(_17[i])); +} +}else{ +_14.push(_18+enc(_17)); +} +} +} +return _14.join("&"); +}; +dojo.formToQuery=function(_19){ +return _1.objectToQuery(_1.formToObject(_19)); +}; +dojo.formToJson=function(_1a,_1b){ +return _1.toJson(_1.formToObject(_1a),_1b); +}; +dojo.queryToObject=function(str){ +var ret={}; +var qp=str.split("&"); +var dec=decodeURIComponent; +_1.forEach(qp,function(_1c){ +if(_1c.length){ +var _1d=_1c.split("="); +var _1e=dec(_1d.shift()); +var val=dec(_1d.join("=")); +if(typeof ret[_1e]=="string"){ +ret[_1e]=[ret[_1e]]; +} +if(_1.isArray(ret[_1e])){ +ret[_1e].push(val); +}else{ +ret[_1e]=val; +} +} +}); +return ret; +}; +dojo._blockAsync=false; +var _1f=_1._contentHandlers=dojo.contentHandlers={text:function(xhr){ +return xhr.responseText; +},json:function(xhr){ +return _1.fromJson(xhr.responseText||null); +},"json-comment-filtered":function(xhr){ +if(!dojo.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 _20=xhr.responseText; +var _21=_20.indexOf("/*"); +var _22=_20.lastIndexOf("*/"); +if(_21==-1||_22==-1){ +throw new Error("JSON was not comment filtered"); +} +return _1.fromJson(_20.substring(_21+2,_22)); +},javascript:function(xhr){ +return _1.eval(xhr.responseText); +},xml:function(xhr){ +var _23=xhr.responseXML; +if(_1.isIE&&(!_23||!_23.documentElement)){ +var ms=function(n){ +return "MSXML"+n+".DOMDocument"; +}; +var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)]; +_1.some(dp,function(p){ +try{ +var dom=new ActiveXObject(p); +dom.async=false; +dom.loadXML(xhr.responseText); +_23=dom; +} +catch(e){ +return false; +} +return true; +}); +} +return _23; +},"json-comment-optional":function(xhr){ +if(xhr.responseText&&/^[^{\[]*\/\*/.test(xhr.responseText)){ +return _1f["json-comment-filtered"](xhr); +}else{ +return _1f["json"](xhr); +} +}}; +dojo._ioSetArgs=function(_24,_25,_26,_27){ +var _28={args:_24,url:_24.url}; +var _29=null; +if(_24.form){ +var _2a=_1.byId(_24.form); +var _2b=_2a.getAttributeNode("action"); +_28.url=_28.url||(_2b?_2b.value:null); +_29=_1.formToObject(_2a); +} +var _2c=[{}]; +if(_29){ +_2c.push(_29); +} +if(_24.content){ +_2c.push(_24.content); +} +if(_24.preventCache){ +_2c.push({"dojo.preventCache":new Date().valueOf()}); +} +_28.query=_1.objectToQuery(_1.mixin.apply(null,_2c)); +_28.handleAs=_24.handleAs||"text"; +var d=new _1.Deferred(_25); +d.addCallbacks(_26,function(_2d){ +return _27(_2d,d); +}); +var ld=_24.load; +if(ld&&_1.isFunction(ld)){ +d.addCallback(function(_2e){ +return ld.call(_24,_2e,_28); +}); +} +var err=_24.error; +if(err&&_1.isFunction(err)){ +d.addErrback(function(_2f){ +return err.call(_24,_2f,_28); +}); +} +var _30=_24.handle; +if(_30&&_1.isFunction(_30)){ +d.addBoth(function(_31){ +return _30.call(_24,_31,_28); +}); +} +if(_2.ioPublish&&_1.publish&&_28.args.ioPublish!==false){ +d.addCallbacks(function(res){ +_1.publish("/dojo/io/load",[d,res]); +return res; +},function(res){ +_1.publish("/dojo/io/error",[d,res]); +return res; +}); +d.addBoth(function(res){ +_1.publish("/dojo/io/done",[d,res]); +return res; +}); +} +d.ioArgs=_28; +return d; +}; +var _32=function(dfd){ +dfd.canceled=true; +var xhr=dfd.ioArgs.xhr; +var _33=typeof xhr.abort; +if(_33=="function"||_33=="object"||_33=="unknown"){ +xhr.abort(); +} +var err=dfd.ioArgs.error; +if(!err){ +err=new Error("xhr cancelled"); +err.dojoType="cancel"; +} +return err; +}; +var _34=function(dfd){ +var ret=_1f[dfd.ioArgs.handleAs](dfd.ioArgs.xhr); +return ret===undefined?null:ret; +}; +var _35=function(_36,dfd){ +if(!dfd.ioArgs.args.failOk){ +console.error(_36); +} +return _36; +}; +var _37=null; +var _38=[]; +var _39=0; +var _3a=function(dfd){ +if(_39<=0){ +_39=0; +if(_2.ioPublish&&_1.publish&&(!dfd||dfd&&dfd.ioArgs.args.ioPublish!==false)){ +_1.publish("/dojo/io/stop"); +} +} +}; +var _3b=function(){ +var now=(new Date()).getTime(); +if(!_1._blockAsync){ +for(var i=0,tif;i<_38.length&&(tif=_38[i]);i++){ +var dfd=tif.dfd; +var _3c=function(){ +if(!dfd||dfd.canceled||!tif.validCheck(dfd)){ +_38.splice(i--,1); +_39-=1; +}else{ +if(tif.ioCheck(dfd)){ +_38.splice(i--,1); +tif.resHandle(dfd); +_39-=1; +}else{ +if(dfd.startTime){ +if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){ +_38.splice(i--,1); +var err=new Error("timeout exceeded"); +err.dojoType="timeout"; +dfd.errback(err); +dfd.cancel(); +_39-=1; +} +} +} +} +}; +if(dojo.config.debugAtAllCosts){ +_3c.call(this); +}else{ +try{ +_3c.call(this); +} +catch(e){ +dfd.errback(e); +} +} +} +} +_3a(dfd); +if(!_38.length){ +clearInterval(_37); +_37=null; +return; +} +}; +dojo._ioCancelAll=function(){ +try{ +_1.forEach(_38,function(i){ +try{ +i.dfd.cancel(); +} +catch(e){ +} +}); +} +catch(e){ +} +}; +if(_1.isIE){ +_1.addOnWindowUnload(_1._ioCancelAll); +} +_1._ioNotifyStart=function(dfd){ +if(_2.ioPublish&&_1.publish&&dfd.ioArgs.args.ioPublish!==false){ +if(!_39){ +_1.publish("/dojo/io/start"); +} +_39+=1; +_1.publish("/dojo/io/send",[dfd]); +} +}; +_1._ioWatch=function(dfd,_3d,_3e,_3f){ +var _40=dfd.ioArgs.args; +if(_40.timeout){ +dfd.startTime=(new Date()).getTime(); +} +_38.push({dfd:dfd,validCheck:_3d,ioCheck:_3e,resHandle:_3f}); +if(!_37){ +_37=setInterval(_3b,50); +} +if(_40.sync){ +_3b(); +} +}; +var _41="application/x-www-form-urlencoded"; +var _42=function(dfd){ +return dfd.ioArgs.xhr.readyState; +}; +var _43=function(dfd){ +return 4==dfd.ioArgs.xhr.readyState; +}; +var _44=function(dfd){ +var xhr=dfd.ioArgs.xhr; +if(_1._isDocumentOk(xhr)){ +dfd.callback(dfd); +}else{ +var err=new Error("Unable to load "+dfd.ioArgs.url+" status:"+xhr.status); +err.status=xhr.status; +err.responseText=xhr.responseText; +dfd.errback(err); +} +}; +dojo._ioAddQueryToUrl=function(_45){ +if(_45.query.length){ +_45.url+=(_45.url.indexOf("?")==-1?"?":"&")+_45.query; +_45.query=null; +} +}; +dojo.xhr=function(_46,_47,_48){ +var dfd=_1._ioSetArgs(_47,_32,_34,_35); +var _49=dfd.ioArgs; +var xhr=_49.xhr=_1._xhrObj(_49.args); +if(!xhr){ +dfd.cancel(); +return dfd; +} +if("postData" in _47){ +_49.query=_47.postData; +}else{ +if("putData" in _47){ +_49.query=_47.putData; +}else{ +if("rawBody" in _47){ +_49.query=_47.rawBody; +}else{ +if((arguments.length>2&&!_48)||"POST|PUT".indexOf(_46.toUpperCase())==-1){ +_1._ioAddQueryToUrl(_49); +} +} +} +} +xhr.open(_46,_49.url,_47.sync!==true,_47.user||undefined,_47.password||undefined); +if(_47.headers){ +for(var hdr in _47.headers){ +if(hdr.toLowerCase()==="content-type"&&!_47.contentType){ +_47.contentType=_47.headers[hdr]; +}else{ +if(_47.headers[hdr]){ +xhr.setRequestHeader(hdr,_47.headers[hdr]); +} +} +} +} +xhr.setRequestHeader("Content-Type",_47.contentType||_41); +if(!_47.headers||!("X-Requested-With" in _47.headers)){ +xhr.setRequestHeader("X-Requested-With","XMLHttpRequest"); +} +_1._ioNotifyStart(dfd); +if(dojo.config.debugAtAllCosts){ +xhr.send(_49.query); +}else{ +try{ +xhr.send(_49.query); +} +catch(e){ +_49.error=e; +dfd.cancel(); +} +} +_1._ioWatch(dfd,_42,_43,_44); +xhr=null; +return dfd; +}; +dojo.xhrGet=function(_4a){ +return _1.xhr("GET",_4a); +}; +dojo.rawXhrPost=dojo.xhrPost=function(_4b){ +return _1.xhr("POST",_4b,true); +}; +dojo.rawXhrPut=dojo.xhrPut=function(_4c){ +return _1.xhr("PUT",_4c,true); +}; +dojo.xhrDelete=function(_4d){ +return _1.xhr("DELETE",_4d); +}; +})(); +} |