no-naming-method-matches.js
728 Bytes
import { getExplicitRole } from '../commons/aria';
import { querySelectorAll } from '../core/utils';
import getElementSpec from '../commons/standards/get-element-spec';
/**
* Filter out elements that have a naming method (i.e. img[alt], table > caption, etc.)
*/
function noNamingMethodMatches(node, virtualNode) {
const { namingMethods } = getElementSpec(virtualNode);
if (namingMethods && namingMethods.length !== 0) {
return false;
}
// Additionally, ignore combobox that get their name from a descendant input:
if (
getExplicitRole(virtualNode) === 'combobox' &&
querySelectorAll(virtualNode, 'input:not([type="hidden"])').length
) {
return false;
}
return true;
}
export default noNamingMethodMatches;