]> source.dussan.org Git - jquery.git/commitdiff
Fix #12148. Let .toggle() call the public .hide() for punching.
authorDave Methvin <dave.methvin@gmail.com>
Thu, 26 Jul 2012 01:24:49 +0000 (21:24 -0400)
committerDave Methvin <dave.methvin@gmail.com>
Thu, 26 Jul 2012 01:24:49 +0000 (21:24 -0400)
There is a slightly shorter way to do this but it's not Closure-friendly.

src/css.js
test/unit/css.js

index 57edd15072a1c5b44c1323ece41406d7346a0455..744e7a545e2846a34fffe5f2dd49053c6757fce6 100644 (file)
@@ -43,8 +43,7 @@ function vendorPropName( style, name ) {
        return origName;
 }
 
-function isHidden( elem, el ) {
-       elem = el || elem;
+function isHidden( elem ) {
        return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument.documentElement, elem );
 }
 
@@ -111,16 +110,19 @@ jQuery.fn.extend({
        hide: function() {
                return showHide( this );
        },
-       toggle: function( fn, fn2 ) {
-               var bool = typeof fn === "boolean";
+       toggle: function( state, fn2 ) {
+               var bool = typeof state === "boolean";
 
-               if ( jQuery.isFunction( fn ) && jQuery.isFunction( fn2 ) ) {
+               if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
                        return eventsToggle.apply( this, arguments );
                }
 
                return this.each(function() {
-                       var state = bool ? fn : jQuery( this ).is(":hidden");
-                       showHide([ this ], state );
+                       if ( bool ? state : isHidden( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
                });
        }
 });
index 45aee9f06538e49ae5493209b7bb5dd22c9546e2..c2142052aa5b8f82f58f97d08085720344fafbe0 100644 (file)
@@ -561,7 +561,7 @@ test( "show() resolves correct default display, detached nodes (#10006)", functi
 });
 
 test("toggle()", function() {
-       expect(6);
+       expect(7);
        var x = jQuery("#foo");
        ok( x.is(":visible"), "is visible" );
        x.toggle();
@@ -575,6 +575,17 @@ test("toggle()", function() {
        ok( x.is(":hidden"), "is hidden" );
        x.toggle(true);
        ok( x.is(":visible"), "is visible again" );
+       
+       // Ensure hide() is called when toggled (#12148)
+       var oldHide = jQuery.fn.hide;
+       jQuery.fn.hide = function() {
+               ok( true, name + " method called on toggle" );
+               return oldHide.apply( this, arguments );
+       };
+       x.toggle( name === "show" );
+       jQuery.fn.hide = oldHide;
+
+
 });
 
 test("hide hidden elements (bug #7141)", function() {