From 463849e4c35c64634f8f6d6dc876ef6774165542 Mon Sep 17 00:00:00 2001 From: gnarf Date: Sat, 14 May 2011 06:26:46 -0500 Subject: [PATCH] Tabs: Removing queue logic, _hideTab, and _showTab - Replaced with _toggle - Fixes #7357 Tabs: Remove queueing logic --- ui/jquery.ui.tabs.js | 118 ++++++++++++++++++------------------------- 1 file changed, 50 insertions(+), 68 deletions(-) diff --git a/ui/jquery.ui.tabs.js b/ui/jquery.ui.tabs.js index 76f4fb274..3ea6017d7 100644 --- a/ui/jquery.ui.tabs.js +++ b/ui/jquery.ui.tabs.js @@ -13,7 +13,7 @@ */ (function( $, undefined ) { -var tabId = 0 +var tabId = 0; function getNextTabId() { return ++tabId; } @@ -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" ); @@ -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(); } }, @@ -554,7 +546,6 @@ $.widget( "ui.tabs", { // not remote if ( !url ) { - this.element.dequeue( "tabs" ); return; } @@ -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" ); @@ -592,9 +577,6 @@ $.widget( "ui.tabs", { }); } - // last, so that load event is fired before show... - self.element.dequeue( "tabs" ); - return this; }, @@ -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 ) {