Skip to content

Commit 88b420a

Browse files
author
marker dao ®
committed
feat(radio): Cover corner
1 parent 51fafc1 commit 88b420a

3 files changed

Lines changed: 31 additions & 3 deletions

File tree

e2e/testcafe-devextreme/tests/accessibility/radioGroup.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ const interactiveItemsConfiguration: Configuration = {
4545

4646
itemElement.append($button);
4747
},
48+
(itemData, _, itemElement) => {
49+
itemElement.text(itemData.text);
50+
},
4851
],
4952
},
5053
};

packages/devextreme/js/__internal/ui/radio_group/m_radio_collection.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class RadioCollection extends CollectionWidget<Properties> {
5959
const { itemData, itemElement } = args;
6060
const { html } = itemData;
6161

62+
const $itemElement = $(itemElement);
6263
const contentId = `dx-${new Guid()}`;
6364

6465
if (!html) {
@@ -68,7 +69,7 @@ class RadioCollection extends CollectionWidget<Properties> {
6869

6970
const $radioContainer = $('<div>').append($radio).addClass(RADIO_VALUE_CONTAINER_CLASS);
7071

71-
$(itemElement).prepend($radioContainer);
72+
$itemElement.prepend($radioContainer);
7273

7374
const aria = {
7475
role: 'radio',
@@ -82,9 +83,10 @@ class RadioCollection extends CollectionWidget<Properties> {
8283
super._postprocessRenderItem(args);
8384

8485
if (!html) {
85-
const $itemContent = $(itemElement).find(`.${ITEM_CONTENT_CLASS}`);
86+
const $itemContent = $itemElement.find(`.${ITEM_CONTENT_CLASS}`);
87+
const $idTarget = $itemContent.length ? $itemContent : $itemElement;
8688

87-
$itemContent.attr('id', contentId);
89+
$idTarget.attr('id', contentId);
8890
}
8991
}
9092

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,29 @@ QUnit.module('Aria accessibility', {
396396
assert.strictEqual($radioContainer.attr('aria-labelledby'), contentId, `item[${index}] radio container aria-labelledby references content id`);
397397
});
398398
});
399+
400+
QUnit.test('Items with itemTemplate that replaces parent content: radio container aria-labelledby references item element id', function(assert) {
401+
helper.createWidget({
402+
items: ['Low', 'Normal', 'Urgent', 'High'],
403+
itemTemplate(itemData, _, itemElement) {
404+
itemElement.text(itemData);
405+
},
406+
});
407+
408+
helper.checkAttributes(helper.$widget, { role: 'radiogroup', tabindex: '0' }, 'widget');
409+
helper.checkItemsAttributes([], {});
410+
411+
helper.getItems().each((index, item) => {
412+
const $item = $(item);
413+
const $radioContainer = $item.find(`.${RADIO_VALUE_CONTAINER_CLASS}`);
414+
const itemId = $item.attr('id');
415+
416+
assert.ok(itemId, `item[${index}] has an id when item content is removed by template`);
417+
assert.strictEqual($radioContainer.attr('role'), 'radio', `item[${index}] radio container has role="radio"`);
418+
assert.strictEqual($radioContainer.attr('aria-checked'), 'false', `item[${index}] radio container has aria-checked="false"`);
419+
assert.strictEqual($radioContainer.attr('aria-labelledby'), itemId, `item[${index}] radio container aria-labelledby references item element id`);
420+
});
421+
});
399422
});
400423

401424
module('layout', moduleConfig, () => {

0 commit comments

Comments
 (0)