Merge branch 'animate-nonblock' of http://github.com/csnover/jquery into csnover...
authorJohn Resig <jeresig@gmail.com>
Sat, 9 Oct 2010 20:21:02 +0000 (16:21 -0400)
committerJohn Resig <jeresig@gmail.com>
Sat, 9 Oct 2010 20:21:02 +0000 (16:21 -0400)
1  2 
src/css.js
test/unit/css.js

diff --combined src/css.js
@@@ -70,7 -70,7 +70,7 @@@ jQuery.extend(
        style: function( elem, name, value, extra ) {
                // Don't set styles on text and comment nodes
                if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
 -                      return undefined;
 +                      return;
                }
  
                // Make sure that we're working with the right name
  
                // Check if we're setting a value
                if ( value !== undefined ) {
 +                      // Make sure that NaN and null values aren't set. See: #7116
 +                      if ( typeof value === "number" && isNaN( value ) || value == null ) {
 +                              return;
 +                      }
 +
                        // If a number was passed in, add 'px' to the (except for certain CSS properties)
                        if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
                                value += "px";
  
                        // If a hook was provided, use that value, otherwise just set the specified value
                        if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
 -                              style[ name ] = value;
 +                              // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
 +                              // Fixes bug #5509
 +                              try {
 +                                      style[ name ] = value;
 +                              } catch(e) {}
                        }
  
                } else {
@@@ -289,14 -280,9 +289,9 @@@ function getWH( elem, name, extra ) 
  
  if ( jQuery.expr && jQuery.expr.filters ) {
        jQuery.expr.filters.hidden = function( elem ) {
-               var width = elem.offsetWidth, height = elem.offsetHeight,
-                       skip = elem.nodeName.toLowerCase() === "tr";
-               return width === 0 && height === 0 && !skip ?
-                       true :
-                       width > 0 && height > 0 && !skip ?
-                               false :
-                               (elem.style.display || jQuery.css( elem, "display" )) === "none";
+               var width = elem.offsetWidth, height = elem.offsetHeight;
+               return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
        };
  
        jQuery.expr.filters.visible = function( elem ) {
diff --combined test/unit/css.js
@@@ -1,9 -1,9 +1,9 @@@
  module("css");
  
  test("css(String|Hash)", function() {
 -      expect(29);
 +      expect(33);
  
-       equals( jQuery('#main').css("display"), 'none', 'Check for css property "display"');
+       equals( jQuery('#main').css("display"), 'block', 'Check for css property "display"');
  
        ok( jQuery('#nothiddendiv').is(':visible'), 'Modifying CSS display: Assert element is visible');
        jQuery('#nothiddendiv').css({display: 'none'});
        equals( prctval, checkval, "Verify fontSize % set." );
  
        equals( typeof child.css("width"), "string", "Make sure that a string width is returned from css('width')." );
 +
 +      var old = child[0].style.height;
 +
 +      // Test NaN
 +      child.css("height", parseFloat("zoo"));
 +      equals( child[0].style.height, old, "Make sure height isn't changed on NaN." );
 +
 +      // Test null
 +      child.css("height", null);
 +      equals( child[0].style.height, old, "Make sure height isn't changed on null." );
 +
 +      old = child[0].style.fontSize;
 +
 +      // Test NaN
 +      child.css("font-size", parseFloat("zoo"));
 +      equals( child[0].style.fontSize, old, "Make sure font-size isn't changed on NaN." );
 +
 +      // Test null
 +      child.css("font-size", null);
 +      equals( child[0].style.fontSize, old, "Make sure font-size isn't changed on null." );
  });
  
  test("css(String, Object)", function() {
 -      expect(21);
 +      expect(22);
  
        ok( jQuery('#nothiddendiv').is(':visible'), 'Modifying CSS display: Assert element is visible');
        jQuery('#nothiddendiv').css("display", 'none');
  
        equals( ret, div, "Make sure setting undefined returns the original set." );
        equals( div.css("display"), display, "Make sure that the display wasn't changed." );
 +
 +      // Test for Bug #5509
 +      var success = true;
 +      try {
 +              jQuery('#foo').css("backgroundColor", "rgba(0, 0, 0, 0.1)");
 +      }
 +      catch (e) {
 +              success = false;
 +      }
 +      ok( success, "Setting RGBA values does not throw Error" );
  });
  
  if(jQuery.browser.msie) {
@@@ -286,3 -256,16 +286,16 @@@ test("jQuery.css(elem, 'height') doesn'
        ok( !! jQuery(":checkbox:first", $checkedtest).attr("checked"), "Check first checkbox still checked." );
        ok( ! jQuery(":checkbox:last", $checkedtest).attr("checked"), "Check last checkbox still NOT checked." );
  });
+ test(":visible selector works properly on table elements (bug #4512)", function () {
+       expect(1);
+       jQuery('#table').html('<tr><td style="display:none">cell</td><td>cell</td></tr>');
+       equals(jQuery('#table td:visible').length, 1, "hidden cell is not perceived as visible");
+ });
+ test(":visible selector works properly on children with a hidden parent (bug #4512)", function () {
+       expect(1);
+       jQuery('#table').css('display', 'none').html('<tr><td>cell</td><td>cell</td></tr>');
+       equals(jQuery('#table td:visible').length, 0, "hidden cell children not perceived as visible");
+ });