aria-api

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

commit
8201a5e538ce6f9c4678ee2f960f6d2bab6818a5
parent
18eee65d74f442228f8090b0363190d8cfea1a55
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2024-06-22 20:34
name: fix ongoing labelledby

Diffstat

M lib/name.js 20 ++++++++++----------

1 files changed, 10 insertions, 10 deletions


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

@@ -38,7 +38,7 @@ const getPseudoContent = function(el, pseudoSelector) {
   38    38 	return addSpaces(ret.join(''), el, pseudoSelector);
   39    39 };
   40    40 
   41    -1 const getContent = function(root, visited) {
   -1    41 const getContent = function(root, ongoingLabelledBy, visited) {
   42    42 	const children = atree.getChildNodes(root);
   43    43 
   44    44 	let ret = '';
@@ -50,7 +50,7 @@ const getContent = function(root, visited) {
   50    50 			if (node.tagName.toLowerCase() === 'br') {
   51    51 				ret += '\n';
   52    52 			} else {
   53    -1 				ret += getName(node, true, visited);
   -1    53 				ret += getName(node, true, ongoingLabelledBy, visited);
   54    54 			}
   55    55 		}
   56    56 	}
@@ -65,7 +65,7 @@ const allowNameFromContent = function(el) {
   65    65 	}
   66    66 };
   67    67 
   68    -1 const getName = function(el, recursive, visited, directReference) {
   -1    68 const getName = function(el, recursive, ongoingLabelledBy, visited, directReference) {
   69    69 	let ret = '';
   70    70 
   71    71 	visited = visited || [];
@@ -81,11 +81,11 @@ const getName = function(el, recursive, visited, directReference) {
   81    81 	// handled in atree
   82    82 
   83    83 	// B
   84    -1 	if (!recursive && el.matches('[aria-labelledby]')) {
   -1    84 	if (!ongoingLabelledBy && el.matches('[aria-labelledby]')) {
   85    85 		const ids = el.getAttribute('aria-labelledby').split(/\s+/);
   86    86 		const strings = ids.map(id => {
   87    87 			const label = document.getElementById(id);
   88    -1 			return label ? getName(label, true, visited, true) : '';
   -1    88 			return label ? getName(label, true, true, visited, true) : '';
   89    89 		});
   90    90 		ret = strings.join(' ');
   91    91 	}
@@ -97,7 +97,7 @@ const getName = function(el, recursive, visited, directReference) {
   97    97 		} else if (query.matches(el, 'combobox,listbox')) {
   98    98 			const selected = query.querySelector(el, ':selected') || query.querySelector(el, 'option');
   99    99 			if (selected) {
  100    -1 				ret = getName(selected, recursive, visited);
   -1   100 				ret = getName(selected, recursive, ongoingLabelledBy, visited);
  101   101 			} else {
  102   102 				ret = el.value || '';
  103   103 			}
@@ -115,7 +115,7 @@ const getName = function(el, recursive, visited, directReference) {
  115   115 	// D
  116   116 	if (!ret.trim() && !recursive && el.labels) {
  117   117 		const strings = Array.prototype.map.call(el.labels, label => {
  118    -1 			return getName(label, true, visited);
   -1   118 			return getName(label, true, ongoingLabelledBy, visited);
  119   119 		});
  120   120 		ret = strings.join(' ');
  121   121 	}
@@ -130,7 +130,7 @@ const getName = function(el, recursive, visited, directReference) {
  130   130 			if (el.matches(selector)) {
  131   131 				const descendant = el.querySelector(constants.nameFromDescendant[selector]);
  132   132 				if (descendant) {
  133    -1 					ret = getName(descendant, true, visited);
   -1   133 					ret = getName(descendant, true, ongoingLabelledBy, visited);
  134   134 				}
  135   135 			}
  136   136 		}
@@ -148,7 +148,7 @@ const getName = function(el, recursive, visited, directReference) {
  148   148 	// F
  149   149 	// FIXME: menu is not mentioned in the spec
  150   150 	if (!ret.trim() && (recursive || allowNameFromContent(el) || el.closest('label')) && !query.matches(el, 'menu')) {
  151    -1 		ret = getContent(el, visited);
   -1   151 		ret = getContent(el, ongoingLabelledBy, visited);
  152   152 	}
  153   153 
  154   154 	if (!ret.trim() && query.matches(el, 'button')) {
@@ -196,7 +196,7 @@ const getDescription = function(el) {
  196   196 		const ids = el.getAttribute('aria-describedby').split(/\s+/);
  197   197 		const strings = ids.map(id => {
  198   198 			const label = document.getElementById(id);
  199    -1 			return label ? getName(label, true) : '';
   -1   199 			return label ? getName(label, true, true) : '';
  200   200 		});
  201   201 		ret = strings.join(' ');
  202   202 	} else if (el.matches('[aria-description]')) {