Tabs: Properly handle switching from active: false.

This commit is contained in:
Scott González 2011-04-04 14:27:38 -04:00
parent fc5291291b
commit e19d8261c1
2 changed files with 26 additions and 5 deletions

View File

@ -3,7 +3,7 @@
module( "tabs: events" ); module( "tabs: events" );
test( "beforeActivate", function() { test( "beforeActivate", function() {
expect( 26 ); expect( 38 );
var element = $( "#tabs1" ).tabs({ var element = $( "#tabs1" ).tabs({
// TODO: should be false // TODO: should be false
@ -13,7 +13,9 @@ test( "beforeActivate", function() {
tabs = element.find( ".ui-tabs-nav a" ), tabs = element.find( ".ui-tabs-nav a" ),
panels = element.find( ".ui-tabs-panel" ); panels = element.find( ".ui-tabs-panel" );
// from collapsed
element.one( "tabsbeforeactivate", function( event, ui ) { element.one( "tabsbeforeactivate", function( event, ui ) {
ok( !( "originalEvent" in event ) );
equals( ui.oldTab.size(), 0 ); equals( ui.oldTab.size(), 0 );
equals( ui.oldPanel.size(), 0 ); equals( ui.oldPanel.size(), 0 );
equals( ui.newTab.size(), 1 ); equals( ui.newTab.size(), 1 );
@ -25,7 +27,9 @@ test( "beforeActivate", function() {
element.tabs( "option", "active", 0 ); element.tabs( "option", "active", 0 );
tabs_state( element, 1, 0, 0 ); tabs_state( element, 1, 0, 0 );
// switching tabs
element.one( "tabsbeforeactivate", function( event, ui ) { element.one( "tabsbeforeactivate", function( event, ui ) {
equals( event.originalEvent.type, "click" );
equals( ui.oldTab.size(), 1 ); equals( ui.oldTab.size(), 1 );
strictEqual( ui.oldTab[ 0 ], tabs[ 0 ] ); strictEqual( ui.oldTab[ 0 ], tabs[ 0 ] );
equals( ui.oldPanel.size(), 1 ); equals( ui.oldPanel.size(), 1 );
@ -36,10 +40,12 @@ test( "beforeActivate", function() {
strictEqual( ui.newPanel[ 0 ], panels[ 1 ] ); strictEqual( ui.newPanel[ 0 ], panels[ 1 ] );
tabs_state( element, 1, 0, 0 ); tabs_state( element, 1, 0, 0 );
}); });
element.tabs( "option", "active", 1 ); tabs.eq( 1 ).click();
tabs_state( element, 0, 1, 0 ); tabs_state( element, 0, 1, 0 );
// collapsing
element.one( "tabsbeforeactivate", function( event, ui ) { element.one( "tabsbeforeactivate", function( event, ui ) {
ok( !( "originalEvent" in event ) );
equals( ui.oldTab.size(), 1 ); equals( ui.oldTab.size(), 1 );
strictEqual( ui.oldTab[ 0 ], tabs[ 1 ] ); strictEqual( ui.oldTab[ 0 ], tabs[ 1 ] );
equals( ui.oldPanel.size(), 1 ); equals( ui.oldPanel.size(), 1 );
@ -50,6 +56,21 @@ test( "beforeActivate", function() {
}); });
element.tabs( "option", "active", false ); element.tabs( "option", "active", false );
tabs_state( element, 0, 0, 0 ); 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() { test('beforeload', function() {

View File

@ -364,7 +364,7 @@ $.widget( "ui.tabs", {
options.active = collapsing ? false : that.anchors.index( clicked ); options.active = collapsing ? false : that.anchors.index( clicked );
that.active = clicked; that.active = clickedIsActive ? $() : clicked;
if ( that.xhr ) { if ( that.xhr ) {
that.xhr.abort(); that.xhr.abort();
} }
@ -422,12 +422,12 @@ $.widget( "ui.tabs", {
var active = this._findActive( index )[ 0 ]; var active = this._findActive( index )[ 0 ];
// trying to activate the already active panel // trying to activate the already active panel
if ( this.active && active === this.active[ 0 ] ) { if ( active === this.active[ 0 ] ) {
return; return;
} }
// trying to collapse, simulate a click on the current active header // trying to collapse, simulate a click on the current active header
active = active || this.active; active = active || this.active[ 0 ];
this._eventHandler({ this._eventHandler({
target: active, target: active,