import { uniqueArray } from '../../core/utils'; import { getRole, allowedAttr, validateAttr } from '../../commons/aria'; /** * Check if each ARIA attribute on an element is allowed for its semantic role. * * Allowed ARIA attributes are taken from the `ariaRoles` standards object combining the roles `requiredAttrs` and `allowedAttrs` properties, as well as any global ARIA attributes from the `ariaAttrs` standards object. * * ##### Data: * * * * * * * * * * * * * *
TypeDescription
String[]List of all unallowed aria attributes and their value
* * @memberof checks * @return {Boolean} True if each aria attribute is allowed. False otherwise. */ function ariaAllowedAttrEvaluate(node, options, virtualNode) { const invalid = []; const role = getRole(virtualNode); const attrs = virtualNode.attrNames; let allowed = allowedAttr(role); // @deprecated: allowed attr options to pass more attrs. // configure the standards spec instead if (Array.isArray(options[role])) { allowed = uniqueArray(options[role].concat(allowed)); } if (role && allowed) { for (let i = 0; i < attrs.length; i++) { const attrName = attrs[i]; if (validateAttr(attrName) && !allowed.includes(attrName)) { invalid.push(attrName + '="' + virtualNode.attr(attrName) + '"'); } } } if (invalid.length) { this.data(invalid); return false; } return true; } export default ariaAllowedAttrEvaluate;