12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { getRole, arialabelText, arialabelledbyText } from '../commons/aria';
- import {
- getAriaRolesSupportingNameFromContent,
- getAriaRolesByType
- } from '../commons/standards';
- import { sanitize, visibleVirtual } from '../commons/text';
- function labelContentNameMismatchMatches(node, virtualNode) {
- /**
- * Applicability:
- * Rule applies to any element that has
- * a) a semantic role that is `widget` that supports name from content
- * b) has visible text content
- * c) has accessible name (eg: `aria-label`)
- */
- const role = getRole(node);
- if (!role) {
- return false;
- }
- const widgetRoles = getAriaRolesByType('widget');
- const isWidgetType = widgetRoles.includes(role);
- if (!isWidgetType) {
- return false;
- }
- const rolesWithNameFromContents = getAriaRolesSupportingNameFromContent();
- if (!rolesWithNameFromContents.includes(role)) {
- return false;
- }
- /**
- * if no `aria-label` or `aria-labelledby` attribute - ignore `node`
- */
- if (
- !sanitize(arialabelText(virtualNode)) &&
- !sanitize(arialabelledbyText(node))
- ) {
- return false;
- }
- /**
- * if no `contentText` - ignore `node`
- */
- if (!sanitize(visibleVirtual(virtualNode))) {
- return false;
- }
- return true;
- }
- export default labelContentNameMismatchMatches;
|