axe-core
Version:
Accessibility engine for automated Web UI testing
33 lines (26 loc) • 1.02 kB
JavaScript
import { getNodeFromTree } from '../../core/utils';
import AbstractVirtuaNode from '../../core/base/virtual-node/abstract-virtual-node';
import getImplicitRole from './implicit-role';
import getElementSpec from '../standards/get-element-spec';
/**
* @description validate if a given role is an allowed ARIA role for the supplied node
* @method isAriaRoleAllowedOnElement
* @param {HTMLElement} node the node to verify
* @param {String} role aria role to check
* @return {Boolean} retruns true/false
*/
function isAriaRoleAllowedOnElement(node, role) {
const vNode =
node instanceof AbstractVirtuaNode ? node : getNodeFromTree(node);
const implicitRole = getImplicitRole(vNode);
// always allow the explicit role to match the implicit role
if (role === implicitRole) {
return true;
}
const spec = getElementSpec(vNode);
if (Array.isArray(spec.allowedRoles)) {
return spec.allowedRoles.includes(role);
}
return !!spec.allowedRoles;
}
export default isAriaRoleAllowedOnElement;