is-aria-role-allowed-on-element.js 1017 B

1234567891011121314151617181920212223242526272829303132
  1. import { getNodeFromTree } from '../../core/utils';
  2. import AbstractVirtuaNode from '../../core/base/virtual-node/abstract-virtual-node';
  3. import getImplicitRole from './implicit-role';
  4. import getElementSpec from '../standards/get-element-spec';
  5. /**
  6. * @description validate if a given role is an allowed ARIA role for the supplied node
  7. * @method isAriaRoleAllowedOnElement
  8. * @param {HTMLElement} node the node to verify
  9. * @param {String} role aria role to check
  10. * @return {Boolean} retruns true/false
  11. */
  12. function isAriaRoleAllowedOnElement(node, role) {
  13. const vNode =
  14. node instanceof AbstractVirtuaNode ? node : getNodeFromTree(node);
  15. const implicitRole = getImplicitRole(vNode);
  16. // always allow the explicit role to match the implicit role
  17. if (role === implicitRole) {
  18. return true;
  19. }
  20. const spec = getElementSpec(vNode);
  21. if (Array.isArray(spec.allowedRoles)) {
  22. return spec.allowedRoles.includes(role);
  23. }
  24. return !!spec.allowedRoles;
  25. }
  26. export default isAriaRoleAllowedOnElement;