define([
|
"exports",
|
"../core",
|
"./var/rnumnonpx",
|
"./var/rmargin",
|
"../selector" // contains
|
], function( exports, jQuery, rnumnonpx, rmargin ) {
|
|
var getStyles, curCSS,
|
rposition = /^(top|right|bottom|left)$/;
|
|
if ( window.getComputedStyle ) {
|
getStyles = function( elem ) {
|
// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
|
// IE throws on elements created in popups
|
// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
|
if ( elem.ownerDocument.defaultView.opener ) {
|
return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
|
}
|
|
return window.getComputedStyle( elem, null );
|
};
|
|
curCSS = function( elem, name, computed ) {
|
var width, minWidth, maxWidth, ret,
|
style = elem.style;
|
|
computed = computed || getStyles( elem );
|
|
// getPropertyValue is only needed for .css('filter') in IE9, see #12537
|
ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
|
|
if ( computed ) {
|
|
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
|
ret = jQuery.style( elem, name );
|
}
|
|
// A tribute to the "awesome hack by Dean Edwards"
|
// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
|
// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
|
// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
|
if ( rnumnonpx.test( ret ) && rmargin.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;
|
}
|
}
|
|
// Support: IE
|
// IE returns zIndex value as an integer.
|
return ret === undefined ?
|
ret :
|
ret + "";
|
};
|
} else if ( document.documentElement.currentStyle ) {
|
getStyles = function( elem ) {
|
return elem.currentStyle;
|
};
|
|
curCSS = function( elem, name, computed ) {
|
var left, rs, rsLeft, ret,
|
style = elem.style;
|
|
computed = computed || getStyles( elem );
|
ret = computed ? computed[ name ] : undefined;
|
|
// Avoid setting ret to empty string here
|
// so we don't default to auto
|
if ( ret == null && style && style[ name ] ) {
|
ret = style[ name ];
|
}
|
|
// From the awesome hack by Dean Edwards
|
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
|
|
// If we're not dealing with a regular pixel number
|
// but a number that has a weird ending, we need to convert it to pixels
|
// but not position css attributes, as those are proportional to the parent element instead
|
// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
|
if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
|
|
// Remember the original values
|
left = style.left;
|
rs = elem.runtimeStyle;
|
rsLeft = rs && rs.left;
|
|
// Put in the new values to get a computed value out
|
if ( rsLeft ) {
|
rs.left = elem.currentStyle.left;
|
}
|
style.left = name === "fontSize" ? "1em" : ret;
|
ret = style.pixelLeft + "px";
|
|
// Revert the changed values
|
style.left = left;
|
if ( rsLeft ) {
|
rs.left = rsLeft;
|
}
|
}
|
|
// Support: IE
|
// IE returns zIndex value as an integer.
|
return ret === undefined ?
|
ret :
|
ret + "" || "auto";
|
};
|
}
|
|
exports.getStyles = getStyles;
|
exports.curCSS = curCSS;
|
|
});
|