Bug Tracker

Ticket #3825: toggleClass.diff

File toggleClass.diff, 2.6 KB (added by iraebrasil, 14 years ago)

unit test and core implementation proposal for #3825 enhancement (forgot one cleanup)

  • test/unit/core.js

     
    15741574});
    15751575
    15761576test("toggleClass(String)", function() {
    1577         expect(6);
     1577        expect(16);
    15781578        var e = jQuery("#firstp");
    15791579        ok( !e.is(".test"), "Assert class not present" );
    15801580        e.toggleClass("test");
     
    15881588        ok( e.is(".test"), "Assert class present" );
    15891589        e.toggleClass("test", false);
    15901590        ok( !e.is(".test"), "Assert class not present" );
     1591       
     1592        e.addClass("testA testB");
     1593        ok( (e.is(".testA") && e.is(".testB")), "Assert 2 different classes present" );
     1594        e.toggleClass("testB testC");
     1595        ok( (e.is(".testA") && !e.is(".testB") && e.is(".testC")), "Assert 1 class added, 1 class removed and 1 class keeped" );
     1596        e.toggleClass("testA testC");
     1597        ok( (!e.is(".testA") && !e.is(".testB") && !e.is(".testC")), "Assert no class present" );
     1598       
     1599        // toggleClass storage
     1600        e.toggleClass(true);
     1601        ok( e.get(0).className === '', "Assert class is empty (data was empty)" );
     1602        e.addClass("testD");
     1603        ok( e.is(".testD"), "Assert class present" );
     1604        e.toggleClass();
     1605        ok( !e.is(".testD"), "Assert class not present" );
     1606        ok( e.data('originalClassName') == 'testD', "Assert data was stored" );
     1607        e.toggleClass();
     1608        ok( e.is(".testD"), "Assert class present (restored from data)" );
     1609        e.toggleClass(false);
     1610        ok( !e.is(".testD"), "Assert class not present" );
     1611        e.toggleClass(true);
     1612        ok( e.is(".testD"), "Assert class present (restored from data)" );
     1613       
     1614        // Cleanup
     1615        e.removeClass("testD");
     1616        e.removeData('originalClassName')
     1617       
    15911618});
    15921619
    15931620test("removeAttr(String", function() {
  • src/core.js

     
    12021202        },
    12031203
    12041204        toggleClass: function( classNames, state ) {
    1205                 if( typeof state !== "boolean" )
    1206                         state = !jQuery.className.has( this, classNames );
    1207                 jQuery.className[ state ? "add" : "remove" ]( this, classNames );
     1205                if(!classNames || typeof classNames === "boolean") {
     1206                        if( !(classNames = jQuery.data(this, 'originalClassName')) && !this.className ) return;
     1207                        state = this.className ? !(jQuery.data(this, 'originalClassName', classNames = this.className)) : true;
     1208                }
     1209                var elem = this;
     1210                jQuery.each((classNames || "").split(/\s+/), function(i, className){
     1211                        var force = ( typeof state !== "boolean" ) ?
     1212                                        !jQuery.className.has( elem, className ) :
     1213                                        state;
     1214                        jQuery.className[ force ? "add" : "remove" ]( elem, className );
     1215                });
    12081216        },
    12091217
    12101218        remove: function( selector ) {