webui-aria2/js/libs/dojox/xmpp/bosh.js
2012-05-01 19:52:07 +08:00

126 lines
3.2 KiB
JavaScript

//>>built
define(["dijit","dojo","dojox","dojo/require!dojo/io/script,dojo/io/iframe,dojox/xml/parser"],function(_1,_2,_3){
_2.provide("dojox.xmpp.bosh");
_2.require("dojo.io.script");
_2.require("dojo.io.iframe");
_2.require("dojox.xml.parser");
_3.xmpp.bosh={transportIframes:[],initialize:function(_4){
this.transportIframes=[];
var _5=_3._scopeName+".xmpp.bosh";
var c=_2.connect(_2.getObject(_5),"_iframeOnload",this,function(_6){
if(_6==0){
_4.load();
_2.disconnect(c);
}
});
for(var i=0;i<_4.iframes;i++){
var _7="xmpp-transport-"+i;
var _8=_2.byId("xmpp-transport-"+i);
if(_8){
if(window[_7]){
window[_7]=null;
}
if(window.frames[_7]){
window.frames[_7]=null;
}
_2.destroy(_8);
}
_8=_2.io.iframe.create("xmpp-transport-"+i,_5+"._iframeOnload("+i+");");
this.transportIframes.push(_8);
}
},_iframeOnload:function(_9){
var _a=_2.io.iframe.doc(_2.byId("xmpp-transport-"+_9));
_a.write("<script>var isLoaded=true; var rid=0; var transmiting=false; function _BOSH_(msg) { transmiting=false; parent.dojox.xmpp.bosh.handle(msg, rid); } </script>");
},findOpenIframe:function(){
for(var i=0;i<this.transportIframes.length;i++){
var _b=this.transportIframes[i];
var _c=_b.contentWindow;
if(_c.isLoaded&&!_c.transmiting){
return _b;
}
}
return false;
},handle:function(_d,_e){
var _f=this["rid"+_e];
var _10=_3.xml.parser.parse(_d,"text/xml");
if(_10){
_f.ioArgs.xmppMessage=_10;
}else{
_f.errback(new Error("Recieved bad document from server: "+_d));
}
},get:function(_11){
var _12=this.findOpenIframe();
var _13=_2.io.iframe.doc(_12);
_11.frameDoc=_13;
var dfd=this._makeScriptDeferred(_11);
var _14=dfd.ioArgs;
_12.contentWindow.rid=_14.rid;
_12.contentWindow.transmiting=true;
_2._ioAddQueryToUrl(_14);
_2._ioNotifyStart(dfd);
_2.io.script.attach(_14.id,_14.url,_13);
_2._ioWatch(dfd,this._validCheck,this._ioCheck,this._resHandle);
return dfd;
},remove:function(id,_15){
_2.destroy(_2.byId(id,_15));
if(this[id]){
delete this[id];
}
},_makeScriptDeferred:function(_16){
var dfd=_2._ioSetArgs(_16,this._deferredCancel,this._deferredOk,this._deferredError);
var _17=dfd.ioArgs;
_17.id="rid"+_16.rid;
_17.rid=_16.rid;
_17.canDelete=true;
_17.frameDoc=_16.frameDoc;
this[_17.id]=dfd;
return dfd;
},_deferredCancel:function(dfd){
dfd.canceled=true;
if(dfd.ioArgs.canDelete){
_3.xmpp.bosh._addDeadScript(dfd.ioArgs);
}
},_deferredOk:function(dfd){
var _18=dfd.ioArgs;
if(_18.canDelete){
_3.xmpp.bosh._addDeadScript(_18);
}
return _18.xmppMessage||_18;
},_deferredError:function(_19,dfd){
if(dfd.ioArgs.canDelete){
if(_19.dojoType=="timeout"){
_3.xmpp.bosh.remove(dfd.ioArgs.id,dfd.ioArgs.frameDoc);
}else{
_3.xmpp.bosh._addDeadScript(dfd.ioArgs);
}
}
return _19;
},_deadScripts:[],_addDeadScript:function(_1a){
_3.xmpp.bosh._deadScripts.push({id:_1a.id,frameDoc:_1a.frameDoc});
_1a.frameDoc=null;
},_validCheck:function(dfd){
var _1b=_3.xmpp.bosh;
var _1c=_1b._deadScripts;
if(_1c&&_1c.length>0){
for(var i=0;i<_1c.length;i++){
_1b.remove(_1c[i].id,_1c[i].frameDoc);
_1c[i].frameDoc=null;
}
_3.xmpp.bosh._deadScripts=[];
}
return true;
},_ioCheck:function(dfd){
var _1d=dfd.ioArgs;
if(_1d.xmppMessage){
return true;
}
return false;
},_resHandle:function(dfd){
if(_3.xmpp.bosh._ioCheck(dfd)){
dfd.callback(dfd);
}else{
dfd.errback(new Error("inconceivable dojox.xmpp.bosh._resHandle error"));
}
}};
});