]> source.dussan.org Git - jquery-ui.git/commitdiff
Tabs: Removing queue logic, _hideTab, and _showTab - Replaced with _toggle - Fixes... 276/head
authorgnarf <gnarf@gnarf.net>
Sat, 14 May 2011 11:26:46 +0000 (06:26 -0500)
committergnarf <gnarf@gnarf.net>
Sat, 14 May 2011 11:31:41 +0000 (06:31 -0500)
ui/jquery.ui.tabs.js

index 76f4fb27449428a47aad72c5b3311b1766d699ef..3ea6017d7961d364bd6493a31c9648ce362cc4a9 100644 (file)
@@ -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 ) {