aria-api

access ARIA information from JavaScript
git clone https://git.ce9e.org/aria-api.git

commit
e21f6d62795dfcee089a5ea25817518c6082f82b
parent
d07b2afed95eccf343fc6bf2ae19fd01004cdf3b
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-01-30 08:43
change how aliases work

Diffstat

M lib/attrs.js 9 +++++++--
M lib/constants.js 15 +++++++--------
M test/test-role.js 6 ++++++

3 files changed, 20 insertions, 10 deletions


diff --git a/lib/attrs.js b/lib/attrs.js

@@ -8,10 +8,15 @@ var flatten = function(arr) {
    8     8 	return [].concat.apply([], arr);
    9     9 };
   10    10 
   -1    11 var normalizeRoles = function(roles) {
   -1    12 	return unique(roles.map(r => constants.aliases[r] || r));
   -1    13 };
   -1    14 
   11    15 // candidates can be passed for performance optimization
   12    16 const getRole = function(el, candidates) {
   13    17 	if (el.hasAttribute('role')) {
   14    -1 		const roles = el.getAttribute('role').toLowerCase().split(/\s+/);
   -1    18 		let roles = el.getAttribute('role').toLowerCase().split(/\s+/);
   -1    19 		roles = normalizeRoles(roles);
   15    20 		if (roles.length > 1 && candidates) {
   16    21 			return [roles, candidates];
   17    22 		}
@@ -35,7 +40,7 @@ const getRole = function(el, candidates) {
   35    40 };
   36    41 
   37    42 const hasRole = function(el, roles) {
   38    -1 	const subRoles = roles.map(role => {
   -1    43 	const subRoles = normalizeRoles(roles).map(role => {
   39    44 		return (constants.roles[role] || {}).subRoles || [role];
   40    45 	});
   41    46 	return !!getRole(el, unique(flatten(subRoles)));

diff --git a/lib/constants.js b/lib/constants.js

@@ -348,6 +348,9 @@ exports.roles = {
  348   348 		selectors: ['nav'],
  349   349 		childRoles: ['doc-index', 'doc-pagelist', 'doc-toc'],
  350   350 	},
   -1   351 	none: {
   -1   352 		selectors: ['img[alt=""]'],
   -1   353 	},
  351   354 	note: {
  352   355 		childRoles: ['doc-notice', 'doc-tip'],
  353   356 	},
@@ -362,9 +365,6 @@ exports.roles = {
  362   365 	paragraph: {
  363   366 		selectors: ['p'],
  364   367 	},
  365    -1 	presentation: {
  366    -1 		selectors: ['img[alt=""]'],
  367    -1 	},
  368   368 	progressbar: {
  369   369 		selectors: ['progress'],
  370   370 		defaults: {
@@ -512,7 +512,6 @@ exports.roles = {
  512   512 			'document',
  513   513 			'none',
  514   514 			'generic',
  515    -1 			'presentation',
  516   515 			'range',
  517   516 			'rowgroup',
  518   517 			'section',
@@ -631,10 +630,10 @@ for (const role in exports.roles) {
  631   630 		}
  632   631 	}
  633   632 }
  634    -1 exports.roles['none'] = exports.roles['none'] || {};
  635    -1 exports.roles['none'].subRoles = ['none', 'presentation'];
  636    -1 exports.roles['presentation'] = exports.roles['presentation'] || {};
  637    -1 exports.roles['presentation'].subRoles = ['presentation', 'none'];
   -1   633 
   -1   634 exports.aliases = {
   -1   635 	'presentation': 'none',
   -1   636 };
  638   637 
  639   638 exports.nameFromDescendant = {
  640   639 	'figure': 'figcaption',

diff --git a/test/test-role.js b/test/test-role.js

@@ -74,6 +74,12 @@ describe('query', () => {
   74    74 			var actual = aria.getRole(testbed.children[0]);
   75    75 			expect(actual).toEqual('link');
   76    76 		});
   -1    77 
   -1    78 		it('does treat presentation as alias of none', () => {
   -1    79 			testbed.innerHTML = '<a role="presentation">';
   -1    80 			var actual = aria.getRole(testbed.children[0]);
   -1    81 			expect(actual).toEqual('none');
   -1    82 		});
   77    83 	});
   78    84 
   79    85 	describe('closest', () => {