@qualweb/util
Version:
Utilities module for qualweb
72 lines (71 loc) • 3.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("./constants");
function isElementInAT(element) {
const childPresentational = window.AccessibilityUtils.isElementChildPresentational(element);
const isHidden = window.DomUtils.isElementHidden(element);
let result = false;
const role = window.AccessibilityUtils.getElementRole(element);
const validRole = window.AccessibilityUtils.elementHasValidRole(element);
if (!isHidden && !childPresentational && role !== 'presentation' && role !== 'none') {
const name = element.getElementTagName();
const notExposedIfEmpyTag = constants_1.notExposedIfEmpty.includes(name);
const needsToBeInsideDetailsTag = constants_1.needsToBeInsideDetails.includes(name);
if (constants_1.notDefaultAT.includes(name) || notExposedIfEmpyTag || needsToBeInsideDetailsTag) {
let specialCondition = false;
if (notExposedIfEmpyTag) {
const text = element.getElementText();
specialCondition = !!text && text.trim() !== '';
}
else if (needsToBeInsideDetailsTag) {
const parent = element.getElementParent();
specialCondition = !!parent && parent.getElementTagName() === 'details';
}
else if (name === 'picture') {
const child = element.getElement('img');
specialCondition = !!child;
}
const type = element.getElementType();
const focusable = window.AccessibilityUtils.isElementFocusable(element);
const id = element.getElementAttribute('id');
let ariaActivedescendant = false;
let ariaControls = false;
let ariaDescribedby = false;
let ariaDetails = false;
let ariaErrormessage = false;
let ariaFlowto = false;
let ariaLabelledby = false;
let ariaOwns = false;
if (id !== null) {
ariaActivedescendant = window.DomUtils.elementIdIsReferenced(element, id, 'aria-activedescendant');
ariaControls = window.DomUtils.elementIdIsReferenced(element, id, ' aria-controls');
ariaDescribedby = window.DomUtils.elementIdIsReferenced(element, id, ' aria-describedby');
ariaDetails = window.DomUtils.elementIdIsReferenced(element, id, ' aria-details');
ariaErrormessage = window.DomUtils.elementIdIsReferenced(element, id, 'aria-errormessage');
ariaFlowto = window.DomUtils.elementIdIsReferenced(element, id, 'aria-flowto');
ariaLabelledby = window.DomUtils.elementIdIsReferenced(element, id, 'aria-labelledby');
ariaOwns = window.DomUtils.elementIdIsReferenced(element, id, 'aria-owns');
}
const globalWaiARIA = window.AccessibilityUtils.elementHasGlobalARIAPropertyOrAttribute(element);
result =
specialCondition ||
type === 'text' ||
focusable ||
ariaActivedescendant ||
ariaControls ||
ariaDescribedby ||
ariaDetails ||
ariaErrormessage ||
ariaFlowto ||
ariaLabelledby ||
ariaOwns ||
validRole ||
globalWaiARIA;
}
else {
result = true;
}
}
return result;
}
exports.default = isElementInAT;