Attributes: Remove undocumented .toggleClass( boolean ) signature

Fixes gh-2491
Close gh-2618

(cherry picked from commit 53f798cf4d)

Conflicts:
	src/attributes/classes.js
This commit is contained in:
Dave Methvin 2015-09-25 17:11:01 -04:00 committed by Richard Gibson
parent 3842246024
commit f24726daa3
2 changed files with 20 additions and 74 deletions

View File

@ -99,62 +99,31 @@ jQuery.fn.extend( {
}, },
toggleClass: function( value, stateVal ) { toggleClass: function( value, stateVal ) {
var type = typeof value; var type = typeof value,
classNames = type === "string" ? value.match( rnotwhite ) : "",
checker = typeof stateVal === "boolean" ?
function() { return !stateVal; } :
jQuery.fn.hasClass;
if ( typeof stateVal === "boolean" && type === "string" ) {
return stateVal ? this.addClass( value ) : this.removeClass( value );
}
if ( jQuery.isFunction( value ) ) {
return this.each( function( i ) { return this.each( function( i ) {
jQuery( this ).toggleClass( var className,
value.call( this, i, getClass( this ), stateVal ), self = jQuery( this ),
stateVal c = 0;
);
} ); if ( type === "function" ) {
classNames = value.call( this, i, getClass( this ), stateVal )
.match( rnotwhite ) || [];
} }
return this.each( function() { // Toggle individual class names based on presence or stateVal
var className, i, self, classNames; while ( ( className = classNames[ c++ ] ) ) {
if ( type === "string" ) { if ( checker.call( self, className ) ) {
// Toggle individual class names
i = 0;
self = jQuery( this );
classNames = value.match( rnotwhite ) || [];
while ( ( className = classNames[ i++ ] ) ) {
// Check each className given, space separated list
if ( self.hasClass( className ) ) {
self.removeClass( className ); self.removeClass( className );
} else { } else {
self.addClass( className ); self.addClass( className );
} }
} }
// Toggle whole class name
} else if ( value === undefined || type === "boolean" ) {
className = getClass( this );
if ( className ) {
// store className if set
jQuery._data( this, "__className__", className );
}
// If the element has a class name or if we're passed "false",
// then remove the whole classname (if there was one, the above saved it).
// Otherwise bring back whatever was previously saved (if anything),
// falling back to the empty string if nothing was stored.
if ( this.setAttribute ) {
this.setAttribute( "class",
className || value === false ?
"" :
jQuery._data( this, "__className__" ) || ""
);
}
}
} ); } );
}, },

View File

@ -1220,7 +1220,7 @@ QUnit.test( "removeClass(undefined) is a no-op", function( assert ) {
} ); } );
var testToggleClass = function( valueObj, assert ) { var testToggleClass = function( valueObj, assert ) {
assert.expect( 17 ); assert.expect( 9 );
var e = jQuery( "#firstp" ); var e = jQuery( "#firstp" );
assert.ok( !e.is( ".test" ), "Assert class not present" ); assert.ok( !e.is( ".test" ), "Assert class not present" );
@ -1244,29 +1244,6 @@ var testToggleClass = function( valueObj, assert ) {
assert.ok( ( e.is( ".testA.testC" ) && !e.is( ".testB" ) ), "Assert 1 class added, 1 class removed, and 1 class kept" ); assert.ok( ( e.is( ".testA.testC" ) && !e.is( ".testB" ) ), "Assert 1 class added, 1 class removed, and 1 class kept" );
e.toggleClass( valueObj( "testA testC" ) ); e.toggleClass( valueObj( "testA testC" ) );
assert.ok( ( !e.is( ".testA" ) && !e.is( ".testB" ) && !e.is( ".testC" ) ), "Assert no class present" ); assert.ok( ( !e.is( ".testA" ) && !e.is( ".testB" ) && !e.is( ".testC" ) ), "Assert no class present" );
// toggleClass storage
e.toggleClass( true );
assert.ok( e[ 0 ].className === "", "Assert class is empty (data was empty)" );
e.addClass( "testD testE" );
assert.ok( e.is( ".testD.testE" ), "Assert class present" );
e.toggleClass();
assert.ok( !e.is( ".testD.testE" ), "Assert class not present" );
assert.ok( jQuery._data( e[ 0 ], "__className__" ) === "testD testE", "Assert data was stored" );
e.toggleClass();
assert.ok( e.is( ".testD.testE" ), "Assert class present (restored from data)" );
e.toggleClass( false );
assert.ok( !e.is( ".testD.testE" ), "Assert class not present" );
e.toggleClass( true );
assert.ok( e.is( ".testD.testE" ), "Assert class present (restored from data)" );
e.toggleClass();
e.toggleClass( false );
e.toggleClass();
assert.ok( e.is( ".testD.testE" ), "Assert class present (restored from data)" );
// Cleanup
e.removeClass( "testD" );
assert.expectJqData( this, e[ 0 ], "__className__" );
}; };
QUnit.test( "toggleClass(String|boolean|undefined[, boolean])", function( assert ) { QUnit.test( "toggleClass(String|boolean|undefined[, boolean])", function( assert ) {