153 lines
4.7 KiB
JavaScript
153 lines
4.7 KiB
JavaScript
define( [
|
|
"../core",
|
|
"../var/document",
|
|
"../var/documentElement",
|
|
"../var/support"
|
|
], function( jQuery, document, documentElement, support ) {
|
|
|
|
"use strict";
|
|
|
|
( function() {
|
|
|
|
// Executing both pixelPosition & boxSizingReliable tests require only one layout
|
|
// so they're executed at the same time to save the second computation.
|
|
function computeStyleTests() {
|
|
|
|
// This is a singleton, we need to execute it only once
|
|
if ( !div ) {
|
|
return;
|
|
}
|
|
|
|
container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
|
|
"margin-top:1px;padding:0;border:0";
|
|
div.style.cssText =
|
|
"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
|
|
"margin:auto;border:1px;padding:1px;" +
|
|
"width:60%;top:1%";
|
|
documentElement.appendChild( container ).appendChild( div );
|
|
|
|
var divStyle = window.getComputedStyle( div );
|
|
pixelPositionVal = divStyle.top !== "1%";
|
|
|
|
// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
|
|
reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
|
|
|
|
// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
|
|
// Some styles come back with percentage values, even though they shouldn't
|
|
div.style.right = "60%";
|
|
pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
|
|
|
|
// Support: IE 9 - 11 only
|
|
// Detect misreporting of content dimensions for box-sizing:border-box elements
|
|
boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
|
|
|
|
// Support: IE 9 only
|
|
// Detect overflow:scroll screwiness (gh-3699)
|
|
// Support: Chrome <=64
|
|
// Don't get tricked when zoom affects offsetWidth (gh-4029)
|
|
div.style.position = "absolute";
|
|
scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;
|
|
|
|
documentElement.removeChild( container );
|
|
|
|
// Nullify the div so it wouldn't be stored in the memory and
|
|
// it will also be a sign that checks already performed
|
|
div = null;
|
|
}
|
|
|
|
function roundPixelMeasures( measure ) {
|
|
return Math.round( parseFloat( measure ) );
|
|
}
|
|
|
|
var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
|
|
reliableTrDimensionsVal, reliableMarginLeftVal,
|
|
container = document.createElement( "div" ),
|
|
div = document.createElement( "div" );
|
|
|
|
// Finish early in limited (non-browser) environments
|
|
if ( !div.style ) {
|
|
return;
|
|
}
|
|
|
|
// Support: IE <=9 - 11 only
|
|
// Style of cloned element affects source element cloned (trac-8908)
|
|
div.style.backgroundClip = "content-box";
|
|
div.cloneNode( true ).style.backgroundClip = "";
|
|
support.clearCloneStyle = div.style.backgroundClip === "content-box";
|
|
|
|
jQuery.extend( support, {
|
|
boxSizingReliable: function() {
|
|
computeStyleTests();
|
|
return boxSizingReliableVal;
|
|
},
|
|
pixelBoxStyles: function() {
|
|
computeStyleTests();
|
|
return pixelBoxStylesVal;
|
|
},
|
|
pixelPosition: function() {
|
|
computeStyleTests();
|
|
return pixelPositionVal;
|
|
},
|
|
reliableMarginLeft: function() {
|
|
computeStyleTests();
|
|
return reliableMarginLeftVal;
|
|
},
|
|
scrollboxSize: function() {
|
|
computeStyleTests();
|
|
return scrollboxSizeVal;
|
|
},
|
|
|
|
// Support: IE 9 - 11+, Edge 15 - 18+
|
|
// IE/Edge misreport `getComputedStyle` of table rows with width/height
|
|
// set in CSS while `offset*` properties report correct values.
|
|
// Behavior in IE 9 is more subtle than in newer versions & it passes
|
|
// some versions of this test; make sure not to make it pass there!
|
|
//
|
|
// Support: Firefox 70+
|
|
// Only Firefox includes border widths
|
|
// in computed dimensions. (gh-4529)
|
|
reliableTrDimensions: function() {
|
|
var table, tr, trChild, trStyle;
|
|
if ( reliableTrDimensionsVal == null ) {
|
|
table = document.createElement( "table" );
|
|
tr = document.createElement( "tr" );
|
|
trChild = document.createElement( "div" );
|
|
|
|
table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
|
|
tr.style.cssText = "border:1px solid";
|
|
|
|
// Support: Chrome 86+
|
|
// Height set through cssText does not get applied.
|
|
// Computed height then comes back as 0.
|
|
tr.style.height = "1px";
|
|
trChild.style.height = "9px";
|
|
|
|
// Support: Android 8 Chrome 86+
|
|
// In our bodyBackground.html iframe,
|
|
// display for all div elements is set to "inline",
|
|
// which causes a problem only in Android 8 Chrome 86.
|
|
// Ensuring the div is display: block
|
|
// gets around this issue.
|
|
trChild.style.display = "block";
|
|
|
|
documentElement
|
|
.appendChild( table )
|
|
.appendChild( tr )
|
|
.appendChild( trChild );
|
|
|
|
trStyle = window.getComputedStyle( tr );
|
|
reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +
|
|
parseInt( trStyle.borderTopWidth, 10 ) +
|
|
parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;
|
|
|
|
documentElement.removeChild( table );
|
|
}
|
|
return reliableTrDimensionsVal;
|
|
}
|
|
} );
|
|
} )();
|
|
|
|
return support;
|
|
|
|
} );
|