summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.3-sdk/frontend/framework/source/class/qx/lang/MshtmlEmu.js
diff options
context:
space:
mode:
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.js348
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;
+ });
+}