- commit
- 4dec67073ca62c798145c3c552d73436ec68d937
- parent
- 2026d28a7242ee4a33a29b3d0a0379492973c27a
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2023-06-07 13:05
support token list in role attribute
Diffstat
| M | lib/attrs.js | 28 | ++++++++++++++++------------ |
| M | test/test-role.js | 12 | ++++++++++++ |
2 files changed, 28 insertions, 12 deletions
diff --git a/lib/attrs.js b/lib/attrs.js
@@ -3,22 +3,26 @@ var constants = require('./constants.js');
3 3 // candidates can be passed for performance optimization
4 4 var getRole = function(el, candidates) {
5 5 if (el.hasAttribute('role')) {
6 -1 var role = el.getAttribute('role');
7 -1 if (!candidates || candidates.includes(role)) {
8 -1 return role;
9 -1 } else {
10 -1 return;
-1 6 var roles = el.getAttribute('role').split(/\s+/);
-1 7 if (roles.length > 1 && candidates) {
-1 8 return [roles, candidates];
11 9 }
12 -1 }
13 -1 var roles = candidates ? candidates : Object.keys(constants.roles);
14 -1 for (var role of roles) {
15 -1 var r = constants.roles[role];
16 -1 if (r) {
17 -1 var selector = (r.selectors || []).join(',');
18 -1 if (selector && el.matches(selector)) {
-1 10 for (var role of roles) {
-1 11 if (!candidates || candidates.includes(role)) {
19 12 return role;
20 13 }
21 14 }
-1 15 } else {
-1 16 var roles = candidates ? candidates : Object.keys(constants.roles);
-1 17 for (var role of roles) {
-1 18 var r = constants.roles[role];
-1 19 if (r) {
-1 20 var selector = (r.selectors || []).join(',');
-1 21 if (selector && el.matches(selector)) {
-1 22 return role;
-1 23 }
-1 24 }
-1 25 }
22 26 }
23 27 };
24 28
diff --git a/test/test-role.js b/test/test-role.js
@@ -62,6 +62,12 @@ describe('query', () => {
62 62 'contentinfo',
63 63 ]);
64 64 });
-1 65
-1 66 it('returns the first if there is more than one explicit role', () => {
-1 67 testbed.innerHTML = '<span role="generic link">';
-1 68 var actual = aria.getRole(testbed.children[0]);
-1 69 expect(actual).toEqual('generic');
-1 70 });
65 71 });
66 72
67 73 describe('closest', () => {
@@ -104,5 +110,11 @@ describe('query', () => {
104 110 var actual = aria.querySelectorAll(testbed, 'none');
105 111 expect(actual.length).toEqual(2);
106 112 });
-1 113
-1 114 it('matches all explicitly given roles', () => {
-1 115 testbed.innerHTML = '<span role="generic link">';
-1 116 var actual = aria.querySelectorAll(testbed, 'link');
-1 117 expect(actual.length).toEqual(1);
-1 118 }
107 119 });
108 120 });