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
@@ -1,23 +1,23 @@
1
1
  function accesskeysAfter(results) {
2
- var seen = {};
3
- return results
4
- .filter(r => {
5
- if (!r.data) {
6
- return false;
7
- }
8
- var key = r.data.toUpperCase();
9
- if (!seen[key]) {
10
- seen[key] = r;
11
- r.relatedNodes = [];
12
- return true;
13
- }
14
- seen[key].relatedNodes.push(r.relatedNodes[0]);
15
- return false;
16
- })
17
- .map(r => {
18
- r.result = !!r.relatedNodes.length;
19
- return r;
20
- });
2
+ var seen = {};
3
+ return results
4
+ .filter(function(r) {
5
+ if (!r.data) {
6
+ return false;
7
+ }
8
+ var key = r.data.toUpperCase();
9
+ if (!seen[key]) {
10
+ seen[key] = r;
11
+ r.relatedNodes = [];
12
+ return true;
13
+ }
14
+ seen[key].relatedNodes.push(r.relatedNodes[0]);
15
+ return false;
16
+ })
17
+ .map(function(r) {
18
+ r.result = !!r.relatedNodes.length;
19
+ return r;
20
+ });
21
21
  }
22
22
 
23
23
  export default accesskeysAfter;
@@ -1,11 +1,11 @@
1
1
  import { isVisible } from '../../commons/dom';
2
2
 
3
3
  function accesskeysEvaluate(node) {
4
- if (isVisible(node, false)) {
5
- this.data(node.getAttribute('accesskey'));
6
- this.relatedNodes([node]);
7
- }
8
- return true;
4
+ if (isVisible(node, false)) {
5
+ this.data(node.getAttribute('accesskey'));
6
+ this.relatedNodes([node]);
7
+ }
8
+ return true;
9
9
  }
10
10
 
11
11
  export default accesskeysEvaluate;
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "accesskeys",
3
- "evaluate": "accesskeys-evaluate",
4
- "after": "accesskeys-after",
5
- "metadata": {
6
- "impact": "serious",
7
- "messages": {
8
- "pass": "Accesskey attribute value is unique",
9
- "fail": "Document has multiple elements with the same accesskey"
10
- }
11
- }
2
+ "id": "accesskeys",
3
+ "evaluate": "accesskeys-evaluate",
4
+ "after": "accesskeys-after",
5
+ "metadata": {
6
+ "impact": "serious",
7
+ "messages": {
8
+ "pass": "Accesskey attribute value is unique",
9
+ "fail": "Document has multiple elements with the same accesskey"
10
+ }
11
+ }
12
12
  }
@@ -1,20 +1,20 @@
1
1
  function focusableContentEvaluate(node, options, virtualNode) {
2
- /**
3
- * Note:
4
- * Check if given node contains focusable elements (excluding thyself)
5
- */
6
- const tabbableElements = virtualNode.tabbableElements;
2
+ /**
3
+ * Note:
4
+ * Check if given node contains focusable elements (excluding thyself)
5
+ */
6
+ const tabbableElements = virtualNode.tabbableElements;
7
7
 
8
- if (!tabbableElements) {
9
- return false;
10
- }
8
+ if (!tabbableElements) {
9
+ return false;
10
+ }
11
11
 
12
- // remove thyself from tabbable elements (if exists)
13
- const tabbableContentElements = tabbableElements.filter(
14
- el => el !== virtualNode
15
- );
12
+ // remove thyself from tabbable elements (if exists)
13
+ const tabbableContentElements = tabbableElements.filter(
14
+ el => el !== virtualNode
15
+ );
16
16
 
17
- return tabbableContentElements.length > 0;
17
+ return tabbableContentElements.length > 0;
18
18
  }
19
19
 
20
20
  export default focusableContentEvaluate;
@@ -1,11 +1,11 @@
1
1
  {
2
- "id": "focusable-content",
3
- "evaluate": "focusable-content-evaluate",
4
- "metadata": {
5
- "impact": "moderate",
6
- "messages": {
7
- "pass": "Element contains focusable elements",
8
- "fail": "Element should have focusable content"
9
- }
10
- }
2
+ "id": "focusable-content",
3
+ "evaluate": "focusable-content-evaluate",
4
+ "metadata": {
5
+ "impact": "moderate",
6
+ "messages": {
7
+ "pass": "Element contains focusable elements",
8
+ "fail": "Element should have focusable content"
9
+ }
10
+ }
11
11
  }
@@ -1,36 +1,36 @@
1
1
  import { isModalOpen } from '../../commons/dom';
2
2
 
3
3
  function focusableDisabledEvaluate(node, options, virtualNode) {
4
- const elementsThatCanBeDisabled = [
5
- 'BUTTON',
6
- 'FIELDSET',
7
- 'INPUT',
8
- 'SELECT',
9
- 'TEXTAREA'
10
- ];
11
-
12
- const tabbableElements = virtualNode.tabbableElements;
13
-
14
- if (!tabbableElements || !tabbableElements.length) {
15
- return true;
16
- }
17
-
18
- const relatedNodes = tabbableElements.reduce((out, { actualNode: el }) => {
19
- const nodeName = el.nodeName.toUpperCase();
20
- // populate nodes that can be disabled
21
- if (elementsThatCanBeDisabled.includes(nodeName)) {
22
- out.push(el);
23
- }
24
- return out;
25
- }, []);
26
-
27
- this.relatedNodes(relatedNodes);
28
-
29
- if (relatedNodes.length && isModalOpen()) {
30
- return true;
31
- }
32
-
33
- return relatedNodes.length === 0;
4
+ const elementsThatCanBeDisabled = [
5
+ 'BUTTON',
6
+ 'FIELDSET',
7
+ 'INPUT',
8
+ 'SELECT',
9
+ 'TEXTAREA'
10
+ ];
11
+
12
+ const tabbableElements = virtualNode.tabbableElements;
13
+
14
+ if (!tabbableElements || !tabbableElements.length) {
15
+ return true;
16
+ }
17
+
18
+ const relatedNodes = tabbableElements.reduce((out, { actualNode: el }) => {
19
+ const nodeName = el.nodeName.toUpperCase();
20
+ // populate nodes that can be disabled
21
+ if (elementsThatCanBeDisabled.includes(nodeName)) {
22
+ out.push(el);
23
+ }
24
+ return out;
25
+ }, []);
26
+
27
+ this.relatedNodes(relatedNodes);
28
+
29
+ if (relatedNodes.length && isModalOpen()) {
30
+ return true;
31
+ }
32
+
33
+ return relatedNodes.length === 0;
34
34
  }
35
35
 
36
36
  export default focusableDisabledEvaluate;
@@ -1,11 +1,11 @@
1
1
  {
2
- "id": "focusable-disabled",
3
- "evaluate": "focusable-disabled-evaluate",
4
- "metadata": {
5
- "impact": "serious",
6
- "messages": {
7
- "pass": "No focusable elements contained within element",
8
- "fail": "Focusable content should be disabled or be removed from the DOM"
9
- }
10
- }
2
+ "id": "focusable-disabled",
3
+ "evaluate": "focusable-disabled-evaluate",
4
+ "metadata": {
5
+ "impact": "serious",
6
+ "messages": {
7
+ "pass": "No focusable elements contained within element",
8
+ "fail": "Focusable content should be disabled or be removed from the DOM"
9
+ }
10
+ }
11
11
  }
@@ -1,47 +1,47 @@
1
1
  import { closest } from '../../core/utils';
2
2
 
3
3
  function focusableElementEvaluate(node, options, virtualNode) {
4
- /**
5
- * Note:
6
- * Check
7
- * - if element is focusable
8
- * - if element is in focus order via `tabindex`
9
- */
10
- if (
11
- virtualNode.hasAttr('contenteditable') &&
12
- isContenteditable(virtualNode)
13
- ) {
14
- return true;
15
- }
16
-
17
- const isFocusable = virtualNode.isFocusable;
18
- let tabIndex = parseInt(virtualNode.attr('tabindex'), 10);
19
- tabIndex = !isNaN(tabIndex) ? tabIndex : null;
20
-
21
- return tabIndex ? isFocusable && tabIndex >= 0 : isFocusable;
22
-
23
- // contenteditable is focusable when it is an empty string (whitespace
24
- // is not considered empty) or "true". if the value is "false"
25
- // you can't edit it, but if it's anything else it inherits the value
26
- // from the first valid ancestor
27
- // @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable
28
- function isContenteditable(vNode) {
29
- const contenteditable = vNode.attr('contenteditable');
30
- if (contenteditable === 'true' || contenteditable === '') {
31
- return true;
32
- }
33
-
34
- if (contenteditable === 'false') {
35
- return false;
36
- }
37
-
38
- const ancestor = closest(virtualNode.parent, '[contenteditable]');
39
- if (!ancestor) {
40
- return false;
41
- }
42
-
43
- return isContenteditable(ancestor);
44
- }
4
+ /**
5
+ * Note:
6
+ * Check
7
+ * - if element is focusable
8
+ * - if element is in focus order via `tabindex`
9
+ */
10
+ if (
11
+ virtualNode.hasAttr('contenteditable') &&
12
+ isContenteditable(virtualNode)
13
+ ) {
14
+ return true;
15
+ }
16
+
17
+ const isFocusable = virtualNode.isFocusable;
18
+ let tabIndex = parseInt(virtualNode.attr('tabindex'), 10);
19
+ tabIndex = !isNaN(tabIndex) ? tabIndex : null;
20
+
21
+ return tabIndex ? isFocusable && tabIndex >= 0 : isFocusable;
22
+
23
+ // contenteditable is focusable when it is an empty string (whitespace
24
+ // is not considered empty) or "true". if the value is "false"
25
+ // you can't edit it, but if it's anything else it inherits the value
26
+ // from the first valid ancestor
27
+ // @see https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/contenteditable
28
+ function isContenteditable(vNode) {
29
+ const contenteditable = vNode.attr('contenteditable');
30
+ if (contenteditable === 'true' || contenteditable === '') {
31
+ return true;
32
+ }
33
+
34
+ if (contenteditable === 'false') {
35
+ return false;
36
+ }
37
+
38
+ const ancestor = closest(virtualNode.parent, '[contenteditable]');
39
+ if (!ancestor) {
40
+ return false;
41
+ }
42
+
43
+ return isContenteditable(ancestor);
44
+ }
45
45
  }
46
46
 
47
47
  export default focusableElementEvaluate;
@@ -1,11 +1,11 @@
1
1
  {
2
- "id": "focusable-element",
3
- "evaluate": "focusable-element-evaluate",
4
- "metadata": {
5
- "impact": "moderate",
6
- "messages": {
7
- "pass": "Element is focusable",
8
- "fail": "Element should be focusable"
9
- }
10
- }
2
+ "id": "focusable-element",
3
+ "evaluate": "focusable-element-evaluate",
4
+ "metadata": {
5
+ "impact": "moderate",
6
+ "messages": {
7
+ "pass": "Element is focusable",
8
+ "fail": "Element should be focusable"
9
+ }
10
+ }
11
11
  }
@@ -1,20 +1,20 @@
1
1
  import { isModalOpen } from '../../commons/dom';
2
2
 
3
3
  function focusableModalOpenEvaluate(node, options, virtualNode) {
4
- const tabbableElements = virtualNode.tabbableElements.map(
5
- ({ actualNode }) => actualNode
6
- );
4
+ const tabbableElements = virtualNode.tabbableElements.map(
5
+ ({ actualNode }) => actualNode
6
+ );
7
7
 
8
- if (!tabbableElements || !tabbableElements.length) {
9
- return true;
10
- }
8
+ if (!tabbableElements || !tabbableElements.length) {
9
+ return true;
10
+ }
11
11
 
12
- if (isModalOpen()) {
13
- this.relatedNodes(tabbableElements);
14
- return undefined;
15
- }
12
+ if (isModalOpen()) {
13
+ this.relatedNodes(tabbableElements);
14
+ return undefined;
15
+ }
16
16
 
17
- return true;
17
+ return true;
18
18
  }
19
19
 
20
20
  export default focusableModalOpenEvaluate;
@@ -1,11 +1,11 @@
1
1
  {
2
- "id": "focusable-modal-open",
3
- "evaluate": "focusable-modal-open-evaluate",
4
- "metadata": {
5
- "impact": "serious",
6
- "messages": {
7
- "pass": "No focusable elements while a modal is open",
8
- "incomplete": "Check that focusable elements are not tabbable in the current state"
9
- }
10
- }
2
+ "id": "focusable-modal-open",
3
+ "evaluate": "focusable-modal-open-evaluate",
4
+ "metadata": {
5
+ "impact": "serious",
6
+ "messages": {
7
+ "pass": "No focusable elements while a modal is open",
8
+ "incomplete": "Check that focusable elements are not tabbable in the current state"
9
+ }
10
+ }
11
11
  }
@@ -2,17 +2,17 @@ import { isFocusable } from '../../commons/dom';
2
2
  import { accessibleTextVirtual } from '../../commons/text';
3
3
 
4
4
  function focusableNoNameEvaluate(node, options, virtualNode) {
5
- const tabIndex = virtualNode.attr('tabindex');
6
- const inFocusOrder = isFocusable(virtualNode) && tabIndex > -1;
7
- if (!inFocusOrder) {
8
- return false;
9
- }
5
+ const tabIndex = virtualNode.attr('tabindex');
6
+ const inFocusOrder = isFocusable(virtualNode) && tabIndex > -1;
7
+ if (!inFocusOrder) {
8
+ return false;
9
+ }
10
10
 
11
- try {
12
- return !accessibleTextVirtual(virtualNode);
13
- } catch (e) {
14
- return undefined;
15
- }
11
+ try {
12
+ return !accessibleTextVirtual(virtualNode);
13
+ } catch (e) {
14
+ return undefined;
15
+ }
16
16
  }
17
17
 
18
18
  export default focusableNoNameEvaluate;
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "focusable-no-name",
3
- "evaluate": "focusable-no-name-evaluate",
4
- "metadata": {
5
- "impact": "serious",
6
- "messages": {
7
- "pass": "Element is not in tab order or has accessible text",
8
- "fail": "Element is in tab order and does not have accessible text",
9
- "incomplete": "Unable to determine if element has an accessible name"
10
- }
11
- }
2
+ "id": "focusable-no-name",
3
+ "evaluate": "focusable-no-name-evaluate",
4
+ "metadata": {
5
+ "impact": "serious",
6
+ "messages": {
7
+ "pass": "Element is not in tab order or has accessible text",
8
+ "fail": "Element is in tab order and does not have accessible text",
9
+ "incomplete": "Unable to determine if element has an accessible name"
10
+ }
11
+ }
12
12
  }
@@ -1,36 +1,36 @@
1
1
  import { isModalOpen } from '../../commons/dom';
2
2
 
3
3
  function focusableNotTabbableEvaluate(node, options, virtualNode) {
4
- const elementsThatCanBeDisabled = [
5
- 'BUTTON',
6
- 'FIELDSET',
7
- 'INPUT',
8
- 'SELECT',
9
- 'TEXTAREA'
10
- ];
11
-
12
- const tabbableElements = virtualNode.tabbableElements;
13
-
14
- if (!tabbableElements || !tabbableElements.length) {
15
- return true;
16
- }
17
-
18
- const relatedNodes = tabbableElements.reduce((out, { actualNode: el }) => {
19
- const nodeName = el.nodeName.toUpperCase();
20
- // populate nodes that cannot be disabled
21
- if (!elementsThatCanBeDisabled.includes(nodeName)) {
22
- out.push(el);
23
- }
24
- return out;
25
- }, []);
26
-
27
- this.relatedNodes(relatedNodes);
28
-
29
- if (relatedNodes.length > 0 && isModalOpen()) {
30
- return true;
31
- }
32
-
33
- return relatedNodes.length === 0;
4
+ const elementsThatCanBeDisabled = [
5
+ 'BUTTON',
6
+ 'FIELDSET',
7
+ 'INPUT',
8
+ 'SELECT',
9
+ 'TEXTAREA'
10
+ ];
11
+
12
+ const tabbableElements = virtualNode.tabbableElements;
13
+
14
+ if (!tabbableElements || !tabbableElements.length) {
15
+ return true;
16
+ }
17
+
18
+ const relatedNodes = tabbableElements.reduce((out, { actualNode: el }) => {
19
+ const nodeName = el.nodeName.toUpperCase();
20
+ // populate nodes that cannot be disabled
21
+ if (!elementsThatCanBeDisabled.includes(nodeName)) {
22
+ out.push(el);
23
+ }
24
+ return out;
25
+ }, []);
26
+
27
+ this.relatedNodes(relatedNodes);
28
+
29
+ if (relatedNodes.length > 0 && isModalOpen()) {
30
+ return true;
31
+ }
32
+
33
+ return relatedNodes.length === 0;
34
34
  }
35
35
 
36
36
  export default focusableNotTabbableEvaluate;
@@ -1,11 +1,11 @@
1
1
  {
2
- "id": "focusable-not-tabbable",
3
- "evaluate": "focusable-not-tabbable-evaluate",
4
- "metadata": {
5
- "impact": "serious",
6
- "messages": {
7
- "pass": "No focusable elements contained within element",
8
- "fail": "Focusable content should have tabindex='-1' or be removed from the DOM"
9
- }
10
- }
2
+ "id": "focusable-not-tabbable",
3
+ "evaluate": "focusable-not-tabbable-evaluate",
4
+ "metadata": {
5
+ "impact": "serious",
6
+ "messages": {
7
+ "pass": "No focusable elements contained within element",
8
+ "fail": "Focusable content should have tabindex='-1' or be removed from the DOM"
9
+ }
10
+ }
11
11
  }
@@ -1,31 +1,26 @@
1
- import { getRole, implicitRole } from '../../commons/aria';
1
+ import { implicitRole } from '../../commons/aria';
2
2
  import { getAriaRolesByType } from '../../commons/standards';
3
3
  import { getComposedParent } from '../../commons/dom';
4
4
 
5
5
  function landmarkIsTopLevelEvaluate(node) {
6
- var landmarks = getAriaRolesByType('landmark');
7
- var parent = getComposedParent(node);
8
- var nodeRole = getRole(node);
6
+ var landmarks = getAriaRolesByType('landmark');
7
+ var parent = getComposedParent(node);
9
8
 
10
- this.data({ role: nodeRole });
9
+ this.data({
10
+ role: node.getAttribute('role') || implicitRole(node)
11
+ });
11
12
 
12
- while (parent) {
13
- var role = parent.getAttribute('role');
14
- if (!role && parent.nodeName.toUpperCase() !== 'FORM') {
15
- role = implicitRole(parent);
16
- }
17
- // allow aside inside main
18
- // @see https://github.com/dequelabs/axe-core/issues/2651
19
- if (
20
- role &&
21
- landmarks.includes(role) &&
22
- !(role === 'main' && nodeRole === 'complementary')
23
- ) {
24
- return false;
25
- }
26
- parent = getComposedParent(parent);
27
- }
28
- return true;
13
+ while (parent) {
14
+ var role = parent.getAttribute('role');
15
+ if (!role && parent.nodeName.toUpperCase() !== 'FORM') {
16
+ role = implicitRole(parent);
17
+ }
18
+ if (role && landmarks.includes(role)) {
19
+ return false;
20
+ }
21
+ parent = getComposedParent(parent);
22
+ }
23
+ return true;
29
24
  }
30
25
 
31
26
  export default landmarkIsTopLevelEvaluate;
@@ -1,11 +1,11 @@
1
1
  {
2
- "id": "landmark-is-top-level",
3
- "evaluate": "landmark-is-top-level-evaluate",
4
- "metadata": {
5
- "impact": "moderate",
6
- "messages": {
7
- "pass": "The ${data.role} landmark is at the top level.",
8
- "fail": "The ${data.role} landmark is contained in another landmark."
9
- }
10
- }
2
+ "id": "landmark-is-top-level",
3
+ "evaluate": "landmark-is-top-level-evaluate",
4
+ "metadata": {
5
+ "impact": "moderate",
6
+ "messages": {
7
+ "pass": "The ${data.role} landmark is at the top level.",
8
+ "fail": "The ${data.role} landmark is contained in another landmark."
9
+ }
10
+ }
11
11
  }
@@ -1,15 +1,15 @@
1
1
  {
2
- "id": "page-has-heading-one",
3
- "evaluate": "has-descendant-evaluate",
4
- "after": "has-descendant-after",
5
- "options": {
6
- "selector": "h1:not([role], [aria-level]), :is(h1, h2, h3, h4, h5, h6):not([role])[aria-level=1], [role=heading][aria-level=1]"
7
- },
8
- "metadata": {
9
- "impact": "moderate",
10
- "messages": {
11
- "pass": "Page has at least one level-one heading",
12
- "fail": "Page must have a level-one heading"
13
- }
14
- }
2
+ "id": "page-has-heading-one",
3
+ "evaluate": "has-descendant-evaluate",
4
+ "after": "has-descendant-after",
5
+ "options": {
6
+ "selector": "h1:not([role]):not([aria-level]), h1:not([role])[aria-level=1], h2:not([role])[aria-level=1], h3:not([role])[aria-level=1], h4:not([role])[aria-level=1], h5:not([role])[aria-level=1], h6:not([role])[aria-level=1], [role=heading][aria-level=1]"
7
+ },
8
+ "metadata": {
9
+ "impact": "moderate",
10
+ "messages": {
11
+ "pass": "Page has at least one level-one heading",
12
+ "fail": "Page must have a level-one heading"
13
+ }
14
+ }
15
15
  }