From ed4385953fb56768a2306d0932ceacd330b2e3cc Mon Sep 17 00:00:00 2001 From: jdalton Date: Tue, 24 Jun 2008 19:05:05 -0500 Subject: [PATCH] Fix issues with cumulativeScrollOffset and Opera < 9.5 and fix unit tests --- src/dom.js | 12 ++++++------ test/unit/dom_test.js | 30 +++++++++++------------------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/dom.js b/src/dom.js index 768db67..5a396d3 100644 --- a/src/dom.js +++ b/src/dom.js @@ -647,14 +647,14 @@ Object.extend(Element.Methods, (function() { return { cumulativeScrollOffset: function(element) { element = $(element); - var valueT = 0, valueL = 0, endElement = document.body; - - if (element === document.documentElement || - element === endElement || element === document) - return Element._returnOffset(0, 0); + var valueT = 0, valueL = 0, + end = (Prototype.Browser.Opera && + parseFloat(opera.version()) < 9.5 && element !== document.body) ? + document.documentElement : document; if (Element.getStyle(element, 'position') !== 'fixed') { - while ((element = element.parentNode) && element !== endElement) { + while ((element = element.parentNode) && + element.nodeType == 1 && element !== end) { if (Element.getStyle(element, 'position') === 'fixed') break; valueT += element.scrollTop || 0; valueL += element.scrollLeft || 0; diff --git a/test/unit/dom_test.js b/test/unit/dom_test.js index b873248..a89b95b 100644 --- a/test/unit/dom_test.js +++ b/test/unit/dom_test.js @@ -1163,24 +1163,20 @@ new Test.Unit.Runner({ testElementClonePosition: function() { - var position, target, left = 558, top = 8; - target = $('clonePositionTarget').clonePosition('clonePositionSource', { + var target = $('clonePositionTarget'), + source = $('clonePositionSource'); + + target.clonePosition(source, { offsetTop: 20, offsetLeft: 30 }); - position = target.cumulativeOffset(); - this.assertIdentical(top + 20, position.top); - this.assertIdentical(left + 30, position.left); - - target = $('clonePositionTarget').clonePosition('clonePositionSource'); - position = target.cumulativeOffset(); - dimensions = target.getDimensions(); + this.assertIdentical(source.cumulativeOffset().top + 20, target.cumulativeOffset().top); + this.assertIdentical(source.cumulativeOffset().left + 30, target.cumulativeOffset().left); - this.assertIdentical(top, position.top); - this.assertIdentical(left, position.left); - this.assertIdentical(20, dimensions.height); - this.assertIdentical(30, dimensions.width); + target.clonePosition(source); + this.assertIdentical(source.getHeight(), target.getHeight()); + this.assertIdentical(source.getWidth(), target.getWidth()); }, testDOMAttributesHavePrecedenceOverExtendedElementMethods: function() { @@ -1241,13 +1237,8 @@ new Test.Unit.Runner({ testElementScrollTo: function() { var elem = $('scroll_test_2'); - Element.scrollTo('scroll_test_2'); - // IE has issues with document.body.scrollTop - this.assertEqual(Position.page(elem)[1], document.body.scrollTop || document.documentElement.scrollTop); - window.scrollTo(0, 0); - elem.scrollTo(); - this.assertEqual(Position.page(elem)[1], document.body.scrollTop || document.documentElement.scrollTop); + this.assertEqual(elem.viewportOffset()[1], 0); window.scrollTo(0, 0); }, @@ -1328,6 +1319,7 @@ new Test.Unit.Runner({ }, testViewportOffset: function() { + window.scrollTo(0,0); this.assertEnumEqual([10,10], $('body_absolute').viewportOffset()); this.assertEnumEqual([20,20], -- 1.5.5.1015.g9d258