Added test for css(String, Function) and css(Object) where values are Functions;...
authorYehuda Katz <wycats@gmail.com>
Sun, 12 Jul 2009 18:31:26 +0000 (18:31 +0000)
committerYehuda Katz <wycats@gmail.com>
Sun, 12 Jul 2009 18:31:26 +0000 (18:31 +0000)
src/css.js
test/unit/css.js

index 973462b..94a021b 100644 (file)
@@ -21,6 +21,13 @@ jQuery.fn.css = function( name, value ) {
                        options[ name ] = value;
                }
        }
+       
+       var isFunction = {};
+       
+       // For each value, determine whether it's a Function so we don't
+       // need to determine it again for each element
+       for ( var prop in options )
+               isFunction[prop] = jQuery.isFunction( options[prop] );
 
        // For each element...
        for ( var i = 0, l = this.length; i < l; i++ ) {
@@ -30,9 +37,7 @@ jQuery.fn.css = function( name, value ) {
                for ( var prop in options ) {
                        value = options[prop];
 
-                       if ( isFunction ) {
-                               value = value.call( elem, i );
-                       }
+                       if ( isFunction[prop] ) value = value.call( elem, i );
 
                        if ( typeof value === "number" && !exclude.test(prop) ) {
                                value = value + "px";
index a917173..9f84d86 100644 (file)
@@ -81,6 +81,68 @@ test("css(String, Object)", function() {
        equals( jQuery("#t2037 .hidden").css("display"), "none", "Make sure browser thinks it is hidden" );
 });
 
+test("css(String, Function)", function() {
+       try { 
+               expect(3);
+               
+               var colors = ["red", "green", "blue"];
+       
+               jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" + 
+                                        "<div class='cssFunction'></div>" + 
+                                        "<div class='cssFunction'></div></div>")
+                       .appendTo("body");
+       
+               var index = 0;
+       
+               jQuery("#cssFunctionTest div").css("color", function() {
+                       var color = colors[index];
+                       index++;
+                       return color;
+               });
+               
+               index = 0;
+               
+               jQuery("#cssFunctionTest div").each(function() {
+                       equals( jQuery(this).css("color"), colors[index], "Div #" + index + " should be " + colors[index] );
+                       index++;
+               });
+               
+       } finally {
+               jQuery("#cssFunctionTest").remove();
+       }
+});
+
+test("css(Object) where values are Functions", function() {
+       try { 
+               expect(3);
+               
+               var colors = ["red", "green", "blue"];
+       
+               jQuery("<div id='cssFunctionTest'><div class='cssFunction'></div>" + 
+                                        "<div class='cssFunction'></div>" + 
+                                        "<div class='cssFunction'></div></div>")
+                       .appendTo("body");
+       
+               var index = 0;
+       
+               jQuery("#cssFunctionTest div").css({color: function() {
+                       var color = colors[index];
+                       index++;
+                       return color;
+               }});
+               
+               index = 0;
+               
+               jQuery("#cssFunctionTest div").each(function() {
+                       equals( jQuery(this).css("color"), colors[index], "Div #" + index + " should be " + colors[index] );
+                       index++;
+               });
+               
+       } finally {
+               jQuery("#cssFunctionTest").remove();
+       }
+});
+
 test("jQuery.css(elem, 'height') doesn't clear radio buttons (bug #1095)", function () {
        expect(4);