1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { findUpVirtual, isVisible } from '../commons/dom';
- import { getRole } from '../commons/aria';
- import { getAriaRolesByType } from '../commons/standards';
- import { accessibleTextVirtual } from '../commons/text';
- function landmarkUniqueMatches(node, virtualNode) {
- /*
- * Since this is a best-practice rule, we are filtering elements as dictated by ARIA 1.1 Practices regardless of treatment by browser/AT combinations.
- *
- * Info: https://www.w3.org/TR/wai-aria-practices-1.1/#aria_landmark
- */
- var excludedParentsForHeaderFooterLandmarks = [
- 'article',
- 'aside',
- 'main',
- 'nav',
- 'section'
- ].join(',');
- function isHeaderFooterLandmark(headerFooterElement) {
- return !findUpVirtual(
- headerFooterElement,
- excludedParentsForHeaderFooterLandmarks
- );
- }
- function isLandmarkVirtual(virtualNode) {
- var { actualNode } = virtualNode;
- var landmarkRoles = getAriaRolesByType('landmark');
- var role = getRole(actualNode);
- if (!role) {
- return false;
- }
- var nodeName = actualNode.nodeName.toUpperCase();
- if (nodeName === 'HEADER' || nodeName === 'FOOTER') {
- return isHeaderFooterLandmark(virtualNode);
- }
- if (nodeName === 'SECTION' || nodeName === 'FORM') {
- var accessibleText = accessibleTextVirtual(virtualNode);
- return !!accessibleText;
- }
- return landmarkRoles.indexOf(role) >= 0 || role === 'region';
- }
- return isLandmarkVirtual(virtualNode) && isVisible(node, true);
- }
- export default landmarkUniqueMatches;
|