Skip to content

Commit d819cdd

Browse files
committed
Tabs: Fixed disable method and cleaned up tests for enable and disable methods.
1 parent 0e7769c commit d819cdd

File tree

4 files changed

+136
-71
lines changed

4 files changed

+136
-71
lines changed

tests/unit/tabs/tabs.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,41 @@
4646
}).get();
4747
same( actual, expected );
4848
}
49+
50+
function tabs_disabled( tabs, state ) {
51+
var expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) {
52+
if ( typeof state === "boolean" ) {
53+
return state ? 1 : 0;
54+
} else {
55+
return $.inArray( index, state ) !== -1 ? 1 : 0;
56+
}
57+
});
58+
59+
var internalState = tabs.tabs( "option", "disabled" );
60+
if ( internalState === false ) {
61+
internalState = [];
62+
}
63+
if ( internalState === true ) {
64+
internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) {
65+
return index;
66+
});
67+
}
68+
69+
var actual = tabs.find( ".ui-tabs-nav li" ).map(function( index ) {
70+
var tab = $( this ),
71+
tabIsDisabled = tab.hasClass( "ui-state-disabled" );
72+
73+
if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) {
74+
return 1;
75+
}
76+
if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) {
77+
return 0;
78+
}
79+
return -1; // mixed state - invalid
80+
}).get();
81+
same( tabs.tabs( "option", "disabled" ), state );
82+
same( actual, expected );
83+
}
4984
</script>
5085
<script>
5186
// disable this stale testsuite for testswarm only

tests/unit/tabs/tabs_deprecated.html

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,41 @@
4545
}).get();
4646
same( actual, expected );
4747
}
48+
49+
function tabs_disabled( tabs, state ) {
50+
var expected = $.map( new Array( tabs.find ( ".ui-tabs-nav li" ).length ), function( _, index ) {
51+
if ( typeof state === "boolean" ) {
52+
return state ? 1 : 0;
53+
} else {
54+
return $.inArray( index, state ) !== -1 ? 1 : 0;
55+
}
56+
});
57+
58+
var internalState = tabs.tabs( "option", "disabled" );
59+
if ( internalState === false ) {
60+
internalState = [];
61+
}
62+
if ( internalState === true ) {
63+
internalState = $.map( new Array( tabs.find( ".ui-tabs-nav li" ).length ), function( _, index ) {
64+
return index;
65+
});
66+
}
67+
68+
var actual = tabs.find( ".ui-tabs-nav li" ).map(function( index ) {
69+
var tab = $( this ),
70+
tabIsDisabled = tab.hasClass( "ui-state-disabled" );
71+
72+
if ( tabIsDisabled && $.inArray( index, internalState ) !== -1 ) {
73+
return 1;
74+
}
75+
if ( !tabIsDisabled && $.inArray( index, internalState ) === -1 ) {
76+
return 0;
77+
}
78+
return -1; // mixed state - invalid
79+
}).get();
80+
same( tabs.tabs( "option", "disabled" ), state );
81+
same( actual, expected );
82+
}
4883
</script>
4984
<script>
5085
// disable this stale testsuite for testswarm only

tests/unit/tabs/tabs_methods.js

Lines changed: 63 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -17,80 +17,72 @@ test('destroy', function() {
1717
ok( $('li:eq(2)', el).is(':not(.ui-state-hover, .ui-state-focus)'), 'remove classes from mouseovered or focused li');
1818
});
1919

20-
test('enable', function() {
21-
expect(12);
22-
23-
el = $('#tabs1').tabs({ disabled: [ 0, 1 ] });
24-
el.tabs("enable", 1);
25-
ok( $('li:eq(1)', el).is(':not(.ui-state-disabled)'), 'remove class from li');
26-
same(el.tabs('option', 'disabled'), [ 0 ], 'update property');
27-
28-
// enable all tabs
29-
el.tabs({ disabled: [ 0, 1 ] });
30-
el.tabs("enable");
31-
ok( !$('li.ui-state-disabled', el).length, 'enable all');
32-
same(el.tabs('option', 'disabled'), false, 'update property');
33-
34-
// enable one tab
35-
el.tabs({ disabled: true });
36-
el.tabs("enable", 1);
37-
ok( $('li:eq(1)', el).is(':not(.ui-state-disabled)'), 'remove class from li');
38-
same(el.tabs('option', 'disabled'), [ 0, 2 ], 'update property');
39-
40-
// all tabs already enabled
41-
el.tabs({ disabled: false });
42-
el.tabs("enable", 1);
43-
ok( !$('li.ui-state-disabled', el).length, 'enable all');
44-
same(el.tabs('option', 'disabled'), false, 'update property');
20+
test( "enable", function() {
21+
expect( 8 );
22+
23+
var element = $( "#tabs1" ).tabs({ disabled: true });
24+
tabs_disabled( element, true );
25+
element.tabs( "enable" );
26+
tabs_disabled( element, false );
27+
element.tabs( "destroy" );
28+
29+
element.tabs({ disabled: [ 0, 1 ] });
30+
tabs_disabled( element, [ 0, 1 ] );
31+
element.tabs( "enable" );
32+
tabs_disabled( element, false );
33+
});
4534

46-
el.tabs('destroy');
47-
// enable all tabs one by one
48-
el.tabs({ disabled: [ 1, 2 ] });
49-
el.tabs("enable", 1);
50-
ok( $('li:eq(1)', el).is(':not(.ui-state-disabled)'), 'remove class from li');
51-
same(el.tabs('option', 'disabled'), [ 2 ], 'update property');
52-
el.tabs("enable", 2);
53-
ok( $('li:eq(2)', el).is(':not(.ui-state-disabled)'), 'remove class from li');
54-
same( el.tabs('option', 'disabled'), false, 'set to false');
35+
test( "enable( index )", function() {
36+
expect( 10 );
37+
38+
var element = $( "#tabs1" ).tabs({ disabled: true });
39+
tabs_disabled( element, true );
40+
// fully disabled -> partially disabled
41+
element.tabs( "enable", 1 );
42+
tabs_disabled( element, [ 0, 2 ] );
43+
// partially disabled -> partially disabled
44+
element.tabs( "enable", 2 );
45+
tabs_disabled( element, [ 0 ] );
46+
// already enabled tab, no change
47+
element.tabs( "enable", 2 );
48+
tabs_disabled( element, [ 0 ] );
49+
// partially disabled -> fully enabled
50+
element.tabs( "enable", 0 );
51+
tabs_disabled( element, false );
52+
});
53+
54+
test( "disable", function() {
55+
expect( 8 );
56+
57+
var element = $( "#tabs1" ).tabs({ disabled: false });
58+
tabs_disabled( element, false );
59+
element.tabs( "disable" );
60+
tabs_disabled( element, true );
61+
element.tabs( "destroy" );
62+
63+
element.tabs({ disabled: [ 0, 1 ] });
64+
tabs_disabled( element, [ 0, 1 ] );
65+
element.tabs( "disable" );
66+
tabs_disabled( element, true );
5567
});
5668

57-
test('disable', function() {
58-
expect(14);
59-
60-
// normal
61-
el = $('#tabs1').tabs();
62-
el.tabs('disable', 1);
63-
ok( $('li:eq(1)', el).is('.ui-state-disabled'), 'add class to li');
64-
same(el.tabs('option', 'disabled'), [ 1 ], 'update disabled property');
65-
66-
// disable selected
67-
el.tabs('disable', 0);
68-
ok( $('li:eq(0)', el).is('.ui-state-disabled'), 'add class to selected li');
69-
same(el.tabs('option', 'disabled'), [ 0, 1 ], 'update disabled property');
70-
71-
// disable all tabs
72-
el.tabs('disable');
73-
same( $('li.ui-state-disabled', el).length, 3, 'disable all');
74-
same(el.tabs('option', 'disabled'), true, 'set to true');
75-
76-
// all tabs already disabled
77-
el.tabs({ disabled: true });
78-
el.tabs("disable", 1);
79-
ok( $('li.ui-state-disabled', el).length, 'disable all');
80-
same(el.tabs('option', 'disabled'), true, 'set to true');
81-
82-
el.tabs("destroy");
83-
// disable all tabs one by one
84-
el.tabs();
85-
el.tabs('disable', 0);
86-
ok( $('li:eq(0)', el).is('.ui-state-disabled'), 'add class to li');
87-
same(el.tabs('option', 'disabled'), [ 0 ], 'update disabled property');
88-
el.tabs('disable', 1);
89-
ok( $('li:eq(1)', el).is('.ui-state-disabled'), 'add class to li');
90-
same(el.tabs('option', 'disabled'), [ 0, 1 ], 'update disabled property');
91-
el.tabs('disable', 2);
92-
ok( $('li:eq(2)', el).is('.ui-state-disabled'), 'add class to li');
93-
same(el.tabs('option', 'disabled'), true, 'set to true');
69+
test( "disable( index )", function() {
70+
expect( 10 );
71+
72+
var element = $( "#tabs1" ).tabs({ disabled: false });
73+
tabs_disabled( element, false );
74+
// fully enabled -> partially disabled
75+
element.tabs( "disable", 1 );
76+
tabs_disabled( element, [ 1 ] );
77+
// partially disabled -> partially disabled
78+
element.tabs( "disable", 2 );
79+
tabs_disabled( element, [ 1, 2 ] );
80+
// already disabled tab, no change
81+
element.tabs( "disable", 2 );
82+
tabs_disabled( element, [ 1, 2 ] );
83+
// partially disabled -> fully disabled
84+
element.tabs( "disable", 0 );
85+
tabs_disabled( element, true );
9486
});
9587

9688
test('refresh', function() {

ui/jquery.ui.tabs.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,9 @@ $.widget( "ui.tabs", {
544544
disabled = true;
545545
} else {
546546
index = this._getIndex( index );
547+
if ( $.inArray( index, disabled ) !== -1 ) {
548+
return;
549+
}
547550
if ( $.isArray( disabled ) ) {
548551
disabled = $.merge( [ index ], disabled ).sort();
549552
} else {

0 commit comments

Comments
 (0)