Copybara bot | be50d49 | 2023-11-30 00:16:42 +0100 | [diff] [blame] | 1 | define( [ |
| 2 | "../core", |
| 3 | "../var/document", |
| 4 | "../var/documentElement", |
| 5 | "../var/support" |
| 6 | ], function( jQuery, document, documentElement, support ) { |
| 7 | |
| 8 | "use strict"; |
| 9 | |
| 10 | ( function() { |
| 11 | |
| 12 | // Executing both pixelPosition & boxSizingReliable tests require only one layout |
| 13 | // so they're executed at the same time to save the second computation. |
| 14 | function computeStyleTests() { |
| 15 | |
| 16 | // This is a singleton, we need to execute it only once |
| 17 | if ( !div ) { |
| 18 | return; |
| 19 | } |
| 20 | |
| 21 | container.style.cssText = "position:absolute;left:-11111px;width:60px;" + |
| 22 | "margin-top:1px;padding:0;border:0"; |
| 23 | div.style.cssText = |
| 24 | "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + |
| 25 | "margin:auto;border:1px;padding:1px;" + |
| 26 | "width:60%;top:1%"; |
| 27 | documentElement.appendChild( container ).appendChild( div ); |
| 28 | |
| 29 | var divStyle = window.getComputedStyle( div ); |
| 30 | pixelPositionVal = divStyle.top !== "1%"; |
| 31 | |
| 32 | // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 |
| 33 | reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; |
| 34 | |
| 35 | // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 |
| 36 | // Some styles come back with percentage values, even though they shouldn't |
| 37 | div.style.right = "60%"; |
| 38 | pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; |
| 39 | |
| 40 | // Support: IE 9 - 11 only |
| 41 | // Detect misreporting of content dimensions for box-sizing:border-box elements |
| 42 | boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; |
| 43 | |
| 44 | // Support: IE 9 only |
| 45 | // Detect overflow:scroll screwiness (gh-3699) |
| 46 | // Support: Chrome <=64 |
| 47 | // Don't get tricked when zoom affects offsetWidth (gh-4029) |
| 48 | div.style.position = "absolute"; |
| 49 | scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; |
| 50 | |
| 51 | documentElement.removeChild( container ); |
| 52 | |
| 53 | // Nullify the div so it wouldn't be stored in the memory and |
| 54 | // it will also be a sign that checks already performed |
| 55 | div = null; |
| 56 | } |
| 57 | |
| 58 | function roundPixelMeasures( measure ) { |
| 59 | return Math.round( parseFloat( measure ) ); |
| 60 | } |
| 61 | |
| 62 | var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, |
Renovate bot | f591dcf | 2023-12-30 14:13:54 +0000 | [diff] [blame] | 63 | reliableTrDimensionsVal, reliableMarginLeftVal, |
Copybara bot | be50d49 | 2023-11-30 00:16:42 +0100 | [diff] [blame] | 64 | container = document.createElement( "div" ), |
| 65 | div = document.createElement( "div" ); |
| 66 | |
| 67 | // Finish early in limited (non-browser) environments |
| 68 | if ( !div.style ) { |
| 69 | return; |
| 70 | } |
| 71 | |
| 72 | // Support: IE <=9 - 11 only |
| 73 | // Style of cloned element affects source element cloned (#8908) |
| 74 | div.style.backgroundClip = "content-box"; |
| 75 | div.cloneNode( true ).style.backgroundClip = ""; |
| 76 | support.clearCloneStyle = div.style.backgroundClip === "content-box"; |
| 77 | |
| 78 | jQuery.extend( support, { |
| 79 | boxSizingReliable: function() { |
| 80 | computeStyleTests(); |
| 81 | return boxSizingReliableVal; |
| 82 | }, |
| 83 | pixelBoxStyles: function() { |
| 84 | computeStyleTests(); |
| 85 | return pixelBoxStylesVal; |
| 86 | }, |
| 87 | pixelPosition: function() { |
| 88 | computeStyleTests(); |
| 89 | return pixelPositionVal; |
| 90 | }, |
| 91 | reliableMarginLeft: function() { |
| 92 | computeStyleTests(); |
| 93 | return reliableMarginLeftVal; |
| 94 | }, |
| 95 | scrollboxSize: function() { |
| 96 | computeStyleTests(); |
| 97 | return scrollboxSizeVal; |
Renovate bot | f591dcf | 2023-12-30 14:13:54 +0000 | [diff] [blame] | 98 | }, |
| 99 | |
| 100 | // Support: IE 9 - 11+, Edge 15 - 18+ |
| 101 | // IE/Edge misreport `getComputedStyle` of table rows with width/height |
| 102 | // set in CSS while `offset*` properties report correct values. |
| 103 | // Behavior in IE 9 is more subtle than in newer versions & it passes |
| 104 | // some versions of this test; make sure not to make it pass there! |
| 105 | reliableTrDimensions: function() { |
| 106 | var table, tr, trChild, trStyle; |
| 107 | if ( reliableTrDimensionsVal == null ) { |
| 108 | table = document.createElement( "table" ); |
| 109 | tr = document.createElement( "tr" ); |
| 110 | trChild = document.createElement( "div" ); |
| 111 | |
| 112 | table.style.cssText = "position:absolute;left:-11111px"; |
| 113 | tr.style.height = "1px"; |
| 114 | trChild.style.height = "9px"; |
| 115 | |
| 116 | documentElement |
| 117 | .appendChild( table ) |
| 118 | .appendChild( tr ) |
| 119 | .appendChild( trChild ); |
| 120 | |
| 121 | trStyle = window.getComputedStyle( tr ); |
| 122 | reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; |
| 123 | |
| 124 | documentElement.removeChild( table ); |
| 125 | } |
| 126 | return reliableTrDimensionsVal; |
Copybara bot | be50d49 | 2023-11-30 00:16:42 +0100 | [diff] [blame] | 127 | } |
| 128 | } ); |
| 129 | } )(); |
| 130 | |
| 131 | return support; |
| 132 | |
| 133 | } ); |