diff options
Diffstat (limited to 'libs/bower_components/jquery/src/css/support.js')
-rw-r--r-- | libs/bower_components/jquery/src/css/support.js | 151 |
1 files changed, 93 insertions, 58 deletions
diff --git a/libs/bower_components/jquery/src/css/support.js b/libs/bower_components/jquery/src/css/support.js index 4a8fc87ac1..6509df2b06 100644 --- a/libs/bower_components/jquery/src/css/support.js +++ b/libs/bower_components/jquery/src/css/support.js @@ -1,58 +1,73 @@ -define([ +define( [ "../core", + "../var/document", + "../var/documentElement", "../var/support" -], function( jQuery, support ) { +], function( jQuery, document, documentElement, support ) { -(function() { - // Minified: var b,c,d,e,f,g, h,i - var div, style, a, pixelPositionVal, boxSizingReliableVal, - reliableHiddenOffsetsVal, reliableMarginRightVal; - - // Setup - div = document.createElement( "div" ); - div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>"; - a = div.getElementsByTagName( "a" )[ 0 ]; - style = a && a.style; +( function() { + var pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal, + reliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); // Finish early in limited (non-browser) environments - if ( !style ) { + if ( !div.style ) { return; } - style.cssText = "float:left;opacity:.5"; + div.style.cssText = "float:left;opacity:.5"; // Support: IE<9 // Make sure that element opacity exists (as opposed to filter) - support.opacity = style.opacity === "0.5"; + support.opacity = div.style.opacity === "0.5"; // Verify style float existence // (IE uses styleFloat instead of cssFloat) - support.cssFloat = !!style.cssFloat; + support.cssFloat = !!div.style.cssFloat; div.style.backgroundClip = "content-box"; div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; + container = document.createElement( "div" ); + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + div.innerHTML = ""; + container.appendChild( div ); + // Support: Firefox<29, Android 2.3 // Vendor-prefix box-sizing - support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" || - style.WebkitBoxSizing === ""; + support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" || + div.style.WebkitBoxSizing === ""; - jQuery.extend(support, { + jQuery.extend( support, { reliableHiddenOffsets: function() { - if ( reliableHiddenOffsetsVal == null ) { + if ( pixelPositionVal == null ) { computeStyleTests(); } return reliableHiddenOffsetsVal; }, boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { + + // We're checking for pixelPositionVal here instead of boxSizingReliableVal + // since that compresses better and they're computed together anyway. + if ( pixelPositionVal == null ) { computeStyleTests(); } return boxSizingReliableVal; }, + pixelMarginRight: function() { + + // Support: Android 4.0-4.3 + if ( pixelPositionVal == null ) { + computeStyleTests(); + } + return pixelMarginRightVal; + }, + pixelPosition: function() { if ( pixelPositionVal == null ) { computeStyleTests(); @@ -60,50 +75,59 @@ define([ return pixelPositionVal; }, - // Support: Android 2.3 reliableMarginRight: function() { - if ( reliableMarginRightVal == null ) { + + // Support: Android 2.3 + if ( pixelPositionVal == null ) { computeStyleTests(); } return reliableMarginRightVal; - } - }); + }, - function computeStyleTests() { - // Minified: var b,c,d,j - var div, body, container, contents; + reliableMarginLeft: function() { - body = document.getElementsByTagName( "body" )[ 0 ]; - if ( !body || !body.style ) { - // Test fired too early or in an unsupported environment, exit. - return; + // Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 + if ( pixelPositionVal == null ) { + computeStyleTests(); + } + return reliableMarginLeftVal; } + } ); + + function computeStyleTests() { + var contents, divStyle, + documentElement = document.documentElement; // Setup - div = document.createElement( "div" ); - container = document.createElement( "div" ); - container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; - body.appendChild( container ).appendChild( div ); + documentElement.appendChild( container ); div.style.cssText = - // Support: Firefox<29, Android 2.3 + + // Support: Android 2.3 // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; + "-webkit-box-sizing:border-box;box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; // Support: IE<9 // Assume reasonable values in the absence of getComputedStyle - pixelPositionVal = boxSizingReliableVal = false; - reliableMarginRightVal = true; + pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false; + pixelMarginRightVal = reliableMarginRightVal = true; // Check for getComputedStyle so that this code is not run in IE<9. if ( window.getComputedStyle ) { - pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; - boxSizingReliableVal = - ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + divStyle = window.getComputedStyle( div ); + pixelPositionVal = ( divStyle || {} ).top !== "1%"; + reliableMarginLeftVal = ( divStyle || {} ).marginLeft === "2px"; + boxSizingReliableVal = ( divStyle || { width: "4px" } ).width === "4px"; - // Support: Android 2.3 + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = ( divStyle || { marginRight: "4px" } ).marginRight === "4px"; + + // Support: Android 2.3 only // Div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container (#3333) // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right @@ -111,7 +135,8 @@ define([ // Reset CSS: box-sizing; display; margin; border; padding contents.style.cssText = div.style.cssText = - // Support: Firefox<29, Android 2.3 + + // Support: Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; @@ -119,31 +144,41 @@ define([ div.style.width = "1px"; reliableMarginRightVal = - !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight ); + !parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight ); + + div.removeChild( contents ); } - // Support: IE8 + // Support: IE6-8 + // First check that getClientRects works as expected // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // 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). - div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; - contents = div.getElementsByTagName( "td" ); - contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none"; - reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0; + div.style.display = "none"; + reliableHiddenOffsetsVal = div.getClientRects().length === 0; if ( reliableHiddenOffsetsVal ) { - contents[ 0 ].style.display = ""; - contents[ 1 ].style.display = "none"; + div.style.display = ""; + div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>"; + div.childNodes[ 0 ].style.borderCollapse = "separate"; + contents = div.getElementsByTagName( "td" ); + contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none"; reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0; + if ( reliableHiddenOffsetsVal ) { + contents[ 0 ].style.display = ""; + contents[ 1 ].style.display = "none"; + reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0; + } } - body.removeChild( container ); + // Teardown + documentElement.removeChild( container ); } -})(); +} )(); return support; -}); +} ); |