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;