UNPKG

axe-core

Version:

Accessibility engine for automated Web UI testing

59 lines (51 loc) 1.65 kB
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: * <table class="props"> * <thead> * <tr> * <th>Type</th> * <th>Description</th> * </tr> * </thead> * <tbody> * <tr> * <td><code>String[]</code></td> * <td>List of all unallowed aria attributes and their value</td> * </tr> * </tbody> * </table> * * @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;