Skip to content

Commit f2a51be

Browse files
committed
Datepicker: Add missing handling for disabled option
1 parent b677f26 commit f2a51be

File tree

5 files changed

+37
-15
lines changed

5 files changed

+37
-15
lines changed

tests/unit/calendar/calendar_methods.js

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

1313
test( "enable / disable", function() {
14-
expect( 6 );
14+
expect( 8 );
1515

1616
var element = $( "#calendar" ).calendar();
1717

18-
ok( !element.calendar( "option", "disabled" ), "initially enabled" );
19-
ok( !element.hasClass( "ui-calendar-disabled" ), "does not have disabled class name" );
20-
2118
element.calendar( "disable" );
2219
ok( element.calendar( "option", "disabled" ), "disabled option is set" );
23-
ok( element.hasClass( "ui-calendar-disabled" ), "calendar has disabled class name" );
20+
ok( element.hasClass( "ui-calendar-disabled" ), "has disabled widget class name" );
21+
ok( element.hasClass( "ui-state-disabled" ), "has disabled state class name" );
22+
equal( element.attr( "aria-disabled" ), "true", "has ARIA disabled" );
2423

2524
element.calendar( "enable" );
2625
ok( !element.calendar( "option", "disabled" ), "enabled after enable() call" );
27-
ok( !element.hasClass( "ui-calendar-disabled" ), "no longer has disabled class name" );
26+
ok( !element.hasClass( "ui-calendar-disabled" ), "no longer has disabled widget class name" );
27+
ok( !element.hasClass( "ui-state-disabled" ), "no longer has disabled state class name" );
28+
equal( element.attr( "aria-disabled" ), "false", "no longer has ARIA disabled" );
2829
});
2930

3031
test( "widget", function() {

tests/unit/datepicker/datepicker_methods.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,24 @@ test( "destroy", function() {
1818
});
1919

2020
test( "enable / disable", function() {
21-
expect( 6 );
21+
expect( 10 );
2222

2323
var input = TestHelpers.datepicker.init( "#datepicker" ),
24-
widget = input.datepicker( "widget" );
25-
26-
ok( !input.datepicker( "option", "disabled" ), "initially enabled" );
27-
ok( !widget.hasClass( "ui-datepicker-disabled" ), "does not have disabled class name" );
24+
calendar = input.datepicker( "widget" );
2825

2926
input.datepicker( "disable" );
3027
ok( input.datepicker( "option", "disabled" ), "disabled option is set" );
31-
ok( widget.hasClass( "ui-datepicker-disabled" ), "datepicker has disabled class name" );
28+
ok( calendar.hasClass( "ui-datepicker-disabled" ), "has disabled widget class name" );
29+
ok( input.hasClass( "ui-state-disabled" ), "has disabled state class name" );
30+
equal( input.attr( "aria-disabled" ), "true", "has ARIA disabled" );
31+
equal( input.attr( "disabled" ), "disabled", "input disabled" );
3232

3333
input.datepicker( "enable" );
3434
ok( !input.datepicker( "option", "disabled" ), "enabled after enable() call" );
35-
ok( !widget.hasClass( "ui-datepicker-disabled" ), "no longer has disabled class name" );
35+
ok( !calendar.hasClass( "ui-datepicker-disabled" ), "no longer has disabled widget class name" );
36+
ok( !input.hasClass( "ui-state-disabled" ), "no longer has disabled state class name" );
37+
equal( input.attr( "aria-disabled" ), "false", "no longer has ARIA disabled" );
38+
equal( input.attr( "disabled" ), undefined, "input no longer disabled" );
3639
});
3740

3841
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
@@ -548,6 +548,12 @@ return $.widget( "ui.calendar", {
548548
this._createButtons();
549549
}
550550

551+
if ( key === "disabled" ) {
552+
this.element
553+
.toggleClass( "ui-state-disabled", value )
554+
.attr( "aria-disabled", value );
555+
}
556+
551557
if ( key === "eachDay" ) {
552558
this.date.eachDay = value;
553559
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",
@@ -319,6 +319,17 @@ widget = $.widget( "ui.datepicker", {
319319
this.element.val( this.calendarInstance.value() );
320320
}
321321

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

0 commit comments

Comments
 (0)