blob: 8f739a76983cc14a81fca886cd2047f403b737ef [file] [log] [blame]
/*
Copyright (c) 2004-2009, 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 _d=dojo;
function _2(_3,_4,_5){
var _6=_3[_4];
if(_d.isString(_6)){
_3[_4]=[_6,_5];
}else{
if(_d.isArray(_6)){
_6.push(_5);
}else{
_3[_4]=_5;
}
}
};
dojo.formToObject=function(_7){
var _8={};
var _9="file|submit|image|reset|button|";
_d.forEach(dojo.byId(_7).elements,function(_a){
var _b=_a.name;
var _c=(_a.type||"").toLowerCase();
if(_b&&_c&&_9.indexOf(_c)==-1&&!_a.disabled){
if(_c=="radio"||_c=="checkbox"){
if(_a.checked){
_2(_8,_b,_a.value);
}
}else{
if(_a.multiple){
_8[_b]=[];
_d.query("option",_a).forEach(function(_d){
if(_d.selected){
_2(_8,_b,_d.value);
}
});
}else{
_2(_8,_b,_a.value);
if(_c=="image"){
_8[_b+".x"]=_8[_b+".y"]=_8[_b].x=_8[_b].y=0;
}
}
}
}
});
return _8;
};
dojo.objectToQuery=function(_e){
var _f=encodeURIComponent;
var _10=[];
var _11={};
for(var _12 in _e){
var _13=_e[_12];
if(_13!=_11[_12]){
var _14=_f(_12)+"=";
if(_d.isArray(_13)){
for(var i=0;i<_13.length;i++){
_10.push(_14+_f(_13[i]));
}
}else{
_10.push(_14+_f(_13));
}
}
}
return _10.join("&");
};
dojo.formToQuery=function(_16){
return _d.objectToQuery(_d.formToObject(_16));
};
dojo.formToJson=function(_17,_18){
return _d.toJson(_d.formToObject(_17),_18);
};
dojo.queryToObject=function(str){
var ret={};
var qp=str.split("&");
var dec=decodeURIComponent;
_d.forEach(qp,function(_1d){
if(_1d.length){
var _1e=_1d.split("=");
var _1f=dec(_1e.shift());
var val=dec(_1e.join("="));
if(_d.isString(ret[_1f])){
ret[_1f]=[ret[_1f]];
}
if(_d.isArray(ret[_1f])){
ret[_1f].push(val);
}else{
ret[_1f]=val;
}
}
});
return ret;
};
dojo._blockAsync=false;
dojo._contentHandlers={text:function(xhr){
return xhr.responseText;
},json:function(xhr){
return _d.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 _24=xhr.responseText;
var _25=_24.indexOf("/*");
var _26=_24.lastIndexOf("*/");
if(_25==-1||_26==-1){
throw new Error("JSON was not comment filtered");
}
return _d.fromJson(_24.substring(_25+2,_26));
},javascript:function(xhr){
return _d.eval(xhr.responseText);
},xml:function(xhr){
var _29=xhr.responseXML;
if(_d.isIE&&(!_29||!_29.documentElement)){
var ms=function(n){
return "MSXML"+n+".DOMDocument";
};
var dp=["Microsoft.XMLDOM",ms(6),ms(4),ms(3),ms(2)];
_d.some(dp,function(p){
try{
var dom=new ActiveXObject(p);
dom.async=false;
dom.loadXML(xhr.responseText);
_29=dom;
}
catch(e){
return false;
}
return true;
});
}
return _29;
}};
dojo._contentHandlers["json-comment-optional"]=function(xhr){
var _30=_d._contentHandlers;
if(xhr.responseText&&xhr.responseText.indexOf("/*")!=-1){
return _30["json-comment-filtered"](xhr);
}else{
return _30["json"](xhr);
}
};
dojo._ioSetArgs=function(_31,_32,_33,_34){
var _35={args:_31,url:_31.url};
var _36=null;
if(_31.form){
var _37=_d.byId(_31.form);
var _38=_37.getAttributeNode("action");
_35.url=_35.url||(_38?_38.value:null);
_36=_d.formToObject(_37);
}
var _39=[{}];
if(_36){
_39.push(_36);
}
if(_31.content){
_39.push(_31.content);
}
if(_31.preventCache){
_39.push({"dojo.preventCache":new Date().valueOf()});
}
_35.query=_d.objectToQuery(_d.mixin.apply(null,_39));
_35.handleAs=_31.handleAs||"text";
var d=new _d.Deferred(_32);
d.addCallbacks(_33,function(_3b){
return _34(_3b,d);
});
var ld=_31.load;
if(ld&&_d.isFunction(ld)){
d.addCallback(function(_3d){
return ld.call(_31,_3d,_35);
});
}
var err=_31.error;
if(err&&_d.isFunction(err)){
d.addErrback(function(_3f){
return err.call(_31,_3f,_35);
});
}
var _40=_31.handle;
if(_40&&_d.isFunction(_40)){
d.addBoth(function(_41){
return _40.call(_31,_41,_35);
});
}
d.ioArgs=_35;
return d;
};
var _42=function(dfd){
dfd.canceled=true;
var xhr=dfd.ioArgs.xhr;
var _at=typeof xhr.abort;
if(_at=="function"||_at=="object"||_at=="unknown"){
xhr.abort();
}
var err=dfd.ioArgs.error;
if(!err){
err=new Error("xhr cancelled");
err.dojoType="cancel";
}
return err;
};
var _47=function(dfd){
var ret=_d._contentHandlers[dfd.ioArgs.handleAs](dfd.ioArgs.xhr);
return ret===undefined?null:ret;
};
var _4a=function(_4b,dfd){
console.error(_4b);
return _4b;
};
var _4d=null;
var _4e=[];
var _4f=function(){
var now=(new Date()).getTime();
if(!_d._blockAsync){
for(var i=0,tif;i<_4e.length&&(tif=_4e[i]);i++){
var dfd=tif.dfd;
var _54=function(){
if(!dfd||dfd.canceled||!tif.validCheck(dfd)){
_4e.splice(i--,1);
}else{
if(tif.ioCheck(dfd)){
_4e.splice(i--,1);
tif.resHandle(dfd);
}else{
if(dfd.startTime){
if(dfd.startTime+(dfd.ioArgs.args.timeout||0)<now){
_4e.splice(i--,1);
var err=new Error("timeout exceeded");
err.dojoType="timeout";
dfd.errback(err);
dfd.cancel();
}
}
}
}
};
if(dojo.config.debugAtAllCosts){
_54.call(this);
}else{
try{
_54.call(this);
}
catch(e){
dfd.errback(e);
}
}
}
}
if(!_4e.length){
clearInterval(_4d);
_4d=null;
return;
}
};
dojo._ioCancelAll=function(){
try{
_d.forEach(_4e,function(i){
try{
i.dfd.cancel();
}
catch(e){
}
});
}
catch(e){
}
};
if(_d.isIE){
_d.addOnWindowUnload(_d._ioCancelAll);
}
_d._ioWatch=function(dfd,_58,_59,_5a){
var _5b=dfd.ioArgs.args;
if(_5b.timeout){
dfd.startTime=(new Date()).getTime();
}
_4e.push({dfd:dfd,validCheck:_58,ioCheck:_59,resHandle:_5a});
if(!_4d){
_4d=setInterval(_4f,50);
}
if(_5b.sync){
_4f();
}
};
var _5c="application/x-www-form-urlencoded";
var _5d=function(dfd){
return dfd.ioArgs.xhr.readyState;
};
var _5f=function(dfd){
return 4==dfd.ioArgs.xhr.readyState;
};
var _61=function(dfd){
var xhr=dfd.ioArgs.xhr;
if(_d._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(_65){
if(_65.query.length){
_65.url+=(_65.url.indexOf("?")==-1?"?":"&")+_65.query;
_65.query=null;
}
};
dojo.xhr=function(_66,_67,_68){
var dfd=_d._ioSetArgs(_67,_42,_47,_4a);
dfd.ioArgs.xhr=_d._xhrObj(dfd.ioArgs.args);
if(_68){
if("postData" in _67){
dfd.ioArgs.query=_67.postData;
}else{
if("putData" in _67){
dfd.ioArgs.query=_67.putData;
}
}
}else{
_d._ioAddQueryToUrl(dfd.ioArgs);
}
var _6a=dfd.ioArgs;
var xhr=_6a.xhr;
xhr.open(_66,_6a.url,_67.sync!==true,_67.user||undefined,_67.password||undefined);
if(_67.headers){
for(var hdr in _67.headers){
if(hdr.toLowerCase()==="content-type"&&!_67.contentType){
_67.contentType=_67.headers[hdr];
}else{
xhr.setRequestHeader(hdr,_67.headers[hdr]);
}
}
}
xhr.setRequestHeader("Content-Type",_67.contentType||_5c);
if(!_67.headers||!_67.headers["X-Requested-With"]){
xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");
}
if(dojo.config.debugAtAllCosts){
xhr.send(_6a.query);
}else{
try{
xhr.send(_6a.query);
}
catch(e){
dfd.ioArgs.error=e;
dfd.cancel();
}
}
_d._ioWatch(dfd,_5d,_5f,_61);
xhr=null;
return dfd;
};
dojo.xhrGet=function(_6d){
return _d.xhr("GET",_6d);
};
dojo.rawXhrPost=dojo.xhrPost=function(_6e){
return _d.xhr("POST",_6e,true);
};
dojo.rawXhrPut=dojo.xhrPut=function(_6f){
return _d.xhr("PUT",_6f,true);
};
dojo.xhrDelete=function(_70){
return _d.xhr("DELETE",_70);
};
})();
}