diff options
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js')
-rw-r--r-- | webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js | 472 |
1 files changed, 0 insertions, 472 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js deleted file mode 100644 index 29126c587b..0000000000 --- a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/io/remote/IframeTransport.js +++ /dev/null @@ -1,472 +0,0 @@ -/* ************************************************************************ - - qooxdoo - the new era of web development - - http://qooxdoo.org - - Copyright: - 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org - 2006 by Derrell Lipman - 2006 by STZ-IDA, Germany, http://www.stz-ida.de - - License: - LGPL 2.1: http://www.gnu.org/licenses/lgpl.html - - Authors: - * Sebastian Werner (wpbasti) - * Andreas Ecker (ecker) - * Derrell Lipman (derrell) - * Andreas Junghans (lucidcake) - -************************************************************************ */ - -/* ************************************************************************ - -#module(io_remote) -#require(qx.io.remote.Exchange) - -************************************************************************ */ - -/*! - Transports requests to a server using an IFRAME. - - This class should not be used directly by client programmers. - */ -qx.OO.defineClass("qx.io.remote.IframeTransport", qx.io.remote.AbstractRemoteTransport, -function() -{ - qx.io.remote.AbstractRemoteTransport.call(this); - - var vUniqueId = (new Date).valueOf(); - var vFrameName = "frame_" + vUniqueId; - var vFormName = "form_" + vUniqueId; - - // Mshtml allows us to define a full HTML as a parameter for createElement. - // Using this method is the only (known) working to register the frame - // to the known elements of the Internet Explorer. - if (qx.sys.Client.getInstance().isMshtml()) { - this._frame = document.createElement('<iframe name="' + vFrameName + '"></iframe>'); - } else { - this._frame = document.createElement("iframe"); - } - - this._frame.src = "javascript:void(0)"; - this._frame.id = this._frame.name = vFrameName; - this._frame.onload = function(e) { return o._onload(e); } - - this._frame.style.display = "none"; - - document.body.appendChild(this._frame); - - this._form = document.createElement("form"); - this._form.target = vFrameName; - this._form.id = this._form.name = vFormName; - - this._form.style.display = "none"; - - document.body.appendChild(this._form); - - this._data = document.createElement("textarea"); - this._data.id = this._data.name = "_data_"; - this._form.appendChild(this._data); - - var o = this; - this._frame.onreadystatechange = function(e) { return o._onreadystatechange(e); } -}); - -qx.Proto._lastReadyState = 0; - - - - - -/* ---------------------------------------------------------------------------- - CLASS PROPERTIES AND METHODS ---------------------------------------------------------------------------- -*/ - -// basic registration to qx.io.remote.Exchange -// the real availability check (activeX stuff and so on) follows at the first real request -qx.io.remote.Exchange.registerType(qx.io.remote.IframeTransport, "qx.io.remote.IframeTransport"); - -qx.io.remote.IframeTransport.handles = -{ - synchronous : false, - asynchronous : true, - crossDomain : false, - fileUpload: true, - responseTypes : [ "text/plain", "text/javascript", "text/json", "application/xml", "text/html" ] -} - -qx.io.remote.IframeTransport.isSupported = function() { - return true; -} - - - - - - -/* ---------------------------------------------------------------------------- - USER METHODS ---------------------------------------------------------------------------- -*/ - -qx.Proto.send = function() -{ - var vMethod = this.getMethod(); - var vUrl = this.getUrl(); - - - - // -------------------------------------- - // Adding parameters - // -------------------------------------- - - var vParameters = this.getParameters(); - var vParametersList = []; - for (var vId in vParameters) { - var value = vParameters[vId]; - if (value instanceof Array) { - for (var i = 0; i < value.length; i++) { - vParametersList.push(encodeURIComponent(vId) + "=" + - encodeURIComponent(value[i])); - } - } else { - vParametersList.push(encodeURIComponent(vId) + "=" + - encodeURIComponent(value)); - } - } - - if (vParametersList.length > 0) { - vUrl += (vUrl.indexOf("?") >= 0 ? - "&" : "?") + vParametersList.join("&"); - } - - - - // -------------------------------------- - // Preparing form - // -------------------------------------- - - this._form.action = vUrl; - this._form.method = vMethod; - - - - // -------------------------------------- - // Sending data - // -------------------------------------- - - this._data.appendChild(document.createTextNode(this.getData())); - this._form.submit(); -} - - - - - - -/* ---------------------------------------------------------------------------- - EVENT LISTENER ---------------------------------------------------------------------------- -*/ - -// For reference: -// http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/readyState_1.asp -qx.io.remote.IframeTransport._numericMap = -{ - "uninitialized" : 1, - "loading" : 2, - "loaded" : 2, - "interactive" : 3, - "complete" : 4 -} - -/*! - Converting complete state to numeric value and update state property -*/ -qx.Proto._onload = function(e) -{ - if (this._form.src) { - return; - } - - this._switchReadyState(qx.io.remote.IframeTransport._numericMap.complete); -} - -/*! - Converting named readyState to numeric value and update state property -*/ -qx.Proto._onreadystatechange = function(e) { - this._switchReadyState(qx.io.remote.IframeTransport._numericMap[this._frame.readyState]); -} - -qx.Proto._switchReadyState = function(vReadyState) -{ - // Ignoring already stopped requests - switch(this.getState()) - { - case "completed": - case "aborted": - case "failed": - case "timeout": - this.warn("Ignore Ready State Change"); - return; - } - - // Updating internal state - while (this._lastReadyState < vReadyState) { - this.setState(qx.io.remote.Exchange._nativeMap[++this._lastReadyState]); - } -} - - - - - -/* ---------------------------------------------------------------------------- - REQUEST HEADER SUPPORT ---------------------------------------------------------------------------- -*/ - -qx.Proto.setRequestHeader = function(vLabel, vValue) -{ - // TODO - // throw new Error("setRequestHeader is abstract"); -} - - - - - - -/* ---------------------------------------------------------------------------- - RESPONSE HEADER SUPPORT ---------------------------------------------------------------------------- -*/ - -qx.Proto.getResponseHeader = function(vLabel) -{ - return null; - - // TODO - // this.error("Need implementation", "getResponseHeader"); -} - -/*! - Provides an hash of all response headers. -*/ -qx.Proto.getResponseHeaders = function() -{ - return {} - - // TODO - // throw new Error("getResponseHeaders is abstract"); -} - - - - - - - -/* ---------------------------------------------------------------------------- - STATUS SUPPORT ---------------------------------------------------------------------------- -*/ - -/*! - Returns the current status code of the request if available or -1 if not. -*/ -qx.Proto.getStatusCode = function() -{ - return 200; - - // TODO - // this.error("Need implementation", "getStatusCode"); -} - -/*! - Provides the status text for the current request if available and null otherwise. -*/ -qx.Proto.getStatusText = function() -{ - return ""; - - // TODO - // this.error("Need implementation", "getStatusText"); -} - - - - - - - -/* ---------------------------------------------------------------------------- - FRAME UTILITIES ---------------------------------------------------------------------------- -*/ - -qx.Proto.getIframeWindow = function() { - return qx.dom.Iframe.getWindow(this._frame); -} - -qx.Proto.getIframeDocument = function() { - return qx.dom.Iframe.getDocument(this._frame); -} - -qx.Proto.getIframeBody = function() { - return qx.dom.Iframe.getBody(this._frame); -} - - - - - - - - -/* ---------------------------------------------------------------------------- - RESPONSE DATA SUPPORT ---------------------------------------------------------------------------- -*/ - -qx.Proto.getIframeTextContent = function() -{ - var vBody = this.getIframeBody(); - - if (!vBody) { - return null; - } - - // Mshtml returns the content inside a PRE - // element if we use plain text - if (vBody.firstChild.tagName.toLowerCase() == "pre") - { - return vBody.firstChild.innerHTML; - } - else - { - return vBody.innerHTML; - } -} - -qx.Proto.getIframeHtmlContent = function() -{ - var vBody = this.getIframeBody(); - return vBody ? vBody.innerHTML : null; -} - -/*! - Returns the length of the content as fetched thus far -*/ -qx.Proto.getFetchedLength = function() -{ - return 0; - - // TODO - // throw new Error("getFetchedLength is abstract"); -} - -qx.Proto.getResponseContent = function() -{ - if (this.getState() !== "completed") - { - if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { - this.warn("Transfer not complete, ignoring content!"); - } - - return null; - } - - if (qx.Settings.getValueOfClass("qx.io.remote.Exchange", "enableDebug")) { - this.debug("Returning content for responseType: " + this.getResponseType()); - } - - var vText = this.getIframeTextContent(); - - switch(this.getResponseType()) - { - case "text/plain": - return vText; - break; - - case "text/html": - return this.getIframeHtmlContent(); - break; - - case "text/json": - try { - return vText && vText.length > 0 ? qx.io.Json.parseQx(vText) : null; - } catch(ex) { - return this.error("Could not execute json: (" + vText + ")", ex); - } - - case "text/javascript": - try { - return vText && vText.length > 0 ? window.eval(vText) : null; - } catch(ex) { - return this.error("Could not execute javascript: (" + vText + ")", ex); - } - - case "application/xml": - return this.getIframeDocument(); - - default: - this.warn("No valid responseType specified (" + this.getResponseType() + ")!"); - return null; - } -} - - - - - - -/* ---------------------------------------------------------------------------- - DISPOSER ---------------------------------------------------------------------------- -*/ - -qx.Proto.dispose = function() -{ - if (this.getDisposed()) { - return true; - } - - if (this._frame) - { - this._frame.onload = null; - this._frame.onreadystatechange = null; - - // Reset source to a blank image for gecko - // Otherwise it will switch into a load-without-end behaviour - if (qx.sys.Client.getInstance().isGecko()) { - this._frame.src = qx.manager.object.AliasManager.getInstance().resolvePath("static/image/blank.gif"); - } - - // Finally remove element node - document.body.removeChild(this._frame); - - this._frame = null; - } - - if (this._form) - { - document.body.removeChild(this._form); - this._form = null; - } - - return qx.io.remote.AbstractRemoteTransport.prototype.dispose.call(this); -} |