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

Changeset 6475

Show
Ignore:
Timestamp:
03/27/07 18:04:59 (1 year ago)
Author:
madrobby
Message:

Fix an issue with Element.getDimensions with some element types on non IE-browsers. Closes #7683. [Andrew Dupont]

Files:

Legend:

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

    r6474 r6475  
    11*SVN* 
     2 
     3* Fix an issue with Element.getDimensions with some element types on non IE-browsers.  Closes #7683.  [Andrew Dupont] 
    24 
    35* Fix Form.disable to work again on non-form elements.  Closes #6887.  [Mislav Marohnić] 
  • spinoffs/prototype/trunk/src/dom.js

    r6385 r6475  
    347347    var display = $(element).getStyle('display'); 
    348348    if (display != 'none' && display != null) // Safari bug 
    349       return {width: element.offsetWidth, height: element.offsetHeight}; 
    350      
     349      return { width: element.offsetWidth, height: element.offsetHeight }; 
     350 
    351351    // All *Width and *Height properties give 0 on elements with display none, 
    352352    // so enable the element temporarily 
    353     var els = element.style; 
    354     var originalVisibility = els.visibility; 
    355     var originalPosition = els.position; 
    356     var originalDisplay = els.display; 
    357     els.visibility = 'hidden'; 
    358     els.position = 'absolute'; 
    359     els.display = 'block'; 
    360     var originalWidth = element.clientWidth; 
     353    var els = element.style, original = {}; 
     354 
     355    $w('display position visibility height width').each( function(name) { 
     356      original[name] = els[name]; 
     357    }); 
     358     
     359    els.visibility = 'hidden';     
     360    els.display    = 'block'; 
     361 
     362    Position.absolutize(element); 
     363    var originalWidth  = element.clientWidth; 
    361364    var originalHeight = element.clientHeight; 
    362     els.display = originalDisplay; 
    363     els.position = originalPosition; 
    364     els.visibility = originalVisibility; 
    365     return {width: originalWidth, height: originalHeight};     
     365    Position.relativize(element); 
     366 
     367    $w('display position visibility height width').each( function(name) { 
     368      els[name] = original[name] || ''; 
     369    }); 
     370    return { width: originalWidth, height: originalHeight };   
    366371  }, 
    367372   
  • spinoffs/prototype/trunk/test/unit/dom.html

    r6385 r6475  
    254254</table> 
    255255 
     256<div id="dimensions-nester" style="width: 500px;"> 
     257  <div id="dimensions-nestee" style="display: none">This is a nested DIV. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> 
     258</div> 
     259         
     260 
    256261<p id="test-empty"></p> 
    257262<p id="test-empty-but-contains-whitespace">   
     
    827832        assertIdentical(100, $('dimensions-display-none-pos-abs').getDimensions().height); 
    828833        assertIdentical(200, $('dimensions-display-none-pos-abs').getDimensions().width); 
     834 
     835        assert($('dimensions-nestee').getDimensions().width <= 500, 'check for proper dimensions of hidden child elements'); 
    829836         
    830837        $('dimensions-td').hide();