Skip to content

Commit 12b883d

Browse files
Calendar: Remove aria-readonly and apply the appropriate aria-label based on the readOnly option value (#27898)
Co-authored-by: ksercs <[email protected]>
1 parent 7043993 commit 12b883d

File tree

29 files changed

+105
-0
lines changed

29 files changed

+105
-0
lines changed

packages/devextreme/js/__internal/ui/calendar/m_calendar.ts

+17
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,7 @@ const Calendar = Editor.inherit({
726726
this._updateNavigatorLabels();
727727

728728
this.setAria('role', 'application');
729+
this._updateAriaLabelAndRole();
729730

730731
this._moveToClosestAvailableDate();
731732
},
@@ -744,6 +745,18 @@ const Calendar = Editor.inherit({
744745
}
745746
},
746747

748+
_updateAriaLabelAndRole() {
749+
const readOnly = this.option('readOnly');
750+
const $element = this.$element();
751+
752+
const aria = {
753+
role: readOnly ? 'group' : undefined,
754+
label: readOnly ? messageLocalization.format('dxCalendar-readOnlyLabel') : undefined,
755+
};
756+
757+
this.setAria(aria, $element);
758+
},
759+
747760
_setAriaReadonly: noop,
748761

749762
_getKeyboardListeners() {
@@ -1542,6 +1555,10 @@ const Calendar = Editor.inherit({
15421555
case 'showTodayButton':
15431556
this._invalidate();
15441557
break;
1558+
case 'readOnly':
1559+
this.callBase(args);
1560+
this._updateAriaLabelAndRole();
1561+
break;
15451562
case 'skipFocusCheck':
15461563
break;
15471564
case '_todayDate':

packages/devextreme/js/localization/messages/ar.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "أحمر",
316317
"dxColorView-ariaGreen": "أخضر",

packages/devextreme/js/localization/messages/ca.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Vermell",
316317
"dxColorView-ariaGreen": "Verd",

packages/devextreme/js/localization/messages/cs.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Červená",
316317
"dxColorView-ariaGreen": "Zelená",

packages/devextreme/js/localization/messages/de.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rot",
316317
"dxColorView-ariaGreen": "Grün",

packages/devextreme/js/localization/messages/el.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Κόκκινο",
316317
"dxColorView-ariaGreen": "Πράσινο",

packages/devextreme/js/localization/messages/en.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Red",
316317
"dxColorView-ariaGreen": "Green",

packages/devextreme/js/localization/messages/es.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rojo",
316317
"dxColorView-ariaGreen": "Verde",

packages/devextreme/js/localization/messages/fa.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "قرمز",
316317
"dxColorView-ariaGreen": "سبز",

packages/devextreme/js/localization/messages/fi.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Punainen",
316317
"dxColorView-ariaGreen": "Vihreä",

packages/devextreme/js/localization/messages/fr.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rouge",
316317
"dxColorView-ariaGreen": "Vert",

packages/devextreme/js/localization/messages/hu.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Piros",
316317
"dxColorView-ariaGreen": "Zöld",

packages/devextreme/js/localization/messages/it.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rosso",
316317
"dxColorView-ariaGreen": "Verde",

packages/devextreme/js/localization/messages/ja.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "",
316317
"dxColorView-ariaGreen": "",

packages/devextreme/js/localization/messages/lt.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Raudona",
316317
"dxColorView-ariaGreen": "Žalia",

packages/devextreme/js/localization/messages/lv.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Sarkans",
316317
"dxColorView-ariaGreen": "Zaļš",

packages/devextreme/js/localization/messages/nb.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rød",
316317
"dxColorView-ariaGreen": "Grønn",

packages/devextreme/js/localization/messages/nl.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rood",
316317
"dxColorView-ariaGreen": "Groen",

packages/devextreme/js/localization/messages/pl.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "czerwony",
316317
"dxColorView-ariaGreen": "zielony",

packages/devextreme/js/localization/messages/pt.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Vermelho",
316317
"dxColorView-ariaGreen": "Verde",

packages/devextreme/js/localization/messages/ro.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Roșu",
316317
"dxColorView-ariaGreen": "Verde",

packages/devextreme/js/localization/messages/ru.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Красный",
316317
"dxColorView-ariaGreen": "Зеленый",

packages/devextreme/js/localization/messages/sl.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Rdeča",
316317
"dxColorView-ariaGreen": "Zelena",

packages/devextreme/js/localization/messages/sv.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Röd",
316317
"dxColorView-ariaGreen": "Grön",

packages/devextreme/js/localization/messages/tr.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Kırmızı",
316317
"dxColorView-ariaGreen": "Yeşil",

packages/devextreme/js/localization/messages/vi.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "Đỏ",
316317
"dxColorView-ariaGreen": "Xanh lá",

packages/devextreme/js/localization/messages/zh-tw.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "紅色",
316317
"dxColorView-ariaGreen": "綠色",

packages/devextreme/js/localization/messages/zh.json

+1
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@
311311
"dxCalendar-captionCenturyLabel": "Century selection",
312312
"dxCalendar-selectedDate": "The selected date is {0}",
313313
"dxCalendar-selectedDateRange": "The selected date range is from {0} to {1}",
314+
"dxCalendar-readOnlyLabel": "Read-only calendar",
314315

315316
"dxColorView-ariaRed": "红色",
316317
"dxColorView-ariaGreen": "绿色",

packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/calendar.tests.js

+61
Original file line numberDiff line numberDiff line change
@@ -4617,6 +4617,67 @@ QUnit.module('Aria accessibility', {
46174617
fx.off = false;
46184618
}
46194619
}, () => {
4620+
QUnit.test('aria-label should be "Read-only calendar" and role = group when readOnly option is true', function(assert) {
4621+
const $element = this.$element;
4622+
4623+
$element.dxCalendar({
4624+
readOnly: true
4625+
}).dxCalendar('instance');
4626+
4627+
assert.strictEqual($element.attr('aria-label'), 'Read-only calendar', 'aria-label is set correctly');
4628+
assert.strictEqual($element.attr('role'), 'group', 'role is set correctly');
4629+
});
4630+
4631+
QUnit.test('aria-label and role should be removed when readOnly option is false', function(assert) {
4632+
const $element = this.$element;
4633+
4634+
$element.dxCalendar({
4635+
readOnly: false
4636+
}).dxCalendar('instance');
4637+
4638+
assert.notOk($element.attr('aria-label'), 'aria-label is not set');
4639+
assert.notOk($element.attr('role'), 'role is not set');
4640+
});
4641+
4642+
QUnit.test('aria-label and role should be removed when readOnly option is set to false on runtime', function(assert) {
4643+
const $element = this.$element;
4644+
4645+
const calendar = $element.dxCalendar({
4646+
readOnly: true
4647+
}).dxCalendar('instance');
4648+
4649+
calendar.option('readOnly', false);
4650+
4651+
assert.notOk($element.attr('aria-label'), 'aria-label is removed');
4652+
assert.notOk($element.attr('role'), 'role is removed');
4653+
});
4654+
4655+
QUnit.test('aria-label and role should be setted when readOnly option is set to true on runtime', function(assert) {
4656+
const $element = this.$element;
4657+
4658+
const calendar = $element.dxCalendar({
4659+
readOnly: false
4660+
}).dxCalendar('instance');
4661+
4662+
calendar.option('readOnly', true);
4663+
4664+
assert.strictEqual($element.attr('aria-label'), 'Read-only calendar', 'aria-label is set correctly');
4665+
assert.strictEqual($element.attr('role'), 'group', 'role is set correctly');
4666+
});
4667+
4668+
QUnit.test('aria-label attribute should be equal to custom localized text', function(assert) {
4669+
const localizedText = 'For Testing';
4670+
localization.loadMessages({ 'en': { 'dxCalendar-readOnlyLabel': localizedText } });
4671+
4672+
const $element = this.$element;
4673+
4674+
$element.dxCalendar({
4675+
readOnly: true
4676+
});
4677+
4678+
assert.strictEqual($element.attr('aria-label'), localizedText, 'aria-label is set correctly');
4679+
});
4680+
46204681
QUnit.test('aria-activedescendant on views wrapper should point to the focused cell', function(assert) {
46214682
const $element = this.$element;
46224683

0 commit comments

Comments
 (0)