Skip to content

Commit b6cf9a0

Browse files
committed
fixes
1 parent 942ae91 commit b6cf9a0

File tree

6 files changed

+35
-24
lines changed

6 files changed

+35
-24
lines changed

packages/devextreme-scss/scss/widgets/base/scheduler/_common.scss

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,6 @@ $scheduler-appointment-collector-margin: 3px;
77
$scheduler-appointment-collector-height: 22px;
88
$scheduler-popup-scrollable-content-padding: 20px;
99

10-
// NOTE: a11y aria-live container must be visible to allow screen readers read it
11-
.dx-scheduler-a11y-status-container {
12-
position: fixed;
13-
left: 0;
14-
top: 0;
15-
clip: rect(1px, 1px, 1px, 1px);
16-
clip-path: polygon(0 0);
17-
}
18-
1910
.dx-scheduler-legacy-appointment-popup {
2011
.dx-popup-content {
2112
padding-top: 0;

packages/devextreme/js/__internal/scheduler/__tests__/__mock__/model/scheduler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class SchedulerModel {
2626
}
2727

2828
getStatusContent(): string {
29-
return this.container.querySelector('.dx-scheduler-a11y-status-container')?.textContent ?? '';
29+
return this.container.querySelector('.dx-screen-reader-only')?.textContent ?? '';
3030
}
3131

3232
getAppointment(text?: string): AppointmentModel<HTMLDivElement | null> {

packages/devextreme/js/__internal/ui/m_validation_summary.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import ValidationEngine from './m_validation_engine';
1414
import type ValidationGroup from './m_validation_group';
1515

1616
const VALIDATION_SUMMARY_CLASS = 'dx-validationsummary';
17-
const VALIDATION_SUMMARY_SCREEN_READER_ONLY = 'dx-screen-reader-only';
17+
const SCREEN_READER_ONLY_CLASS = 'dx-screen-reader-only';
1818
const ITEM_CLASS = `${VALIDATION_SUMMARY_CLASS}-item`;
1919
const ITEM_DATA_KEY = `${VALIDATION_SUMMARY_CLASS}-item-data`;
2020

@@ -143,12 +143,24 @@ class ValidationSummary extends CollectionWidget<ValidationSummaryProperties> {
143143
}
144144
}
145145

146+
_removeAnnounceContainer(): void {
147+
this._$announceContainer?.remove();
148+
this._$announceContainer = undefined;
149+
}
150+
151+
_renderAnnounceContainer(): void {
152+
this._removeAnnounceContainer();
153+
154+
this._$announceContainer = $('<div>')
155+
.addClass(SCREEN_READER_ONLY_CLASS)
156+
.attr('role', 'alert')
157+
.appendTo(this.element());
158+
}
159+
146160
_announceText(text: string): void {
147-
if (!this._$announceContainer) {
148-
return;
149-
}
161+
this._renderAnnounceContainer();
150162

151-
this._$announceContainer.text(text);
163+
this._$announceContainer?.text(text);
152164
}
153165

154166
_itemValidationHandler({ isValid, validator, brokenRules }): void {
@@ -197,11 +209,6 @@ class ValidationSummary extends CollectionWidget<ValidationSummaryProperties> {
197209
_initMarkup(): void {
198210
this.$element().addClass(VALIDATION_SUMMARY_CLASS);
199211

200-
this._$announceContainer = $('<div>')
201-
.addClass(VALIDATION_SUMMARY_SCREEN_READER_ONLY)
202-
.attr('role', 'alert')
203-
.appendTo(this.element());
204-
205212
super._initMarkup();
206213
}
207214

@@ -230,6 +237,7 @@ class ValidationSummary extends CollectionWidget<ValidationSummaryProperties> {
230237
}
231238

232239
_dispose(): void {
240+
this._removeAnnounceContainer();
233241
super._dispose();
234242
this._unsubscribeGroup();
235243
}

packages/devextreme/testing/tests/DevExpress.ui.widgets.editors/validationSummary.markup.tests.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ QUnit.module('Accessibility', {
475475
message: messages[1],
476476
validator: validator,
477477
}],
478-
validators: [validator]
478+
validators: [validator],
479479
});
480480

481481
const items = summary.option('items');
@@ -488,6 +488,18 @@ QUnit.module('Accessibility', {
488488

489489
QUnit.test('ValidationSummary announce container should have role=alert attribute', function(assert) {
490490
const summary = this.fixture.createSummary();
491+
const validator = sinon.createStubInstance(Validator);
492+
493+
summary._groupValidationHandler({
494+
isValid: false,
495+
brokenRules: [{
496+
type: 'async',
497+
message: 'test message',
498+
validator: validator,
499+
}],
500+
validators: [validator],
501+
});
502+
491503
const $announceContainer = summary.$element().find('.dx-screen-reader-only');
492504

493505
assert.strictEqual($announceContainer.attr('role'), 'alert', 'role=alert is present');

packages/devextreme/testing/tests/DevExpress.ui.widgets.form/form.tests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4257,7 +4257,7 @@ QUnit.module('reset', () => {
42574257

42584258
const validationItemsBeforeReset = $(`.${FORM_VALIDATION_SUMMARY}`).children();
42594259

4260-
assert.strictEqual(validationItemsBeforeReset.length, 2, 'form has validation summary items before reset');
4260+
assert.strictEqual(validationItemsBeforeReset.length, 3, 'form has validation summary items before reset');
42614261

42624262
form.reset();
42634263

@@ -4284,7 +4284,7 @@ QUnit.module('reset', () => {
42844284

42854285
const summaryItemsAfterValidate = $(`.${FORM_VALIDATION_SUMMARY}`).children();
42864286

4287-
assert.strictEqual(summaryItemsAfterValidate.length, 2, 'form has validation summary after validation');
4287+
assert.strictEqual(summaryItemsAfterValidate.length, 3, 'form has validation summary after validation');
42884288
});
42894289

42904290
[

packages/testcafe-models/scheduler/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const CLASS = {
3434
workspaceBothScrollbar: 'dx-scheduler-work-space-both-scrollbar',
3535

3636
workSpace: 'dx-scheduler-work-space',
37-
statusContainer: 'dx-scheduler-a11y-status-container ',
37+
statusContainer: 'dx-screen-reader-only',
3838
};
3939

4040
const ViewTypeClassesMap = {

0 commit comments

Comments
 (0)