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

Changeset 8266

Show
Ignore:
Timestamp:
12/04/07 04:28:27 (1 year ago)
Author:
andrew
Message:

Change document.viewport.getDimensions to exclude scrollbars in all cases. Closes #10148, #9288. [Nick Stackenburg]

Files:

Legend:

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

    r8265 r8266  
    11*SVN* 
     2 
     3* Change document.viewport.getDimensions to exclude scrollbars in all cases. Closes #10148, #9288. [Nick Stackenburg] 
    24 
    35* Add logic to Element#getStyle in Opera that fixes inaccurate reporting of computed 'width' and 'height' properties. [Andrew Dupont] 
  • spinoffs/prototype/trunk/src/dom.js

    r8265 r8266  
    12051205  getDimensions: function() { 
    12061206    var dimensions = { }; 
     1207    var B = Prototype.Browser; 
    12071208    $w('width height').each(function(d) { 
    12081209      var D = d.capitalize(); 
    1209       dimensions[d] = self['inner' + D] ||  
    1210        (document.documentElement['client' + D] || document.body['client' + D])
     1210      dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] : 
     1211        (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D]
    12111212    }); 
    12121213    return dimensions; 
  • spinoffs/prototype/trunk/test/unit/dom.html

    r8264 r8266  
    8282 
    8383    #notInlineAbsoluted { position: absolute; } 
     84     
     85    #elementToViewportDimensions { 
     86      position: absolute; 
     87      top: 0; 
     88      left: 0; 
     89      height: 10px; 
     90      width: 10px; 
     91      background: #000; 
     92    } 
    8493     
    8594    /* for scroll test on really big screens */ 
     
    372381</div> 
    373382 
     383<div id='elementToViewportDimensions' style='display: none'></div> 
     384 
    374385<!-- Tests follow --> 
    375386<script type="text/javascript" language="javascript" charset="utf-8"> 
     
    400411    orangeJuice: function(element) { return "orange juice"; } 
    401412  }); 
     413   
     414  // Based on properties check from http://www.quirksmode.org/viewport/compatibility.html 
     415  var documentViewportProperties = { 
     416    properties : [ 
     417      'self.pageXOffset', 'self.pageYOffset', 
     418      'self.screenX', 'self.screenY', 
     419      'self.innerHeight', 'self.innerWidth', 
     420      'self.outerHeight', 'self.outerWidth', 
     421      'self.screen.height', 'self.screen.width', 
     422      'self.screen.availHeight', 'self.screen.availWidth', 
     423      'self.screen.availTop', 'self.screen.availLeft', 
     424      'self.screen.Top', 'self.screen.Left',  
     425      'self.screenTop', 'self.screenLeft', 
     426      'document.body.clientHeight', 'document.body.clientWidth', 
     427      'document.body.scrollHeight', 'document.body.scrollWidth', 
     428      'document.body.scrollLeft', 'document.body.scrollTop', 
     429      'document.body.offsetHeight', 'document.body.offsetWidth', 
     430      'document.body.offsetTop', 'document.body.offsetLeft' 
     431    ].inject([], function(properties, prop) { 
     432      if(!self.screen && prop.include('self.screen')) return; 
     433      if (!document.body && prop.include('document.body')) return; 
     434      properties.push(prop); 
     435      if (prop.include('.body') && document.documentElement) 
     436        properties.push(prop.sub('.body', '.documentElement')); 
     437      return properties; 
     438    }), 
     439 
     440    inspect : function() { 
     441      var props = []; 
     442      this.properties.each(function(prop) { 
     443        if (eval(prop)) props[prop] = eval(prop); 
     444      }); 
     445      return props; 
     446    } 
     447  }; 
    402448 
    403449  new Test.Unit.Runner({ 
     
    15691615    }}, 
    15701616     
     1617    testElementToViewportDimensionsDoesNotAffectDocumentProperties: function() {with(this) { 
     1618      // No properties on the document should be affected when resizing 
     1619      // an absolute positioned(0,0) element to viewport dimensions 
     1620      var vd = document.viewport.getDimensions(); 
     1621 
     1622      var before = documentViewportProperties.inspect(); 
     1623      $('elementToViewportDimensions').setStyle({ height: vd.height + 'px', width: vd.width + 'px' }).show(); 
     1624      var after = documentViewportProperties.inspect(); 
     1625      $('elementToViewportDimensions').hide(); 
     1626 
     1627      documentViewportProperties.properties.each(function(prop) { 
     1628        assertEqual(before[prop], after[prop], prop + ' was affected'); 
     1629      });          
     1630    }}, 
     1631 
    15711632    testViewportScrollOffsets: function() {with(this) { 
    15721633      preservingBrowserDimensions(function() {