From 0be7f4eb4f027dce00f11d7816290022d447d336 Mon Sep 17 00:00:00 2001 From: jeresig Date: Mon, 27 Sep 2010 11:51:01 -0400 Subject: [PATCH] Make sure that opacity is being reset properly on a show animation. Additionally expose jQuery.isNaN from the data module. --- src/core.js | 7 +++++++ src/css.js | 22 +++++++++++++--------- src/data.js | 5 ++--- test/unit/effects.js | 14 +++++--------- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/core.js b/src/core.js index cc921385d..3389e83f7 100644 --- a/src/core.js +++ b/src/core.js @@ -33,6 +33,9 @@ var jQuery = function( selector, context ) { // Check for non-word characters rnonword = /\W/, + // Check for digits + rdigit = /\d/, + // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, @@ -488,6 +491,10 @@ jQuery.extend({ return obj && typeof obj === "object" && "setInterval" in obj; }, + isNaN: function( obj ) { + return obj == null || !rdigit.test( obj ) || isNaN( obj ); + }, + type: function( obj ) { return obj == null ? String( obj ) : diff --git a/src/css.js b/src/css.js index 77949aebc..07ff686d0 100644 --- a/src/css.js +++ b/src/css.js @@ -32,10 +32,15 @@ jQuery.extend({ // behavior of getting and setting a style property cssHooks: { opacity: { - get: function( elem ) { - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity", "opacity" ); - return ret === "" ? "1" : ret; + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity", "opacity" ); + return ret === "" ? "1" : ret; + + } else { + return elem.style.opacity; + } } } }, @@ -176,7 +181,7 @@ if ( !jQuery.support.opacity ) { // IE uses filters for opacity return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ? (parseFloat(RegExp.$1) / 100) + "" : - "1"; + computed ? "1" : ""; }, set: function( elem, value ) { @@ -187,11 +192,10 @@ if ( !jQuery.support.opacity ) { style.zoom = 1; // Set the alpha filter to set the opacity - var opacity = isNaN(value) ? + var opacity = jQuery.isNaN(value) ? "" : - "alpha(opacity=" + value * 100 + ")"; - - var filter = style.filter || elem.currentStyle && elem.currentStyle.filter || ""; + "alpha(opacity=" + value * 100 + ")", + filter = style.filter || ""; style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : diff --git a/src/data.js b/src/data.js index 448e24393..43ab5955c 100644 --- a/src/data.js +++ b/src/data.js @@ -1,8 +1,7 @@ (function( jQuery ) { var windowData = {}, - rbrace = /^(?:\{.*\}|\[.*\])$/, - rdigit = /\d/; + rbrace = /^(?:\{.*\}|\[.*\])$/; jQuery.extend({ cache: {}, @@ -174,7 +173,7 @@ jQuery.fn.extend({ data = data === "true" ? true : data === "false" ? false : data === "null" ? null : - rdigit.test( data ) && !isNaN( data ) ? parseFloat( data ) : + !jQuery.isNaN( data ) ? parseFloat( data ) : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} diff --git a/test/unit/effects.js b/test/unit/effects.js index ed6faa952..b9d5c8841 100644 --- a/test/unit/effects.js +++ b/test/unit/effects.js @@ -389,16 +389,16 @@ jQuery.each( { "CSS Auto": function(elem,prop){ jQuery(elem).addClass("auto" + prop) .text("This is a long string of text."); - return prop == "opacity" ? 1 : ""; + return ""; }, "JS Auto": function(elem,prop){ jQuery(elem).css(prop,"") .text("This is a long string of text."); - return prop == "opacity" ? 1 : ""; + return ""; }, "CSS 100": function(elem,prop){ jQuery(elem).addClass("large" + prop); - return prop == "opacity" ? 1 : ""; + return ""; }, "JS 100": function(elem,prop){ jQuery(elem).css(prop,prop == "opacity" ? 1 : "100px"); @@ -406,7 +406,7 @@ jQuery.each( { }, "CSS 50": function(elem,prop){ jQuery(elem).addClass("med" + prop); - return prop == "opacity" ? 0.5 : ""; + return ""; }, "JS 50": function(elem,prop){ jQuery(elem).css(prop,prop == "opacity" ? 0.50 : "50px"); @@ -414,7 +414,7 @@ jQuery.each( { }, "CSS 0": function(elem,prop){ jQuery(elem).addClass("no" + prop); - return prop == "opacity" ? 0 : ""; + return ""; }, "JS 0": function(elem,prop){ jQuery(elem).css(prop,prop == "opacity" ? 0 : "0px"); @@ -481,10 +481,6 @@ jQuery.each( { var cur_o = jQuery.style(this, "opacity"); - if ( cur_o !== "" ) { - cur_o = jQuery.css(this, "opacity"); - } - if ( t_o == "hide" || t_o == "show" ) equals(cur_o, f_o, "Opacity must be reset to " + f_o + ": " + cur_o); -- 2.39.5