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,52 +1,52 @@
1
1
  import { getRole, arialabelText, arialabelledbyText } from '../commons/aria';
2
2
  import {
3
- getAriaRolesSupportingNameFromContent,
4
- getAriaRolesByType
3
+ getAriaRolesSupportingNameFromContent,
4
+ getAriaRolesByType
5
5
  } from '../commons/standards';
6
6
  import { sanitize, visibleVirtual } from '../commons/text';
7
7
 
8
8
  function labelContentNameMismatchMatches(node, virtualNode) {
9
- /**
10
- * Applicability:
11
- * Rule applies to any element that has
12
- * a) a semantic role that is `widget` that supports name from content
13
- * b) has visible text content
14
- * c) has accessible name (eg: `aria-label`)
15
- */
16
- const role = getRole(node);
17
- if (!role) {
18
- return false;
19
- }
9
+ /**
10
+ * Applicability:
11
+ * Rule applies to any element that has
12
+ * a) a semantic role that is `widget` that supports name from content
13
+ * b) has visible text content
14
+ * c) has accessible name (eg: `aria-label`)
15
+ */
16
+ const role = getRole(node);
17
+ if (!role) {
18
+ return false;
19
+ }
20
20
 
21
- const widgetRoles = getAriaRolesByType('widget');
22
- const isWidgetType = widgetRoles.includes(role);
23
- if (!isWidgetType) {
24
- return false;
25
- }
21
+ const widgetRoles = getAriaRolesByType('widget');
22
+ const isWidgetType = widgetRoles.includes(role);
23
+ if (!isWidgetType) {
24
+ return false;
25
+ }
26
26
 
27
- const rolesWithNameFromContents = getAriaRolesSupportingNameFromContent();
28
- if (!rolesWithNameFromContents.includes(role)) {
29
- return false;
30
- }
27
+ const rolesWithNameFromContents = getAriaRolesSupportingNameFromContent();
28
+ if (!rolesWithNameFromContents.includes(role)) {
29
+ return false;
30
+ }
31
31
 
32
- /**
33
- * if no `aria-label` or `aria-labelledby` attribute - ignore `node`
34
- */
35
- if (
36
- !sanitize(arialabelText(virtualNode)) &&
37
- !sanitize(arialabelledbyText(node))
38
- ) {
39
- return false;
40
- }
32
+ /**
33
+ * if no `aria-label` or `aria-labelledby` attribute - ignore `node`
34
+ */
35
+ if (
36
+ !sanitize(arialabelText(virtualNode)) &&
37
+ !sanitize(arialabelledbyText(node))
38
+ ) {
39
+ return false;
40
+ }
41
41
 
42
- /**
43
- * if no `contentText` - ignore `node`
44
- */
45
- if (!sanitize(visibleVirtual(virtualNode))) {
46
- return false;
47
- }
42
+ /**
43
+ * if no `contentText` - ignore `node`
44
+ */
45
+ if (!sanitize(visibleVirtual(virtualNode))) {
46
+ return false;
47
+ }
48
48
 
49
- return true;
49
+ return true;
50
50
  }
51
51
 
52
52
  export default labelContentNameMismatchMatches;
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "label-content-name-mismatch",
3
- "matches": "label-content-name-mismatch-matches",
4
- "tags": ["cat.semantics", "wcag21a", "wcag253", "experimental"],
5
- "metadata": {
6
- "description": "Ensures that elements labelled through their content must have their visible text as part of their accessible name",
7
- "help": "Elements must have their visible text as part of their accessible name"
8
- },
9
- "all": [],
10
- "any": ["label-content-name-mismatch"],
11
- "none": []
2
+ "id": "label-content-name-mismatch",
3
+ "matches": "label-content-name-mismatch-matches",
4
+ "tags": ["cat.semantics", "wcag21a", "wcag253", "experimental"],
5
+ "metadata": {
6
+ "description": "Ensures that elements labelled through their content must have their visible text as part of their accessible name",
7
+ "help": "Elements must have their visible text as part of their accessible name"
8
+ },
9
+ "all": [],
10
+ "any": ["label-content-name-mismatch"],
11
+ "none": []
12
12
  }
@@ -1,15 +1,15 @@
1
1
  function labelMatches(node, virtualNode) {
2
- if (
3
- virtualNode.props.nodeName !== 'input' ||
4
- virtualNode.hasAttr('type') === false
5
- ) {
6
- return true;
7
- }
2
+ if (
3
+ virtualNode.props.nodeName !== 'input' ||
4
+ virtualNode.hasAttr('type') === false
5
+ ) {
6
+ return true;
7
+ }
8
8
 
9
- var type = virtualNode.attr('type').toLowerCase();
10
- return (
11
- ['hidden', 'image', 'button', 'submit', 'reset'].includes(type) === false
12
- );
9
+ var type = virtualNode.attr('type').toLowerCase();
10
+ return (
11
+ ['hidden', 'image', 'button', 'submit', 'reset'].includes(type) === false
12
+ );
13
13
  }
14
14
 
15
15
  export default labelMatches;
@@ -1,13 +1,13 @@
1
1
  {
2
- "id": "label-title-only",
3
- "selector": "input, select, textarea",
4
- "matches": "label-matches",
5
- "tags": ["cat.forms", "best-practice"],
6
- "metadata": {
7
- "description": "Ensures that every form element is not solely labeled using the title or aria-describedby attributes",
8
- "help": "Form elements should have a visible label"
9
- },
10
- "all": [],
11
- "any": [],
12
- "none": ["title-only"]
2
+ "id": "label-title-only",
3
+ "selector": "input, select, textarea",
4
+ "matches": "label-matches",
5
+ "tags": ["cat.forms", "best-practice"],
6
+ "metadata": {
7
+ "description": "Ensures that every form element is not solely labeled using the title or aria-describedby attributes",
8
+ "help": "Form elements should have a visible label"
9
+ },
10
+ "all": [],
11
+ "any": [],
12
+ "none": ["title-only"]
13
13
  }
@@ -1,29 +1,29 @@
1
1
  {
2
- "id": "label",
3
- "selector": "input, textarea",
4
- "matches": "label-matches",
5
- "tags": [
6
- "cat.forms",
7
- "wcag2a",
8
- "wcag412",
9
- "wcag131",
10
- "section508",
11
- "section508.22.n",
12
- "ACT"
13
- ],
14
- "metadata": {
15
- "description": "Ensures every form element has a label",
16
- "help": "Form elements must have labels"
17
- },
18
- "all": [],
19
- "any": [
20
- "implicit-label",
21
- "explicit-label",
22
- "aria-label",
23
- "aria-labelledby",
24
- "non-empty-title",
25
- "non-empty-placeholder",
26
- "presentational-role"
27
- ],
28
- "none": ["help-same-as-label", "hidden-explicit-label"]
2
+ "id": "label",
3
+ "selector": "input, textarea",
4
+ "matches": "label-matches",
5
+ "tags": [
6
+ "cat.forms",
7
+ "wcag2a",
8
+ "wcag412",
9
+ "wcag131",
10
+ "section508",
11
+ "section508.22.n",
12
+ "ACT"
13
+ ],
14
+ "metadata": {
15
+ "description": "Ensures every form element has a label",
16
+ "help": "Form elements must have labels"
17
+ },
18
+ "all": [],
19
+ "any": [
20
+ "aria-label",
21
+ "aria-labelledby",
22
+ "implicit-label",
23
+ "explicit-label",
24
+ "non-empty-title",
25
+ "non-empty-placeholder",
26
+ "presentational-role"
27
+ ],
28
+ "none": ["help-same-as-label", "hidden-explicit-label"]
29
29
  }
@@ -1,13 +1,13 @@
1
1
  {
2
- "id": "landmark-banner-is-top-level",
3
- "selector": "header:not([role]), [role=banner]",
4
- "matches": "landmark-has-body-context-matches",
5
- "tags": ["cat.semantics", "best-practice"],
6
- "metadata": {
7
- "description": "Ensures the banner landmark is at top level",
8
- "help": "Banner landmark should not be contained in another landmark"
9
- },
10
- "all": [],
11
- "any": ["landmark-is-top-level"],
12
- "none": []
2
+ "id": "landmark-banner-is-top-level",
3
+ "selector": "header:not([role]), [role=banner]",
4
+ "matches": "landmark-has-body-context-matches",
5
+ "tags": ["cat.semantics", "best-practice"],
6
+ "metadata": {
7
+ "description": "Ensures the banner landmark is at top level",
8
+ "help": "Banner landmark must not be contained in another landmark"
9
+ },
10
+ "all": [],
11
+ "any": ["landmark-is-top-level"],
12
+ "none": []
13
13
  }
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "landmark-complementary-is-top-level",
3
- "selector": "aside:not([role]), [role=complementary]",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "description": "Ensures the complementary landmark or aside is at top level",
7
- "help": "Aside should not be contained in another landmark"
8
- },
9
- "all": [],
10
- "any": ["landmark-is-top-level"],
11
- "none": []
2
+ "id": "landmark-complementary-is-top-level",
3
+ "selector": "aside:not([role]), [role=complementary]",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "description": "Ensures the complementary landmark or aside is at top level",
7
+ "help": "Aside must not be contained in another landmark"
8
+ },
9
+ "all": [],
10
+ "any": ["landmark-is-top-level"],
11
+ "none": []
12
12
  }
@@ -1,13 +1,13 @@
1
1
  {
2
- "id": "landmark-contentinfo-is-top-level",
3
- "selector": "footer:not([role]), [role=contentinfo]",
4
- "matches": "landmark-has-body-context-matches",
5
- "tags": ["cat.semantics", "best-practice"],
6
- "metadata": {
7
- "description": "Ensures the contentinfo landmark is at top level",
8
- "help": "Contentinfo landmark should not be contained in another landmark"
9
- },
10
- "all": [],
11
- "any": ["landmark-is-top-level"],
12
- "none": []
2
+ "id": "landmark-contentinfo-is-top-level",
3
+ "selector": "footer:not([role]), [role=contentinfo]",
4
+ "matches": "landmark-has-body-context-matches",
5
+ "tags": ["cat.semantics", "best-practice"],
6
+ "metadata": {
7
+ "description": "Ensures the contentinfo landmark is at top level",
8
+ "help": "Contentinfo landmark must not be contained in another landmark"
9
+ },
10
+ "all": [],
11
+ "any": ["landmark-is-top-level"],
12
+ "none": []
13
13
  }
@@ -1,13 +1,13 @@
1
1
  import { findUpVirtual } from '../commons/dom';
2
2
 
3
3
  function landmarkHasBodyContextMatches(node, virtualNode) {
4
- const nativeScopeFilter = 'article, aside, main, nav, section';
4
+ const nativeScopeFilter = 'article, aside, main, nav, section';
5
5
 
6
- // Filter elements that, within certain contexts, don't map their role.
7
- // e.g. a <header> inside a <main> is not a banner, but in the <body> context it is
8
- return (
9
- node.hasAttribute('role') || !findUpVirtual(virtualNode, nativeScopeFilter)
10
- );
6
+ // Filter elements that, within certain contexts, don't map their role.
7
+ // e.g. a <header> inside a <main> is not a banner, but in the <body> context it is
8
+ return (
9
+ node.hasAttribute('role') || !findUpVirtual(virtualNode, nativeScopeFilter)
10
+ );
11
11
  }
12
12
 
13
13
  export default landmarkHasBodyContextMatches;
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "landmark-main-is-top-level",
3
- "selector": "main:not([role]), [role=main]",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "description": "Ensures the main landmark is at top level",
7
- "help": "Main landmark should not be contained in another landmark"
8
- },
9
- "all": [],
10
- "any": ["landmark-is-top-level"],
11
- "none": []
2
+ "id": "landmark-main-is-top-level",
3
+ "selector": "main:not([role]), [role=main]",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "description": "Ensures the main landmark is at top level",
7
+ "help": "Main landmark must not be contained in another landmark"
8
+ },
9
+ "all": [],
10
+ "any": ["landmark-is-top-level"],
11
+ "none": []
12
12
  }
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "landmark-no-duplicate-banner",
3
- "selector": "header:not([role]), [role=banner]",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "description": "Ensures the document has at most one banner landmark",
7
- "help": "Document should not have more than one banner landmark"
8
- },
9
- "all": [],
10
- "any": ["page-no-duplicate-banner"],
11
- "none": []
2
+ "id": "landmark-no-duplicate-banner",
3
+ "selector": "header:not([role]), [role=banner]",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "description": "Ensures the document has at most one banner landmark",
7
+ "help": "Document must not have more than one banner landmark"
8
+ },
9
+ "all": [],
10
+ "any": ["page-no-duplicate-banner"],
11
+ "none": []
12
12
  }
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "landmark-no-duplicate-contentinfo",
3
- "selector": "footer:not([role]), [role=contentinfo]",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "description": "Ensures the document has at most one contentinfo landmark",
7
- "help": "Document should not have more than one contentinfo landmark"
8
- },
9
- "all": [],
10
- "any": ["page-no-duplicate-contentinfo"],
11
- "none": []
2
+ "id": "landmark-no-duplicate-contentinfo",
3
+ "selector": "footer:not([role]), [role=contentinfo]",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "description": "Ensures the document has at most one contentinfo landmark",
7
+ "help": "Document must not have more than one contentinfo landmark"
8
+ },
9
+ "all": [],
10
+ "any": ["page-no-duplicate-contentinfo"],
11
+ "none": []
12
12
  }
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "landmark-no-duplicate-main",
3
- "selector": "main:not([role]), [role=main]",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "description": "Ensures the document has at most one main landmark",
7
- "help": "Document should not have more than one main landmark"
8
- },
9
- "all": [],
10
- "any": ["page-no-duplicate-main"],
11
- "none": []
2
+ "id": "landmark-no-duplicate-main",
3
+ "selector": "main:not([role]), [role=main]",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "description": "Ensures the document has at most one main landmark",
7
+ "help": "Document must not have more than one main landmark"
8
+ },
9
+ "all": [],
10
+ "any": ["page-no-duplicate-main"],
11
+ "none": []
12
12
  }
@@ -1,12 +1,12 @@
1
1
  {
2
- "id": "landmark-one-main",
3
- "selector": "html",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "description": "Ensures the document has a main landmark",
7
- "help": "Document should have one main landmark"
8
- },
9
- "all": ["page-has-main"],
10
- "any": [],
11
- "none": []
2
+ "id": "landmark-one-main",
3
+ "selector": "html",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "description": "Ensures the document has a main landmark",
7
+ "help": "Document must have one main landmark"
8
+ },
9
+ "all": ["page-has-main"],
10
+ "any": [],
11
+ "none": []
12
12
  }
@@ -4,47 +4,47 @@ import { getAriaRolesByType } from '../commons/standards';
4
4
  import { accessibleTextVirtual } from '../commons/text';
5
5
 
6
6
  function landmarkUniqueMatches(node, virtualNode) {
7
- /*
8
- * Since this is a best-practice rule, we are filtering elements as dictated by ARIA 1.1 Practices regardless of treatment by browser/AT combinations.
9
- *
10
- * Info: https://www.w3.org/TR/wai-aria-practices-1.1/#aria_landmark
11
- */
12
- var excludedParentsForHeaderFooterLandmarks = [
13
- 'article',
14
- 'aside',
15
- 'main',
16
- 'nav',
17
- 'section'
18
- ].join(',');
19
- function isHeaderFooterLandmark(headerFooterElement) {
20
- return !findUpVirtual(
21
- headerFooterElement,
22
- excludedParentsForHeaderFooterLandmarks
23
- );
24
- }
7
+ /*
8
+ * Since this is a best-practice rule, we are filtering elements as dictated by ARIA 1.1 Practices regardless of treatment by browser/AT combinations.
9
+ *
10
+ * Info: https://www.w3.org/TR/wai-aria-practices-1.1/#aria_landmark
11
+ */
12
+ var excludedParentsForHeaderFooterLandmarks = [
13
+ 'article',
14
+ 'aside',
15
+ 'main',
16
+ 'nav',
17
+ 'section'
18
+ ].join(',');
19
+ function isHeaderFooterLandmark(headerFooterElement) {
20
+ return !findUpVirtual(
21
+ headerFooterElement,
22
+ excludedParentsForHeaderFooterLandmarks
23
+ );
24
+ }
25
25
 
26
- function isLandmarkVirtual(virtualNode) {
27
- var { actualNode } = virtualNode;
28
- var landmarkRoles = getAriaRolesByType('landmark');
29
- var role = getRole(actualNode);
30
- if (!role) {
31
- return false;
32
- }
26
+ function isLandmarkVirtual(virtualNode) {
27
+ var { actualNode } = virtualNode;
28
+ var landmarkRoles = getAriaRolesByType('landmark');
29
+ var role = getRole(actualNode);
30
+ if (!role) {
31
+ return false;
32
+ }
33
33
 
34
- var nodeName = actualNode.nodeName.toUpperCase();
35
- if (nodeName === 'HEADER' || nodeName === 'FOOTER') {
36
- return isHeaderFooterLandmark(virtualNode);
37
- }
34
+ var nodeName = actualNode.nodeName.toUpperCase();
35
+ if (nodeName === 'HEADER' || nodeName === 'FOOTER') {
36
+ return isHeaderFooterLandmark(virtualNode);
37
+ }
38
38
 
39
- if (nodeName === 'SECTION' || nodeName === 'FORM') {
40
- var accessibleText = accessibleTextVirtual(virtualNode);
41
- return !!accessibleText;
42
- }
39
+ if (nodeName === 'SECTION' || nodeName === 'FORM') {
40
+ var accessibleText = accessibleTextVirtual(virtualNode);
41
+ return !!accessibleText;
42
+ }
43
43
 
44
- return landmarkRoles.indexOf(role) >= 0 || role === 'region';
45
- }
44
+ return landmarkRoles.indexOf(role) >= 0 || role === 'region';
45
+ }
46
46
 
47
- return isLandmarkVirtual(virtualNode) && isVisible(node, true);
47
+ return isLandmarkVirtual(virtualNode) && isVisible(node, true);
48
48
  }
49
49
 
50
50
  export default landmarkUniqueMatches;
@@ -1,13 +1,13 @@
1
1
  {
2
- "id": "landmark-unique",
3
- "selector": "[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",
4
- "tags": ["cat.semantics", "best-practice"],
5
- "metadata": {
6
- "help": "Ensures landmarks are unique",
7
- "description": "Landmarks should have a unique role or role/label/title (i.e. accessible name) combination"
8
- },
9
- "matches": "landmark-unique-matches",
10
- "all": [],
11
- "any": ["landmark-is-unique"],
12
- "none": []
2
+ "id": "landmark-unique",
3
+ "selector": "[role=banner], [role=complementary], [role=contentinfo], [role=main], [role=navigation], [role=region], [role=search], [role=form], form, footer, header, aside, main, nav, section",
4
+ "tags": ["cat.semantics", "best-practice"],
5
+ "metadata": {
6
+ "help": "Ensures landmarks are unique",
7
+ "description": "Landmarks must have a unique role or role/label/title (i.e. accessible name) combination"
8
+ },
9
+ "matches": "landmark-unique-matches",
10
+ "all": [],
11
+ "any": ["landmark-is-unique"],
12
+ "none": []
13
13
  }
@@ -1,8 +1,9 @@
1
1
  import { isDataTable } from '../commons/table';
2
2
  import { isFocusable } from '../commons/dom';
3
3
 
4
+ // TODO: es-modules add tests. No way to access this on the `axe` object
4
5
  function dataTableMatches(node) {
5
- return !isDataTable(node) && !isFocusable(node);
6
+ return !isDataTable(node) && !isFocusable(node);
6
7
  }
7
8
 
8
9
  export default dataTableMatches;
@@ -2,20 +2,20 @@ import { sanitize } from '../commons/text';
2
2
  import { isVisible, isInTextBlock } from '../commons/dom';
3
3
 
4
4
  function linkInTextBlockMatches(node) {
5
- var text = sanitize(node.textContent);
6
- var role = node.getAttribute('role');
5
+ var text = sanitize(node.textContent);
6
+ var role = node.getAttribute('role');
7
7
 
8
- if (role && role !== 'link') {
9
- return false;
10
- }
11
- if (!text) {
12
- return false;
13
- }
14
- if (!isVisible(node, false)) {
15
- return false;
16
- }
8
+ if (role && role !== 'link') {
9
+ return false;
10
+ }
11
+ if (!text) {
12
+ return false;
13
+ }
14
+ if (!isVisible(node, false)) {
15
+ return false;
16
+ }
17
17
 
18
- return isInTextBlock(node);
18
+ return isInTextBlock(node);
19
19
  }
20
20
 
21
21
  export default linkInTextBlockMatches;
@@ -1,14 +1,14 @@
1
1
  {
2
- "id": "link-in-text-block",
3
- "selector": "a[href], [role=link]",
4
- "matches": "link-in-text-block-matches",
5
- "excludeHidden": false,
6
- "tags": ["cat.color", "experimental", "wcag2a", "wcag141"],
7
- "metadata": {
8
- "description": "Links can be distinguished without relying on color",
9
- "help": "Links must be distinguished from surrounding text in a way that does not rely on color"
10
- },
11
- "all": ["link-in-text-block"],
12
- "any": [],
13
- "none": []
2
+ "id": "link-in-text-block",
3
+ "selector": "a[href], [role=link]",
4
+ "matches": "link-in-text-block-matches",
5
+ "excludeHidden": false,
6
+ "tags": ["cat.color", "experimental", "wcag2a", "wcag141"],
7
+ "metadata": {
8
+ "description": "Links can be distinguished without relying on color",
9
+ "help": "Links must be distinguished from surrounding text in a way that does not rely on color"
10
+ },
11
+ "all": ["link-in-text-block"],
12
+ "any": [],
13
+ "none": []
14
14
  }