101 lines
3.2 KiB
JavaScript
101 lines
3.2 KiB
JavaScript
define( [
|
|
"../core",
|
|
"../core/isAttached",
|
|
"./var/rboxStyle",
|
|
"./var/rnumnonpx",
|
|
"./var/getStyles",
|
|
"./var/rcustomProp",
|
|
"../var/rtrimCSS",
|
|
"./support"
|
|
], function( jQuery, isAttached, rboxStyle, rnumnonpx, getStyles,
|
|
rcustomProp, rtrimCSS, support ) {
|
|
|
|
"use strict";
|
|
|
|
function curCSS( elem, name, computed ) {
|
|
var width, minWidth, maxWidth, ret,
|
|
isCustomProp = rcustomProp.test( name ),
|
|
|
|
// Support: Firefox 51+
|
|
// Retrieving style before computed somehow
|
|
// fixes an issue with getting wrong values
|
|
// on detached elements
|
|
style = elem.style;
|
|
|
|
computed = computed || getStyles( elem );
|
|
|
|
// getPropertyValue is needed for:
|
|
// .css('filter') (IE 9 only, trac-12537)
|
|
// .css('--customProperty) (gh-3144)
|
|
if ( computed ) {
|
|
|
|
// Support: IE <=9 - 11+
|
|
// IE only supports `"float"` in `getPropertyValue`; in computed styles
|
|
// it's only available as `"cssFloat"`. We no longer modify properties
|
|
// sent to `.css()` apart from camelCasing, so we need to check both.
|
|
// Normally, this would create difference in behavior: if
|
|
// `getPropertyValue` returns an empty string, the value returned
|
|
// by `.css()` would be `undefined`. This is usually the case for
|
|
// disconnected elements. However, in IE even disconnected elements
|
|
// with no styles return `"none"` for `getPropertyValue( "float" )`
|
|
ret = computed.getPropertyValue( name ) || computed[ name ];
|
|
|
|
if ( isCustomProp && ret ) {
|
|
|
|
// Support: Firefox 105+, Chrome <=105+
|
|
// Spec requires trimming whitespace for custom properties (gh-4926).
|
|
// Firefox only trims leading whitespace. Chrome just collapses
|
|
// both leading & trailing whitespace to a single space.
|
|
//
|
|
// Fall back to `undefined` if empty string returned.
|
|
// This collapses a missing definition with property defined
|
|
// and set to an empty string but there's no standard API
|
|
// allowing us to differentiate them without a performance penalty
|
|
// and returning `undefined` aligns with older jQuery.
|
|
//
|
|
// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED
|
|
// as whitespace while CSS does not, but this is not a problem
|
|
// because CSS preprocessing replaces them with U+000A LINE FEED
|
|
// (which *is* CSS whitespace)
|
|
// https://www.w3.org/TR/css-syntax-3/#input-preprocessing
|
|
ret = ret.replace( rtrimCSS, "$1" ) || undefined;
|
|
}
|
|
|
|
if ( ret === "" && !isAttached( elem ) ) {
|
|
ret = jQuery.style( elem, name );
|
|
}
|
|
|
|
// A tribute to the "awesome hack by Dean Edwards"
|
|
// Android Browser returns percentage for some values,
|
|
// but width seems to be reliably pixels.
|
|
// This is against the CSSOM draft spec:
|
|
// https://drafts.csswg.org/cssom/#resolved-values
|
|
if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
|
|
|
|
// Remember the original values
|
|
width = style.width;
|
|
minWidth = style.minWidth;
|
|
maxWidth = style.maxWidth;
|
|
|
|
// Put in the new values to get a computed value out
|
|
style.minWidth = style.maxWidth = style.width = ret;
|
|
ret = computed.width;
|
|
|
|
// Revert the changed values
|
|
style.width = width;
|
|
style.minWidth = minWidth;
|
|
style.maxWidth = maxWidth;
|
|
}
|
|
}
|
|
|
|
return ret !== undefined ?
|
|
|
|
// Support: IE <=9 - 11 only
|
|
// IE returns zIndex value as an integer.
|
|
ret + "" :
|
|
ret;
|
|
}
|
|
|
|
return curCSS;
|
|
} );
|