Skip to content

Commit abe4c37

Browse files
petersendiditscottgonzalez
authored andcommitted
Tabs: simplify disabled logic
1 parent a147304 commit abe4c37

File tree

1 file changed

+40
-46
lines changed

1 file changed

+40
-46
lines changed

ui/jquery.ui.tabs.js

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -181,14 +181,7 @@ $.widget( "ui.tabs", {
181181
this.lis.addClass( "ui-state-default ui-corner-top" );
182182
this.panels.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" );
183183

184-
if ( !options.disabled.length ) {
185-
options.disabled = false;
186-
}
187-
188-
// disable tabs
189-
for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
190-
$( li ).toggleClass( "ui-state-disabled", $.inArray( i, options.disabled ) !== -1 );
191-
}
184+
this._setupDisabled( options.disabled );
192185

193186
this._setupEvents( options.event );
194187

@@ -260,6 +253,23 @@ $.widget( "ui.tabs", {
260253
.data( "destroy.tabs", true );
261254
},
262255

256+
_setupDisabled: function( disabled ) {
257+
if ( $.isArray( disabled ) ) {
258+
if ( !disabled.length ) {
259+
disabled = false;
260+
} else if ( disabled.length === this.anchors.length ) {
261+
disabled = true;
262+
}
263+
}
264+
265+
// disable tabs
266+
for ( var i = 0, li; ( li = this.lis[ i ] ); i++ ) {
267+
$( li ).toggleClass( "ui-state-disabled", ( disabled === true || $.inArray( i, disabled ) !== -1 ) );
268+
}
269+
270+
this.options.disabled = disabled;
271+
},
272+
263273
_setupFx: function( fx ) {
264274
// set up animations
265275
if ( fx ) {
@@ -502,53 +512,37 @@ $.widget( "ui.tabs", {
502512
},
503513

504514
enable: function( index ) {
515+
var disabled = this.options.disabled;
516+
505517
if ( index === undefined ) {
506-
for ( var i = 0, len = this.lis.length; i < len; i++ ) {
507-
this.enable( i );
518+
disabled = false;
519+
} else {
520+
index = this._getIndex( index );
521+
if ( $.isArray( disabled ) ) {
522+
disabled = $.map( disabled, function( num ) {
523+
return num !== index ? num : null;
524+
});
525+
} else {
526+
disabled = [ index ];
508527
}
509-
return this;
510528
}
511-
index = this._getIndex( index );
512-
var o = this.options;
513-
if ( !o.disabled || ($.isArray( o.disabled ) && $.inArray( index, o.disabled ) == -1 ) ) {
514-
return;
515-
}
516-
517-
this.lis.eq( index ).removeClass( "ui-state-disabled" );
518-
o.disabled = this.lis.map( function( i ) {
519-
return $(this).is( ".ui-state-disabled" ) ? i : null;
520-
}).get();
521-
522-
if ( !o.disabled.length ) {
523-
o.disabled = false;
524-
}
525-
526-
return this;
529+
this._setupDisabled( disabled );
527530
},
528531

529532
disable: function( index ) {
533+
var disabled = this.options.disabled;
534+
530535
if ( index === undefined ) {
531-
for ( var i = 0, len = this.lis.length; i < len; i++ ) {
532-
this.disable( i );
533-
}
534-
return this;
535-
}
536-
index = this._getIndex( index );
537-
var o = this.options;
538-
if ( !o.disabled || ($.isArray( o.disabled ) && $.inArray( index, o.disabled ) == -1 ) ) {
539-
this.lis.eq( index ).addClass( "ui-state-disabled" );
540-
541-
o.disabled = this.lis.map( function( i ) {
542-
return $(this).is( ".ui-state-disabled" ) ? i : null;
543-
}).get();
544-
545-
if ( o.disabled.length === this.anchors.length ) {
546-
o.disabled = true;
536+
disabled = true;
537+
} else {
538+
index = this._getIndex( index );
539+
if ( $.isArray( disabled ) ) {
540+
disabled = $.merge( [ index ], disabled ).sort();
541+
} else {
542+
disabled = [ index ];
547543
}
548-
549544
}
550-
551-
return this;
545+
this._setupDisabled( disabled );
552546
},
553547

554548
load: function( index, event ) {

0 commit comments

Comments
 (0)