eslint-plugin-codelyzer
Version:
65 lines (64 loc) • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var aria_query_1 = require("aria-query");
var axobject_query_1 = require("axobject-query");
var attributesComparator_1 = require("./attributesComparator");
var domKeys = Array.from(aria_query_1.dom.keys());
var roleKeys = Array.from(aria_query_1.roles.keys());
var elementRoleEntries = Array.from(aria_query_1.elementRoles);
var nonInteractiveRoles = new Set(roleKeys.filter(function (name) {
var role = aria_query_1.roles.get(name);
return !role.abstract && !role.superClass.some(function (classes) { return classes.indexOf('widget') !== 0; });
}));
var interactiveRoles = new Set(roleKeys.concat([
'toolbar'
]).filter(function (name) {
var role = aria_query_1.roles.get(name);
return !role.abstract && role.superClass.some(function (classes) { return classes.indexOf('widget') !== 0; });
}));
var nonInteractiveElementRoleSchemas = elementRoleEntries.reduce(function (accumulator, _a) {
var elementSchema = _a[0], roleSet = _a[1];
if (Array.from(roleSet).every(function (role) { return nonInteractiveRoles.has(role); })) {
accumulator.push(elementSchema);
}
return accumulator;
}, []);
var interactiveElementRoleSchemas = elementRoleEntries.reduce(function (accumulator, _a) {
var elementSchema = _a[0], roleSet = _a[1];
if (Array.from(roleSet).some(function (role) { return interactiveRoles.has(role); })) {
accumulator.push(elementSchema);
}
return accumulator;
}, []);
var interactiveAXObjects = new Set(Array.from(axobject_query_1.AXObjects.keys()).filter(function (name) { return axobject_query_1.AXObjects.get(name).type === 'widget'; }));
var interactiveElementAXObjectSchemas = Array.from(axobject_query_1.elementAXObjects).reduce(function (accumulator, _a) {
var elementSchema = _a[0], AXObjectSet = _a[1];
if (Array.from(AXObjectSet).every(function (role) { return interactiveAXObjects.has(role); })) {
accumulator.push(elementSchema);
}
return accumulator;
}, []);
function checkIsInteractiveElement(el) {
function elementSchemaMatcher(elementSchema) {
return el.name === elementSchema.name && attributesComparator_1.attributesComparator(elementSchema.attributes, el);
}
var isInherentInteractiveElement = interactiveElementRoleSchemas.some(elementSchemaMatcher);
if (isInherentInteractiveElement) {
return true;
}
var isInherentNonInteractiveElement = nonInteractiveElementRoleSchemas.some(elementSchemaMatcher);
if (isInherentNonInteractiveElement) {
return false;
}
var isInteractiveAXElement = interactiveElementAXObjectSchemas.some(elementSchemaMatcher);
if (isInteractiveAXElement) {
return true;
}
return false;
}
exports.isInteractiveElement = function (el) {
if (domKeys.indexOf(el.name) === -1) {
return false;
}
return checkIsInteractiveElement(el);
};