Skip to content

Commit 4538652

Browse files
committed
Datepicker: Add missing handling for disabled option
1 parent f92f852 commit 4538652

File tree

5 files changed

+43
-21
lines changed

5 files changed

+43
-21
lines changed

tests/unit/calendar/calendar_methods.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,21 @@ test( "destroy", function() {
1515
});
1616

1717
test( "enable / disable", function() {
18-
expect( 6 );
18+
expect( 8 );
1919

2020
var element = $( "#calendar" ).calendar();
2121

22-
ok( !element.calendar( "option", "disabled" ), "initially enabled" );
23-
ok( !element.hasClass( "ui-calendar-disabled" ), "does not have disabled class name" );
24-
2522
element.calendar( "disable" );
2623
ok( element.calendar( "option", "disabled" ), "disabled option is set" );
27-
ok( element.hasClass( "ui-calendar-disabled" ), "calendar has disabled class name" );
24+
ok( element.hasClass( "ui-calendar-disabled" ), "has disabled widget class name" );
25+
ok( element.hasClass( "ui-state-disabled" ), "has disabled state class name" );
26+
equal( element.attr( "aria-disabled" ), "true", "has ARIA disabled" );
2827

2928
element.calendar( "enable" );
3029
ok( !element.calendar( "option", "disabled" ), "enabled after enable() call" );
31-
ok( !element.hasClass( "ui-calendar-disabled" ), "no longer has disabled class name" );
30+
ok( !element.hasClass( "ui-calendar-disabled" ), "no longer has disabled widget class name" );
31+
ok( !element.hasClass( "ui-state-disabled" ), "no longer has disabled state class name" );
32+
equal( element.attr( "aria-disabled" ), "false", "no longer has ARIA disabled" );
3233
});
3334

3435
test( "widget", function() {

tests/unit/datepicker/datepicker_methods.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,24 @@ test( "destroy", function() {
1717
});
1818

1919
test( "enable / disable", function() {
20-
expect( 6 );
21-
22-
var inp = TestHelpers.datepicker.init( "#datepicker" ),
23-
dp = inp.datepicker( "widget" );
24-
25-
ok( !inp.datepicker( "option", "disabled" ), "initially enabled" );
26-
ok( !dp.hasClass( "ui-datepicker-disabled" ), "does not have disabled class name" );
20+
expect( 10 );
2721

28-
inp.datepicker( "disable" );
29-
ok( inp.datepicker( "option", "disabled" ), "disabled option is set" );
30-
ok( dp.hasClass( "ui-datepicker-disabled" ), "datepicker has disabled class name" );
22+
var input = TestHelpers.datepicker.init( "#datepicker" ),
23+
calendar = input.datepicker( "widget" );
3124

32-
inp.datepicker( "enable" );
33-
ok( !inp.datepicker( "option", "disabled" ), "enabled after enable() call" );
34-
ok( !dp.hasClass( "ui-datepicker-disabled" ), "no longer has disabled class name" );
25+
input.datepicker( "disable" );
26+
ok( input.datepicker( "option", "disabled" ), "disabled option is set" );
27+
ok( calendar.hasClass( "ui-datepicker-disabled" ), "has disabled widget class name" );
28+
ok( input.hasClass( "ui-state-disabled" ), "has disabled state class name" );
29+
equal( input.attr( "aria-disabled" ), "true", "has ARIA disabled" );
30+
equal( input.attr( "disabled" ), "disabled", "input disabled" );
31+
32+
input.datepicker( "enable" );
33+
ok( !input.datepicker( "option", "disabled" ), "enabled after enable() call" );
34+
ok( !calendar.hasClass( "ui-datepicker-disabled" ), "no longer has disabled widget class name" );
35+
ok( !input.hasClass( "ui-state-disabled" ), "no longer has disabled state class name" );
36+
equal( input.attr( "aria-disabled" ), "false", "no longer has ARIA disabled" );
37+
equal( input.attr( "disabled" ), undefined, "input no longer disabled" );
3538
});
3639

3740
test( "widget", function() {

tests/unit/datepicker/datepicker_options.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ test( "appendTo", function() {
4141
});
4242

4343
test( "Pass-through options", function() {
44-
expect( 8 );
44+
expect( 9 );
4545

4646
var options = {
4747
"buttons": { "Test": $.noop },
4848
"dateFormat": { date: "full" },
49+
"disabled": true,
4950
"eachDay": function( day ) { day; },
5051
"max": new Date( 2000, 0, 1 ),
5152
"min": new Date( 2000, 0, 2 ),

ui/calendar.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,12 @@ return $.widget( "ui.calendar", {
532532
this._createButtons();
533533
}
534534

535+
if ( key === "disabled" ) {
536+
this.element
537+
.toggleClass( "ui-state-disabled", value )
538+
.attr( "aria-disabled", value );
539+
}
540+
535541
if ( key === "eachDay" ) {
536542
this.date.eachDay = value;
537543
this.refresh();

ui/datepicker.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
}(function( $ ) {
2828

2929
var widget,
30-
calendarOptions = [ "buttons", "dateFormat", "eachDay", "max", "min", "numberOfMonths", "showWeek" ];
30+
calendarOptions = [ "buttons", "dateFormat", "disabled", "eachDay", "max", "min", "numberOfMonths", "showWeek" ];
3131

3232
widget = $.widget( "ui.datepicker", {
3333
version: "@VERSION",
@@ -321,6 +321,17 @@ widget = $.widget( "ui.datepicker", {
321321
this.element.val( this.calendarInstance.value() );
322322
}
323323

324+
if ( key === "disabled" ) {
325+
this.element
326+
.prop( "disabled", value )
327+
.toggleClass( "ui-state-disabled", value )
328+
.attr( "aria-disabled", value );
329+
330+
if ( value ) {
331+
this.close();
332+
}
333+
}
334+
324335
if ( key === "position" ) {
325336
this.calendar.position( this._buildPosition() );
326337
}

0 commit comments

Comments
 (0)