From e45b41602ff483ebed67b5b73008aff5ceb1fe6f Mon Sep 17 00:00:00 2001 From: Brandon Aaron Date: Sat, 2 May 2009 22:35:39 +0000 Subject: [PATCH] make sure toggleClass does not delete classNames when forcefully removing classes and they are already removed --- src/attributes.js | 9 ++++----- test/unit/attributes.js | 22 ++++++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/attributes.js b/src/attributes.js index 04562ff..f3e1b4c 100644 --- a/src/attributes.js +++ b/src/attributes.js @@ -141,13 +141,12 @@ jQuery.each({ jQuery.className[ state ? "add" : "remove" ]( this, className ); } } else if ( type === "undefined" || type === "boolean" ) { - // toggle whole className - if ( this.className || classNames === false ) { + if ( this.className ) { + // store className if set jQuery.data( this, "__className__", this.className ); - this.className = ""; - } else { - this.className = jQuery.data( this, "__className__" ) || ""; } + // toggle whole className + this.className = this.className || classNames === false ? "" : jQuery.data( this, "__className__" ) || ""; } } }, function(name, fn){ diff --git a/test/unit/attributes.js b/test/unit/attributes.js index d4d6824..63e587a 100644 --- a/test/unit/attributes.js +++ b/test/unit/attributes.js @@ -282,7 +282,7 @@ test("removeClass(String) - simple", function() { }); test("toggleClass(String|boolean|undefined[, boolean])", function() { - expect(16); + expect(17); var e = jQuery("#firstp"); ok( !e.is(".test"), "Assert class not present" ); @@ -310,17 +310,23 @@ test("toggleClass(String|boolean|undefined[, boolean])", function() { // toggleClass storage e.toggleClass(true); ok( e.get(0).className === "", "Assert class is empty (data was empty)" ); - e.addClass("testD"); - ok( e.is(".testD"), "Assert class present" ); + e.addClass("testD testE"); + ok( e.is(".testD.testE"), "Assert class present" ); e.toggleClass(); - ok( !e.is(".testD"), "Assert class not present" ); - ok( e.data('__className__') === 'testD', "Assert data was stored" ); + ok( !e.is(".testD.testE"), "Assert class not present" ); + ok( e.data('__className__') === 'testD testE', "Assert data was stored" ); e.toggleClass(); - ok( e.is(".testD"), "Assert class present (restored from data)" ); + ok( e.is(".testD.testE"), "Assert class present (restored from data)" ); e.toggleClass(false); - ok( !e.is(".testD"), "Assert class not present" ); + ok( !e.is(".testD.testE"), "Assert class not present" ); e.toggleClass(true); - ok( e.is(".testD"), "Assert class present (restored from data)" ); + ok( e.is(".testD.testE"), "Assert class present (restored from data)" ); + e.toggleClass(); + e.toggleClass(false); + e.toggleClass(); + ok( e.is(".testD.testE"), "Assert class present (restored from data)" ); + + // Cleanup e.removeClass("testD"); -- 1.7.10.4