isInteractiveElement.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. "use strict";
  2. var __spreadArrays = (this && this.__spreadArrays) || function () {
  3. for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
  4. for (var r = Array(s), k = 0, i = 0; i < il; i++)
  5. for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
  6. r[k] = a[j];
  7. return r;
  8. };
  9. Object.defineProperty(exports, "__esModule", { value: true });
  10. var aria_query_1 = require("aria-query");
  11. var axobject_query_1 = require("axobject-query");
  12. var attributesComparator_1 = require("./attributesComparator");
  13. var domKeys = Array.from(aria_query_1.dom.keys());
  14. var roleKeys = Array.from(aria_query_1.roles.keys());
  15. var elementRoleEntries = Array.from(aria_query_1.elementRoles);
  16. var nonInteractiveRoles = new Set(roleKeys.filter(function (name) {
  17. var role = aria_query_1.roles.get(name);
  18. return !role.abstract && !role.superClass.some(function (classes) { return classes.indexOf('widget') !== 0; });
  19. }));
  20. var interactiveRoles = new Set(__spreadArrays(roleKeys, [
  21. 'toolbar'
  22. ]).filter(function (name) {
  23. var role = aria_query_1.roles.get(name);
  24. return !role.abstract && role.superClass.some(function (classes) { return classes.indexOf('widget') !== 0; });
  25. }));
  26. var nonInteractiveElementRoleSchemas = elementRoleEntries.reduce(function (accumulator, _a) {
  27. var elementSchema = _a[0], roleSet = _a[1];
  28. if (Array.from(roleSet).every(function (role) { return nonInteractiveRoles.has(role); })) {
  29. accumulator.push(elementSchema);
  30. }
  31. return accumulator;
  32. }, []);
  33. var interactiveElementRoleSchemas = elementRoleEntries.reduce(function (accumulator, _a) {
  34. var elementSchema = _a[0], roleSet = _a[1];
  35. if (Array.from(roleSet).some(function (role) { return interactiveRoles.has(role); })) {
  36. accumulator.push(elementSchema);
  37. }
  38. return accumulator;
  39. }, []);
  40. var interactiveAXObjects = new Set(Array.from(axobject_query_1.AXObjects.keys()).filter(function (name) { return axobject_query_1.AXObjects.get(name).type === 'widget'; }));
  41. var interactiveElementAXObjectSchemas = Array.from(axobject_query_1.elementAXObjects).reduce(function (accumulator, _a) {
  42. var elementSchema = _a[0], AXObjectSet = _a[1];
  43. if (Array.from(AXObjectSet).every(function (role) { return interactiveAXObjects.has(role); })) {
  44. accumulator.push(elementSchema);
  45. }
  46. return accumulator;
  47. }, []);
  48. function checkIsInteractiveElement(el) {
  49. function elementSchemaMatcher(elementSchema) {
  50. return el.name === elementSchema.name && attributesComparator_1.attributesComparator(elementSchema.attributes, el);
  51. }
  52. var isInherentInteractiveElement = interactiveElementRoleSchemas.some(elementSchemaMatcher);
  53. if (isInherentInteractiveElement) {
  54. return true;
  55. }
  56. var isInherentNonInteractiveElement = nonInteractiveElementRoleSchemas.some(elementSchemaMatcher);
  57. if (isInherentNonInteractiveElement) {
  58. return false;
  59. }
  60. var isInteractiveAXElement = interactiveElementAXObjectSchemas.some(elementSchemaMatcher);
  61. if (isInteractiveAXElement) {
  62. return true;
  63. }
  64. return false;
  65. }
  66. exports.isInteractiveElement = function (el) {
  67. if (domKeys.indexOf(el.name) === -1) {
  68. return false;
  69. }
  70. return checkIsInteractiveElement(el);
  71. };