diff options
author | Michał Gołębiowski <m.goleb@gmail.com> | 2013-03-04 05:20:25 +0100 |
---|---|---|
committer | Dave Methvin <dave.methvin@gmail.com> | 2013-04-03 21:00:38 -0400 |
commit | 8db7d6f20b4226994e88d1cd9243743c492773f5 (patch) | |
tree | cd105375c138f6830062188c50bf2a942e736e19 /src | |
parent | 1205103a72db407bfbc0de3d9b78f1fd6a02520c (diff) | |
download | jquery-8db7d6f20b4226994e88d1cd9243743c492773f5.tar.gz jquery-8db7d6f20b4226994e88d1cd9243743c492773f5.zip |
Fix #13543. offsetWidth is wrong on non-1 zoom. Close gh-1194.
Diffstat (limited to 'src')
-rw-r--r-- | src/core.js | 25 | ||||
-rw-r--r-- | src/css.js | 21 | ||||
-rw-r--r-- | src/support.js | 8 |
3 files changed, 30 insertions, 24 deletions
diff --git a/src/core.js b/src/core.js index c0a32762d..66c60774b 100644 --- a/src/core.js +++ b/src/core.js @@ -781,7 +781,30 @@ jQuery.extend({ length ? fn( elems[0], key ) : emptyGet; }, - now: Date.now + now: Date.now, + + // A method for quickly swapping in/out CSS properties to get correct calculations. + // Note: this method belongs to the css module but it's needed here for the support module. + // If support gets modularized, this method should be moved back to the css module. + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } }); jQuery.ready.promise = function( obj ) { diff --git a/src/css.js b/src/css.js index 8684dc265..522982b3f 100644 --- a/src/css.js +++ b/src/css.js @@ -277,27 +277,6 @@ jQuery.extend({ return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; } return val; - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; } }); diff --git a/src/support.js b/src/support.js index bc02ee862..b80957a39 100644 --- a/src/support.js +++ b/src/support.js @@ -75,12 +75,16 @@ jQuery.support = (function( support ) { container = document.createElement("div"); container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; - // Check box-sizing and margin behavior + // Check box-sizing and margin behavior. body.appendChild( container ).appendChild( div ); div.innerHTML = ""; div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; - support.boxSizing = div.offsetWidth === 4; + // Workaround failing boxSizing test due to offsetWidth returning wrong value + // with some non-1 values of body zoom, ticket #13543 + jQuery.swap( body, body.style.zoom != null ? { zoom: 1 } : {}, function() { + support.boxSizing = div.offsetWidth === 4; + }); support.doesNotIncludeMarginInBodyOffset = body.offsetTop !== 1; // Use window.getComputedStyle because jsdom on node.js will break without it. |