]> source.dussan.org Git - jquery.git/commitdiff
2.0: Reduce css.js 1091/head
authorDave Methvin <dave.methvin@gmail.com>
Tue, 18 Dec 2012 18:17:40 +0000 (13:17 -0500)
committerDave Methvin <dave.methvin@gmail.com>
Wed, 19 Dec 2012 03:21:32 +0000 (22:21 -0500)
src/css.js

index 210bed2e803e0d54cce514e8699f772ac1276973..237caed4a47ec725d0df3d32034815d3eb272f43 100644 (file)
@@ -1,7 +1,4 @@
-var curCSS, getStyles, iframe,
-       ralpha = /alpha\([^)]*\)/i,
-       ropacity = /opacity\s*=\s*([^)]*)/,
-       rposition = /^(top|right|bottom|left)$/,
+var curCSS, iframe,
        // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
        // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
        rdisplayswap = /^(none|table(?!-c[ea]).+)/,
@@ -50,6 +47,12 @@ function isHidden( elem, el ) {
        return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
 }
 
+// NOTE: we've included the "window" in window.getComputedStyle
+// because jsdom on node.js will break without it.
+function getStyles( elem ) {
+       return window.getComputedStyle( elem, null );
+}
+
 function showHide( elements, show ) {
        var elem,
                values = [],
@@ -294,99 +297,47 @@ jQuery.extend({
        }
 });
 
-// NOTE: we've included the "window" in window.getComputedStyle
-// because jsdom on node.js will break without it.
-if ( window.getComputedStyle ) {
-       getStyles = function( elem ) {
-               return window.getComputedStyle( elem, null );
-       };
-
-       curCSS = function( elem, name, _computed ) {
-               var width, minWidth, maxWidth,
-                       computed = _computed || getStyles( elem ),
-
-                       // getPropertyValue is only needed for .css('filter') in IE9, see #12537
-                       ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
-                       style = elem.style;
-
-               if ( computed ) {
+curCSS = function( elem, name, _computed ) {
+       var width, minWidth, maxWidth,
+               computed = _computed || getStyles( elem ),
 
-                       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;
-                       }
-               }
-
-               return ret;
-       };
-} else if ( document.documentElement.currentStyle ) {
-       getStyles = function( elem ) {
-               return elem.currentStyle;
-       };
+               // Support: IE9
+               // getPropertyValue is only needed for .css('filter') in IE9, see #12537
+               ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
+               style = elem.style;
 
-       curCSS = function( elem, name, _computed ) {
-               var left, rs, rsLeft,
-                       computed = _computed || getStyles( elem ),
-                       ret = computed ? computed[ name ] : undefined,
-                       style = elem.style;
+       if ( computed ) {
 
-               // Avoid setting ret to empty string here
-               // so we don't default to auto
-               if ( ret == null && style && style[ name ] ) {
-                       ret = style[ name ];
+               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, 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 ) ) {
+               // Support: Chrome <17, Safari 5.1
+               // 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
-                       left = style.left;
-                       rs = elem.runtimeStyle;
-                       rsLeft = rs && rs.left;
+                       width = style.width;
+                       minWidth = style.minWidth;
+                       maxWidth = style.maxWidth;
 
                        // 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";
+                       style.minWidth = style.maxWidth = style.width = ret;
+                       ret = computed.width;
 
                        // Revert the changed values
-                       style.left = left;
-                       if ( rsLeft ) {
-                               rs.left = rsLeft;
-                       }
+                       style.width = width;
+                       style.minWidth = minWidth;
+                       style.maxWidth = maxWidth;
                }
+       }
+
+       return ret;
+};
 
-               return ret === "" ? "auto" : ret;
-       };
-}
 
 function setPositiveNumber( elem, value, subtract ) {
        var matches = rnumsplit.exec( value );
@@ -547,50 +498,6 @@ jQuery.each([ "height", "width" ], function( i, name ) {
        };
 });
 
-if ( !jQuery.support.opacity ) {
-       jQuery.cssHooks.opacity = {
-               get: function( elem, computed ) {
-                       // IE uses filters for opacity
-                       return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-                               ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-                               computed ? "1" : "";
-               },
-
-               set: function( elem, value ) {
-                       var style = elem.style,
-                               currentStyle = elem.currentStyle,
-                               opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-                               filter = currentStyle && currentStyle.filter || style.filter || "";
-
-                       // IE has trouble with opacity if it does not have layout
-                       // Force it by setting the zoom level
-                       style.zoom = 1;
-
-                       // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
-                       // if value === "", then remove inline opacity #12685
-                       if ( ( value >= 1 || value === "" ) &&
-                                       jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-                                       style.removeAttribute ) {
-
-                               // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-                               // if "filter:" is present at all, clearType is disabled, we want to avoid this
-                               // style.removeAttribute is IE Only, but so apparently is this code path...
-                               style.removeAttribute( "filter" );
-
-                               // if there is no filter style applied in a css rule or unset inline opacity, we are done
-                               if ( value === "" || currentStyle && !currentStyle.filter ) {
-                                       return;
-                               }
-                       }
-
-                       // otherwise, set new filter values
-                       style.filter = ralpha.test( filter ) ?
-                               filter.replace( ralpha, opacity ) :
-                               filter + " " + opacity;
-               }
-       };
-}
-
 // These hooks cannot be added until DOM ready because the support test
 // for it is not run until after DOM ready
 jQuery(function() {