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

Ticket #11473: getOffsetParent_viewportOffset_fix.diff

File getOffsetParent_viewportOffset_fix.diff, 1.7 kB (added by jdalton, 4 months ago)

fixed element#getOffsetParent() and element#viewportOffset passes unit tests

  • dom.js

    old new  
    577577  }, 
    578578   
    579579  getOffsetParent: function(element) { 
    580     if (element.offsetParent) return $(element.offsetParent); 
    581     if (element == document.body) return $(element); 
    582      
    583     while ((element = element.parentNode) && element != document.body) 
     580    element = $(element);   
     581    var op = element.offsetParent, body = document.body, docEl = document.documentElement;   
     582 
     583    /* IE with strict doctype may try to return documentElement as offsetParent   
     584       on relatively positioned elements, we will return body instead */   
     585    if (op && op !== docEl) return $(op);   
     586    if (op === docEl || element === docEl || element === body) return $(body);   
     587          
     588    while ((element = element.parentNode) && element !== body)   
    584589      if (Element.getStyle(element, 'position') != 'static') 
    585590        return $(element); 
    586591 
    587     return $(document.body); 
     592    return $(body); 
    588593  }, 
    589594 
    590595  viewportOffset: function(forElement) { 
    591     var valueT = 0, valueL = 0
     596    forElement = $(forElement)
    592597 
    593     var element = forElement
     598    var element = forElement, valueT = 0, valueL = 0
    594599    do { 
    595600      valueT += element.offsetTop  || 0; 
    596601      valueL += element.offsetLeft || 0; 
     602    } while ((element = element.getOffsetParent()) != document.body); 
    597603 
    598       // Safari fix 
    599       if (element.offsetParent == document.body && 
    600         Element.getStyle(element, 'position') == 'absolute') break; 
    601  
    602     } while (element = element.offsetParent); 
    603  
    604604    element = forElement; 
    605605    do { 
    606606      if (!Prototype.Browser.Opera || element.tagName.toUpperCase() == 'BODY') {