| /* |
| 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["dojox.io.proxy.xip"]){ |
| dojo._hasResource["dojox.io.proxy.xip"]=true; |
| dojo.provide("dojox.io.proxy.xip"); |
| dojo.require("dojo.io.iframe"); |
| dojo.require("dojox.data.dom"); |
| dojox.io.proxy.xip={xipClientUrl:((dojo.config||djConfig)["xipClientUrl"])||dojo.moduleUrl("dojox.io.proxy","xip_client.html"),urlLimit:4000,_callbackName:(dojox._scopeName||"dojox")+".io.proxy.xip.fragmentReceived",_state:{},_stateIdCounter:0,_isWebKit:navigator.userAgent.indexOf("WebKit")!=-1,send:function(_1){ |
| var _2=this.xipClientUrl; |
| if(_2.split(":")[0].match(/javascript/i)||_1._ifpServerUrl.split(":")[0].match(/javascript/i)){ |
| return; |
| } |
| var _3=_2.indexOf(":"); |
| var _4=_2.indexOf("/"); |
| if(_3==-1||_4<_3){ |
| var _5=window.location.href; |
| if(_4==0){ |
| _2=_5.substring(0,_5.indexOf("/",9))+_2; |
| }else{ |
| _2=_5.substring(0,(_5.lastIndexOf("/")+1))+_2; |
| } |
| } |
| this.fullXipClientUrl=_2; |
| if(typeof document.postMessage!="undefined"){ |
| document.addEventListener("message",dojo.hitch(this,this.fragmentReceivedEvent),false); |
| } |
| this.send=this._realSend; |
| return this._realSend(_1); |
| },_realSend:function(_6){ |
| var _7="XhrIframeProxy"+(this._stateIdCounter++); |
| _6._stateId=_7; |
| var _8=_6._ifpServerUrl+"#0:init:id="+_7+"&client="+encodeURIComponent(this.fullXipClientUrl)+"&callback="+encodeURIComponent(this._callbackName); |
| this._state[_7]={facade:_6,stateId:_7,clientFrame:dojo.io.iframe.create(_7,"",_8),isSending:false,serverUrl:_6._ifpServerUrl,requestData:null,responseMessage:"",requestParts:[],idCounter:1,partIndex:0,serverWindow:null}; |
| return _7; |
| },receive:function(_9,_a){ |
| var _b={}; |
| var _c=_a.split("&"); |
| for(var i=0;i<_c.length;i++){ |
| if(_c[i]){ |
| var _d=_c[i].split("="); |
| _b[decodeURIComponent(_d[0])]=decodeURIComponent(_d[1]); |
| } |
| } |
| var _e=this._state[_9]; |
| var _f=_e.facade; |
| _f._setResponseHeaders(_b.responseHeaders); |
| if(_b.status==0||_b.status){ |
| _f.status=parseInt(_b.status,10); |
| } |
| if(_b.statusText){ |
| _f.statusText=_b.statusText; |
| } |
| if(_b.responseText){ |
| _f.responseText=_b.responseText; |
| var _10=_f.getResponseHeader("Content-Type"); |
| if(_10){ |
| var _11=_10.split(";")[0]; |
| if(_11.indexOf("application/xml")==0||_11.indexOf("text/xml")==0){ |
| _f.responseXML=dojox.data.dom.createDocument(_b.responseText,_10); |
| } |
| } |
| } |
| _f.readyState=4; |
| this.destroyState(_9); |
| },frameLoaded:function(_12){ |
| var _13=this._state[_12]; |
| var _14=_13.facade; |
| var _15=[]; |
| for(var _16 in _14._requestHeaders){ |
| _15.push(_16+": "+_14._requestHeaders[_16]); |
| } |
| var _17={uri:_14._uri}; |
| if(_15.length>0){ |
| _17.requestHeaders=_15.join("\r\n"); |
| } |
| if(_14._method){ |
| _17.method=_14._method; |
| } |
| if(_14._bodyData){ |
| _17.data=_14._bodyData; |
| } |
| this.sendRequest(_12,dojo.objectToQuery(_17)); |
| },destroyState:function(_18){ |
| var _19=this._state[_18]; |
| if(_19){ |
| delete this._state[_18]; |
| var _1a=_19.clientFrame.parentNode; |
| _1a.removeChild(_19.clientFrame); |
| _19.clientFrame=null; |
| _19=null; |
| } |
| },createFacade:function(){ |
| if(arguments&&arguments[0]&&arguments[0].iframeProxyUrl){ |
| return new dojox.io.proxy.xip.XhrIframeFacade(arguments[0].iframeProxyUrl); |
| }else{ |
| return dojox.io.proxy.xip._xhrObjOld.apply(dojo,arguments); |
| } |
| },sendRequest:function(_1b,_1c){ |
| var _1d=this._state[_1b]; |
| if(!_1d.isSending){ |
| _1d.isSending=true; |
| _1d.requestData=_1c||""; |
| _1d.serverWindow=frames[_1d.stateId]; |
| if(!_1d.serverWindow){ |
| _1d.serverWindow=document.getElementById(_1d.stateId).contentWindow; |
| } |
| if(typeof document.postMessage=="undefined"){ |
| if(_1d.serverWindow.contentWindow){ |
| _1d.serverWindow=_1d.serverWindow.contentWindow; |
| } |
| } |
| this.sendRequestStart(_1b); |
| } |
| },sendRequestStart:function(_1e){ |
| var _1f=this._state[_1e]; |
| _1f.requestParts=[]; |
| var _20=_1f.requestData; |
| var _21=_1f.serverUrl.length; |
| var _22=this.urlLimit-_21; |
| var _23=0; |
| while((_20.length-_23)+_21>this.urlLimit){ |
| var _24=_20.substring(_23,_23+_22); |
| var _25=_24.lastIndexOf("%"); |
| if(_25==_24.length-1||_25==_24.length-2){ |
| _24=_24.substring(0,_25); |
| } |
| _1f.requestParts.push(_24); |
| _23+=_24.length; |
| } |
| _1f.requestParts.push(_20.substring(_23,_20.length)); |
| _1f.partIndex=0; |
| this.sendRequestPart(_1e); |
| },sendRequestPart:function(_26){ |
| var _27=this._state[_26]; |
| if(_27.partIndex<_27.requestParts.length){ |
| var _28=_27.requestParts[_27.partIndex]; |
| var cmd="part"; |
| if(_27.partIndex+1==_27.requestParts.length){ |
| cmd="end"; |
| }else{ |
| if(_27.partIndex==0){ |
| cmd="start"; |
| } |
| } |
| this.setServerUrl(_26,cmd,_28); |
| _27.partIndex++; |
| } |
| },setServerUrl:function(_29,cmd,_2a){ |
| var _2b=this.makeServerUrl(_29,cmd,_2a); |
| var _2c=this._state[_29]; |
| if(this._isWebKit){ |
| _2c.serverWindow.location=_2b; |
| }else{ |
| _2c.serverWindow.location.replace(_2b); |
| } |
| },makeServerUrl:function(_2d,cmd,_2e){ |
| var _2f=this._state[_2d]; |
| var _30=_2f.serverUrl+"#"+(_2f.idCounter++)+":"+cmd; |
| if(_2e){ |
| _30+=":"+_2e; |
| } |
| return _30; |
| },fragmentReceivedEvent:function(evt){ |
| if(evt.uri.split("#")[0]==this.fullXipClientUrl){ |
| this.fragmentReceived(evt.data); |
| } |
| },fragmentReceived:function(_31){ |
| var _32=_31.indexOf("#"); |
| var _33=_31.substring(0,_32); |
| var _34=_31.substring(_32+1,_31.length); |
| var msg=this.unpackMessage(_34); |
| var _35=this._state[_33]; |
| switch(msg.command){ |
| case "loaded": |
| this.frameLoaded(_33); |
| break; |
| case "ok": |
| this.sendRequestPart(_33); |
| break; |
| case "start": |
| _35.responseMessage=""+msg.message; |
| this.setServerUrl(_33,"ok"); |
| break; |
| case "part": |
| _35.responseMessage+=msg.message; |
| this.setServerUrl(_33,"ok"); |
| break; |
| case "end": |
| this.setServerUrl(_33,"ok"); |
| _35.responseMessage+=msg.message; |
| this.receive(_33,_35.responseMessage); |
| break; |
| } |
| },unpackMessage:function(_36){ |
| var _37=_36.split(":"); |
| var _38=_37[1]; |
| _36=_37[2]||""; |
| var _39=null; |
| if(_38=="init"){ |
| var _3a=_36.split("&"); |
| _39={}; |
| for(var i=0;i<_3a.length;i++){ |
| var _3b=_3a[i].split("="); |
| _39[decodeURIComponent(_3b[0])]=decodeURIComponent(_3b[1]); |
| } |
| } |
| return {command:_38,message:_36,config:_39}; |
| }}; |
| dojox.io.proxy.xip._xhrObjOld=dojo._xhrObj; |
| dojo._xhrObj=dojox.io.proxy.xip.createFacade; |
| dojox.io.proxy.xip.XhrIframeFacade=function(_3c){ |
| this._requestHeaders={}; |
| this._allResponseHeaders=null; |
| this._responseHeaders={}; |
| this._method=null; |
| this._uri=null; |
| this._bodyData=null; |
| this.responseText=null; |
| this.responseXML=null; |
| this.status=null; |
| this.statusText=null; |
| this.readyState=0; |
| this._ifpServerUrl=_3c; |
| this._stateId=null; |
| }; |
| dojo.extend(dojox.io.proxy.xip.XhrIframeFacade,{open:function(_3d,uri){ |
| this._method=_3d; |
| this._uri=uri; |
| this.readyState=1; |
| },setRequestHeader:function(_3e,_3f){ |
| this._requestHeaders[_3e]=_3f; |
| },send:function(_40){ |
| this._bodyData=_40; |
| this._stateId=dojox.io.proxy.xip.send(this); |
| this.readyState=2; |
| },abort:function(){ |
| dojox.io.proxy.xip.destroyState(this._stateId); |
| },getAllResponseHeaders:function(){ |
| return this._allResponseHeaders; |
| },getResponseHeader:function(_41){ |
| return this._responseHeaders[_41]; |
| },_setResponseHeaders:function(_42){ |
| if(_42){ |
| this._allResponseHeaders=_42; |
| _42=_42.replace(/\r/g,""); |
| var _43=_42.split("\n"); |
| for(var i=0;i<_43.length;i++){ |
| if(_43[i]){ |
| var _44=_43[i].split(": "); |
| this._responseHeaders[_44[0]]=_44[1]; |
| } |
| } |
| } |
| }}); |
| } |