1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
import { jQuery } from "../core.js";
import { document } from "../var/document.js";
import { documentElement } from "../var/documentElement.js";
import { support } from "../var/support.js";
import { isIE } from "../var/isIE.js";
var reliableTrDimensionsVal, reliableColDimensionsVal,
table = document.createElement( "table" );
// Executing table tests requires only one layout, so they're executed
// at the same time to save the second computation.
function computeTableStyleTests() {
if (
// This is a singleton, we need to execute it only once
!table ||
// Finish early in limited (non-browser) environments
!table.style
) {
return;
}
var trStyle,
col = document.createElement( "col" ),
tr = document.createElement( "tr" ),
td = document.createElement( "td" );
table.style.cssText = "position:absolute;left:-11111px;" +
"border-collapse:separate;border-spacing:0";
tr.style.cssText = "box-sizing:content-box;border:1px solid;height:1px";
td.style.cssText = "height:9px;width:9px;padding:0";
col.span = 2;
documentElement
.appendChild( table )
.appendChild( col )
.parentNode
.appendChild( tr )
.appendChild( td )
.parentNode
.appendChild( td.cloneNode( true ) );
// Don't run until window is visible
if ( table.offsetWidth === 0 ) {
documentElement.removeChild( table );
return;
}
trStyle = window.getComputedStyle( tr );
// Support: Firefox 135+
// Firefox always reports computed width as if `span` was 1.
// Support: Safari 18.3+
// In Safari, computed width for columns is always 0.
// In both these browsers, using `offsetWidth` solves the issue.
// Support: IE 11+
// In IE, `<col>` computed width is `"auto"` unless `width` is set
// explicitly via CSS so measurements there remain incorrect. Because of
// the lack of a proper workaround, we accept this limitation, treating
// IE as passing the test.
reliableColDimensionsVal = isIE || Math.round( parseFloat(
window.getComputedStyle( col ).width )
) === 18;
// Support: IE 10 - 11+
// IE misreports `getComputedStyle` of table rows with width/height
// set in CSS while `offset*` properties report correct values.
// Support: Firefox 70 - 135+
// Only Firefox includes border widths
// in computed dimensions for table rows. (gh-4529)
reliableTrDimensionsVal = Math.round( parseFloat( trStyle.height ) +
parseFloat( trStyle.borderTopWidth ) +
parseFloat( trStyle.borderBottomWidth ) ) === tr.offsetHeight;
documentElement.removeChild( table );
// Nullify the table so it wouldn't be stored in the memory;
// it will also be a sign that checks were already performed.
table = null;
}
jQuery.extend( support, {
reliableTrDimensions: function() {
computeTableStyleTests();
return reliableTrDimensionsVal;
},
reliableColDimensions: function() {
computeTableStyleTests();
return reliableColDimensionsVal;
}
} );
export { support };
|