]> source.dussan.org Git - jquery.git/commitdiff
Less letterSpacing .animate() fail in IE. Fixes #8627
authorMike Sherov <mike.sherov@gmail.com>
Wed, 6 Jun 2012 23:03:10 +0000 (19:03 -0400)
committerRick Waldron <waldron.rick@gmail.com>
Wed, 6 Jun 2012 23:03:10 +0000 (19:03 -0400)
src/css.js
src/effects.js
test/unit/css.js

index 4497878e480ad1179a3c40661826f750fc8676d7..4496594dcf6ce02322761b7e9361fd3411c661cd 100644 (file)
@@ -15,7 +15,13 @@ var curCSS, iframe, iframeDoc,
        cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
        rposition = /^(top|right|bottom|left)$/,
 
-       eventsToggle = jQuery.fn.toggle;
+       eventsToggle = jQuery.fn.toggle,
+
+       cssNormalTransform = {
+               letterSpacing: 0,
+               fontWeight: 400,
+               lineHeight: 1
+       };
 
 // return a css property mapped to a potentially vendor prefixed property
 function vendorPropName( style, name ) {
@@ -235,8 +241,13 @@ jQuery.extend({
                        val = curCSS( elem, name );
                }
 
+               //convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
                // Return, converting to number if forced or a qualifier was provided and val looks numeric
-               if ( numeric || extra ) {
+               if ( numeric || extra !== undefined ) {
                        num = parseFloat( val );
                        return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
                }
index bd2ac816d69e887f1ec3cc39acace700665d3cf9..9a3e64d41a414b1a7b459a39e41d98e60ab7dab5 100644 (file)
@@ -365,19 +365,20 @@ Tween.prototype.init.prototype = Tween.prototype;
 Tween.propHooks = {
        _default: {
                get: function( tween ) {
-                       var parsed, result;
+                       var result;
 
                        if ( tween.elem[ tween.prop ] != null &&
                                (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
                                return tween.elem[ tween.prop ];
                        }
 
-                       result = jQuery.css( tween.elem, tween.prop );
-                       // Empty strings, null, undefined and "auto" are converted to 0,
-                       // complex values such as "rotate(1rad)" are returned as is,
-                       // simple values such as "10px" are parsed to Float.
-                       return isNaN( parsed = parseFloat( result ) ) ?
-                               !result || result === "auto" ? 0 : result : parsed;
+                       // passing any value as a 4th paramter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails
+                       // so, simple values such as "10px" are parsed to Float.
+                       // complex values such as "rotate(1rad)" are returned as is.
+                       result = jQuery.css( tween.elem, tween.prop, false, "" );
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
                },
                set: function( tween ) {
                        // use step hook for back compat - use cssHook if its there - use .style if its
index 8f17ce74af82c1a8b29a3fe8d23daec98f3271bc..b030569fb94253b4aaa4f645730f342cf1095cdf 100644 (file)
@@ -732,6 +732,14 @@ test("css('width') and css('height') should respect box-sizing, see #11004", fun
        equal( el_dis.css("height"), el_dis.css("height", el_dis.css("height")).css("height"), "css('height') is not respecting box-sizing for disconnected element, see #11004");
 });
 
+test("certain css values of 'normal' should be convertable to a number, see #8627", function() {
+       var el = jQuery("<div style='letter-spacing:normal;font-weight:normal;line-height:normal;'>test</div>").appendTo("#qunit-fixture");
+
+       ok( jQuery.isNumeric( parseFloat( el.css("letterSpacing") ) ), "css('letterSpacing') not convertable to number, see #8627" );
+       ok( jQuery.isNumeric( parseFloat( el.css("fontWeight") ) ), "css('fontWeight') not convertable to number, see #8627" );
+       ok( jQuery.isNumeric( parseFloat( el.css("lineHeight") ) ), "css('lineHeight') not convertable to number, see #8627" );
+});
+
 test( "cssHooks - expand", function() {
        expect( 15 );
        var result,