get-explicit-role.js 824 B

1234567891011121314151617181920212223242526
  1. import isValidRole from './is-valid-role';
  2. import { getNodeFromTree, tokenList } from '../../core/utils';
  3. import AbstractVirtuaNode from '../../core/base/virtual-node/abstract-virtual-node';
  4. function getExplicitRole(vNode, { fallback, abstracts, dpub } = {}) {
  5. vNode = vNode instanceof AbstractVirtuaNode ? vNode : getNodeFromTree(vNode);
  6. if (vNode.props.nodeType !== 1) {
  7. return null;
  8. }
  9. const roleAttr = (vNode.attr('role') || '').trim().toLowerCase();
  10. const roleList = fallback ? tokenList(roleAttr) : [roleAttr];
  11. // Get the first valid role:
  12. const firstValidRole = roleList.find(role => {
  13. if (!dpub && role.substr(0, 4) === 'doc-') {
  14. return false;
  15. }
  16. return isValidRole(role, { allowAbstract: abstracts });
  17. });
  18. return firstValidRole || null;
  19. }
  20. export default getExplicitRole;