mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Revert "Attributes: Remove undocumented .toggleClass( boolean ) signature"
This reverts commit 53f798cf4d
.
- Turns out this is documented, even if not fully. Need to deprecate before removal.
This commit is contained in:
parent
1823a71566
commit
a4d16a26ab
@ -1,8 +1,9 @@
|
|||||||
define( [
|
define( [
|
||||||
"../core",
|
"../core",
|
||||||
"../var/rnotwhite",
|
"../var/rnotwhite",
|
||||||
|
"../data/var/dataPriv",
|
||||||
"../core/init"
|
"../core/init"
|
||||||
], function( jQuery, rnotwhite ) {
|
], function( jQuery, rnotwhite, dataPriv ) {
|
||||||
|
|
||||||
var rclass = /[\t\r\n\f]/g;
|
var rclass = /[\t\r\n\f]/g;
|
||||||
|
|
||||||
@ -96,28 +97,62 @@ 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 ) : [];
|
|
||||||
|
|
||||||
return this.each( function( i ) {
|
if ( typeof stateVal === "boolean" && type === "string" ) {
|
||||||
var className,
|
return stateVal ? this.addClass( value ) : this.removeClass( value );
|
||||||
self = jQuery( this ),
|
|
||||||
c = 0;
|
|
||||||
|
|
||||||
if ( type === "function" ) {
|
|
||||||
classNames = value.call( this, i, getClass( this ), stateVal )
|
|
||||||
.match( rnotwhite ) || [];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle individual class names based on presence or stateVal
|
if ( jQuery.isFunction( value ) ) {
|
||||||
while ( ( className = classNames[ c++ ] ) ) {
|
return this.each( function( i ) {
|
||||||
|
jQuery( this ).toggleClass(
|
||||||
|
value.call( this, i, getClass( this ), stateVal ),
|
||||||
|
stateVal
|
||||||
|
);
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
if ( stateVal === false || stateVal !== true && self.hasClass( className ) ) {
|
return this.each( function() {
|
||||||
|
var className, i, self, classNames;
|
||||||
|
|
||||||
|
if ( type === "string" ) {
|
||||||
|
|
||||||
|
// 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
|
||||||
|
dataPriv.set( 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 ?
|
||||||
|
"" :
|
||||||
|
dataPriv.get( this, "__className__" ) || ""
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1239,7 +1239,7 @@ QUnit.test( "removeClass(undefined) is a no-op", function( assert ) {
|
|||||||
} );
|
} );
|
||||||
|
|
||||||
var testToggleClass = function( valueObj, assert ) {
|
var testToggleClass = function( valueObj, assert ) {
|
||||||
assert.expect( 11 );
|
assert.expect( 19 );
|
||||||
|
|
||||||
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" );
|
||||||
@ -1267,6 +1267,29 @@ 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 ) {
|
||||||
|
Loading…
Reference in New Issue
Block a user