Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 8799

Show
Ignore:
Timestamp:
02/03/08 22:29:29 (8 months ago)
Author:
tobie
Message:

prototype: Prevent Element#cumulativeOffset, Element#getOffsetParent, Element#positionedOffset, Element#viewportOffset and Element#clonePosition from throwing an error in IE when called on a parent-less element. Closes #9416, #10192, #10248.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/prototype/trunk/CHANGELOG

    r8798 r8799  
     1* Prevent Element#cumulativeOffset, Element#getOffsetParent, Element#positionedOffset, Element#viewportOffset and Element#clonePosition from throwing an error in IE when called on a parent-less element. Closes #9416, #10192, #10248. [ronstoney, psiborg, kangax] 
     2 
    13* Prevent Enumerable#eachSlice from entering into an endless loop if passed an argument smaller than 1. Closes #10665. [kangax, Tobie Langel] 
    24 
  • spinoffs/prototype/trunk/src/dom.js

    r8796 r8799  
    718718    function(proceed, element) { 
    719719      element = $(element); 
     720      // IE throws an error if element is not in document 
     721      try { element.offsetParent } 
     722      catch(e) { return $(document.body) } 
    720723      var position = element.getStyle('position'); 
    721724      if (position !== 'static') return proceed(element); 
     
    731734      function(proceed, element) { 
    732735        element = $(element); 
     736        try { element.offsetParent } 
     737        catch(e) { return Element._returnOffset(0,0) } 
    733738        var position = element.getStyle('position'); 
    734739        if (position !== 'static') return proceed(element); 
     
    745750    ); 
    746751  }); 
     752   
     753  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap( 
     754    function(proceed, element) { 
     755      try { element.offsetParent } 
     756      catch(e) { return Element._returnOffset(0,0) } 
     757      return proceed(element); 
     758    } 
     759  ); 
    747760     
    748761  Element.Methods.getStyle = function(element, style) { 
  • spinoffs/prototype/trunk/test/unit/dom.html

    r8796 r8799  
    16191619      assertEnumEqual([afu.offsetLeft, afu.offsetTop], 
    16201620        afu.positionedOffset()); 
     1621         
     1622      var element = new Element('div'), offset = element.positionedOffset(); 
     1623      assertEnumEqual([0,0], offset); 
     1624      assertIdentical(0, offset.top); 
     1625      assertIdentical(0, offset.left); 
     1626    }}, 
     1627     
     1628    testCumulativeOffset: function() {with(this) { 
     1629      var element = new Element('div'), offset = element.cumulativeOffset(); 
     1630      assertEnumEqual([0,0], offset); 
     1631      assertIdentical(0, offset.top); 
     1632      assertIdentical(0, offset.left); 
    16211633    }}, 
    16221634     
     
    16301642      assertEnumEqual([20,30], 
    16311643        $('absolute_relative_undefined').viewportOffset()); 
     1644      var element = new Element('div'), offset = element.viewportOffset(); 
     1645      assertEnumEqual([0,0], offset); 
     1646      assertIdentical(0, offset.top); 
     1647      assertIdentical(0, offset.left); 
    16321648    }}, 
    16331649     
     
    16371653      assertEqual('absolute_relative', $('inline').getOffsetParent().id); 
    16381654      assertEqual('absolute_relative', $('absolute_relative_undefined').getOffsetParent().id); 
     1655       
     1656      assertEqual(document.body, new Element('div').getOffsetParent()); 
    16391657    }}, 
    16401658