From d17f3356a4b7f006226afb853526bb6f120c7d4a Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Wed, 7 Jul 2010 12:20:28 +0200 Subject: [PATCH] Revert my rejected fix, and pull in latest fixes from prototype. Fixes a positioning issue with redbox. --- horde/js/prototype.js | 48 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/horde/js/prototype.js b/horde/js/prototype.js index fb0549dc5..a00c4f332 100644 --- a/horde/js/prototype.js +++ b/horde/js/prototype.js @@ -1304,10 +1304,6 @@ var Hash = Class.create(Enumerable, (function() { return new Hash(this); } - function toJSON() { - return Object.toJSON(this._object); - } - return { initialize: initialize, _each: _each, @@ -1323,7 +1319,7 @@ var Hash = Class.create(Enumerable, (function() { update: update, toQueryString: toQueryString, inspect: inspect, - toJSON: toJSON, + toJSON: toObject, clone: clone }; })()); @@ -1887,7 +1883,7 @@ if (!Node.ELEMENT_NODE) { Element.idCounter = 1; Element.cache = { }; -function purgeElement(element) { +Element._purgeElement = function(element) { var uid = element._prototypeUID; if (uid) { Element.stopObserving(element); @@ -1968,6 +1964,7 @@ Element.Methods = { function update(element, content) { element = $(element); + var purgeElement = Element._purgeElement; var descendants = element.getElementsByTagName('*'), i = descendants.length; @@ -3268,6 +3265,8 @@ Element.addMethods({ purge: function(element) { if (!(element = $(element))) return; + var purgeElement = Element._purgeElement; + purgeElement(element); var descendants = element.getElementsByTagName('*'), @@ -3342,7 +3341,7 @@ Element.addMethods({ } return (whole === null) ? 0 : whole * decimal; - } + } return 0; } @@ -3756,11 +3755,38 @@ Element.addMethods({ } function getDimensions(element) { - var layout = $(element).getLayout(); - return { - width: layout.get('width'), - height: layout.get('height') + element = $(element); + var display = Element.getStyle(element, 'display'); + + if (display && display !== 'none') { + return { width: element.offsetWidth, height: element.offsetHeight }; + } + + var style = element.style; + var originalStyles = { + visibility: style.visibility, + position: style.position, + display: style.display + }; + + var newStyles = { + visibility: 'hidden', + display: 'block' }; + + if (originalStyles.position !== 'fixed') + newStyles.position = 'absolute'; + + Element.setStyle(element, newStyles); + + var dimensions = { + width: element.offsetWidth, + height: element.offsetHeight + }; + + Element.setStyle(element, originalStyles); + + return dimensions; } function getOffsetParent(element) { -- 2.11.0