115 lines
3.0 KiB
JavaScript
115 lines
3.0 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2011, 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
|
|
*/
|
|
|
|
//>>built
|
|
define("dojo/io/script",["../main"],function(_1){
|
|
_1.getObject("io",true,_1);
|
|
var _2=_1.isIE?"onreadystatechange":"load",_3=/complete|loaded/;
|
|
_1.io.script={get:function(_4){
|
|
var _5=this._makeScriptDeferred(_4);
|
|
var _6=_5.ioArgs;
|
|
_1._ioAddQueryToUrl(_6);
|
|
_1._ioNotifyStart(_5);
|
|
if(this._canAttach(_6)){
|
|
var _7=this.attach(_6.id,_6.url,_4.frameDoc);
|
|
if(!_6.jsonp&&!_6.args.checkString){
|
|
var _8=_1.connect(_7,_2,function(_9){
|
|
if(_9.type=="load"||_3.test(_7.readyState)){
|
|
_1.disconnect(_8);
|
|
_6.scriptLoaded=_9;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
_1._ioWatch(_5,this._validCheck,this._ioCheck,this._resHandle);
|
|
return _5;
|
|
},attach:function(id,_a,_b){
|
|
var _c=(_b||_1.doc);
|
|
var _d=_c.createElement("script");
|
|
_d.type="text/javascript";
|
|
_d.src=_a;
|
|
_d.id=id;
|
|
_d.async=true;
|
|
_d.charset="utf-8";
|
|
return _c.getElementsByTagName("head")[0].appendChild(_d);
|
|
},remove:function(id,_e){
|
|
_1.destroy(_1.byId(id,_e));
|
|
if(this["jsonp_"+id]){
|
|
delete this["jsonp_"+id];
|
|
}
|
|
},_makeScriptDeferred:function(_f){
|
|
var dfd=_1._ioSetArgs(_f,this._deferredCancel,this._deferredOk,this._deferredError);
|
|
var _10=dfd.ioArgs;
|
|
_10.id=_1._scopeName+"IoScript"+(this._counter++);
|
|
_10.canDelete=false;
|
|
_10.jsonp=_f.callbackParamName||_f.jsonp;
|
|
if(_10.jsonp){
|
|
_10.query=_10.query||"";
|
|
if(_10.query.length>0){
|
|
_10.query+="&";
|
|
}
|
|
_10.query+=_10.jsonp+"="+(_f.frameDoc?"parent.":"")+_1._scopeName+".io.script.jsonp_"+_10.id+"._jsonpCallback";
|
|
_10.frameDoc=_f.frameDoc;
|
|
_10.canDelete=true;
|
|
dfd._jsonpCallback=this._jsonpCallback;
|
|
this["jsonp_"+_10.id]=dfd;
|
|
}
|
|
return dfd;
|
|
},_deferredCancel:function(dfd){
|
|
dfd.canceled=true;
|
|
if(dfd.ioArgs.canDelete){
|
|
_1.io.script._addDeadScript(dfd.ioArgs);
|
|
}
|
|
},_deferredOk:function(dfd){
|
|
var _11=dfd.ioArgs;
|
|
if(_11.canDelete){
|
|
_1.io.script._addDeadScript(_11);
|
|
}
|
|
return _11.json||_11.scriptLoaded||_11;
|
|
},_deferredError:function(_12,dfd){
|
|
if(dfd.ioArgs.canDelete){
|
|
if(_12.dojoType=="timeout"){
|
|
_1.io.script.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc);
|
|
}else{
|
|
_1.io.script._addDeadScript(dfd.ioArgs);
|
|
}
|
|
}
|
|
return _12;
|
|
},_deadScripts:[],_counter:1,_addDeadScript:function(_13){
|
|
_1.io.script._deadScripts.push({id:_13.id,frameDoc:_13.frameDoc});
|
|
_13.frameDoc=null;
|
|
},_validCheck:function(dfd){
|
|
var _14=_1.io.script;
|
|
var _15=_14._deadScripts;
|
|
if(_15&&_15.length>0){
|
|
for(var i=0;i<_15.length;i++){
|
|
_14.remove(_15[i].id,_15[i].frameDoc);
|
|
_15[i].frameDoc=null;
|
|
}
|
|
_1.io.script._deadScripts=[];
|
|
}
|
|
return true;
|
|
},_ioCheck:function(dfd){
|
|
var _16=dfd.ioArgs;
|
|
if(_16.json||(_16.scriptLoaded&&!_16.args.checkString)){
|
|
return true;
|
|
}
|
|
var _17=_16.args.checkString;
|
|
return _17&&eval("typeof("+_17+") != 'undefined'");
|
|
},_resHandle:function(dfd){
|
|
if(_1.io.script._ioCheck(dfd)){
|
|
dfd.callback(dfd);
|
|
}else{
|
|
dfd.errback(new Error("inconceivable dojo.io.script._resHandle error"));
|
|
}
|
|
},_canAttach:function(_18){
|
|
return true;
|
|
},_jsonpCallback:function(_19){
|
|
this.ioArgs.json=_19;
|
|
}};
|
|
return _1.io.script;
|
|
});
|