Skip to content
This repository was archived by the owner on Jan 13, 2025. It is now read-only.

Commit c4fc932

Browse files
williamernestKenneth G. Franqueiro
authored andcommitted
fix(list): Update clickable elements selector (#3312)
(cherry picked from commit c8ded0a)
1 parent 85000e8 commit c4fc932

File tree

4 files changed

+32
-14
lines changed

4 files changed

+32
-14
lines changed

packages/mdc-list/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ single list item to become selected or deselected.
138138

139139
```html
140140
<ul id="my-list" class="mdc-list" aria-orientation="vertical">
141-
<li class="mdc-list-item">Single-line item</li>
141+
<li class="mdc-list-item" tabindex="0">Single-line item</li>
142142
<li class="mdc-list-item">Single-line item</li>
143143
<li class="mdc-list-item">Single-line item</li>
144144
</ul>
@@ -158,7 +158,7 @@ the `mdc-list-item--selected` class and `aria-selected="true"` attribute before
158158
```html
159159
<ul id="my-list" class="mdc-list" aria-orientation="vertical">
160160
<li class="mdc-list-item">Single-line item</li>
161-
<li class="mdc-list-item mdc-list-item--selected" aria-selected="true">Single-line item</li>
161+
<li class="mdc-list-item mdc-list-item--selected" aria-selected="true" tabindex="0">Single-line item</li>
162162
<li class="mdc-list-item">Single-line item</li>
163163
</ul>
164164
```

packages/mdc-list/constants.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ const cssClasses = {
2424
/** @enum {string} */
2525
const strings = {
2626
ARIA_ORIENTATION: 'aria-orientation',
27-
ARIA_ORIENTATION_VERTICAL: 'vertical',
27+
ARIA_ORIENTATION_HORIZONTAL: 'horizontal',
2828
ARIA_SELECTED: 'aria-selected',
29-
FOCUSABLE_CHILD_ELEMENTS: 'button:not(:disabled), a',
29+
FOCUSABLE_CHILD_ELEMENTS: `.${cssClasses.LIST_ITEM_CLASS} button:not(:disabled), .${cssClasses.LIST_ITEM_CLASS} a`,
3030
ENABLED_ITEMS_SELECTOR: '.mdc-list-item:not(.mdc-list-item--disabled)',
3131
};
3232

packages/mdc-list/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class MDCList extends MDCComponent {
6565

6666
layout() {
6767
const direction = this.root_.getAttribute(strings.ARIA_ORIENTATION);
68-
this.vertical = direction === strings.ARIA_ORIENTATION_VERTICAL;
68+
this.vertical = direction !== strings.ARIA_ORIENTATION_HORIZONTAL;
6969

7070
// List items need to have at least tabindex=-1 to be focusable.
7171
[].slice.call(this.root_.querySelectorAll('.mdc-list-item:not([tabindex])'))

test/unit/mdc-list/mdc-list.test.js

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ function getFixture() {
4040
`;
4141
}
4242

43-
function setupTest() {
44-
const root = getFixture();
43+
function setupTest(root = getFixture()) {
4544
const MockFoundationCtor = td.constructor(MDCListFoundation);
4645
const mockFoundation = new MockFoundationCtor();
4746
const component = new MDCList(root, mockFoundation);
@@ -54,6 +53,25 @@ test('attachTo initializes and returns a MDCList instance', () => {
5453
assert.isTrue(MDCList.attachTo(getFixture()) instanceof MDCList);
5554
});
5655

56+
test('component calls setVerticalOrientation on the foundation if aria-orientation is not set', () => {
57+
const {mockFoundation} = setupTest();
58+
td.verify(mockFoundation.setVerticalOrientation(true), {times: 1});
59+
});
60+
61+
test('component calls setVerticalOrientation(false) on the foundation if aria-orientation=horizontal', () => {
62+
const root = getFixture();
63+
root.setAttribute('aria-orientation', 'horizontal');
64+
const {mockFoundation} = setupTest(root);
65+
td.verify(mockFoundation.setVerticalOrientation(false), {times: 1});
66+
});
67+
68+
test('component calls setVerticalOrientation(true) on the foundation if aria-orientation=vertical', () => {
69+
const root = getFixture();
70+
root.setAttribute('aria-orientation', 'vertical');
71+
const {mockFoundation} = setupTest(root);
72+
td.verify(mockFoundation.setVerticalOrientation(true), {times: 1});
73+
});
74+
5775
test('#adapter.getListItemCount returns correct number of list items', () => {
5876
const {root, component} = setupTest();
5977
document.body.appendChild(root);
@@ -177,33 +195,33 @@ test('#adapter.focusItemAtIndex focuses the list item at the index specified', (
177195
});
178196

179197
test('adapter#isListItem returns true if the element is a list item', () => {
180-
const {root, component} = setupTest(true);
198+
const {root, component} = setupTest();
181199
const item1 = root.querySelectorAll('.mdc-list-item')[0];
182200
assert.isTrue(component.getDefaultFoundation().adapter_.isListItem(item1));
183201
});
184202

185203
test('adapter#isListItem returns false if the element is a not a list item', () => {
186-
const {root, component} = setupTest(true);
204+
const {root, component} = setupTest();
187205
const item1 = root.querySelectorAll('.mdc-list-item button')[0];
188206
assert.isFalse(component.getDefaultFoundation().adapter_.isListItem(item1));
189207
});
190208

191209
test('adapter#isElementFocusable returns true if the element is a focusable list item sub-element', () => {
192-
const {root, component} = setupTest(true);
210+
const {root, component} = setupTest();
193211
const item1 = root.querySelectorAll('.mdc-list-item button')[0];
194212
assert.isTrue(component.getDefaultFoundation().adapter_.isElementFocusable(item1));
195213
});
196214

197215
test('adapter#isElementFocusable returns false if the element is not a focusable list item sub-element',
198216
() => {
199-
const {root, component} = setupTest(true);
217+
const {root, component} = setupTest();
200218
const item1 = root.querySelectorAll('.mdc-list-item')[2];
201219
assert.isFalse(component.getDefaultFoundation().adapter_.isElementFocusable(item1));
202220
});
203221

204222
test('adapter#isElementFocusable returns false if the element is null/undefined',
205223
() => {
206-
const {component} = setupTest(true);
224+
const {component} = setupTest();
207225
assert.isFalse(component.getDefaultFoundation().adapter_.isElementFocusable());
208226
});
209227

@@ -231,8 +249,8 @@ test('layout adds tabindex=-1 to all list item button/a elements', () => {
231249

232250
test('vertical calls setVerticalOrientation on foundation', () => {
233251
const {component, mockFoundation} = setupTest();
234-
component.vertical = true;
235-
td.verify(mockFoundation.setVerticalOrientation(true), {times: 1});
252+
component.vertical = false;
253+
td.verify(mockFoundation.setVerticalOrientation(false), {times: 1});
236254
});
237255

238256
test('wrapFocus calls setWrapFocus on foundation', () => {

0 commit comments

Comments
 (0)