Commit df7847bc authored by Michał Gołębiowski's avatar Michał Gołębiowski Committed by Dave Methvin

Fix #13543. offsetWidth is wrong on non-1 zoom. Close gh-1218.

parent 01fcdba2
...@@ -865,6 +865,29 @@ jQuery.extend({ ...@@ -865,6 +865,29 @@ jQuery.extend({
now: function() { now: function() {
return ( new Date() ).getTime(); return ( new Date() ).getTime();
},
// 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;
} }
}); });
......
...@@ -279,27 +279,6 @@ jQuery.extend({ ...@@ -279,27 +279,6 @@ jQuery.extend({
return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
} }
return 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;
} }
}); });
......
...@@ -176,10 +176,15 @@ jQuery.support = (function( support ) { ...@@ -176,10 +176,15 @@ jQuery.support = (function( support ) {
// Check if empty table cells still have offsetWidth/Height // Check if empty table cells still have offsetWidth/Height
support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
// Check box-sizing and margin behavior // Check box-sizing and margin behavior.
div.innerHTML = ""; 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%;"; 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;
});
// Use window.getComputedStyle because jsdom on node.js will break without it. // Use window.getComputedStyle because jsdom on node.js will break without it.
if ( window.getComputedStyle ) { if ( window.getComputedStyle ) {
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style>
body {
zoom: 0.87;
}
</style>
</head>
<body>
<script src="../../jquery.js"></script>
<script>
jQuery(function() {
window.parent.iframeCallback( jQuery.support.boxSizing );
});
</script>
</body>
</html>
...@@ -28,6 +28,11 @@ if ( jQuery.css ) { ...@@ -28,6 +28,11 @@ if ( jQuery.css ) {
}); });
} }
testIframeWithCallback( "A non-1 zoom on body doesn't cause WebKit to fail box-sizing test", "support/boxSizing.html", function( boxSizing ) {
expect( 1 );
equal( boxSizing, jQuery.support.boxSizing, "box-sizing properly detected on page with non-1 body zoom" );
});
testIframeWithCallback( "A background on the testElement does not cause IE8 to crash (#9823)", "support/testElementCrash.html", function() { testIframeWithCallback( "A background on the testElement does not cause IE8 to crash (#9823)", "support/testElementCrash.html", function() {
expect( 1 ); expect( 1 );
ok( true, "IE8 does not crash" ); ok( true, "IE8 does not crash" );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment