axe-core 4.1.2-canary.ec00dc7 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (640) hide show
  1. package/CHANGELOG.md +0 -46
  2. package/CONTRIBUTING.md +57 -112
  3. package/README.md +50 -59
  4. package/axe.d.ts +281 -282
  5. package/axe.js +678 -1285
  6. package/axe.min.js +2 -2
  7. package/bower.json +38 -44
  8. package/doc/API.md +133 -178
  9. package/doc/check-message-template.md +3 -3
  10. package/doc/check-options.md +25 -25
  11. package/doc/developer-guide.md +48 -48
  12. package/doc/examples/chrome-debugging-protocol/axe-cdp.js +56 -56
  13. package/doc/examples/chrome-debugging-protocol/package.json +9 -9
  14. package/doc/examples/html-handlebars.md +52 -52
  15. package/doc/examples/jasmine/karma.conf.js +15 -15
  16. package/doc/examples/jasmine/package.json +19 -19
  17. package/doc/examples/jasmine/spec/a11y.js +29 -29
  18. package/doc/examples/jest_react/link.js +3 -3
  19. package/doc/examples/jest_react/link.test.js +15 -15
  20. package/doc/examples/jest_react/package.json +26 -26
  21. package/doc/examples/jest_react/test-helpers.js +12 -12
  22. package/doc/examples/jsdom/package.json +13 -13
  23. package/doc/examples/mocha/karma.conf.js +15 -15
  24. package/doc/examples/mocha/package.json +20 -20
  25. package/doc/examples/phantomjs/axe-phantom.js +36 -36
  26. package/doc/examples/phantomjs/package.json +17 -17
  27. package/doc/examples/puppeteer/axe-puppeteer.js +37 -37
  28. package/doc/examples/puppeteer/package.json +11 -11
  29. package/doc/examples/qunit/package.json +19 -19
  30. package/doc/examples/test-examples.js +22 -22
  31. package/doc/plugins.md +64 -64
  32. package/doc/projects.md +9 -13
  33. package/doc/rule-descriptions.md +100 -104
  34. package/doc/rule-development.md +2 -2
  35. package/doc/standards-object.md +8 -14
  36. package/lib/checks/aria/abstractrole-evaluate.js +8 -8
  37. package/lib/checks/aria/abstractrole.json +12 -12
  38. package/lib/checks/aria/aria-allowed-attr-evaluate.js +25 -24
  39. package/lib/checks/aria/aria-allowed-attr.json +12 -12
  40. package/lib/checks/aria/aria-allowed-role-evaluate.js +21 -21
  41. package/lib/checks/aria/aria-allowed-role.json +20 -20
  42. package/lib/checks/aria/aria-errormessage-evaluate.js +30 -38
  43. package/lib/checks/aria/aria-errormessage.json +16 -16
  44. package/lib/checks/aria/aria-hidden-body-evaluate.js +1 -1
  45. package/lib/checks/aria/aria-hidden-body.json +9 -9
  46. package/lib/checks/aria/aria-required-attr-evaluate.js +34 -34
  47. package/lib/checks/aria/aria-required-attr.json +12 -12
  48. package/lib/checks/aria/aria-required-children-evaluate.js +103 -108
  49. package/lib/checks/aria/aria-required-children.json +30 -30
  50. package/lib/checks/aria/aria-required-parent-evaluate.js +65 -72
  51. package/lib/checks/aria/aria-required-parent.json +12 -12
  52. package/lib/checks/aria/aria-roledescription-evaluate.js +9 -9
  53. package/lib/checks/aria/aria-roledescription.json +21 -21
  54. package/lib/checks/aria/aria-unsupported-attr-evaluate.js +20 -17
  55. package/lib/checks/aria/aria-unsupported-attr.json +9 -9
  56. package/lib/checks/aria/aria-valid-attr-evaluate.js +20 -20
  57. package/lib/checks/aria/aria-valid-attr-value-evaluate.js +71 -82
  58. package/lib/checks/aria/aria-valid-attr-value.json +17 -17
  59. package/lib/checks/aria/aria-valid-attr.json +13 -13
  60. package/lib/checks/aria/fallbackrole-evaluate.js +1 -1
  61. package/lib/checks/aria/fallbackrole.json +9 -9
  62. package/lib/checks/aria/has-global-aria-attribute-evaluate.js +5 -5
  63. package/lib/checks/aria/has-global-aria-attribute.json +12 -12
  64. package/lib/checks/aria/has-widget-role-evaluate.js +6 -6
  65. package/lib/checks/aria/has-widget-role.json +10 -10
  66. package/lib/checks/aria/invalidrole-evaluate.js +12 -12
  67. package/lib/checks/aria/invalidrole.json +12 -12
  68. package/lib/checks/aria/is-element-focusable-evaluate.js +1 -1
  69. package/lib/checks/aria/is-element-focusable.json +9 -9
  70. package/lib/checks/aria/no-implicit-explicit-label-evaluate.js +18 -20
  71. package/lib/checks/aria/no-implicit-explicit-label.json +9 -9
  72. package/lib/checks/aria/unsupportedrole-evaluate.js +2 -2
  73. package/lib/checks/aria/unsupportedrole.json +9 -9
  74. package/lib/checks/aria/valid-scrollable-semantics-evaluate.js +23 -23
  75. package/lib/checks/aria/valid-scrollable-semantics.json +10 -10
  76. package/lib/checks/color/color-contrast-evaluate.js +164 -164
  77. package/lib/checks/color/color-contrast.json +40 -40
  78. package/lib/checks/color/link-in-text-block-evaluate.js +70 -70
  79. package/lib/checks/color/link-in-text-block.json +17 -17
  80. package/lib/checks/forms/autocomplete-appropriate-evaluate.js +68 -68
  81. package/lib/checks/forms/autocomplete-appropriate.json +9 -9
  82. package/lib/checks/forms/autocomplete-valid-evaluate.js +2 -2
  83. package/lib/checks/forms/autocomplete-valid.json +9 -9
  84. package/lib/checks/generic/README.md +5 -5
  85. package/lib/checks/generic/attr-non-space-content-evaluate.js +20 -20
  86. package/lib/checks/generic/has-descendant-after.js +10 -10
  87. package/lib/checks/generic/has-descendant-evaluate.js +12 -12
  88. package/lib/checks/generic/has-text-content-evaluate.js +5 -5
  89. package/lib/checks/generic/matches-definition-evaluate.js +1 -1
  90. package/lib/checks/generic/page-no-duplicate-after.js +2 -2
  91. package/lib/checks/generic/page-no-duplicate-evaluate.js +29 -29
  92. package/lib/checks/keyboard/accesskeys-after.js +19 -19
  93. package/lib/checks/keyboard/accesskeys-evaluate.js +5 -5
  94. package/lib/checks/keyboard/accesskeys.json +10 -10
  95. package/lib/checks/keyboard/focusable-content-evaluate.js +13 -13
  96. package/lib/checks/keyboard/focusable-content.json +9 -9
  97. package/lib/checks/keyboard/focusable-disabled-evaluate.js +30 -30
  98. package/lib/checks/keyboard/focusable-disabled.json +9 -9
  99. package/lib/checks/keyboard/focusable-element-evaluate.js +41 -41
  100. package/lib/checks/keyboard/focusable-element.json +9 -9
  101. package/lib/checks/keyboard/focusable-modal-open-evaluate.js +11 -11
  102. package/lib/checks/keyboard/focusable-modal-open.json +9 -9
  103. package/lib/checks/keyboard/focusable-no-name-evaluate.js +10 -10
  104. package/lib/checks/keyboard/focusable-no-name.json +10 -10
  105. package/lib/checks/keyboard/focusable-not-tabbable-evaluate.js +30 -30
  106. package/lib/checks/keyboard/focusable-not-tabbable.json +9 -9
  107. package/lib/checks/keyboard/landmark-is-top-level-evaluate.js +17 -22
  108. package/lib/checks/keyboard/landmark-is-top-level.json +9 -9
  109. package/lib/checks/keyboard/page-has-heading-one.json +13 -13
  110. package/lib/checks/keyboard/page-has-main.json +13 -13
  111. package/lib/checks/keyboard/page-no-duplicate-banner.json +14 -14
  112. package/lib/checks/keyboard/page-no-duplicate-contentinfo.json +14 -14
  113. package/lib/checks/keyboard/page-no-duplicate-main.json +13 -13
  114. package/lib/checks/keyboard/tabindex-evaluate.js +5 -5
  115. package/lib/checks/keyboard/tabindex.json +9 -9
  116. package/lib/checks/label/alt-space-value-evaluate.js +3 -3
  117. package/lib/checks/label/alt-space-value.json +9 -9
  118. package/lib/checks/label/duplicate-img-label-evaluate.js +12 -12
  119. package/lib/checks/label/duplicate-img-label.json +12 -12
  120. package/lib/checks/label/explicit-evaluate.js +20 -25
  121. package/lib/checks/label/explicit.json +10 -10
  122. package/lib/checks/label/help-same-as-label-evaluate.js +17 -17
  123. package/lib/checks/label/help-same-as-label.json +10 -10
  124. package/lib/checks/label/hidden-explicit-label-evaluate.js +15 -21
  125. package/lib/checks/label/hidden-explicit-label.json +10 -10
  126. package/lib/checks/label/implicit-evaluate.js +9 -9
  127. package/lib/checks/label/implicit.json +10 -10
  128. package/lib/checks/label/label-content-name-mismatch-evaluate.js +42 -42
  129. package/lib/checks/label/label-content-name-mismatch.json +13 -13
  130. package/lib/checks/label/multiple-label-evaluate.js +32 -32
  131. package/lib/checks/label/multiple-label.json +9 -9
  132. package/lib/checks/label/title-only-evaluate.js +4 -4
  133. package/lib/checks/label/title-only.json +9 -9
  134. package/lib/checks/landmarks/landmark-is-unique-after.js +20 -20
  135. package/lib/checks/landmarks/landmark-is-unique-evaluate.js +6 -6
  136. package/lib/checks/landmarks/landmark-is-unique.json +10 -10
  137. package/lib/checks/language/has-lang-evaluate.js +25 -25
  138. package/lib/checks/language/has-lang.json +15 -15
  139. package/lib/checks/language/valid-lang-evaluate.js +25 -25
  140. package/lib/checks/language/valid-lang.json +12 -12
  141. package/lib/checks/language/xml-lang-mismatch-evaluate.js +3 -3
  142. package/lib/checks/language/xml-lang-mismatch.json +9 -9
  143. package/lib/checks/lists/dlitem-evaluate.js +19 -19
  144. package/lib/checks/lists/dlitem.json +9 -9
  145. package/lib/checks/lists/listitem-evaluate.js +17 -17
  146. package/lib/checks/lists/listitem.json +12 -12
  147. package/lib/checks/lists/only-dlitems-evaluate.js +44 -44
  148. package/lib/checks/lists/only-dlitems.json +9 -9
  149. package/lib/checks/lists/only-listitems-evaluate.js +56 -56
  150. package/lib/checks/lists/only-listitems.json +12 -12
  151. package/lib/checks/lists/structured-dlitems-evaluate.js +20 -20
  152. package/lib/checks/lists/structured-dlitems.json +9 -9
  153. package/lib/checks/media/caption-evaluate.js +6 -6
  154. package/lib/checks/media/caption.json +9 -9
  155. package/lib/checks/media/frame-tested-evaluate.js +20 -20
  156. package/lib/checks/media/frame-tested.json +13 -13
  157. package/lib/checks/media/no-autoplay-audio-evaluate.js +81 -81
  158. package/lib/checks/media/no-autoplay-audio.json +13 -13
  159. package/lib/checks/mobile/css-orientation-lock-evaluate.js +250 -250
  160. package/lib/checks/mobile/css-orientation-lock.json +13 -13
  161. package/lib/checks/mobile/meta-viewport-large.json +13 -13
  162. package/lib/checks/mobile/meta-viewport-scale-evaluate.js +56 -56
  163. package/lib/checks/mobile/meta-viewport.json +12 -12
  164. package/lib/checks/navigation/header-present.json +13 -13
  165. package/lib/checks/navigation/heading-order-after.js +11 -134
  166. package/lib/checks/navigation/heading-order-evaluate.js +13 -51
  167. package/lib/checks/navigation/heading-order.json +10 -10
  168. package/lib/checks/navigation/identical-links-same-purpose-after.js +86 -86
  169. package/lib/checks/navigation/identical-links-same-purpose-evaluate.js +23 -23
  170. package/lib/checks/navigation/identical-links-same-purpose.json +10 -10
  171. package/lib/checks/navigation/internal-link-present-evaluate.js +4 -4
  172. package/lib/checks/navigation/internal-link-present.json +9 -9
  173. package/lib/checks/navigation/landmark.json +12 -12
  174. package/lib/checks/navigation/meta-refresh-evaluate.js +3 -3
  175. package/lib/checks/navigation/meta-refresh.json +9 -9
  176. package/lib/checks/navigation/p-as-heading-evaluate.js +72 -72
  177. package/lib/checks/navigation/p-as-heading.json +28 -28
  178. package/lib/checks/navigation/region-evaluate.js +73 -73
  179. package/lib/checks/navigation/region.json +12 -12
  180. package/lib/checks/navigation/skip-link-evaluate.js +5 -5
  181. package/lib/checks/navigation/skip-link.json +10 -10
  182. package/lib/checks/navigation/unique-frame-title-after.js +8 -8
  183. package/lib/checks/navigation/unique-frame-title-evaluate.js +3 -3
  184. package/lib/checks/navigation/unique-frame-title.json +10 -10
  185. package/lib/checks/parsing/duplicate-id-active.json +10 -10
  186. package/lib/checks/parsing/duplicate-id-after.js +8 -8
  187. package/lib/checks/parsing/duplicate-id-aria.json +10 -10
  188. package/lib/checks/parsing/duplicate-id-evaluate.js +15 -15
  189. package/lib/checks/parsing/duplicate-id.json +10 -10
  190. package/lib/checks/shared/aria-label-evaluate.js +1 -1
  191. package/lib/checks/shared/aria-label.json +9 -9
  192. package/lib/checks/shared/aria-labelledby-evaluate.js +5 -5
  193. package/lib/checks/shared/aria-labelledby.json +10 -10
  194. package/lib/checks/shared/avoid-inline-spacing-evaluate.js +10 -10
  195. package/lib/checks/shared/avoid-inline-spacing.json +15 -15
  196. package/lib/checks/shared/button-has-visible-text.json +10 -10
  197. package/lib/checks/shared/doc-has-title-evaluate.js +2 -2
  198. package/lib/checks/shared/doc-has-title.json +9 -9
  199. package/lib/checks/shared/exists-evaluate.js +1 -1
  200. package/lib/checks/shared/exists.json +9 -9
  201. package/lib/checks/shared/has-alt-evaluate.js +5 -5
  202. package/lib/checks/shared/has-alt.json +9 -9
  203. package/lib/checks/shared/has-visible-text.json +10 -10
  204. package/lib/checks/shared/is-on-screen-evaluate.js +2 -2
  205. package/lib/checks/shared/is-on-screen.json +9 -9
  206. package/lib/checks/shared/non-empty-alt.json +15 -15
  207. package/lib/checks/shared/non-empty-if-present-evaluate.js +13 -13
  208. package/lib/checks/shared/non-empty-if-present.json +12 -12
  209. package/lib/checks/shared/non-empty-placeholder.json +15 -15
  210. package/lib/checks/shared/non-empty-title.json +15 -15
  211. package/lib/checks/shared/non-empty-value.json +15 -15
  212. package/lib/checks/shared/presentational-role-evaluate.js +29 -29
  213. package/lib/checks/shared/presentational-role.json +14 -14
  214. package/lib/checks/shared/role-none.json +17 -17
  215. package/lib/checks/shared/role-presentation.json +17 -17
  216. package/lib/checks/shared/svg-non-empty-title-evaluate.js +20 -24
  217. package/lib/checks/shared/svg-non-empty-title.json +13 -13
  218. package/lib/checks/tables/caption-faked-evaluate.js +8 -8
  219. package/lib/checks/tables/caption-faked.json +9 -9
  220. package/lib/checks/tables/html5-scope-evaluate.js +4 -4
  221. package/lib/checks/tables/html5-scope.json +9 -9
  222. package/lib/checks/tables/same-caption-summary-evaluate.js +6 -6
  223. package/lib/checks/tables/same-caption-summary.json +9 -9
  224. package/lib/checks/tables/scope-value-evaluate.js +2 -2
  225. package/lib/checks/tables/scope-value.json +12 -12
  226. package/lib/checks/tables/td-has-header-evaluate.js +21 -21
  227. package/lib/checks/tables/td-has-header.json +9 -9
  228. package/lib/checks/tables/td-headers-attr-evaluate.js +48 -48
  229. package/lib/checks/tables/td-headers-attr.json +10 -10
  230. package/lib/checks/tables/th-has-data-cells-evaluate.js +64 -64
  231. package/lib/checks/tables/th-has-data-cells.json +10 -10
  232. package/lib/checks/visibility/hidden-content-evaluate.js +28 -28
  233. package/lib/checks/visibility/hidden-content.json +10 -10
  234. package/lib/commons/aria/allowed-attr.js +12 -12
  235. package/lib/commons/aria/arialabel-text.js +7 -7
  236. package/lib/commons/aria/arialabelledby-text.js +41 -41
  237. package/lib/commons/aria/get-accessible-refs.js +41 -41
  238. package/lib/commons/aria/get-element-unallowed-roles.js +69 -69
  239. package/lib/commons/aria/get-explicit-role.js +14 -14
  240. package/lib/commons/aria/get-owned-virtual.js +14 -14
  241. package/lib/commons/aria/get-role-type.js +5 -5
  242. package/lib/commons/aria/get-role.js +89 -89
  243. package/lib/commons/aria/get-roles-by-type.js +1 -1
  244. package/lib/commons/aria/get-roles-with-name-from-contents.js +1 -1
  245. package/lib/commons/aria/implicit-nodes.js +6 -6
  246. package/lib/commons/aria/implicit-role.js +32 -32
  247. package/lib/commons/aria/is-accessible-ref.js +1 -1
  248. package/lib/commons/aria/is-aria-role-allowed-on-element.js +12 -12
  249. package/lib/commons/aria/is-unsupported-role.js +2 -2
  250. package/lib/commons/aria/is-valid-role.js +6 -6
  251. package/lib/commons/aria/label-virtual.js +24 -24
  252. package/lib/commons/aria/label.js +2 -2
  253. package/lib/commons/aria/lookup-table.js +2395 -2395
  254. package/lib/commons/aria/named-from-contents.js +19 -19
  255. package/lib/commons/aria/required-attr.js +5 -5
  256. package/lib/commons/aria/required-context.js +5 -5
  257. package/lib/commons/aria/required-owned.js +5 -5
  258. package/lib/commons/aria/validate-attr-value.js +40 -44
  259. package/lib/commons/aria/validate-attr.js +2 -2
  260. package/lib/commons/color/center-point-of-rect.js +15 -15
  261. package/lib/commons/color/color.js +224 -224
  262. package/lib/commons/color/element-has-image.js +14 -14
  263. package/lib/commons/color/element-is-distinct.js +56 -55
  264. package/lib/commons/color/filtered-rect-stack.js +32 -32
  265. package/lib/commons/color/flatten-colors.js +6 -6
  266. package/lib/commons/color/get-background-color.js +40 -40
  267. package/lib/commons/color/get-background-stack.js +71 -71
  268. package/lib/commons/color/get-contrast.js +9 -9
  269. package/lib/commons/color/get-foreground-color.js +34 -34
  270. package/lib/commons/color/get-own-background-color.js +7 -7
  271. package/lib/commons/color/get-rect-stack.js +14 -14
  272. package/lib/commons/color/get-text-shadow-colors.js +87 -87
  273. package/lib/commons/color/has-valid-contrast-ratio.js +10 -10
  274. package/lib/commons/color/incomplete-data.js +37 -37
  275. package/lib/commons/dom/find-elms-in-context.js +11 -11
  276. package/lib/commons/dom/find-up-virtual.js +31 -31
  277. package/lib/commons/dom/find-up.js +1 -1
  278. package/lib/commons/dom/focus-disabled.js +13 -13
  279. package/lib/commons/dom/get-composed-parent.js +14 -14
  280. package/lib/commons/dom/get-element-by-reference.js +18 -18
  281. package/lib/commons/dom/get-element-coordinates.js +12 -12
  282. package/lib/commons/dom/get-element-stack.js +10 -10
  283. package/lib/commons/dom/get-rect-stack.js +427 -427
  284. package/lib/commons/dom/get-scroll-offset.js +17 -17
  285. package/lib/commons/dom/get-tabbable-elements.js +9 -9
  286. package/lib/commons/dom/get-text-element-stack.js +49 -64
  287. package/lib/commons/dom/get-viewport-size.js +19 -19
  288. package/lib/commons/dom/has-content-virtual.js +29 -29
  289. package/lib/commons/dom/has-content.js +2 -2
  290. package/lib/commons/dom/idrefs.js +15 -15
  291. package/lib/commons/dom/inserted-into-focus-order.js +6 -6
  292. package/lib/commons/dom/is-focusable.js +12 -16
  293. package/lib/commons/dom/is-hidden-with-css.js +47 -47
  294. package/lib/commons/dom/is-html5.js +5 -5
  295. package/lib/commons/dom/is-in-text-block.js +74 -74
  296. package/lib/commons/dom/is-modal-open.js +78 -78
  297. package/lib/commons/dom/is-natively-focusable.js +22 -22
  298. package/lib/commons/dom/is-node.js +1 -1
  299. package/lib/commons/dom/is-offscreen.js +43 -43
  300. package/lib/commons/dom/is-opaque.js +4 -4
  301. package/lib/commons/dom/is-skip-link.js +27 -27
  302. package/lib/commons/dom/is-visible.js +147 -147
  303. package/lib/commons/dom/is-visual-content.js +33 -33
  304. package/lib/commons/dom/reduce-to-elements-below-floating.js +18 -18
  305. package/lib/commons/dom/shadow-elements-from-point.js +29 -29
  306. package/lib/commons/dom/url-props-from-attribute.js +100 -100
  307. package/lib/commons/dom/visually-contains.js +77 -77
  308. package/lib/commons/dom/visually-overlaps.js +29 -29
  309. package/lib/commons/forms/is-aria-combobox.js +2 -2
  310. package/lib/commons/forms/is-aria-listbox.js +2 -2
  311. package/lib/commons/forms/is-aria-range.js +2 -2
  312. package/lib/commons/forms/is-aria-textbox.js +2 -2
  313. package/lib/commons/forms/is-disabled.js +20 -20
  314. package/lib/commons/forms/is-native-select.js +3 -3
  315. package/lib/commons/forms/is-native-textbox.js +17 -17
  316. package/lib/commons/index.js +9 -9
  317. package/lib/commons/matches/attributes.js +4 -4
  318. package/lib/commons/matches/condition.js +1 -1
  319. package/lib/commons/matches/explicit-role.js +1 -1
  320. package/lib/commons/matches/from-definition.js +30 -30
  321. package/lib/commons/matches/from-function.js +12 -12
  322. package/lib/commons/matches/from-primative.js +20 -20
  323. package/lib/commons/matches/implicit-role.js +1 -1
  324. package/lib/commons/matches/matches.js +1 -1
  325. package/lib/commons/matches/node-name.js +4 -4
  326. package/lib/commons/matches/properties.js +4 -4
  327. package/lib/commons/matches/semantic-role.js +1 -1
  328. package/lib/commons/standards/get-aria-roles-by-type.js +3 -3
  329. package/lib/commons/standards/get-aria-roles-supporting-name-from-content.js +8 -8
  330. package/lib/commons/standards/get-element-spec.js +42 -42
  331. package/lib/commons/standards/get-elements-by-content-type.js +15 -15
  332. package/lib/commons/standards/get-global-aria-attrs.js +8 -8
  333. package/lib/commons/standards/implicit-html-roles.js +140 -140
  334. package/lib/commons/table/get-all-cells.js +16 -16
  335. package/lib/commons/table/get-cell-position.js +15 -15
  336. package/lib/commons/table/get-headers.js +65 -72
  337. package/lib/commons/table/get-scope.js +42 -42
  338. package/lib/commons/table/is-column-header.js +1 -1
  339. package/lib/commons/table/is-data-cell.js +10 -10
  340. package/lib/commons/table/is-data-table.js +176 -176
  341. package/lib/commons/table/is-header.js +8 -8
  342. package/lib/commons/table/is-row-header.js +1 -1
  343. package/lib/commons/table/to-grid.js +20 -31
  344. package/lib/commons/table/traverse.js +55 -55
  345. package/lib/commons/text/accessible-text-virtual.js +90 -90
  346. package/lib/commons/text/accessible-text.js +2 -2
  347. package/lib/commons/text/form-control-value.js +112 -113
  348. package/lib/commons/text/has-unicode.js +17 -17
  349. package/lib/commons/text/index.js +4 -4
  350. package/lib/commons/text/is-human-interpretable.js +34 -34
  351. package/lib/commons/text/is-icon-ligature.js +194 -194
  352. package/lib/commons/text/is-valid-autocomplete.js +104 -104
  353. package/lib/commons/text/label-text.js +39 -39
  354. package/lib/commons/text/label-virtual.js +26 -26
  355. package/lib/commons/text/label.js +2 -2
  356. package/lib/commons/text/native-element-type.js +97 -97
  357. package/lib/commons/text/native-text-alternative.js +19 -19
  358. package/lib/commons/text/native-text-methods.js +113 -113
  359. package/lib/commons/text/remove-unicode.js +15 -15
  360. package/lib/commons/text/sanitize.js +8 -8
  361. package/lib/commons/text/subtree-text.js +89 -47
  362. package/lib/commons/text/title-text.js +14 -14
  363. package/lib/commons/text/unicode.js +56 -56
  364. package/lib/commons/text/unsupported.js +1 -1
  365. package/lib/commons/text/visible-text-nodes.js +12 -12
  366. package/lib/commons/text/visible-virtual.js +21 -21
  367. package/lib/commons/text/visible.js +2 -2
  368. package/lib/core/base/audit.js +613 -613
  369. package/lib/core/base/cache.js +22 -22
  370. package/lib/core/base/check-result.js +20 -20
  371. package/lib/core/base/check.js +132 -132
  372. package/lib/core/base/context.js +175 -179
  373. package/lib/core/base/metadata-function-map.js +167 -179
  374. package/lib/core/base/rule-result.js +25 -25
  375. package/lib/core/base/rule.js +473 -475
  376. package/lib/core/base/virtual-node/abstract-virtual-node.js +33 -37
  377. package/lib/core/base/virtual-node/serial-virtual-node.js +76 -85
  378. package/lib/core/base/virtual-node/virtual-node.js +151 -177
  379. package/lib/core/constants.js +50 -50
  380. package/lib/core/core.js +7 -11
  381. package/lib/core/imports/index.js +14 -14
  382. package/lib/core/index.js +21 -19
  383. package/lib/core/log.js +4 -4
  384. package/lib/core/public/cleanup.js +43 -41
  385. package/lib/core/public/configure.js +112 -112
  386. package/lib/core/public/get-rules.js +19 -19
  387. package/lib/core/public/load.js +49 -47
  388. package/lib/core/public/plugins.js +24 -22
  389. package/lib/core/public/reporter.js +12 -12
  390. package/lib/core/public/reset.js +6 -6
  391. package/lib/core/public/run-rules.js +76 -61
  392. package/lib/core/public/run-virtual-rule.js +42 -47
  393. package/lib/core/public/run.js +154 -154
  394. package/lib/core/reporters/helpers/failure-summary.js +22 -22
  395. package/lib/core/reporters/helpers/get-environment-data.js +29 -29
  396. package/lib/core/reporters/helpers/incomplete-fallback-msg.js +3 -3
  397. package/lib/core/reporters/helpers/index.js +8 -8
  398. package/lib/core/reporters/helpers/process-aggregate.js +69 -69
  399. package/lib/core/reporters/na.js +16 -16
  400. package/lib/core/reporters/no-passes.js +12 -12
  401. package/lib/core/reporters/raw-env.js +9 -9
  402. package/lib/core/reporters/raw.js +24 -24
  403. package/lib/core/reporters/v1.js +23 -23
  404. package/lib/core/reporters/v2.js +13 -13
  405. package/lib/core/utils/aggregate-checks.js +63 -63
  406. package/lib/core/utils/aggregate-node-results.js +44 -44
  407. package/lib/core/utils/aggregate-result.js +24 -24
  408. package/lib/core/utils/aggregate.js +6 -6
  409. package/lib/core/utils/are-styles-set.js +14 -14
  410. package/lib/core/utils/assert.js +3 -3
  411. package/lib/core/utils/check-helper.js +23 -23
  412. package/lib/core/utils/clone.js +18 -18
  413. package/lib/core/utils/closest.js +12 -12
  414. package/lib/core/utils/collect-results-from-frames.js +45 -63
  415. package/lib/core/utils/contains.js +29 -29
  416. package/lib/core/utils/css-parser.js +0 -1
  417. package/lib/core/utils/deep-merge.js +18 -18
  418. package/lib/core/utils/dq-element.js +88 -88
  419. package/lib/core/utils/element-matches.js +29 -29
  420. package/lib/core/utils/escape-selector.js +63 -63
  421. package/lib/core/utils/extend-meta-data.js +11 -11
  422. package/lib/core/utils/finalize-result.js +13 -15
  423. package/lib/core/utils/find-by.js +3 -3
  424. package/lib/core/utils/get-all-checks.js +5 -5
  425. package/lib/core/utils/get-ancestry.js +16 -16
  426. package/lib/core/utils/get-base-lang.js +7 -7
  427. package/lib/core/utils/get-check-message.js +9 -9
  428. package/lib/core/utils/get-check-option.js +26 -26
  429. package/lib/core/utils/get-flattened-tree.js +88 -88
  430. package/lib/core/utils/get-friendly-uri-end.js +87 -87
  431. package/lib/core/utils/get-node-attributes.js +9 -10
  432. package/lib/core/utils/get-node-from-tree.js +2 -2
  433. package/lib/core/utils/get-root-node.js +6 -6
  434. package/lib/core/utils/get-scroll-state.js +26 -26
  435. package/lib/core/utils/get-scroll.js +26 -26
  436. package/lib/core/utils/get-selector.js +256 -256
  437. package/lib/core/utils/get-shadow-selector.js +19 -19
  438. package/lib/core/utils/get-stylesheet-factory.js +32 -32
  439. package/lib/core/utils/get-xpath.js +65 -65
  440. package/lib/core/utils/index.js +3 -6
  441. package/lib/core/utils/inject-style.js +24 -24
  442. package/lib/core/utils/is-hidden.js +41 -41
  443. package/lib/core/utils/is-html-element.js +122 -122
  444. package/lib/core/utils/is-node-in-context.js +24 -24
  445. package/lib/core/utils/is-shadow-root.js +28 -28
  446. package/lib/core/utils/is-xhtml.js +4 -4
  447. package/lib/core/utils/matches.js +170 -176
  448. package/lib/core/utils/memoize.js +7 -7
  449. package/lib/core/utils/merge-results.js +91 -91
  450. package/lib/core/utils/node-sorter.js +11 -11
  451. package/lib/core/utils/parse-crossorigin-stylesheet.js +41 -41
  452. package/lib/core/utils/parse-sameorigin-stylesheet.js +70 -70
  453. package/lib/core/utils/parse-stylesheet.js +41 -41
  454. package/lib/core/utils/performance-timer.js +112 -112
  455. package/lib/core/utils/pollyfills.js +263 -263
  456. package/lib/core/utils/preload-cssom.js +134 -134
  457. package/lib/core/utils/preload-media.js +42 -42
  458. package/lib/core/utils/preload.js +110 -110
  459. package/lib/core/utils/process-message.js +43 -45
  460. package/lib/core/utils/publish-metadata.js +68 -68
  461. package/lib/core/utils/query-selector-all-filter.js +77 -79
  462. package/lib/core/utils/query-selector-all.js +1 -1
  463. package/lib/core/utils/queue.js +113 -113
  464. package/lib/core/utils/respondable.js +218 -119
  465. package/lib/core/utils/rule-should-run.js +53 -53
  466. package/lib/core/utils/select.js +54 -54
  467. package/lib/core/utils/send-command-to-frame.js +43 -43
  468. package/lib/core/utils/set-scroll-state.js +7 -7
  469. package/lib/core/utils/to-array.js +1 -1
  470. package/lib/core/utils/token-list.js +4 -4
  471. package/lib/core/utils/unique-array.js +3 -3
  472. package/lib/core/utils/uuid.js +161 -170
  473. package/lib/core/utils/valid-input-type.js +25 -25
  474. package/lib/core/utils/valid-langs.js +30 -30
  475. package/lib/misc/any-failure-summary.json +4 -4
  476. package/lib/misc/incomplete-fallback.json +1 -1
  477. package/lib/misc/none-failure-summary.json +4 -4
  478. package/lib/rules/accesskeys.json +11 -11
  479. package/lib/rules/area-alt.json +20 -20
  480. package/lib/rules/aria-allowed-attr-matches.js +13 -11
  481. package/lib/rules/aria-allowed-attr.json +10 -10
  482. package/lib/rules/aria-allowed-role-matches.js +6 -6
  483. package/lib/rules/aria-allowed-role.json +12 -12
  484. package/lib/rules/aria-command-name.json +16 -16
  485. package/lib/rules/aria-dialog-name.json +11 -11
  486. package/lib/rules/aria-has-attr-matches.js +10 -10
  487. package/lib/rules/aria-hidden-body.json +12 -12
  488. package/lib/rules/aria-hidden-focus-matches.js +8 -8
  489. package/lib/rules/aria-hidden-focus.json +16 -16
  490. package/lib/rules/aria-input-field-name.json +11 -11
  491. package/lib/rules/aria-meter-name.json +11 -11
  492. package/lib/rules/aria-progressbar-name.json +11 -11
  493. package/lib/rules/aria-required-attr.json +10 -10
  494. package/lib/rules/aria-required-children.json +10 -11
  495. package/lib/rules/aria-required-parent.json +10 -11
  496. package/lib/rules/aria-roledescription.json +10 -10
  497. package/lib/rules/aria-roles.json +11 -11
  498. package/lib/rules/aria-toggle-field-name.json +16 -16
  499. package/lib/rules/aria-tooltip-name.json +16 -16
  500. package/lib/rules/aria-treeitem-name.json +16 -16
  501. package/lib/rules/aria-valid-attr-value.json +10 -10
  502. package/lib/rules/aria-valid-attr.json +10 -10
  503. package/lib/rules/audio-caption.json +18 -18
  504. package/lib/rules/autocomplete-matches.js +50 -50
  505. package/lib/rules/autocomplete-valid.json +10 -10
  506. package/lib/rules/avoid-inline-spacing.json +10 -10
  507. package/lib/rules/blink.json +17 -17
  508. package/lib/rules/button-name.json +24 -24
  509. package/lib/rules/bypass-matches.js +7 -7
  510. package/lib/rules/bypass.json +18 -19
  511. package/lib/rules/color-contrast-matches.js +137 -145
  512. package/lib/rules/color-contrast.json +11 -11
  513. package/lib/rules/css-orientation-lock.json +11 -11
  514. package/lib/rules/data-table-large-matches.js +10 -10
  515. package/lib/rules/data-table-matches.js +1 -1
  516. package/lib/rules/definition-list.json +11 -11
  517. package/lib/rules/dlitem.json +11 -11
  518. package/lib/rules/document-title.json +11 -11
  519. package/lib/rules/duplicate-id-active-matches.js +6 -6
  520. package/lib/rules/duplicate-id-active.json +12 -12
  521. package/lib/rules/duplicate-id-aria-matches.js +1 -1
  522. package/lib/rules/duplicate-id-aria.json +12 -12
  523. package/lib/rules/duplicate-id-misc-matches.js +8 -8
  524. package/lib/rules/duplicate-id.json +12 -12
  525. package/lib/rules/empty-heading.json +17 -17
  526. package/lib/rules/focus-order-semantics.json +11 -11
  527. package/lib/rules/form-field-multiple-labels.json +11 -11
  528. package/lib/rules/frame-tested.json +10 -10
  529. package/lib/rules/frame-title-has-text-matches.js +2 -2
  530. package/lib/rules/frame-title-unique.json +11 -11
  531. package/lib/rules/frame-title.json +22 -22
  532. package/lib/rules/heading-matches.js +14 -14
  533. package/lib/rules/heading-order.json +11 -11
  534. package/lib/rules/hidden-content.json +11 -11
  535. package/lib/rules/html-has-lang.json +11 -11
  536. package/lib/rules/html-lang-valid.json +10 -10
  537. package/lib/rules/html-namespace-matches.js +1 -1
  538. package/lib/rules/html-xml-lang-mismatch.json +11 -11
  539. package/lib/rules/identical-links-same-purpose-matches.js +9 -9
  540. package/lib/rules/identical-links-same-purpose.json +12 -12
  541. package/lib/rules/image-alt.json +24 -24
  542. package/lib/rules/img-redundant-alt.json +10 -10
  543. package/lib/rules/input-button-name.json +24 -24
  544. package/lib/rules/input-image-alt.json +18 -18
  545. package/lib/rules/inserted-into-focus-order-matches.js +1 -1
  546. package/lib/rules/is-initiator-matches.js +1 -1
  547. package/lib/rules/label-content-name-mismatch-matches.js +38 -38
  548. package/lib/rules/label-content-name-mismatch.json +10 -10
  549. package/lib/rules/label-matches.js +10 -10
  550. package/lib/rules/label-title-only.json +11 -11
  551. package/lib/rules/label.json +27 -27
  552. package/lib/rules/landmark-banner-is-top-level.json +11 -11
  553. package/lib/rules/landmark-complementary-is-top-level.json +10 -10
  554. package/lib/rules/landmark-contentinfo-is-top-level.json +11 -11
  555. package/lib/rules/landmark-has-body-context-matches.js +6 -6
  556. package/lib/rules/landmark-main-is-top-level.json +10 -10
  557. package/lib/rules/landmark-no-duplicate-banner.json +10 -10
  558. package/lib/rules/landmark-no-duplicate-contentinfo.json +10 -10
  559. package/lib/rules/landmark-no-duplicate-main.json +10 -10
  560. package/lib/rules/landmark-one-main.json +10 -10
  561. package/lib/rules/landmark-unique-matches.js +36 -36
  562. package/lib/rules/landmark-unique.json +11 -11
  563. package/lib/rules/layout-table-matches.js +2 -1
  564. package/lib/rules/link-in-text-block-matches.js +12 -12
  565. package/lib/rules/link-in-text-block.json +12 -12
  566. package/lib/rules/link-name.json +23 -23
  567. package/lib/rules/list.json +11 -11
  568. package/lib/rules/listitem.json +11 -11
  569. package/lib/rules/marquee.json +11 -11
  570. package/lib/rules/meta-refresh.json +18 -18
  571. package/lib/rules/meta-viewport-large.json +11 -11
  572. package/lib/rules/meta-viewport.json +11 -11
  573. package/lib/rules/no-autoplay-audio-matches.js +16 -16
  574. package/lib/rules/no-autoplay-audio.json +13 -13
  575. package/lib/rules/no-empty-role-matches.js +7 -7
  576. package/lib/rules/no-explicit-name-required-matches.js +9 -9
  577. package/lib/rules/no-naming-method-matches.js +12 -12
  578. package/lib/rules/no-role-matches.js +1 -1
  579. package/lib/rules/not-html-matches.js +2 -2
  580. package/lib/rules/object-alt.json +22 -22
  581. package/lib/rules/p-as-heading-matches.js +14 -14
  582. package/lib/rules/p-as-heading.json +11 -11
  583. package/lib/rules/page-has-heading-one.json +10 -10
  584. package/lib/rules/presentation-role-conflict.json +10 -10
  585. package/lib/rules/region.json +10 -10
  586. package/lib/rules/role-img-alt.json +18 -18
  587. package/lib/rules/scope-attr-valid.json +10 -10
  588. package/lib/rules/scrollable-region-focusable-matches.js +59 -59
  589. package/lib/rules/scrollable-region-focusable.json +10 -10
  590. package/lib/rules/select-name.json +25 -25
  591. package/lib/rules/server-side-image-map.json +16 -16
  592. package/lib/rules/skip-link-matches.js +1 -1
  593. package/lib/rules/skip-link.json +11 -11
  594. package/lib/rules/svg-img-alt.json +23 -23
  595. package/lib/rules/svg-namespace-matches.js +10 -10
  596. package/lib/rules/tabindex.json +10 -10
  597. package/lib/rules/table-duplicate-name.json +10 -10
  598. package/lib/rules/table-fake-caption.json +18 -18
  599. package/lib/rules/td-has-header.json +18 -18
  600. package/lib/rules/td-headers-attr.json +10 -10
  601. package/lib/rules/th-has-data-cells.json +11 -11
  602. package/lib/rules/valid-lang.json +11 -11
  603. package/lib/rules/video-caption.json +17 -17
  604. package/lib/rules/window-is-top-matches.js +3 -3
  605. package/lib/rules/xml-lang-mismatch-matches.js +6 -6
  606. package/lib/standards/aria-attrs.js +195 -204
  607. package/lib/standards/aria-roles.js +781 -812
  608. package/lib/standards/css-colors.js +148 -148
  609. package/lib/standards/dpub-roles.js +213 -214
  610. package/lib/standards/html-elms.js +912 -914
  611. package/lib/standards/index.js +16 -18
  612. package/locales/de.json +572 -909
  613. package/package.json +151 -174
  614. package/sri-history.json +1 -5
  615. package/typings/axe-core/axe-core-tests.ts +144 -144
  616. package/.eslintrc.js +0 -111
  617. package/lib/checks/aria/aria-prohibited-attr-evaluate.js +0 -67
  618. package/lib/checks/aria/aria-prohibited-attr.json +0 -12
  619. package/lib/checks/keyboard/frame-focusable-content.json +0 -12
  620. package/lib/checks/keyboard/no-focusable-content-evaluate.js +0 -35
  621. package/lib/checks/keyboard/no-focusable-content.json +0 -12
  622. package/lib/core/public/setup.js +0 -20
  623. package/lib/core/public/teardown.js +0 -21
  624. package/lib/core/utils/filter-html-attrs.js +0 -75
  625. package/lib/core/utils/get-rule.js +0 -17
  626. package/lib/core/utils/respondable/assert-window.js +0 -21
  627. package/lib/core/utils/respondable/callback-store.js +0 -36
  628. package/lib/core/utils/respondable/message-id.js +0 -22
  629. package/lib/core/utils/respondable/message-parser.js +0 -109
  630. package/lib/core/utils/respondable/post.js +0 -32
  631. package/lib/rules/aria-required-children-matches.js +0 -8
  632. package/lib/rules/aria-required-parent-matches.js +0 -8
  633. package/lib/rules/aria-text.json +0 -12
  634. package/lib/rules/empty-table-header.json +0 -13
  635. package/lib/rules/frame-focusable-content-matches.js +0 -9
  636. package/lib/rules/frame-focusable-content.json +0 -13
  637. package/lib/rules/nested-interactive-matches.js +0 -13
  638. package/lib/rules/nested-interactive.json +0 -12
  639. package/lib/standards/graphics-roles.js +0 -22
  640. package/locales/pl.json +0 -911
@@ -3,32 +3,32 @@ import sanitize from '../text/sanitize';
3
3
  import { getNodeFromTree } from '../../core/utils';
4
4
 
5
5
  function walkDomNode(node, functor) {
6
- if (functor(node.actualNode) !== false) {
7
- node.children.forEach(child => walkDomNode(child, functor));
8
- }
6
+ if (functor(node.actualNode) !== false) {
7
+ node.children.forEach(child => walkDomNode(child, functor));
8
+ }
9
9
  }
10
10
 
11
11
  const blockLike = [
12
- 'block',
13
- 'list-item',
14
- 'table',
15
- 'flex',
16
- 'grid',
17
- 'inline-block'
12
+ 'block',
13
+ 'list-item',
14
+ 'table',
15
+ 'flex',
16
+ 'grid',
17
+ 'inline-block'
18
18
  ];
19
19
  function isBlock(elm) {
20
- var display = window.getComputedStyle(elm).getPropertyValue('display');
21
- return blockLike.includes(display) || display.substr(0, 6) === 'table-';
20
+ var display = window.getComputedStyle(elm).getPropertyValue('display');
21
+ return blockLike.includes(display) || display.substr(0, 6) === 'table-';
22
22
  }
23
23
 
24
24
  function getBlockParent(node) {
25
- // Find the closest parent
26
- let parentBlock = getComposedParent(node);
27
- while (parentBlock && !isBlock(parentBlock)) {
28
- parentBlock = getComposedParent(parentBlock);
29
- }
25
+ // Find the closest parent
26
+ let parentBlock = getComposedParent(node);
27
+ while (parentBlock && !isBlock(parentBlock)) {
28
+ parentBlock = getComposedParent(parentBlock);
29
+ }
30
30
 
31
- return getNodeFromTree(parentBlock);
31
+ return getNodeFromTree(parentBlock);
32
32
  }
33
33
 
34
34
  /**
@@ -37,71 +37,71 @@ function getBlockParent(node) {
37
37
  * @return {Boolean} [description]
38
38
  */
39
39
  function isInTextBlock(node) {
40
- if (isBlock(node)) {
41
- // Ignore if the link is a block
42
- return false;
43
- }
40
+ if (isBlock(node)) {
41
+ // Ignore if the link is a block
42
+ return false;
43
+ }
44
44
 
45
- // Find all the text part of the parent block not in a link, and all the text in a link
46
- const virtualParent = getBlockParent(node);
47
- let parentText = '';
48
- let linkText = '';
49
- let inBrBlock = 0;
45
+ // Find all the text part of the parent block not in a link, and all the text in a link
46
+ const virtualParent = getBlockParent(node);
47
+ let parentText = '';
48
+ let linkText = '';
49
+ let inBrBlock = 0;
50
50
 
51
- // We want to ignore hidden text, and if br / hr is used, only use the section of the parent
52
- // that has the link we're looking at
53
- walkDomNode(virtualParent, currNode => {
54
- // We're already passed it, skip everything else
55
- if (inBrBlock === 2) {
56
- return false;
57
- }
51
+ // We want to ignore hidden text, and if br / hr is used, only use the section of the parent
52
+ // that has the link we're looking at
53
+ walkDomNode(virtualParent, function(currNode) {
54
+ // We're already passed it, skip everything else
55
+ if (inBrBlock === 2) {
56
+ return false;
57
+ }
58
58
 
59
- if (currNode.nodeType === 3) {
60
- // Add the text to the parent
61
- parentText += currNode.nodeValue;
62
- }
63
- // Ignore any node that's not an element (or text as above)
64
- if (currNode.nodeType !== 1) {
65
- return;
66
- }
59
+ if (currNode.nodeType === 3) {
60
+ // Add the text to the parent
61
+ parentText += currNode.nodeValue;
62
+ }
63
+ // Ignore any node that's not an element (or text as above)
64
+ if (currNode.nodeType !== 1) {
65
+ return;
66
+ }
67
67
 
68
- var nodeName = (currNode.nodeName || '').toUpperCase();
69
- // BR and HR elements break the line
70
- if (['BR', 'HR'].includes(nodeName)) {
71
- if (inBrBlock === 0) {
72
- parentText = '';
73
- linkText = '';
74
- } else {
75
- inBrBlock = 2;
76
- }
68
+ var nodeName = (currNode.nodeName || '').toUpperCase();
69
+ // BR and HR elements break the line
70
+ if (['BR', 'HR'].includes(nodeName)) {
71
+ if (inBrBlock === 0) {
72
+ parentText = '';
73
+ linkText = '';
74
+ } else {
75
+ inBrBlock = 2;
76
+ }
77
77
 
78
- // Don't walk nodes with content not displayed on screen.
79
- } else if (
80
- currNode.style.display === 'none' ||
81
- currNode.style.overflow === 'hidden' ||
82
- !['', null, 'none'].includes(currNode.style.float) ||
83
- !['', null, 'relative'].includes(currNode.style.position)
84
- ) {
85
- return false;
78
+ // Don't walk nodes with content not displayed on screen.
79
+ } else if (
80
+ currNode.style.display === 'none' ||
81
+ currNode.style.overflow === 'hidden' ||
82
+ !['', null, 'none'].includes(currNode.style.float) ||
83
+ !['', null, 'relative'].includes(currNode.style.position)
84
+ ) {
85
+ return false;
86
86
 
87
- // Don't walk links, we're only interested in what's not in them.
88
- } else if (
89
- (nodeName === 'A' && currNode.href) ||
90
- (currNode.getAttribute('role') || '').toLowerCase() === 'link'
91
- ) {
92
- if (currNode === node) {
93
- inBrBlock = 1;
94
- }
95
- // Grab all the text from this element, but don't walk down it's children
96
- linkText += currNode.textContent;
97
- return false;
98
- }
99
- });
87
+ // Don't walk links, we're only interested in what's not in them.
88
+ } else if (
89
+ (nodeName === 'A' && currNode.href) ||
90
+ (currNode.getAttribute('role') || '').toLowerCase() === 'link'
91
+ ) {
92
+ if (currNode === node) {
93
+ inBrBlock = 1;
94
+ }
95
+ // Grab all the text from this element, but don't walk down it's children
96
+ linkText += currNode.textContent;
97
+ return false;
98
+ }
99
+ });
100
100
 
101
- parentText = sanitize(parentText);
102
- linkText = sanitize(linkText);
101
+ parentText = sanitize(parentText);
102
+ linkText = sanitize(linkText);
103
103
 
104
- return parentText.length > linkText.length;
104
+ return parentText.length > linkText.length;
105
105
  }
106
106
 
107
107
  export default isInTextBlock;
@@ -11,94 +11,94 @@ import { querySelectorAllFilter } from '../../core/utils';
11
11
  * @return {Boolean|undefined} True if we know (or our best guess) that a modal is open, undefined if we can't tell (doesn't mean there isn't one open)
12
12
  */
13
13
  function isModalOpen(options) {
14
- options = options || {};
15
- const modalPercent = options.modalPercent || 0.75;
14
+ options = options || {};
15
+ let modalPercent = options.modalPercent || 0.75;
16
16
 
17
- // there is no "definitive" way to code a modal so detecting when one is open
18
- // is a bit of a guess. a modal won't always be accessible, so we can't rely
19
- // on the `role` attribute, and relying on a class name as a convention is
20
- // unreliable. we also cannot rely on the body/html not scrolling.
21
- //
22
- // because of this, we will look for two different types of modals:
23
- // "definitely a modal" and "could be a modal."
24
- //
25
- // "definitely a modal" is any visible element that is coded to be a modal
26
- // by using one of the following criteria:
27
- //
28
- // - has the attribute `role=dialog`
29
- // - has the attribute `aria-modal=true`
30
- // - is the dialog element
31
- //
32
- // "could be a modal" is a visible element that takes up more than 75% of
33
- // the screen (though typically full width/height) and is the top-most element
34
- // in the viewport. since we aren't sure if it is or is not a modal this is
35
- // just our best guess of being one based on convention.
17
+ // there is no "definitive" way to code a modal so detecting when one is open
18
+ // is a bit of a guess. a modal won't always be accessible, so we can't rely
19
+ // on the `role` attribute, and relying on a class name as a convention is
20
+ // unreliable. we also cannot rely on the body/html not scrolling.
21
+ //
22
+ // because of this, we will look for two different types of modals:
23
+ // "definitely a modal" and "could be a modal."
24
+ //
25
+ // "definitely a modal" is any visible element that is coded to be a modal
26
+ // by using one of the following criteria:
27
+ //
28
+ // - has the attribute `role=dialog`
29
+ // - has the attribute `aria-modal=true`
30
+ // - is the dialog element
31
+ //
32
+ // "could be a modal" is a visible element that takes up more than 75% of
33
+ // the screen (though typically full width/height) and is the top-most element
34
+ // in the viewport. since we aren't sure if it is or is not a modal this is
35
+ // just our best guess of being one based on convention.
36
36
 
37
- if (cache.get('isModalOpen')) {
38
- return cache.get('isModalOpen');
39
- }
37
+ if (cache.get('isModalOpen')) {
38
+ return cache.get('isModalOpen');
39
+ }
40
40
 
41
- const definiteModals = querySelectorAllFilter(
42
- // TODO: es-module-_tree
43
- axe._tree[0],
44
- 'dialog, [role=dialog], [aria-modal=true]',
45
- vNode => isVisible(vNode.actualNode)
46
- );
41
+ const definiteModals = querySelectorAllFilter(
42
+ // TODO: es-module-_tree
43
+ axe._tree[0],
44
+ 'dialog, [role=dialog], [aria-modal=true]',
45
+ vNode => isVisible(vNode.actualNode)
46
+ );
47
47
 
48
- if (definiteModals.length) {
49
- cache.set('isModalOpen', true);
50
- return true;
51
- }
48
+ if (definiteModals.length) {
49
+ cache.set('isModalOpen', true);
50
+ return true;
51
+ }
52
52
 
53
- // to find a "could be a modal" we will take the element stack from each of
54
- // four corners and one from the middle of the viewport (total of 5). if each
55
- // stack contains an element whose width/height is >= 75% of the screen, we
56
- // found a "could be a modal"
57
- const viewport = getViewportSize(window);
58
- const percentWidth = viewport.width * modalPercent;
59
- const percentHeight = viewport.height * modalPercent;
60
- const x = (viewport.width - percentWidth) / 2;
61
- const y = (viewport.height - percentHeight) / 2;
53
+ // to find a "could be a modal" we will take the element stack from each of
54
+ // four corners and one from the middle of the viewport (total of 5). if each
55
+ // stack contains an element whose width/height is >= 75% of the screen, we
56
+ // found a "could be a modal"
57
+ const viewport = getViewportSize(window);
58
+ const percentWidth = viewport.width * modalPercent;
59
+ const percentHeight = viewport.height * modalPercent;
60
+ const x = (viewport.width - percentWidth) / 2;
61
+ const y = (viewport.height - percentHeight) / 2;
62
62
 
63
- const points = [
64
- // top-left corner
65
- { x, y },
66
- // top-right corner
67
- { x: viewport.width - x, y },
68
- // center
69
- { x: viewport.width / 2, y: viewport.height / 2 },
70
- // bottom-left corner
71
- { x, y: viewport.height - y },
72
- // bottom-right corner
73
- { x: viewport.width - x, y: viewport.height - y }
74
- ];
63
+ const points = [
64
+ // top-left corner
65
+ { x, y },
66
+ // top-right corner
67
+ { x: viewport.width - x, y },
68
+ // center
69
+ { x: viewport.width / 2, y: viewport.height / 2 },
70
+ // bottom-left corner
71
+ { x, y: viewport.height - y },
72
+ // bottom-right corner
73
+ { x: viewport.width - x, y: viewport.height - y }
74
+ ];
75
75
 
76
- const stacks = points.map(point => {
77
- return Array.from(document.elementsFromPoint(point.x, point.y));
78
- });
76
+ const stacks = points.map(point => {
77
+ return Array.from(document.elementsFromPoint(point.x, point.y));
78
+ });
79
79
 
80
- for (let i = 0; i < stacks.length; i++) {
81
- // a modal isn't guaranteed to be the top most element so we'll have to
82
- // find the first element in the stack that meets the modal criteria
83
- // and make sure it's in the other stacks
84
- const modalElement = stacks[i].find(elm => {
85
- const style = window.getComputedStyle(elm);
86
- return (
87
- parseInt(style.width, 10) >= percentWidth &&
88
- parseInt(style.height, 10) >= percentHeight &&
89
- style.getPropertyValue('pointer-events') !== 'none' &&
90
- (style.position === 'absolute' || style.position === 'fixed')
91
- );
92
- });
80
+ for (let i = 0; i < stacks.length; i++) {
81
+ // a modal isn't guaranteed to be the top most element so we'll have to
82
+ // find the first element in the stack that meets the modal criteria
83
+ // and make sure it's in the other stacks
84
+ const modalElement = stacks[i].find(elm => {
85
+ const style = window.getComputedStyle(elm);
86
+ return (
87
+ parseInt(style.width, 10) >= percentWidth &&
88
+ parseInt(style.height, 10) >= percentHeight &&
89
+ style.getPropertyValue('pointer-events') !== 'none' &&
90
+ (style.position === 'absolute' || style.position === 'fixed')
91
+ );
92
+ });
93
93
 
94
- if (modalElement && stacks.every(stack => stack.includes(modalElement))) {
95
- cache.set('isModalOpen', true);
96
- return true;
97
- }
98
- }
94
+ if (modalElement && stacks.every(stack => stack.includes(modalElement))) {
95
+ cache.set('isModalOpen', true);
96
+ return true;
97
+ }
98
+ }
99
99
 
100
- cache.set('isModalOpen', undefined);
101
- return undefined;
100
+ cache.set('isModalOpen', undefined);
101
+ return undefined;
102
102
  }
103
103
 
104
104
  export default isModalOpen;
@@ -12,30 +12,30 @@ import focusDisabled from './focus-disabled';
12
12
  * if its tabindex were removed. Else, false.
13
13
  */
14
14
  function isNativelyFocusable(el) {
15
- const vNode = el instanceof AbstractVirtualNode ? el : getNodeFromTree(el);
15
+ const vNode = el instanceof AbstractVirtualNode ? el : getNodeFromTree(el);
16
16
 
17
- if (!vNode || focusDisabled(vNode)) {
18
- return false;
19
- }
17
+ if (!vNode || focusDisabled(vNode)) {
18
+ return false;
19
+ }
20
20
 
21
- switch (vNode.props.nodeName) {
22
- case 'a':
23
- case 'area':
24
- if (vNode.hasAttr('href')) {
25
- return true;
26
- }
27
- break;
28
- case 'input':
29
- return vNode.props.type !== 'hidden';
30
- case 'textarea':
31
- case 'select':
32
- case 'summary':
33
- case 'button':
34
- return true;
35
- case 'details':
36
- return !querySelectorAll(vNode, 'summary').length;
37
- }
38
- return false;
21
+ switch (vNode.props.nodeName) {
22
+ case 'a':
23
+ case 'area':
24
+ if (vNode.hasAttr('href')) {
25
+ return true;
26
+ }
27
+ break;
28
+ case 'input':
29
+ return vNode.props.type !== 'hidden';
30
+ case 'textarea':
31
+ case 'select':
32
+ case 'summary':
33
+ case 'button':
34
+ return true;
35
+ case 'details':
36
+ return !querySelectorAll(vNode, 'summary').length;
37
+ }
38
+ return false;
39
39
  }
40
40
 
41
41
  export default isNativelyFocusable;
@@ -8,7 +8,7 @@
8
8
  * @return {Boolean}
9
9
  */
10
10
  function isNode(element) {
11
- return element instanceof window.Node;
11
+ return element instanceof window.Node;
12
12
  }
13
13
 
14
14
  export default isNode;
@@ -3,17 +3,17 @@ import getElementCoordinates from './get-element-coordinates';
3
3
  import getViewportSize from './get-viewport-size';
4
4
 
5
5
  function noParentScrolled(element, offset) {
6
- element = getComposedParent(element);
7
- while (element && element.nodeName.toLowerCase() !== 'html') {
8
- if (element.scrollTop) {
9
- offset += element.scrollTop;
10
- if (offset >= 0) {
11
- return false;
12
- }
13
- }
14
- element = getComposedParent(element);
15
- }
16
- return true;
6
+ element = getComposedParent(element);
7
+ while (element && element.nodeName.toLowerCase() !== 'html') {
8
+ if (element.scrollTop) {
9
+ offset += element.scrollTop;
10
+ if (offset >= 0) {
11
+ return false;
12
+ }
13
+ }
14
+ element = getComposedParent(element);
15
+ }
16
+ return true;
17
17
  }
18
18
 
19
19
  /**
@@ -25,42 +25,42 @@ function noParentScrolled(element, offset) {
25
25
  * @return {Boolean}
26
26
  */
27
27
  function isOffscreen(element) {
28
- let leftBoundary;
29
- const docElement = document.documentElement;
30
- const styl = window.getComputedStyle(element);
31
- const dir = window
32
- .getComputedStyle(document.body || docElement)
33
- .getPropertyValue('direction');
34
- const coords = getElementCoordinates(element);
28
+ let leftBoundary;
29
+ const docElement = document.documentElement;
30
+ const styl = window.getComputedStyle(element);
31
+ const dir = window
32
+ .getComputedStyle(document.body || docElement)
33
+ .getPropertyValue('direction');
34
+ const coords = getElementCoordinates(element);
35
35
 
36
- // bottom edge beyond
37
- if (
38
- coords.bottom < 0 &&
39
- (noParentScrolled(element, coords.bottom) || styl.position === 'absolute')
40
- ) {
41
- return true;
42
- }
36
+ // bottom edge beyond
37
+ if (
38
+ coords.bottom < 0 &&
39
+ (noParentScrolled(element, coords.bottom) || styl.position === 'absolute')
40
+ ) {
41
+ return true;
42
+ }
43
43
 
44
- if (coords.left === 0 && coords.right === 0) {
45
- //This is an edge case, an empty (zero-width) element that isn't positioned 'off screen'.
46
- return false;
47
- }
44
+ if (coords.left === 0 && coords.right === 0) {
45
+ //This is an edge case, an empty (zero-width) element that isn't positioned 'off screen'.
46
+ return false;
47
+ }
48
48
 
49
- if (dir === 'ltr') {
50
- if (coords.right <= 0) {
51
- return true;
52
- }
53
- } else {
54
- leftBoundary = Math.max(
55
- docElement.scrollWidth,
56
- getViewportSize(window).width
57
- );
58
- if (coords.left >= leftBoundary) {
59
- return true;
60
- }
61
- }
49
+ if (dir === 'ltr') {
50
+ if (coords.right <= 0) {
51
+ return true;
52
+ }
53
+ } else {
54
+ leftBoundary = Math.max(
55
+ docElement.scrollWidth,
56
+ getViewportSize(window).width
57
+ );
58
+ if (coords.left >= leftBoundary) {
59
+ return true;
60
+ }
61
+ }
62
62
 
63
- return false;
63
+ return false;
64
64
  }
65
65
 
66
66
  export default isOffscreen;
@@ -7,10 +7,10 @@ import getOwnBackgroundColor from '../color/get-own-background-color';
7
7
  * @return {Boolean} false if the background is transparent, true otherwise
8
8
  */
9
9
  function isOpaque(node) {
10
- const style = window.getComputedStyle(node);
11
- return (
12
- elementHasImage(node, style) || getOwnBackgroundColor(style).alpha === 1
13
- );
10
+ const style = window.getComputedStyle(node);
11
+ return (
12
+ elementHasImage(node, style) || getOwnBackgroundColor(style).alpha === 1
13
+ );
14
14
  }
15
15
 
16
16
  export default isOpaque;
@@ -13,37 +13,37 @@ const isInternalLinkRegex = /^\/?#[^/!]/;
13
13
  * @return {Boolean}
14
14
  */
15
15
  function isSkipLink(element) {
16
- if (!isInternalLinkRegex.test(element.getAttribute('href'))) {
17
- return false;
18
- }
16
+ if (!isInternalLinkRegex.test(element.getAttribute('href'))) {
17
+ return false;
18
+ }
19
19
 
20
- let firstPageLink;
21
- if (typeof cache.get('firstPageLink') !== 'undefined') {
22
- firstPageLink = cache.get('firstPageLink');
23
- } else {
24
- // define a skip link as any anchor element whose href starts with `#...`
25
- // and which precedes the first anchor element whose href doesn't start
26
- // with `#...` (that is, a link to a page)
27
- firstPageLink = querySelectorAll(
28
- // TODO: es-module-_tree
29
- axe._tree,
30
- 'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript"])'
31
- )[0];
20
+ let firstPageLink;
21
+ if (typeof cache.get('firstPageLink') !== 'undefined') {
22
+ firstPageLink = cache.get('firstPageLink');
23
+ } else {
24
+ // define a skip link as any anchor element whose href starts with `#...`
25
+ // and which precedes the first anchor element whose href doesn't start
26
+ // with `#...` (that is, a link to a page)
27
+ firstPageLink = querySelectorAll(
28
+ // TODO: es-module-_tree
29
+ axe._tree,
30
+ 'a:not([href^="#"]):not([href^="/#"]):not([href^="javascript"])'
31
+ )[0];
32
32
 
33
- // null will signify no first page link
34
- cache.set('firstPageLink', firstPageLink || null);
35
- }
33
+ // null will signify no first page link
34
+ cache.set('firstPageLink', firstPageLink || null);
35
+ }
36
36
 
37
- // if there are no page links then all all links will need to be
38
- // considered as skip links
39
- if (!firstPageLink) {
40
- return true;
41
- }
37
+ // if there are no page links then all all links will need to be
38
+ // considered as skip links
39
+ if (!firstPageLink) {
40
+ return true;
41
+ }
42
42
 
43
- return (
44
- element.compareDocumentPosition(firstPageLink.actualNode) ===
45
- element.DOCUMENT_POSITION_FOLLOWING
46
- );
43
+ return (
44
+ element.compareDocumentPosition(firstPageLink.actualNode) ===
45
+ element.DOCUMENT_POSITION_FOLLOWING
46
+ );
47
47
  }
48
48
 
49
49
  export default isSkipLink;