]> source.dussan.org Git - jquery-ui.git/commitdiff
Tabs: Properly handle switching from active: false.
authorScott González <scott.gonzalez@gmail.com>
Mon, 4 Apr 2011 18:27:38 +0000 (14:27 -0400)
committerScott González <scott.gonzalez@gmail.com>
Mon, 4 Apr 2011 18:27:38 +0000 (14:27 -0400)
tests/unit/tabs/tabs_events.js
ui/jquery.ui.tabs.js

index 72c6d29e1b4be8d8fcdd997422a379fa47ef6eb5..d5e2b04c31e493a10063cf5b0b21432add8edd26 100644 (file)
@@ -3,7 +3,7 @@
 module( "tabs: events" );
 
 test( "beforeActivate", function() {
-       expect( 26 );
+       expect( 38 );
 
        var element = $( "#tabs1" ).tabs({
                        // TODO: should be false
@@ -13,7 +13,9 @@ test( "beforeActivate", function() {
                tabs = element.find( ".ui-tabs-nav a" ),
                panels = element.find( ".ui-tabs-panel" );
 
+       // from collapsed
        element.one( "tabsbeforeactivate", function( event, ui ) {
+               ok( !( "originalEvent" in event ) );
                equals( ui.oldTab.size(), 0 );
                equals( ui.oldPanel.size(), 0 );
                equals( ui.newTab.size(), 1 );
@@ -25,7 +27,9 @@ test( "beforeActivate", function() {
        element.tabs( "option", "active", 0 );
        tabs_state( element, 1, 0, 0 );
 
+       // switching tabs
        element.one( "tabsbeforeactivate", function( event, ui ) {
+               equals( event.originalEvent.type, "click" );
                equals( ui.oldTab.size(), 1 );
                strictEqual( ui.oldTab[ 0 ], tabs[ 0 ] );
                equals( ui.oldPanel.size(), 1 );
@@ -36,10 +40,12 @@ test( "beforeActivate", function() {
                strictEqual( ui.newPanel[ 0 ], panels[ 1 ] );
                tabs_state( element, 1, 0, 0 );
        });
-       element.tabs( "option", "active", 1 );
+       tabs.eq( 1 ).click();
        tabs_state( element, 0, 1, 0 );
 
+       // collapsing
        element.one( "tabsbeforeactivate", function( event, ui ) {
+               ok( !( "originalEvent" in event ) );
                equals( ui.oldTab.size(), 1 );
                strictEqual( ui.oldTab[ 0 ], tabs[ 1 ] );
                equals( ui.oldPanel.size(), 1 );
@@ -50,6 +56,21 @@ test( "beforeActivate", function() {
        });
        element.tabs( "option", "active", false );
        tabs_state( element, 0, 0, 0 );
+
+       // prevent activation
+       element.one( "tabsbeforeactivate", function( event, ui ) {
+               ok( !( "originalEvent" in event ) );
+               equals( ui.oldTab.size(), 0 );
+               equals( ui.oldPanel.size(), 0 );
+               equals( ui.newTab.size(), 1 );
+               strictEqual( ui.newTab[ 0 ], tabs[ 1 ] );
+               equals( ui.newPanel.size(), 1 );
+               strictEqual( ui.newPanel[ 0 ], panels[ 1 ] );
+               event.preventDefault();
+               tabs_state( element, 0, 0, 0 );
+       });
+       element.tabs( "option", "active", 1 );
+       tabs_state( element, 0, 0, 0 );
 });
 
 test('beforeload', function() {
index d5ed5e67e318bff3150975d289d9d66282a050f5..99c561607c347524675ce2ac32321702e494e241 100755 (executable)
@@ -364,7 +364,7 @@ $.widget( "ui.tabs", {
 
                options.active = collapsing ? false : that.anchors.index( clicked );
 
-               that.active = clicked;
+               that.active = clickedIsActive ? $() : clicked;
                if ( that.xhr ) {
                        that.xhr.abort();
                }
@@ -422,12 +422,12 @@ $.widget( "ui.tabs", {
                var active = this._findActive( index )[ 0 ];
 
                // trying to activate the already active panel
-               if ( this.active && active === this.active[ 0 ] ) {
+               if ( active === this.active[ 0 ] ) {
                        return;
                }
 
                // trying to collapse, simulate a click on the current active header
-               active = active || this.active;
+               active = active || this.active[ 0 ];
 
                this._eventHandler({
                        target: active,