292 lines
6.4 KiB
JavaScript
292 lines
6.4 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2012, 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/request/iframe",["module","require","./watch","./util","./handlers","../_base/lang","../io-query","../query","../has","../dom","../dom-construct","../_base/window","../NodeList-dom"],function(_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c){
|
|
var _d=_1.id.replace(/[\/\.\-]/g,"_"),_e=_d+"_onload";
|
|
if(!_c.global[_e]){
|
|
_c.global[_e]=function(){
|
|
var _f=_10._currentDfd;
|
|
if(!_f){
|
|
_10._fireNextRequest();
|
|
return;
|
|
}
|
|
var _11=_f.response,_12=_11.options,_13=_a.byId(_12.form)||_f._tmpForm;
|
|
if(_13){
|
|
var _14=_f._contentToClean;
|
|
for(var i=0;i<_14.length;i++){
|
|
var key=_14[i];
|
|
for(var j=0;j<_13.childNodes.length;j++){
|
|
var _15=_13.childNodes[j];
|
|
if(_15.name===key){
|
|
_b.destroy(_15);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
_f._originalAction&&_13.setAttribute("action",_f._originalAction);
|
|
if(_f._originalMethod){
|
|
_13.setAttribute("method",_f._originalMethod);
|
|
_13.method=_f._originalMethod;
|
|
}
|
|
if(_f._originalTarget){
|
|
_13.setAttribute("target",_f._originalTarget);
|
|
_13.target=_f._originalTarget;
|
|
}
|
|
}
|
|
if(_f._tmpForm){
|
|
_b.destroy(_f._tmpForm);
|
|
delete _f._tmpForm;
|
|
}
|
|
_f._finished=true;
|
|
};
|
|
}
|
|
function _16(_17,_18,uri){
|
|
if(_c.global[_17]){
|
|
return _c.global[_17];
|
|
}
|
|
if(_c.global.frames[_17]){
|
|
return _c.global.frames[_17];
|
|
}
|
|
if(!uri){
|
|
if(_9("config-useXDomain")&&!_9("config-dojoBlankHtmlUrl")){
|
|
console.warn("dojo/request/iframe: When using cross-domain Dojo builds,"+" please save dojo/resources/blank.html to your domain and set dojoConfig.dojoBlankHtmlUrl"+" to the path on your domain to blank.html");
|
|
}
|
|
uri=(_9("config-dojoBlankHtmlUrl")||_2.toUrl("dojo/resources/blank.html"));
|
|
}
|
|
var _19=_b.place("<iframe id=\""+_17+"\" name=\""+_17+"\" src=\""+uri+"\" onload=\""+_18+"\" style=\"position: absolute; left: 1px; top: 1px; height: 1px; width: 1px; visibility: hidden\">",_c.body());
|
|
_c.global[_17]=_19;
|
|
return _19;
|
|
};
|
|
function _1a(_1b,src,_1c){
|
|
var _1d=_c.global.frames[_1b.name];
|
|
if(_1d.contentWindow){
|
|
_1d=_1d.contentWindow;
|
|
}
|
|
try{
|
|
if(!_1c){
|
|
_1d.location=src;
|
|
}else{
|
|
_1d.location.replace(src);
|
|
}
|
|
}
|
|
catch(e){
|
|
}
|
|
};
|
|
function doc(_1e){
|
|
if(_1e.contentDocument){
|
|
return _1e.contentDocument;
|
|
}
|
|
var _1f=_1e.name;
|
|
if(_1f){
|
|
var _20=_c.doc.getElementsByTagName("iframe");
|
|
if(_1e.document&&_20[_1f].contentWindow&&_20[_1f].contentWindow.document){
|
|
return _20[_1f].contentWindow.document;
|
|
}else{
|
|
if(_c.doc.frames[_1f]&&_c.doc.frames[_1f].document){
|
|
return _c.doc.frames[_1f].document;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
function _21(){
|
|
return _b.create("form",{name:_d+"_form",style:{position:"absolute",top:"-1000px",left:"-1000px"}},_c.body());
|
|
};
|
|
function _22(){
|
|
var dfd;
|
|
try{
|
|
if(_10._currentDfd||!_10._dfdQueue.length){
|
|
return;
|
|
}
|
|
do{
|
|
dfd=_10._currentDfd=_10._dfdQueue.shift();
|
|
}while(dfd&&(dfd.canceled||(dfd.isCanceled&&dfd.isCanceled()))&&_10._dfdQueue.length);
|
|
if(!dfd||dfd.canceled||(dfd.isCanceled&&dfd.isCanceled())){
|
|
_10._currentDfd=null;
|
|
return;
|
|
}
|
|
var _23=dfd.response,_24=_23.options,c2c=dfd._contentToClean=[],_25=_a.byId(_24.form),_26=_4.notify,_27=_24.data||null,_28;
|
|
if(!dfd._legacy&&_24.method==="POST"&&!_25){
|
|
_25=dfd._tmpForm=_21();
|
|
}else{
|
|
if(_24.method==="GET"&&_25&&_23.url.indexOf("?")>-1){
|
|
_28=_23.url.slice(_23.url.indexOf("?")+1);
|
|
_27=_6.mixin(_7.queryToObject(_28),_27);
|
|
}
|
|
}
|
|
if(_25){
|
|
if(!dfd._legacy){
|
|
var _29=_25;
|
|
do{
|
|
_29=_29.parentNode;
|
|
}while(_29&&_29!==_c.doc.documentElement);
|
|
if(!_29){
|
|
_25.style.position="absolute";
|
|
_25.style.left="-1000px";
|
|
_25.style.top="-1000px";
|
|
_c.body().appendChild(_25);
|
|
}
|
|
if(!_25.name){
|
|
_25.name=_d+"_form";
|
|
}
|
|
}
|
|
if(_27){
|
|
var _2a=function(_2b,_2c){
|
|
_b.create("input",{type:"hidden",name:_2b,value:_2c},_25);
|
|
c2c.push(_2b);
|
|
};
|
|
for(var x in _27){
|
|
var val=_27[x];
|
|
if(_6.isArray(val)&&val.length>1){
|
|
for(var i=0;i<val.length;i++){
|
|
_2a(x,val[i]);
|
|
}
|
|
}else{
|
|
if(!_25[x]){
|
|
_2a(x,val);
|
|
}else{
|
|
_25[x].value=val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var _2d=_25.getAttributeNode("action"),_2e=_25.getAttributeNode("method"),_2f=_25.getAttributeNode("target");
|
|
if(_23.url){
|
|
dfd._originalAction=_2d?_2d.value:null;
|
|
if(_2d){
|
|
_2d.value=_23.url;
|
|
}else{
|
|
_25.setAttribute("action",_23.url);
|
|
}
|
|
}
|
|
if(!dfd._legacy){
|
|
dfd._originalMethod=_2e?_2e.value:null;
|
|
if(_2e){
|
|
_2e.value=_24.method;
|
|
}else{
|
|
_25.setAttribute("method",_24.method);
|
|
}
|
|
}else{
|
|
if(!_2e||!_2e.value){
|
|
if(_2e){
|
|
_2e.value=_24.method;
|
|
}else{
|
|
_25.setAttribute("method",_24.method);
|
|
}
|
|
}
|
|
}
|
|
dfd._originalTarget=_2f?_2f.value:null;
|
|
if(_2f){
|
|
_2f.value=_10._iframeName;
|
|
}else{
|
|
_25.setAttribute("target",_10._iframeName);
|
|
}
|
|
_25.target=_10._iframeName;
|
|
_26&&_26.emit("send",_23,dfd.promise.cancel);
|
|
_10._notifyStart(_23);
|
|
_25.submit();
|
|
}else{
|
|
var _30="";
|
|
if(_23.options.data){
|
|
_30=_23.options.data;
|
|
if(typeof _30!=="string"){
|
|
_30=_7.objectToQuery(_30);
|
|
}
|
|
}
|
|
var _31=_23.url+(_23.url.indexOf("?")>-1?"&":"?")+_30;
|
|
_26&&_26.emit("send",_23,dfd.promise.cancel);
|
|
_10._notifyStart(_23);
|
|
_10.setSrc(_10._frame,_31,true);
|
|
}
|
|
}
|
|
catch(e){
|
|
dfd.reject(e);
|
|
}
|
|
};
|
|
function _32(_33){
|
|
return !this.isFulfilled();
|
|
};
|
|
function _34(_35){
|
|
return !!this._finished;
|
|
};
|
|
function _36(_37,_38){
|
|
if(!_38){
|
|
try{
|
|
var _39=_37.options,doc=_10.doc(_10._frame),_3a=_39.handleAs;
|
|
if(_3a!=="html"){
|
|
if(_3a==="xml"){
|
|
if(doc.documentElement.tagName.toLowerCase()==="html"){
|
|
_8("a",doc.documentElement).orphan();
|
|
var _3b=doc.documentElement.innerText||doc.documentElement.textContent;
|
|
_3b=_3b.replace(/>\s+</g,"><");
|
|
_37.text=_6.trim(_3b);
|
|
}else{
|
|
_37.data=doc;
|
|
}
|
|
}else{
|
|
_37.text=doc.getElementsByTagName("textarea")[0].value;
|
|
}
|
|
_5(_37);
|
|
}else{
|
|
_37.data=doc;
|
|
}
|
|
}
|
|
catch(e){
|
|
_38=e;
|
|
}
|
|
}
|
|
if(_38){
|
|
this.reject(_38);
|
|
}else{
|
|
if(this._finished){
|
|
this.resolve(_37);
|
|
}else{
|
|
this.reject(new Error("Invalid dojo/request/iframe request state"));
|
|
}
|
|
}
|
|
};
|
|
function _3c(_3d){
|
|
this._callNext();
|
|
};
|
|
var _3e={method:"POST"};
|
|
function _10(url,_3f,_40){
|
|
var _41=_4.parseArgs(url,_4.deepCreate(_3e,_3f),true);
|
|
url=_41.url;
|
|
_3f=_41.options;
|
|
if(_3f.method!=="GET"&&_3f.method!=="POST"){
|
|
throw new Error(_3f.method+" not supported by dojo/request/iframe");
|
|
}
|
|
if(!_10._frame){
|
|
_10._frame=_10.create(_10._iframeName,_e+"();");
|
|
}
|
|
var dfd=_4.deferred(_41,null,_32,_34,_36,_3c);
|
|
dfd._callNext=function(){
|
|
if(!this._calledNext){
|
|
this._calledNext=true;
|
|
_10._currentDfd=null;
|
|
_10._fireNextRequest();
|
|
}
|
|
};
|
|
dfd._legacy=_40;
|
|
_10._dfdQueue.push(dfd);
|
|
_10._fireNextRequest();
|
|
_3(dfd);
|
|
return _40?dfd:dfd.promise;
|
|
};
|
|
_10.create=_16;
|
|
_10.doc=doc;
|
|
_10.setSrc=_1a;
|
|
_10._iframeName=_d+"_IoIframe";
|
|
_10._notifyStart=function(){
|
|
};
|
|
_10._dfdQueue=[];
|
|
_10._currentDfd=null;
|
|
_10._fireNextRequest=_22;
|
|
_4.addCommonMethods(_10,["GET","POST"]);
|
|
return _10;
|
|
});
|