Commit a52391aa authored by Mike Sherov's avatar Mike Sherov Committed by Dave Methvin

Fix #7986. $.support.boxModel shan't be fooled by page-level CSS.

parent 1c35f381
...@@ -163,7 +163,7 @@ jQuery.extend({ ...@@ -163,7 +163,7 @@ jQuery.extend({
} }
}); });
// DEPRECATED, Use jQuery.css() instead // DEPRECATED in 1.3, Use jQuery.css() instead
jQuery.curCSS = jQuery.css; jQuery.curCSS = jQuery.css;
if ( document.defaultView && document.defaultView.getComputedStyle ) { if ( document.defaultView && document.defaultView.getComputedStyle ) {
......
...@@ -34,7 +34,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { ...@@ -34,7 +34,7 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
doc = elem.document; doc = elem.document;
docElemProp = doc.documentElement[ clientProp ]; docElemProp = doc.documentElement[ clientProp ];
return doc.compatMode === "CSS1Compat" && docElemProp || return jQuery.support.boxModel && docElemProp ||
doc.body && doc.body[ clientProp ] || docElemProp; doc.body && doc.body[ clientProp ] || docElemProp;
} }
......
...@@ -676,7 +676,7 @@ function defaultDisplay( nodeName ) { ...@@ -676,7 +676,7 @@ function defaultDisplay( nodeName ) {
// document to it; WebKit & Firefox won't allow reusing the iframe document. // document to it; WebKit & Firefox won't allow reusing the iframe document.
if ( !iframeDoc || !iframe.createElement ) { if ( !iframeDoc || !iframe.createElement ) {
iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document; iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" ); iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
iframeDoc.close(); iframeDoc.close();
} }
......
...@@ -94,6 +94,9 @@ jQuery.support = (function() { ...@@ -94,6 +94,9 @@ jQuery.support = (function() {
pixelMargin: true pixelMargin: true
}; };
//jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
jQuery.boxModel = support.boxModel = document.compatMode === "CSS1Compat";
// Make sure checked status is properly cloned // Make sure checked status is properly cloned
input.checked = true; input.checked = true;
support.noCloneChecked = input.cloneNode( true ).checked; support.noCloneChecked = input.cloneNode( true ).checked;
...@@ -172,7 +175,8 @@ jQuery.support = (function() { ...@@ -172,7 +175,8 @@ jQuery.support = (function() {
// Run tests that need a body at doc ready // Run tests that need a body at doc ready
jQuery(function() { jQuery(function() {
var container, outer, inner, table, td, offsetSupport, var container, outer, inner, table, td, offsetSupport,
marginDiv, conMarginTop, ptlm, vb, style, html, marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
paddingMarginBorderVisibility, paddingMarginBorder,
body = document.getElementsByTagName("body")[0]; body = document.getElementsByTagName("body")[0];
if ( !body ) { if ( !body ) {
...@@ -181,15 +185,16 @@ jQuery.support = (function() { ...@@ -181,15 +185,16 @@ jQuery.support = (function() {
} }
conMarginTop = 1; conMarginTop = 1;
ptlm = "position:absolute;top:0;left:0;width:1px;height:1px;margin:0;"; paddingMarginBorder = "padding:0;margin:0;border:";
vb = "visibility:hidden;border:0;"; positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
style = "style='" + ptlm + "border:5px solid #000;padding:0;'"; paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
html = "<div " + style + "><div></div></div>" + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
"<table " + style + " cellpadding='0' cellspacing='0'>" + html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
"<table " + style + "' cellpadding='0' cellspacing='0'>" +
"<tr><td></td></tr></table>"; "<tr><td></td></tr></table>";
container = document.createElement("div"); container = document.createElement("div");
container.style.cssText = vb + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
body.insertBefore( container, body.firstChild ); body.insertBefore( container, body.firstChild );
// Construct the test element // Construct the test element
...@@ -203,8 +208,7 @@ jQuery.support = (function() { ...@@ -203,8 +208,7 @@ jQuery.support = (function() {
// display:none (it is still safe to use offsets if a parent element is // display:none (it is still safe to use offsets if a parent element is
// hidden; don safety goggles and see bug #4512 for more information). // hidden; don safety goggles and see bug #4512 for more information).
// (only IE 8 fails this test) // (only IE 8 fails this test)
div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>"; div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
tds = div.getElementsByTagName( "td" ); tds = div.getElementsByTagName( "td" );
isSupported = ( tds[ 0 ].offsetHeight === 0 ); isSupported = ( tds[ 0 ].offsetHeight === 0 );
...@@ -241,18 +245,23 @@ jQuery.support = (function() { ...@@ -241,18 +245,23 @@ jQuery.support = (function() {
// elements when setting their display to 'inline' and giving // elements when setting their display to 'inline' and giving
// them layout // them layout
// (IE < 8 does this) // (IE < 8 does this)
div.innerHTML = "";
div.style.width = div.style.padding = "1px";
div.style.border = 0;
div.style.overflow = "hidden";
div.style.display = "inline"; div.style.display = "inline";
div.style.zoom = 1; div.style.zoom = 1;
support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 ); support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
// Check if elements with layout shrink-wrap their children // Check if elements with layout shrink-wrap their children
// (IE 6 does this) // (IE 6 does this)
div.style.display = ""; div.style.display = "block";
div.innerHTML = "<div style='width:4px;'></div>"; div.style.overflow = "visible";
support.shrinkWrapBlocks = ( div.offsetWidth !== 2 ); div.innerHTML = "<div style='width:5px;'></div>";
support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
} }
div.style.cssText = ptlm + vb; div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
div.innerHTML = html; div.innerHTML = html;
outer = div.firstChild; outer = div.firstChild;
......
...@@ -6,6 +6,13 @@ ...@@ -6,6 +6,13 @@
body { body {
background: #000000; background: #000000;
} }
div {
padding: 15px;
border: 1px solid #999;
display: inline;
margin:8px;
}
</style> </style>
</head> </head>
<body> <body>
......
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