Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 50 additions & 68 deletions ui/jquery.ui.tabs.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
*/
(function( $, undefined ) {

var tabId = 0
var tabId = 0;
function getNextTabId() {
return ++tabId;
}
Expand Down Expand Up @@ -289,58 +289,14 @@ $.widget( "ui.tabs", {
// Reset certain styles left over from animation
// and prevent IE's ClearType bug...
_resetStyle: function ( $el, fx ) {
$el.css( "display", "" );
$el.css( "display", function( oldValue ) {
return oldValue === "none" ? oldValue : "";
});
if ( !$.support.opacity && fx.opacity ) {
$el[ 0 ].style.removeAttribute( "filter" );
}
},

_showTab: function( event, eventData ) {
var that = this;

$( eventData.newTab ).closest( "li" ).addClass( "ui-tabs-active ui-state-active" );

if ( that.showFx ) {
that.running = true;
eventData.newPanel
// TODO: why are we hiding? old code?
.hide()
.animate( that.showFx, that.showFx.duration || "normal", function() {
that._resetStyle( $( this ), that.showFx );
that.running = false;
that._trigger( "activate", event, eventData );
});
} else {
eventData.newPanel.show();
that._trigger( "activate", event, eventData );
}
},

// TODO: combine with _showTab()
_hideTab: function( event, eventData ) {
var that = this;

if ( that.hideFx ) {
that.running = true;
eventData.oldPanel.animate( that.hideFx, that.hideFx.duration || "normal", function() {
that.running = false;
eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
that._resetStyle( $( this ), that.hideFx );
that.element.dequeue( "tabs" );
if ( !eventData.newPanel.length ) {
that._trigger( "activate", event, eventData );
}
});
} else {
eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
eventData.oldPanel.hide();
that.element.dequeue( "tabs" );
if ( !eventData.newPanel.length ) {
that._trigger( "activate", event, eventData );
}
}
},

_setupEvents: function( event ) {
// attach tab event handler, unbind to avoid duplicates from former tabifying...
this.anchors.unbind( ".tabs" );
Expand Down Expand Up @@ -399,22 +355,58 @@ $.widget( "ui.tabs", {
throw "jQuery UI Tabs: Mismatching fragment identifier.";
}

if ( toHide.length ) {
that.element.queue( "tabs", function() {
that._hideTab( event, eventData );
});
}
if ( toShow.length ) {
that.element.queue( "tabs", function() {
that._showTab( event, eventData );
});

// TODO make passing in node possible, see also http://dev.jqueryui.com/ticket/3171
that.load( that.anchors.index( clicked ), event );

clicked[ 0 ].blur();
}
that._toggle( event, eventData );
},

// handles show/hide for selecting tabs
_toggle: function( event, eventData ) {
var that = this,
options = that.options,
toShow = eventData.newPanel,
toHide = eventData.oldPanel;

that.running = true;

function complete() {
that.running = false;
that._trigger( "activate", event, eventData );
}

function show() {
eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );

if ( toShow.length && that.showFx ) {
toShow
// TODO: why are we hiding? old code?
.hide()
.animate( that.showFx, that.showFx.duration || "normal", function() {
that._resetStyle( $( this ), that.showFx );
complete();
});
} else {
toShow.show();
complete();
}
}

// start out by hiding, then showing, then completing
if ( toHide.length && that.hideFx ) {
toHide.animate( that.hideFx, that.hideFx.duration || "normal", function() {
eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
that._resetStyle( $( this ), that.hideFx );
show();
});
} else {
that.element.dequeue( "tabs" );
eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
toHide.hide();
show();
}
},

Expand Down Expand Up @@ -554,7 +546,6 @@ $.widget( "ui.tabs", {

// not remote
if ( !url ) {
this.element.dequeue( "tabs" );
return;
}

Expand All @@ -577,13 +568,7 @@ $.widget( "ui.tabs", {
})
.complete(function( jqXHR, status ) {
if ( status === "abort" ) {
// stop possibly running animations
self.element.queue( [] );
self.panels.stop( false, true );

// "tabs" queue must not contain more than two elements,
// which are the callbacks for the latest clicked tab...
self.element.queue( "tabs", self.element.queue( "tabs" ).splice( -2, 2 ) );
}

self.lis.eq( index ).removeClass( "ui-tabs-loading" );
Expand All @@ -592,9 +577,6 @@ $.widget( "ui.tabs", {
});
}

// last, so that load event is fired before show...
self.element.dequeue( "tabs" );

return this;
},

Expand Down Expand Up @@ -938,7 +920,7 @@ if ( $.uiBackCompat !== false ) {
this._trigger( "show", null, this._ui(
this.active[ 0 ], this._getPanelForTab( this.active )[ 0 ] ) );
}
}
};
prototype._trigger = function( type, event, data ) {
var ret = _trigger.apply( this, arguments );
if ( !ret ) {
Expand Down