diff options
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js')
-rw-r--r-- | webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js | 348 |
1 files changed, 348 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js new file mode 100644 index 0000000000..eb21669003 --- /dev/null +++ b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js @@ -0,0 +1,348 @@ +/* ************************************************************************ + + qooxdoo - the new era of web development + + http://qooxdoo.org + + Copyright: + 2004-2006 by 1&1 Internet AG, Germany, http://www.1and1.org + + License: + LGPL 2.1: http://www.gnu.org/licenses/lgpl.html + + Authors: + * Sebastian Werner (wpbasti) + * Andreas Ecker (ecker) + +************************************************************************ */ + +/* ************************************************************************ + +#require(qx.sys.Client) + +************************************************************************ */ + +qx.OO.defineClass("qx.lang.MshtmlEmu"); + +/* + Parts are based on: + moz-behaviors.xml - version 1.1.1 (2005-08-19) + Copyright 2004-2005, Dean Edwards + License: http://creativecommons.org/licenses/LGPL/2.1/ + Thanks to Erik Arvidsson (http://webfx.eae.net/dhtml/ieemu/) +*/ + +/* + We're going to mess about with some of mozilla's interfaces to + make them more explorer-like +*/ + +/* + Note: + In my comments where i say support/mimic a property: + + * support = exactly the same as explorer + * mimic = close enough +*/ + +if (qx.sys.Client.getInstance().isGecko()) +{ + /* + -------------------------------------------------------------------------------- + CSS STYLES: FLOAT + -------------------------------------------------------------------------------- + */ + + /* + Support microsoft's styleFloat + */ + + CSSStyleDeclaration.prototype.__defineGetter__("styleFloat", function() { + return this.cssFloat; + }); + + CSSStyleDeclaration.prototype.__defineSetter__("styleFloat", function(vValue) { + this.cssFloat = vValue; + }); + + + + + + /* + -------------------------------------------------------------------------------- + CSS STYLES: DIMENSIONS + -------------------------------------------------------------------------------- + */ + + /* + Mimic microsoft's pixel representations of left/top/width/height + the getters only work for values that are already pixels + */ + + CSSStyleDeclaration.prototype.__defineGetter__("pixelLeft", function() { + return parseInt(this.left) || 0; + }); + + CSSStyleDeclaration.prototype.__defineSetter__("pixelLeft", function(vValue) { + this.left = vValue + "px"; + }); + + CSSStyleDeclaration.prototype.__defineGetter__("pixelTop", function() { + return parseInt(this.top) || 0; + }); + + CSSStyleDeclaration.prototype.__defineSetter__("pixelTop", function(vValue) { + this.top = vValue + "px"; + }); + + CSSStyleDeclaration.prototype.__defineGetter__("pixelWidth", function() { + return parseInt(this.width) || 0; + }); + + CSSStyleDeclaration.prototype.__defineSetter__("pixelWidth", function(vValue) { + this.width = vValue + "px"; + }); + + CSSStyleDeclaration.prototype.__defineGetter__("pixelHeight", function() { + return parseInt(this.height) || 0; + }); + + CSSStyleDeclaration.prototype.__defineSetter__("pixelHeight", function(vValue) { + this.height = vValue + "px"; + }); + + + + + + /* + -------------------------------------------------------------------------------- + HTML DOCUMENT EXTENSIONS + -------------------------------------------------------------------------------- + */ + + /* + Support Microsoft's "all" property + */ + HTMLDocument.prototype.__defineGetter__("all", function() { + return this.getElementsByTagName("*"); + }); + + /* + Mimic the "createEventObject" method for the document object + */ + HTMLDocument.prototype.createEventObject = function() { + return document.createEvent("Events"); + } + + + + + + + /* + -------------------------------------------------------------------------------- + HTML ELEMENT EXTENSIONS + -------------------------------------------------------------------------------- + */ + + /* + Mimic Microsoft's "all" property + */ + HTMLElement.prototype.__defineGetter__("all", function() { + return this.getElementsByTagName("*"); + }); + + /* + Support "parentElement" + */ + HTMLElement.prototype.__defineGetter__("parentElement", function() { + return (this.parentNode == this.ownerDocument) ? null : this.parentNode; + }); + + /* + Support "uniqueID" + */ + HTMLElement.prototype.__defineGetter__("uniqueID", function() + { + // a global counter is stored privately as a property of this getter function. + // initialise the counter + if (!arguments.callee.count) { + arguments.callee.count = 0; + } + + // create the id and increment the counter + var vUniqueID = "moz_id" + arguments.callee.count++; + + // creating a unique id, creates a global reference + window[vUniqueID] = this; + + // we don't want to increment next time, so redefine the getter + this.__defineGetter__("uniqueID", function(){return vUniqueID;}); + + return vUniqueID; + }); + + /* + Mimic Microsoft's "currentStyle" + */ + HTMLElement.prototype.__defineGetter__("currentStyle", function() { + return getComputedStyle(this, null); + }); + + /* + Mimic Microsoft's "runtimeStyle" + */ + HTMLElement.prototype.__defineGetter__("runtimeStyle", function() + { + /* + this doesn't work yet (https://bugzilla.mozilla.org/show_bug.cgi?id=45424) + return this.ownerDocument.defaultView.getOverrideStyle(this, null); + */ + + return this.style; + }); + + /* + Support "innerText" + */ + HTMLElement.prototype.__defineGetter__("innerText", function() { + return this.textContent; + }); + + HTMLElement.prototype.__defineSetter__("innerText", function(vValue) { + this.textContent = vValue; + }); + + /* + Mimic the "attachEvent" method + */ + HTMLElement.prototype.attachEvent = function(vName, vHandler) { + this.addEventListener(vName.slice(2), vHandler, false); + } + + /* + Mimic the "removeEvent" method + */ + HTMLElement.prototype.removeEvent = function(vName, vHandler) { + this.removeEventListener(vName.slice(2), vHandler, false); + } + + /* + Mimic the "createEventObject" method + */ + HTMLElement.prototype.createEventObject = function() { + return this.ownerDocument.createEventObject(); + } + + /* + Mimic the "fireEvent" method + */ + HTMLElement.prototype.fireEvent = function(vName, vEvent) + { + if (!vEvent) { + vEvent = this.ownerDocument.createEventObject(); + } + + vEvent.initEvent(vName.slice(2), false, false); + + this.dispatchEvent(vEvent); + + // not sure that this should be here?? + if (typeof this[vName] === "function") + { + this[vName](); + } + else if (this.getAttribute(vName)) + { + eval(this.getAttribute(vName)); + } + } + + /* + Support the "contains" method + */ + HTMLElement.prototype.contains = function(vElement) { + return Boolean(vElement == this || (vElement && this.contains(vElement.parentElement))); + } + + + + + + /* + -------------------------------------------------------------------------------- + EVENT EXTENSIONS + -------------------------------------------------------------------------------- + */ + + /* + Support Microsoft's proprietary event properties + */ + Event.prototype.__defineGetter__("srcElement", function() { + return (this.target.nodeType == Node.ELEMENT_NODE) ? this.target : this.target.parentNode; + }); + + Event.prototype.__defineGetter__("fromElement",function() { + return (this.type == "mouseover") ? this.relatedTarget : (this.type == "mouseout") ? this.srcElement : null; + }); + + Event.prototype.__defineGetter__("toElement", function() { + return (this.type == "mouseout") ? this.relatedTarget : (this.type == "mouseover") ? this.srcElement : null; + }); + + /* + Convert w3c button id's to Microsoft's + Breaks with qooxdoo's internal event handling!!! + */ + /* + Event.prototype.__defineGetter__("button", function() { + return (this.which == 1) ? 1 : (this.which == 2) ? 4 : 2; + }); + */ + + + /* + Mimic "returnValue" (default is "true") + Breaks with qooxdoo's internal event handling!!! + */ + /* + Event.prototype.__defineGetter__("returnValue", function() { + return true; + }); + + Event.prototype.__defineSetter__("returnValue", function(vValue) + { + if (this.cancelable && !vValue) + { + // this can't be undone! + this.preventDefault(); + + this.__defineGetter__("returnValue", function() { + return false; + }); + } + }); + */ + + /* + Mozilla already supports the read-only "cancelBubble" + so we only need to define the setter + */ + Event.prototype.__defineSetter__("cancelBubble", function(vValue) + { + // this can't be undone! + if (vValue) { + this.stopPropagation(); + } + }); + + Event.prototype.__defineGetter__("offsetX", function() { + return this.layerX; + }); + + Event.prototype.__defineGetter__("offsetY", function() { + return this.layerY; + }); +} |