govuk_publishing_components 30.4.1 → 30.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-event-tracker.js +63 -51
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js +8 -8
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-page-views.js +11 -10
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/init-ga4.js +26 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4.js +1 -3
- data/app/assets/stylesheets/govuk_publishing_components/components/_organisation-logo.scss +2 -4
- data/app/views/govuk_publishing_components/component_guide/show.html.erb +28 -27
- data/lib/govuk_publishing_components/version.rb +1 -1
- data/node_modules/axe-core/README.md +83 -53
- data/node_modules/axe-core/axe.d.ts +403 -224
- data/node_modules/axe-core/axe.js +23281 -21919
- data/node_modules/axe-core/axe.min.js +3 -3
- data/node_modules/axe-core/locales/da.json +795 -780
- data/node_modules/axe-core/locales/de.json +932 -621
- data/node_modules/axe-core/locales/es.json +786 -771
- data/node_modules/axe-core/locales/eu.json +787 -0
- data/node_modules/axe-core/locales/fr.json +982 -840
- data/node_modules/axe-core/locales/ja.json +988 -880
- data/node_modules/axe-core/locales/ko.json +999 -775
- data/node_modules/axe-core/locales/nl.json +46 -34
- data/node_modules/axe-core/locales/pl.json +965 -0
- data/node_modules/axe-core/locales/pt_BR.json +966 -880
- data/node_modules/axe-core/package.json +189 -145
- data/node_modules/axe-core/sri-history.json +312 -192
- data/node_modules/govuk-frontend/govuk/all.js +64 -44
- data/node_modules/govuk-frontend/govuk/components/accordion/_index.scss +1 -1
- data/node_modules/govuk-frontend/govuk/components/accordion/accordion.js +3 -13
- data/node_modules/govuk-frontend/govuk/components/accordion/fixtures.json +12 -12
- data/node_modules/govuk-frontend/govuk/components/accordion/template.njk +5 -1
- data/node_modules/govuk-frontend/govuk/components/character-count/fixtures.json +1 -1
- data/node_modules/govuk-frontend/govuk/components/details/details.js +8 -20
- data/node_modules/govuk-frontend/govuk/components/details/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/details/template.njk +1 -1
- data/node_modules/govuk-frontend/govuk/components/error-message/fixtures.json +9 -0
- data/node_modules/govuk-frontend/govuk/components/error-summary/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/error-summary/template.njk +2 -2
- data/node_modules/govuk-frontend/govuk/components/footer/fixtures.json +59 -20
- data/node_modules/govuk-frontend/govuk/components/footer/macro-options.json +40 -0
- data/node_modules/govuk-frontend/govuk/components/footer/template.njk +17 -7
- data/node_modules/govuk-frontend/govuk/components/header/_index.scss +14 -21
- data/node_modules/govuk-frontend/govuk/components/header/fixtures.json +11 -11
- data/node_modules/govuk-frontend/govuk/components/header/header.js +53 -11
- data/node_modules/govuk-frontend/govuk/components/header/macro-options.json +2 -2
- data/node_modules/govuk-frontend/govuk/components/header/template.njk +1 -1
- data/node_modules/govuk-frontend/govuk/components/input/_index.scss +9 -10
- data/node_modules/govuk-frontend/govuk/components/inset-text/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/inset-text/template.njk +1 -1
- data/node_modules/govuk-frontend/govuk/components/notification-banner/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/notification-banner/template.njk +2 -2
- data/node_modules/govuk-frontend/govuk/components/panel/macro-options.json +6 -0
- data/node_modules/govuk-frontend/govuk/components/panel/template.njk +2 -2
- data/node_modules/govuk-frontend/govuk/components/select/_index.scss +6 -0
- data/node_modules/govuk-frontend/govuk/components/select/fixtures.json +15 -1
- data/node_modules/govuk-frontend/govuk/components/summary-list/_index.scss +37 -10
- data/node_modules/govuk-frontend/govuk/components/summary-list/fixtures.json +69 -4
- data/node_modules/govuk-frontend/govuk/components/summary-list/template.njk +3 -3
- data/node_modules/govuk-frontend/govuk/components/tabs/fixtures.json +13 -13
- data/node_modules/govuk-frontend/govuk/components/tabs/template.njk +5 -1
- data/node_modules/govuk-frontend/govuk/helpers/_typography.scss +14 -7
- data/node_modules/govuk-frontend/govuk/overrides/_spacing.scss +56 -12
- data/node_modules/govuk-frontend/govuk/settings/_spacing.scss +4 -8
- data/node_modules/govuk-frontend/govuk/template.njk +5 -5
- data/node_modules/govuk-frontend/govuk-esm/components/accordion/accordion.mjs +3 -13
- data/node_modules/govuk-frontend/govuk-esm/components/details/details.mjs +8 -20
- data/node_modules/govuk-frontend/govuk-esm/components/header/header.mjs +53 -11
- data/node_modules/govuk-frontend/package.json +1 -1
- metadata +6 -584
- data/node_modules/axe-core/CHANGELOG.md +0 -1053
- data/node_modules/axe-core/CONTRIBUTING.md +0 -187
- data/node_modules/axe-core/bower.json +0 -40
- data/node_modules/axe-core/doc/API.md +0 -889
- data/node_modules/axe-core/doc/accessibility-supported.md +0 -33
- data/node_modules/axe-core/doc/act-rules-format.md +0 -37
- data/node_modules/axe-core/doc/aria-supported.md +0 -13
- data/node_modules/axe-core/doc/backwards-compatibility-doc.md +0 -94
- data/node_modules/axe-core/doc/check-message-template.md +0 -124
- data/node_modules/axe-core/doc/code-submission-guidelines.md +0 -178
- data/node_modules/axe-core/doc/developer-guide.md +0 -514
- data/node_modules/axe-core/doc/examples/chrome-debugging-protocol/README.md +0 -13
- data/node_modules/axe-core/doc/examples/chrome-debugging-protocol/axe-cdp.js +0 -81
- data/node_modules/axe-core/doc/examples/chrome-debugging-protocol/package.json +0 -11
- data/node_modules/axe-core/doc/examples/html-handlebars.md +0 -164
- data/node_modules/axe-core/doc/examples/jasmine/README.md +0 -35
- data/node_modules/axe-core/doc/examples/jasmine/karma.conf.js +0 -29
- data/node_modules/axe-core/doc/examples/jasmine/package.json +0 -21
- data/node_modules/axe-core/doc/examples/jasmine/spec/a11y.js +0 -36
- data/node_modules/axe-core/doc/examples/jest_react/README.md +0 -41
- data/node_modules/axe-core/doc/examples/jest_react/link.js +0 -7
- data/node_modules/axe-core/doc/examples/jest_react/link.test.js +0 -24
- data/node_modules/axe-core/doc/examples/jest_react/package.json +0 -28
- data/node_modules/axe-core/doc/examples/jest_react/test-helpers.js +0 -21
- data/node_modules/axe-core/doc/examples/jsdom/package.json +0 -15
- data/node_modules/axe-core/doc/examples/mocha/README.md +0 -35
- data/node_modules/axe-core/doc/examples/mocha/karma.conf.js +0 -29
- data/node_modules/axe-core/doc/examples/mocha/package.json +0 -22
- data/node_modules/axe-core/doc/examples/phantomjs/README.md +0 -17
- data/node_modules/axe-core/doc/examples/phantomjs/axe-phantom.js +0 -53
- data/node_modules/axe-core/doc/examples/phantomjs/package.json +0 -19
- data/node_modules/axe-core/doc/examples/puppeteer/README.md +0 -12
- data/node_modules/axe-core/doc/examples/puppeteer/axe-puppeteer.js +0 -60
- data/node_modules/axe-core/doc/examples/puppeteer/package.json +0 -13
- data/node_modules/axe-core/doc/examples/qunit/README.md +0 -37
- data/node_modules/axe-core/doc/examples/qunit/package.json +0 -21
- data/node_modules/axe-core/doc/examples/test-examples.js +0 -32
- data/node_modules/axe-core/doc/plugins.md +0 -123
- data/node_modules/axe-core/doc/projects.md +0 -48
- data/node_modules/axe-core/doc/rule-descriptions.md +0 -129
- data/node_modules/axe-core/doc/rule-development.md +0 -123
- data/node_modules/axe-core/doc/rule-proposal.md +0 -106
- data/node_modules/axe-core/lib/checks/aria/abstractrole.js +0 -10
- data/node_modules/axe-core/lib/checks/aria/abstractrole.json +0 -14
- data/node_modules/axe-core/lib/checks/aria/allowed-attr.js +0 -39
- data/node_modules/axe-core/lib/checks/aria/allowed-attr.json +0 -14
- data/node_modules/axe-core/lib/checks/aria/aria-allowed-role.js +0 -28
- data/node_modules/axe-core/lib/checks/aria/aria-allowed-role.json +0 -22
- data/node_modules/axe-core/lib/checks/aria/aria-hidden-body.js +0 -1
- data/node_modules/axe-core/lib/checks/aria/aria-hidden-body.json +0 -11
- data/node_modules/axe-core/lib/checks/aria/aria-roledescription.js +0 -14
- data/node_modules/axe-core/lib/checks/aria/aria-roledescription.json +0 -23
- data/node_modules/axe-core/lib/checks/aria/errormessage.js +0 -33
- data/node_modules/axe-core/lib/checks/aria/errormessage.json +0 -14
- data/node_modules/axe-core/lib/checks/aria/fallbackrole.js +0 -1
- data/node_modules/axe-core/lib/checks/aria/fallbackrole.json +0 -11
- data/node_modules/axe-core/lib/checks/aria/has-widget-role.js +0 -6
- data/node_modules/axe-core/lib/checks/aria/has-widget-role.json +0 -12
- data/node_modules/axe-core/lib/checks/aria/implicit-role-fallback.js +0 -6
- data/node_modules/axe-core/lib/checks/aria/implicit-role-fallback.json +0 -12
- data/node_modules/axe-core/lib/checks/aria/invalidrole.js +0 -17
- data/node_modules/axe-core/lib/checks/aria/invalidrole.json +0 -14
- data/node_modules/axe-core/lib/checks/aria/no-implicit-explicit-label.js +0 -21
- data/node_modules/axe-core/lib/checks/aria/no-implicit-explicit-label.json +0 -11
- data/node_modules/axe-core/lib/checks/aria/required-attr.js +0 -53
- data/node_modules/axe-core/lib/checks/aria/required-attr.json +0 -14
- data/node_modules/axe-core/lib/checks/aria/required-children.js +0 -154
- data/node_modules/axe-core/lib/checks/aria/required-children.json +0 -32
- data/node_modules/axe-core/lib/checks/aria/required-parent.js +0 -87
- data/node_modules/axe-core/lib/checks/aria/required-parent.json +0 -14
- data/node_modules/axe-core/lib/checks/aria/unsupportedattr.js +0 -39
- data/node_modules/axe-core/lib/checks/aria/unsupportedattr.json +0 -11
- data/node_modules/axe-core/lib/checks/aria/unsupportedrole.js +0 -1
- data/node_modules/axe-core/lib/checks/aria/unsupportedrole.json +0 -11
- data/node_modules/axe-core/lib/checks/aria/valid-attr-value.js +0 -80
- data/node_modules/axe-core/lib/checks/aria/valid-attr-value.json +0 -19
- data/node_modules/axe-core/lib/checks/aria/valid-attr.js +0 -25
- data/node_modules/axe-core/lib/checks/aria/valid-attr.json +0 -15
- data/node_modules/axe-core/lib/checks/aria/valid-scrollable-semantics.js +0 -62
- data/node_modules/axe-core/lib/checks/aria/valid-scrollable-semantics.json +0 -12
- data/node_modules/axe-core/lib/checks/color/color-contrast.js +0 -86
- data/node_modules/axe-core/lib/checks/color/color-contrast.json +0 -30
- data/node_modules/axe-core/lib/checks/color/link-in-text-block.js +0 -85
- data/node_modules/axe-core/lib/checks/color/link-in-text-block.json +0 -19
- data/node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.js +0 -67
- data/node_modules/axe-core/lib/checks/forms/autocomplete-appropriate.json +0 -11
- data/node_modules/axe-core/lib/checks/forms/autocomplete-valid.js +0 -2
- data/node_modules/axe-core/lib/checks/forms/autocomplete-valid.json +0 -11
- data/node_modules/axe-core/lib/checks/forms/fieldset-after.js +0 -25
- data/node_modules/axe-core/lib/checks/forms/fieldset.js +0 -109
- data/node_modules/axe-core/lib/checks/forms/fieldset.json +0 -20
- data/node_modules/axe-core/lib/checks/forms/group-labelledby-after.js +0 -16
- data/node_modules/axe-core/lib/checks/forms/group-labelledby.js +0 -66
- data/node_modules/axe-core/lib/checks/forms/group-labelledby.json +0 -17
- data/node_modules/axe-core/lib/checks/keyboard/accesskeys-after.js +0 -19
- data/node_modules/axe-core/lib/checks/keyboard/accesskeys.js +0 -5
- data/node_modules/axe-core/lib/checks/keyboard/accesskeys.json +0 -12
- data/node_modules/axe-core/lib/checks/keyboard/focusable-content.js +0 -16
- data/node_modules/axe-core/lib/checks/keyboard/focusable-content.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/focusable-disabled.js +0 -30
- data/node_modules/axe-core/lib/checks/keyboard/focusable-disabled.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/focusable-element.js +0 -12
- data/node_modules/axe-core/lib/checks/keyboard/focusable-element.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/focusable-modal-open.js +0 -14
- data/node_modules/axe-core/lib/checks/keyboard/focusable-modal-open.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/focusable-no-name.js +0 -6
- data/node_modules/axe-core/lib/checks/keyboard/focusable-no-name.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/focusable-not-tabbable.js +0 -30
- data/node_modules/axe-core/lib/checks/keyboard/focusable-not-tabbable.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/landmark-is-top-level.js +0 -18
- data/node_modules/axe-core/lib/checks/keyboard/landmark-is-top-level.json +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/page-has-elm-after.js +0 -11
- data/node_modules/axe-core/lib/checks/keyboard/page-has-elm.js +0 -13
- data/node_modules/axe-core/lib/checks/keyboard/page-has-heading-one.json +0 -15
- data/node_modules/axe-core/lib/checks/keyboard/page-has-main.json +0 -15
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-after.js +0 -2
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-banner.json +0 -16
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-contentinfo.json +0 -16
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-main.json +0 -15
- data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate.js +0 -36
- data/node_modules/axe-core/lib/checks/keyboard/tabindex.js +0 -6
- data/node_modules/axe-core/lib/checks/keyboard/tabindex.json +0 -11
- data/node_modules/axe-core/lib/checks/label/alt-space-value.js +0 -3
- data/node_modules/axe-core/lib/checks/label/alt-space-value.json +0 -11
- data/node_modules/axe-core/lib/checks/label/duplicate-img-label.js +0 -22
- data/node_modules/axe-core/lib/checks/label/duplicate-img-label.json +0 -11
- data/node_modules/axe-core/lib/checks/label/explicit.js +0 -15
- data/node_modules/axe-core/lib/checks/label/explicit.json +0 -11
- data/node_modules/axe-core/lib/checks/label/help-same-as-label.js +0 -23
- data/node_modules/axe-core/lib/checks/label/help-same-as-label.json +0 -12
- data/node_modules/axe-core/lib/checks/label/hidden-explicit-label.js +0 -12
- data/node_modules/axe-core/lib/checks/label/hidden-explicit-label.json +0 -11
- data/node_modules/axe-core/lib/checks/label/implicit.js +0 -7
- data/node_modules/axe-core/lib/checks/label/implicit.json +0 -11
- data/node_modules/axe-core/lib/checks/label/label-content-name-mismatch.js +0 -59
- data/node_modules/axe-core/lib/checks/label/label-content-name-mismatch.json +0 -15
- data/node_modules/axe-core/lib/checks/label/multiple-label.js +0 -39
- data/node_modules/axe-core/lib/checks/label/multiple-label.json +0 -11
- data/node_modules/axe-core/lib/checks/label/title-only.js +0 -5
- data/node_modules/axe-core/lib/checks/label/title-only.json +0 -11
- data/node_modules/axe-core/lib/checks/landmarks/landmark-is-unique-after.js +0 -23
- data/node_modules/axe-core/lib/checks/landmarks/landmark-is-unique.js +0 -7
- data/node_modules/axe-core/lib/checks/landmarks/landmark-is-unique.json +0 -12
- data/node_modules/axe-core/lib/checks/language/has-lang.js +0 -20
- data/node_modules/axe-core/lib/checks/language/has-lang.json +0 -14
- data/node_modules/axe-core/lib/checks/language/valid-lang.js +0 -26
- data/node_modules/axe-core/lib/checks/language/valid-lang.json +0 -11
- data/node_modules/axe-core/lib/checks/language/xml-lang-mismatch.js +0 -5
- data/node_modules/axe-core/lib/checks/language/xml-lang-mismatch.json +0 -11
- data/node_modules/axe-core/lib/checks/lists/dlitem.js +0 -23
- data/node_modules/axe-core/lib/checks/lists/dlitem.json +0 -11
- data/node_modules/axe-core/lib/checks/lists/listitem.js +0 -21
- data/node_modules/axe-core/lib/checks/lists/listitem.json +0 -14
- data/node_modules/axe-core/lib/checks/lists/only-dlitems.js +0 -42
- data/node_modules/axe-core/lib/checks/lists/only-dlitems.json +0 -11
- data/node_modules/axe-core/lib/checks/lists/only-listitems.js +0 -58
- data/node_modules/axe-core/lib/checks/lists/only-listitems.json +0 -14
- data/node_modules/axe-core/lib/checks/lists/structured-dlitems.js +0 -22
- data/node_modules/axe-core/lib/checks/lists/structured-dlitems.json +0 -11
- data/node_modules/axe-core/lib/checks/media/caption.js +0 -8
- data/node_modules/axe-core/lib/checks/media/caption.json +0 -11
- data/node_modules/axe-core/lib/checks/media/description.js +0 -8
- data/node_modules/axe-core/lib/checks/media/description.json +0 -11
- data/node_modules/axe-core/lib/checks/media/frame-tested.js +0 -28
- data/node_modules/axe-core/lib/checks/media/frame-tested.json +0 -15
- data/node_modules/axe-core/lib/checks/media/no-autoplay-audio.js +0 -93
- data/node_modules/axe-core/lib/checks/media/no-autoplay-audio.json +0 -15
- data/node_modules/axe-core/lib/checks/mobile/css-orientation-lock.js +0 -251
- data/node_modules/axe-core/lib/checks/mobile/css-orientation-lock.json +0 -15
- data/node_modules/axe-core/lib/checks/mobile/meta-viewport-large.json +0 -15
- data/node_modules/axe-core/lib/checks/mobile/meta-viewport-scale.js +0 -55
- data/node_modules/axe-core/lib/checks/mobile/meta-viewport.json +0 -14
- data/node_modules/axe-core/lib/checks/navigation/header-present.js +0 -4
- data/node_modules/axe-core/lib/checks/navigation/header-present.json +0 -11
- data/node_modules/axe-core/lib/checks/navigation/heading-order-after.js +0 -14
- data/node_modules/axe-core/lib/checks/navigation/heading-order.js +0 -15
- data/node_modules/axe-core/lib/checks/navigation/heading-order.json +0 -12
- data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose-after.js +0 -100
- data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose.js +0 -31
- data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose.json +0 -12
- data/node_modules/axe-core/lib/checks/navigation/internal-link-present.js +0 -4
- data/node_modules/axe-core/lib/checks/navigation/internal-link-present.json +0 -11
- data/node_modules/axe-core/lib/checks/navigation/landmark.js +0 -3
- data/node_modules/axe-core/lib/checks/navigation/landmark.json +0 -11
- data/node_modules/axe-core/lib/checks/navigation/meta-refresh.js +0 -4
- data/node_modules/axe-core/lib/checks/navigation/meta-refresh.json +0 -11
- data/node_modules/axe-core/lib/checks/navigation/p-as-heading.js +0 -93
- data/node_modules/axe-core/lib/checks/navigation/p-as-heading.json +0 -30
- data/node_modules/axe-core/lib/checks/navigation/region.js +0 -107
- data/node_modules/axe-core/lib/checks/navigation/region.json +0 -11
- data/node_modules/axe-core/lib/checks/navigation/skip-link.js +0 -5
- data/node_modules/axe-core/lib/checks/navigation/skip-link.json +0 -12
- data/node_modules/axe-core/lib/checks/navigation/unique-frame-title-after.js +0 -9
- data/node_modules/axe-core/lib/checks/navigation/unique-frame-title.js +0 -6
- data/node_modules/axe-core/lib/checks/navigation/unique-frame-title.json +0 -12
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id-active.json +0 -12
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id-after.js +0 -8
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id-aria.json +0 -12
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id.js +0 -17
- data/node_modules/axe-core/lib/checks/parsing/duplicate-id.json +0 -12
- data/node_modules/axe-core/lib/checks/shared/aria-label.js +0 -2
- data/node_modules/axe-core/lib/checks/shared/aria-label.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/aria-labelledby.js +0 -2
- data/node_modules/axe-core/lib/checks/shared/aria-labelledby.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/avoid-inline-spacing.js +0 -18
- data/node_modules/axe-core/lib/checks/shared/avoid-inline-spacing.json +0 -14
- data/node_modules/axe-core/lib/checks/shared/button-has-visible-text.js +0 -12
- data/node_modules/axe-core/lib/checks/shared/button-has-visible-text.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/doc-has-title.js +0 -2
- data/node_modules/axe-core/lib/checks/shared/doc-has-title.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/exists.js +0 -1
- data/node_modules/axe-core/lib/checks/shared/exists.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/has-alt.js +0 -6
- data/node_modules/axe-core/lib/checks/shared/has-alt.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/has-visible-text.js +0 -1
- data/node_modules/axe-core/lib/checks/shared/has-visible-text.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/is-on-screen.js +0 -4
- data/node_modules/axe-core/lib/checks/shared/is-on-screen.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/non-empty-alt.js +0 -2
- data/node_modules/axe-core/lib/checks/shared/non-empty-alt.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/non-empty-if-present.js +0 -15
- data/node_modules/axe-core/lib/checks/shared/non-empty-if-present.json +0 -14
- data/node_modules/axe-core/lib/checks/shared/non-empty-title.js +0 -2
- data/node_modules/axe-core/lib/checks/shared/non-empty-title.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/non-empty-value.js +0 -2
- data/node_modules/axe-core/lib/checks/shared/non-empty-value.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/role-none.js +0 -1
- data/node_modules/axe-core/lib/checks/shared/role-none.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/role-presentation.js +0 -1
- data/node_modules/axe-core/lib/checks/shared/role-presentation.json +0 -11
- data/node_modules/axe-core/lib/checks/shared/svg-non-empty-title.js +0 -4
- data/node_modules/axe-core/lib/checks/shared/svg-non-empty-title.json +0 -11
- data/node_modules/axe-core/lib/checks/tables/caption-faked.js +0 -10
- data/node_modules/axe-core/lib/checks/tables/caption-faked.json +0 -11
- data/node_modules/axe-core/lib/checks/tables/has-caption.js +0 -1
- data/node_modules/axe-core/lib/checks/tables/has-caption.json +0 -12
- data/node_modules/axe-core/lib/checks/tables/has-summary.js +0 -1
- data/node_modules/axe-core/lib/checks/tables/has-summary.json +0 -12
- data/node_modules/axe-core/lib/checks/tables/has-th.js +0 -31
- data/node_modules/axe-core/lib/checks/tables/has-th.json +0 -12
- data/node_modules/axe-core/lib/checks/tables/headers-visible-text.js +0 -30
- data/node_modules/axe-core/lib/checks/tables/html5-scope.js +0 -5
- data/node_modules/axe-core/lib/checks/tables/html5-scope.json +0 -11
- data/node_modules/axe-core/lib/checks/tables/same-caption-summary.js +0 -7
- data/node_modules/axe-core/lib/checks/tables/same-caption-summary.json +0 -11
- data/node_modules/axe-core/lib/checks/tables/scope-value.js +0 -5
- data/node_modules/axe-core/lib/checks/tables/scope-value.json +0 -11
- data/node_modules/axe-core/lib/checks/tables/td-has-header.js +0 -30
- data/node_modules/axe-core/lib/checks/tables/td-has-header.json +0 -11
- data/node_modules/axe-core/lib/checks/tables/td-headers-attr.js +0 -61
- data/node_modules/axe-core/lib/checks/tables/td-headers-attr.json +0 -12
- data/node_modules/axe-core/lib/checks/tables/th-has-data-cells.js +0 -76
- data/node_modules/axe-core/lib/checks/tables/th-has-data-cells.json +0 -12
- data/node_modules/axe-core/lib/checks/tables/th-single-row-column.js +0 -39
- data/node_modules/axe-core/lib/checks/visibility/hidden-content.js +0 -21
- data/node_modules/axe-core/lib/checks/visibility/hidden-content.json +0 -12
- data/node_modules/axe-core/lib/commons/aria/arialabel-text.js +0 -18
- data/node_modules/axe-core/lib/commons/aria/arialabelledby-text.js +0 -52
- data/node_modules/axe-core/lib/commons/aria/attributes.js +0 -45
- data/node_modules/axe-core/lib/commons/aria/get-element-unallowed-roles.js +0 -113
- data/node_modules/axe-core/lib/commons/aria/get-owned-virtual.js +0 -24
- data/node_modules/axe-core/lib/commons/aria/get-role.js +0 -44
- data/node_modules/axe-core/lib/commons/aria/index.js +0 -2424
- data/node_modules/axe-core/lib/commons/aria/is-accessible-ref.js +0 -59
- data/node_modules/axe-core/lib/commons/aria/is-aria-role-allowed-on-element.js +0 -41
- data/node_modules/axe-core/lib/commons/aria/is-unsupported-role.js +0 -14
- data/node_modules/axe-core/lib/commons/aria/label-virtual.js +0 -54
- data/node_modules/axe-core/lib/commons/aria/named-from-contents.js +0 -39
- data/node_modules/axe-core/lib/commons/aria/roles.js +0 -208
- data/node_modules/axe-core/lib/commons/aria/validate-attr-value.js +0 -62
- data/node_modules/axe-core/lib/commons/color/center-point-of-rect.js +0 -30
- data/node_modules/axe-core/lib/commons/color/contrast.js +0 -178
- data/node_modules/axe-core/lib/commons/color/element-has-image.js +0 -36
- data/node_modules/axe-core/lib/commons/color/element-is-distinct.js +0 -88
- data/node_modules/axe-core/lib/commons/color/get-background-color.js +0 -285
- data/node_modules/axe-core/lib/commons/color/get-foreground-color.js +0 -61
- data/node_modules/axe-core/lib/commons/color/get-own-background-color.js +0 -22
- data/node_modules/axe-core/lib/commons/color/incomplete-data.js +0 -50
- data/node_modules/axe-core/lib/commons/color/index.js +0 -8
- data/node_modules/axe-core/lib/commons/dom/elements-below-floating.js +0 -39
- data/node_modules/axe-core/lib/commons/dom/find-elms-in-context.js +0 -28
- data/node_modules/axe-core/lib/commons/dom/find-up.js +0 -63
- data/node_modules/axe-core/lib/commons/dom/get-composed-parent.js +0 -25
- data/node_modules/axe-core/lib/commons/dom/get-element-by-reference.js +0 -34
- data/node_modules/axe-core/lib/commons/dom/get-element-coordinates.js +0 -38
- data/node_modules/axe-core/lib/commons/dom/get-element-stack.js +0 -589
- data/node_modules/axe-core/lib/commons/dom/get-root-node.js +0 -12
- data/node_modules/axe-core/lib/commons/dom/get-scroll-offset.js +0 -33
- data/node_modules/axe-core/lib/commons/dom/get-tabbable-elements.js +0 -24
- data/node_modules/axe-core/lib/commons/dom/get-viewport-size.js +0 -37
- data/node_modules/axe-core/lib/commons/dom/has-content-virtual.js +0 -75
- data/node_modules/axe-core/lib/commons/dom/idrefs.js +0 -36
- data/node_modules/axe-core/lib/commons/dom/index.js +0 -9
- data/node_modules/axe-core/lib/commons/dom/is-focusable.js +0 -95
- data/node_modules/axe-core/lib/commons/dom/is-hidden-with-css.js +0 -73
- data/node_modules/axe-core/lib/commons/dom/is-html5.js +0 -17
- data/node_modules/axe-core/lib/commons/dom/is-in-text-block.js +0 -94
- data/node_modules/axe-core/lib/commons/dom/is-modal-open.js +0 -98
- data/node_modules/axe-core/lib/commons/dom/is-node.js +0 -13
- data/node_modules/axe-core/lib/commons/dom/is-offscreen.js +0 -62
- data/node_modules/axe-core/lib/commons/dom/is-skip-link.js +0 -45
- data/node_modules/axe-core/lib/commons/dom/is-visible.js +0 -176
- data/node_modules/axe-core/lib/commons/dom/is-visual-content.js +0 -49
- data/node_modules/axe-core/lib/commons/dom/shadow-elements-from-point.js +0 -42
- data/node_modules/axe-core/lib/commons/dom/url-props-from-attribute.js +0 -152
- data/node_modules/axe-core/lib/commons/dom/visually-contains.js +0 -111
- data/node_modules/axe-core/lib/commons/dom/visually-overlaps.js +0 -46
- data/node_modules/axe-core/lib/commons/forms/index.js +0 -8
- data/node_modules/axe-core/lib/commons/forms/is-aria-combobox.js +0 -13
- data/node_modules/axe-core/lib/commons/forms/is-aria-listbox.js +0 -13
- data/node_modules/axe-core/lib/commons/forms/is-aria-range.js +0 -14
- data/node_modules/axe-core/lib/commons/forms/is-aria-textbox.js +0 -13
- data/node_modules/axe-core/lib/commons/forms/is-native-select.js +0 -13
- data/node_modules/axe-core/lib/commons/forms/is-native-textbox.js +0 -28
- data/node_modules/axe-core/lib/commons/index.js +0 -11
- data/node_modules/axe-core/lib/commons/intro.stub +0 -1
- data/node_modules/axe-core/lib/commons/matches/attributes.js +0 -27
- data/node_modules/axe-core/lib/commons/matches/condition.js +0 -19
- data/node_modules/axe-core/lib/commons/matches/from-definition.js +0 -52
- data/node_modules/axe-core/lib/commons/matches/from-function.js +0 -38
- data/node_modules/axe-core/lib/commons/matches/from-primative.js +0 -30
- data/node_modules/axe-core/lib/commons/matches/index.js +0 -39
- data/node_modules/axe-core/lib/commons/matches/node-name.js +0 -24
- data/node_modules/axe-core/lib/commons/matches/properties.js +0 -28
- data/node_modules/axe-core/lib/commons/outro.stub +0 -2
- data/node_modules/axe-core/lib/commons/table/get-all-cells.js +0 -28
- data/node_modules/axe-core/lib/commons/table/get-cell-position.js +0 -28
- data/node_modules/axe-core/lib/commons/table/get-headers.js +0 -79
- data/node_modules/axe-core/lib/commons/table/get-scope.js +0 -54
- data/node_modules/axe-core/lib/commons/table/index.js +0 -9
- data/node_modules/axe-core/lib/commons/table/is-column-header.js +0 -13
- data/node_modules/axe-core/lib/commons/table/is-data-cell.js +0 -22
- data/node_modules/axe-core/lib/commons/table/is-data-table.js +0 -189
- data/node_modules/axe-core/lib/commons/table/is-header.js +0 -22
- data/node_modules/axe-core/lib/commons/table/is-row-header.js +0 -13
- data/node_modules/axe-core/lib/commons/table/to-grid.js +0 -38
- data/node_modules/axe-core/lib/commons/table/traverse.js +0 -78
- data/node_modules/axe-core/lib/commons/text/accessible-text-virtual.js +0 -152
- data/node_modules/axe-core/lib/commons/text/form-control-value.js +0 -192
- data/node_modules/axe-core/lib/commons/text/index.js +0 -8
- data/node_modules/axe-core/lib/commons/text/is-human-interpretable.js +0 -51
- data/node_modules/axe-core/lib/commons/text/is-icon-ligature.js +0 -210
- data/node_modules/axe-core/lib/commons/text/is-valid-autocomplete.js +0 -117
- data/node_modules/axe-core/lib/commons/text/label-text.js +0 -58
- data/node_modules/axe-core/lib/commons/text/label-virtual.js +0 -53
- data/node_modules/axe-core/lib/commons/text/native-element-types.js +0 -100
- data/node_modules/axe-core/lib/commons/text/native-text-alternative.js +0 -50
- data/node_modules/axe-core/lib/commons/text/native-text-methods.js +0 -122
- data/node_modules/axe-core/lib/commons/text/sanitize.js +0 -18
- data/node_modules/axe-core/lib/commons/text/subtree-text.js +0 -89
- data/node_modules/axe-core/lib/commons/text/title-text.js +0 -33
- data/node_modules/axe-core/lib/commons/text/unicode.js +0 -147
- data/node_modules/axe-core/lib/commons/text/unsupported.js +0 -5
- data/node_modules/axe-core/lib/commons/text/visible-text-nodes.js +0 -25
- data/node_modules/axe-core/lib/commons/text/visible-virtual.js +0 -46
- data/node_modules/axe-core/lib/commons/utils/index.js +0 -10
- data/node_modules/axe-core/lib/core/base/audit.js +0 -781
- data/node_modules/axe-core/lib/core/base/cache.js +0 -33
- data/node_modules/axe-core/lib/core/base/check-result.js +0 -33
- data/node_modules/axe-core/lib/core/base/check.js +0 -170
- data/node_modules/axe-core/lib/core/base/context.js +0 -274
- data/node_modules/axe-core/lib/core/base/rule-result.js +0 -39
- data/node_modules/axe-core/lib/core/base/rule.js +0 -560
- data/node_modules/axe-core/lib/core/base/virtual-node/abstract-virtual-node.js +0 -40
- data/node_modules/axe-core/lib/core/base/virtual-node/serial-virtual-node.js +0 -88
- data/node_modules/axe-core/lib/core/base/virtual-node/virtual-node.js +0 -136
- data/node_modules/axe-core/lib/core/constants.js +0 -76
- data/node_modules/axe-core/lib/core/imports/index.js +0 -51
- data/node_modules/axe-core/lib/core/index.js +0 -43
- data/node_modules/axe-core/lib/core/log.js +0 -12
- data/node_modules/axe-core/lib/core/public/cleanup-plugins.js +0 -53
- data/node_modules/axe-core/lib/core/public/configure.js +0 -110
- data/node_modules/axe-core/lib/core/public/get-rules.js +0 -29
- data/node_modules/axe-core/lib/core/public/load.js +0 -66
- data/node_modules/axe-core/lib/core/public/plugins.js +0 -47
- data/node_modules/axe-core/lib/core/public/reporter.js +0 -24
- data/node_modules/axe-core/lib/core/public/reset.js +0 -12
- data/node_modules/axe-core/lib/core/public/run-rules.js +0 -96
- data/node_modules/axe-core/lib/core/public/run-virtual-rule.js +0 -50
- data/node_modules/axe-core/lib/core/public/run.js +0 -159
- data/node_modules/axe-core/lib/core/reporters/helpers/failure-summary.js +0 -35
- data/node_modules/axe-core/lib/core/reporters/helpers/get-environment-data.js +0 -39
- data/node_modules/axe-core/lib/core/reporters/helpers/incomplete-fallback-msg.js +0 -13
- data/node_modules/axe-core/lib/core/reporters/helpers/index.js +0 -3
- data/node_modules/axe-core/lib/core/reporters/helpers/process-aggregate.js +0 -102
- data/node_modules/axe-core/lib/core/reporters/na.js +0 -24
- data/node_modules/axe-core/lib/core/reporters/no-passes.js +0 -18
- data/node_modules/axe-core/lib/core/reporters/raw-env.js +0 -12
- data/node_modules/axe-core/lib/core/reporters/raw.js +0 -32
- data/node_modules/axe-core/lib/core/reporters/v1.js +0 -29
- data/node_modules/axe-core/lib/core/reporters/v2.js +0 -22
- data/node_modules/axe-core/lib/core/utils/aggregate.js +0 -19
- data/node_modules/axe-core/lib/core/utils/aggregateChecks.js +0 -85
- data/node_modules/axe-core/lib/core/utils/aggregateNodeResults.js +0 -61
- data/node_modules/axe-core/lib/core/utils/aggregateResult.js +0 -37
- data/node_modules/axe-core/lib/core/utils/are-styles-set.js +0 -21
- data/node_modules/axe-core/lib/core/utils/assert.js +0 -12
- data/node_modules/axe-core/lib/core/utils/check-helper.js +0 -38
- data/node_modules/axe-core/lib/core/utils/clone.js +0 -27
- data/node_modules/axe-core/lib/core/utils/collect-results-from-frames.js +0 -127
- data/node_modules/axe-core/lib/core/utils/contains.js +0 -44
- data/node_modules/axe-core/lib/core/utils/css-parser.js +0 -7
- data/node_modules/axe-core/lib/core/utils/dq-element.js +0 -97
- data/node_modules/axe-core/lib/core/utils/element-matches.js +0 -43
- data/node_modules/axe-core/lib/core/utils/escape-selector.js +0 -78
- data/node_modules/axe-core/lib/core/utils/extend-meta-data.js +0 -17
- data/node_modules/axe-core/lib/core/utils/finalize-result.js +0 -11
- data/node_modules/axe-core/lib/core/utils/find-by.js +0 -14
- data/node_modules/axe-core/lib/core/utils/flattened-tree.js +0 -156
- data/node_modules/axe-core/lib/core/utils/get-all-checks.js +0 -12
- data/node_modules/axe-core/lib/core/utils/get-base-lang.js +0 -16
- data/node_modules/axe-core/lib/core/utils/get-check-message.js +0 -21
- data/node_modules/axe-core/lib/core/utils/get-check-option.js +0 -39
- data/node_modules/axe-core/lib/core/utils/get-friendly-uri-end.js +0 -144
- data/node_modules/axe-core/lib/core/utils/get-node-attributes.js +0 -21
- data/node_modules/axe-core/lib/core/utils/get-root-node.js +0 -17
- data/node_modules/axe-core/lib/core/utils/get-scroll.js +0 -39
- data/node_modules/axe-core/lib/core/utils/get-selector.js +0 -409
- data/node_modules/axe-core/lib/core/utils/get-stylesheet-factory.js +0 -51
- data/node_modules/axe-core/lib/core/utils/get-xpath.js +0 -83
- data/node_modules/axe-core/lib/core/utils/index.js +0 -10
- data/node_modules/axe-core/lib/core/utils/inject-style.js +0 -38
- data/node_modules/axe-core/lib/core/utils/is-hidden.js +0 -52
- data/node_modules/axe-core/lib/core/utils/is-html-element.js +0 -135
- data/node_modules/axe-core/lib/core/utils/is-shadow-root.js +0 -40
- data/node_modules/axe-core/lib/core/utils/is-xhtml.js +0 -14
- data/node_modules/axe-core/lib/core/utils/matches.js +0 -263
- data/node_modules/axe-core/lib/core/utils/memoize.js +0 -17
- data/node_modules/axe-core/lib/core/utils/merge-results.js +0 -116
- data/node_modules/axe-core/lib/core/utils/node-sorter.js +0 -21
- data/node_modules/axe-core/lib/core/utils/parse-crossorigin-stylesheet.js +0 -54
- data/node_modules/axe-core/lib/core/utils/parse-sameorigin-stylesheet.js +0 -96
- data/node_modules/axe-core/lib/core/utils/parse-stylesheet.js +0 -70
- data/node_modules/axe-core/lib/core/utils/performance-timer.js +0 -126
- data/node_modules/axe-core/lib/core/utils/pollyfills.js +0 -299
- data/node_modules/axe-core/lib/core/utils/preload-cssom.js +0 -253
- data/node_modules/axe-core/lib/core/utils/preload-media.js +0 -65
- data/node_modules/axe-core/lib/core/utils/preload.js +0 -144
- data/node_modules/axe-core/lib/core/utils/process-message.js +0 -72
- data/node_modules/axe-core/lib/core/utils/publish-metadata.js +0 -106
- data/node_modules/axe-core/lib/core/utils/qsa.js +0 -110
- data/node_modules/axe-core/lib/core/utils/queue.js +0 -138
- data/node_modules/axe-core/lib/core/utils/respondable.js +0 -261
- data/node_modules/axe-core/lib/core/utils/rule-should-run.js +0 -82
- data/node_modules/axe-core/lib/core/utils/scroll-state.js +0 -57
- data/node_modules/axe-core/lib/core/utils/select.js +0 -135
- data/node_modules/axe-core/lib/core/utils/to-array.js +0 -21
- data/node_modules/axe-core/lib/core/utils/token-list.js +0 -15
- data/node_modules/axe-core/lib/core/utils/uuid.js +0 -244
- data/node_modules/axe-core/lib/core/utils/valid-input-type.js +0 -35
- data/node_modules/axe-core/lib/core/utils/valid-langs.js +0 -8152
- data/node_modules/axe-core/lib/intro.stub +0 -15
- data/node_modules/axe-core/lib/misc/any-failure-summary.json +0 -6
- data/node_modules/axe-core/lib/misc/incomplete-fallback.json +0 -3
- data/node_modules/axe-core/lib/misc/none-failure-summary.json +0 -6
- data/node_modules/axe-core/lib/outro.stub +0 -2
- data/node_modules/axe-core/lib/rules/accesskeys.json +0 -13
- data/node_modules/axe-core/lib/rules/area-alt.json +0 -21
- data/node_modules/axe-core/lib/rules/aria-allowed-attr-matches.js +0 -11
- data/node_modules/axe-core/lib/rules/aria-allowed-attr.json +0 -12
- data/node_modules/axe-core/lib/rules/aria-allowed-role-matches.js +0 -7
- data/node_modules/axe-core/lib/rules/aria-allowed-role.json +0 -14
- data/node_modules/axe-core/lib/rules/aria-dpub-role-fallback-matches.js +0 -10
- data/node_modules/axe-core/lib/rules/aria-dpub-role-fallback.json +0 -14
- data/node_modules/axe-core/lib/rules/aria-form-field-name-matches.js +0 -50
- data/node_modules/axe-core/lib/rules/aria-has-attr-matches.js +0 -11
- data/node_modules/axe-core/lib/rules/aria-hidden-body.json +0 -13
- data/node_modules/axe-core/lib/rules/aria-hidden-focus-matches.js +0 -18
- data/node_modules/axe-core/lib/rules/aria-hidden-focus.json +0 -18
- data/node_modules/axe-core/lib/rules/aria-input-field-name.json +0 -13
- data/node_modules/axe-core/lib/rules/aria-required-attr.json +0 -12
- data/node_modules/axe-core/lib/rules/aria-required-children.json +0 -12
- data/node_modules/axe-core/lib/rules/aria-required-parent.json +0 -12
- data/node_modules/axe-core/lib/rules/aria-roledescription.json +0 -12
- data/node_modules/axe-core/lib/rules/aria-roles.json +0 -13
- data/node_modules/axe-core/lib/rules/aria-toggle-field-name.json +0 -18
- data/node_modules/axe-core/lib/rules/aria-valid-attr-value.json +0 -12
- data/node_modules/axe-core/lib/rules/aria-valid-attr.json +0 -12
- data/node_modules/axe-core/lib/rules/audio-caption.json +0 -20
- data/node_modules/axe-core/lib/rules/autocomplete-matches.js +0 -49
- data/node_modules/axe-core/lib/rules/autocomplete-valid.json +0 -12
- data/node_modules/axe-core/lib/rules/avoid-inline-spacing.json +0 -12
- data/node_modules/axe-core/lib/rules/blink.json +0 -19
- data/node_modules/axe-core/lib/rules/button-name.json +0 -25
- data/node_modules/axe-core/lib/rules/bypass-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/bypass.json +0 -20
- data/node_modules/axe-core/lib/rules/checkboxgroup.json +0 -13
- data/node_modules/axe-core/lib/rules/color-contrast-matches.js +0 -161
- data/node_modules/axe-core/lib/rules/color-contrast.json +0 -13
- data/node_modules/axe-core/lib/rules/css-orientation-lock.json +0 -13
- data/node_modules/axe-core/lib/rules/data-table-large-matches.js +0 -11
- data/node_modules/axe-core/lib/rules/data-table-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/definition-list.json +0 -13
- data/node_modules/axe-core/lib/rules/dlitem.json +0 -13
- data/node_modules/axe-core/lib/rules/document-title.json +0 -13
- data/node_modules/axe-core/lib/rules/duplicate-id-active-matches.js +0 -8
- data/node_modules/axe-core/lib/rules/duplicate-id-active.json +0 -14
- data/node_modules/axe-core/lib/rules/duplicate-id-aria-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/duplicate-id-aria.json +0 -14
- data/node_modules/axe-core/lib/rules/duplicate-id-misc-matches.js +0 -11
- data/node_modules/axe-core/lib/rules/duplicate-id.json +0 -14
- data/node_modules/axe-core/lib/rules/empty-heading.json +0 -13
- data/node_modules/axe-core/lib/rules/focus-order-semantics.json +0 -13
- data/node_modules/axe-core/lib/rules/form-field-multiple-labels.json +0 -13
- data/node_modules/axe-core/lib/rules/frame-tested.json +0 -12
- data/node_modules/axe-core/lib/rules/frame-title-has-text.js +0 -2
- data/node_modules/axe-core/lib/rules/frame-title-unique.json +0 -13
- data/node_modules/axe-core/lib/rules/frame-title.json +0 -25
- data/node_modules/axe-core/lib/rules/heading-matches.js +0 -15
- data/node_modules/axe-core/lib/rules/heading-order.json +0 -13
- data/node_modules/axe-core/lib/rules/hidden-content.json +0 -13
- data/node_modules/axe-core/lib/rules/html-has-lang.json +0 -13
- data/node_modules/axe-core/lib/rules/html-lang-valid.json +0 -12
- data/node_modules/axe-core/lib/rules/html-namespace-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/html-xml-lang-mismatch.json +0 -13
- data/node_modules/axe-core/lib/rules/identical-links-same-purpose-matches.js +0 -13
- data/node_modules/axe-core/lib/rules/identical-links-same-purpose.json +0 -14
- data/node_modules/axe-core/lib/rules/image-alt.json +0 -25
- data/node_modules/axe-core/lib/rules/img-redundant-alt.json +0 -12
- data/node_modules/axe-core/lib/rules/input-button-name.json +0 -26
- data/node_modules/axe-core/lib/rules/input-image-alt.json +0 -18
- data/node_modules/axe-core/lib/rules/inserted-into-focus-order-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/label-content-name-mismatch-matches.js +0 -45
- data/node_modules/axe-core/lib/rules/label-content-name-mismatch.json +0 -12
- data/node_modules/axe-core/lib/rules/label-matches.js +0 -11
- data/node_modules/axe-core/lib/rules/label-title-only.json +0 -13
- data/node_modules/axe-core/lib/rules/label.json +0 -26
- data/node_modules/axe-core/lib/rules/landmark-banner-is-top-level.json +0 -13
- data/node_modules/axe-core/lib/rules/landmark-complementary-is-top-level.json +0 -12
- data/node_modules/axe-core/lib/rules/landmark-contentinfo-is-top-level.json +0 -13
- data/node_modules/axe-core/lib/rules/landmark-has-body-context.js +0 -8
- data/node_modules/axe-core/lib/rules/landmark-main-is-top-level.json +0 -12
- data/node_modules/axe-core/lib/rules/landmark-no-duplicate-banner.json +0 -12
- data/node_modules/axe-core/lib/rules/landmark-no-duplicate-contentinfo.json +0 -12
- data/node_modules/axe-core/lib/rules/landmark-no-duplicate-main.json +0 -12
- data/node_modules/axe-core/lib/rules/landmark-one-main.json +0 -12
- data/node_modules/axe-core/lib/rules/landmark-unique-matches.js +0 -41
- data/node_modules/axe-core/lib/rules/landmark-unique.json +0 -13
- data/node_modules/axe-core/lib/rules/layout-table-matches.js +0 -8
- data/node_modules/axe-core/lib/rules/layout-table.json +0 -14
- data/node_modules/axe-core/lib/rules/link-in-text-block-matches.js +0 -14
- data/node_modules/axe-core/lib/rules/link-in-text-block.json +0 -14
- data/node_modules/axe-core/lib/rules/link-name.json +0 -25
- data/node_modules/axe-core/lib/rules/list.json +0 -13
- data/node_modules/axe-core/lib/rules/listitem.json +0 -13
- data/node_modules/axe-core/lib/rules/marquee.json +0 -13
- data/node_modules/axe-core/lib/rules/meta-refresh.json +0 -20
- data/node_modules/axe-core/lib/rules/meta-viewport-large.json +0 -13
- data/node_modules/axe-core/lib/rules/meta-viewport.json +0 -13
- data/node_modules/axe-core/lib/rules/no-autoplay-audio-matches.js +0 -18
- data/node_modules/axe-core/lib/rules/no-autoplay-audio.json +0 -15
- data/node_modules/axe-core/lib/rules/no-empty-role-matches.js +0 -9
- data/node_modules/axe-core/lib/rules/no-role-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/not-html-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/object-alt.json +0 -25
- data/node_modules/axe-core/lib/rules/p-as-heading-matches.js +0 -17
- data/node_modules/axe-core/lib/rules/p-as-heading.json +0 -13
- data/node_modules/axe-core/lib/rules/page-has-heading-one.json +0 -12
- data/node_modules/axe-core/lib/rules/radiogroup.json +0 -13
- data/node_modules/axe-core/lib/rules/region.json +0 -12
- data/node_modules/axe-core/lib/rules/role-img-alt.json +0 -19
- data/node_modules/axe-core/lib/rules/scope-attr-valid.json +0 -12
- data/node_modules/axe-core/lib/rules/scrollable-region-focusable-matches.js +0 -30
- data/node_modules/axe-core/lib/rules/scrollable-region-focusable.json +0 -12
- data/node_modules/axe-core/lib/rules/server-side-image-map.json +0 -18
- data/node_modules/axe-core/lib/rules/skip-link-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/skip-link.json +0 -13
- data/node_modules/axe-core/lib/rules/svg-img-alt.json +0 -24
- data/node_modules/axe-core/lib/rules/svg-namespace-matches.js +0 -1
- data/node_modules/axe-core/lib/rules/tabindex.json +0 -12
- data/node_modules/axe-core/lib/rules/table-duplicate-name.json +0 -12
- data/node_modules/axe-core/lib/rules/table-fake-caption.json +0 -20
- data/node_modules/axe-core/lib/rules/td-has-header.json +0 -20
- data/node_modules/axe-core/lib/rules/td-headers-attr.json +0 -12
- data/node_modules/axe-core/lib/rules/th-has-data-cells.json +0 -13
- data/node_modules/axe-core/lib/rules/valid-lang.json +0 -13
- data/node_modules/axe-core/lib/rules/video-caption.json +0 -19
- data/node_modules/axe-core/lib/rules/video-description.json +0 -21
- data/node_modules/axe-core/lib/rules/window-is-top.js +0 -3
- data/node_modules/axe-core/lib/rules/xml-lang-mismatch-matches.js +0 -12
- data/node_modules/axe-core/typings/axe-core/axe-core-tests.ts +0 -188
@@ -1,514 +0,0 @@
|
|
1
|
-
# Axe Developer Guide
|
2
|
-
|
3
|
-
Axe runs a series of tests to check for accessibility of content and functionality on a website. A test is made up of a series of Rules which are, themselves, made up of Checks. Axe executes these Rules asynchronously and, when the Rules are finished running, runs a callback function which is passed a Result structure. Since some Rules run on the page level while others do not, tests will also run in one of two ways. If a document is specified, the page level rules will run, otherwise they will not.
|
4
|
-
|
5
|
-
Axe 3.0 supports open Shadow DOM: see our virtual DOM APIs and test utilities for developing axe-core moving forward. Note: we do not and cannot support closed Shadow DOM.
|
6
|
-
|
7
|
-
1. [Getting Started](#getting-started)
|
8
|
-
1. [Environment Pre-requisites](#environment-pre-requisites)
|
9
|
-
1. [Building axe.js](#building-axejs)
|
10
|
-
1. [Running Tests](#running-tests)
|
11
|
-
1. [API Reference](#api-reference)
|
12
|
-
1. [Supported CSS Selectors](#supported-css-selectors)
|
13
|
-
1. [Architecture Overview](#architecture-overview)
|
14
|
-
1. [Rules](#rules)
|
15
|
-
1. [Checks](#checks)
|
16
|
-
1. [Common Functions](#common-functions)
|
17
|
-
1. [Virtual Nodes](#virtual-nodes)
|
18
|
-
1. [Core Utilities](#core-utilities)
|
19
|
-
1. [Virtual DOM APIs](#virtual-dom-apis)
|
20
|
-
1. [API Name: axe.utils.getFlattenedTree](#api-name-axeutilsgetflattenedtree)
|
21
|
-
1. [API Name: axe.utils.getNodeFromTree](#api-name-axeutilsgetnodefromtree)
|
22
|
-
1. [Test Utilities](#test-utilities)
|
23
|
-
1. [Test Util Name: axe.testUtils.MockCheckContext](#test-util-name-axetestutilsmockcheckcontext)
|
24
|
-
1. [Test Util Name: axe.testUtils.shadowSupport](#test-util-name-axetestutilsshadowsupport)
|
25
|
-
1. [Test Util Name: axe.testUtils.fixtureSetup](#test-util-name-axetestutilsfixturesetup)
|
26
|
-
1. [Test Util Name: axe.testUtils.checkSetup](#test-util-name-axetestutilschecksetup)
|
27
|
-
1. [Using Rule Generation CLI](#axe-rule-generator)
|
28
|
-
|
29
|
-
## Getting Started
|
30
|
-
|
31
|
-
### Environment Pre-requisites
|
32
|
-
|
33
|
-
1. You must have NodeJS installed.
|
34
|
-
2. Grunt must be installed globally. `npm install -g grunt-cli` (You may need to do this as `sudo npm install -g grunt-cli`)
|
35
|
-
3. Install npm development dependencies. In the root folder of your axe-core repository, run `npm install`
|
36
|
-
|
37
|
-
### Building axe.js
|
38
|
-
|
39
|
-
To build axe.js, simply run `grunt build` in the root folder of the axe-core repository. axe.js and axe.min.js are placed into the root folder.
|
40
|
-
|
41
|
-
### Running Tests
|
42
|
-
|
43
|
-
To run all tests from the command line you can run `grunt test`, which will run all unit and integration tests using headless chrome and Selenium Webdriver.
|
44
|
-
|
45
|
-
You can also load tests in any supported browser, which is helpful for debugging. Tests require a local server to run, you must first start a local server to serve files. You can use Grunt to start one by running `grunt dev`. Once your local server is running you can load the following pages in any browser to run tests:
|
46
|
-
|
47
|
-
1. [Core Tests](../test/core/)
|
48
|
-
2. [Commons Tests](../test/commons/)
|
49
|
-
3. [Check Tests](../test/checks/)
|
50
|
-
4. [Integration Tests](../test/integration/rules/)
|
51
|
-
5. There are additional tests located in [test/integration/full/](../test/integration/full/) for tests that need to be run against their own document.
|
52
|
-
|
53
|
-
### API Reference
|
54
|
-
|
55
|
-
[See API exposed on axe](./API.md#section-2-api-reference)
|
56
|
-
|
57
|
-
### Supported CSS Selectors
|
58
|
-
|
59
|
-
Axe supports the following CSS selectors:
|
60
|
-
|
61
|
-
- Type, Class, ID, and Universal selectors. E.g `div.main, #main`
|
62
|
-
- Pseudo selector `not`. E.g `th:not([scope])`
|
63
|
-
- Descendant and Child combinators. E.g. `table td`, `ul > li`
|
64
|
-
- Attribute selectors `=`, `^=`, `$=`, `*=`. E.g `a[href^="#"]`
|
65
|
-
|
66
|
-
## Architecture Overview
|
67
|
-
|
68
|
-
Axe tests for accessibility using objects called Rules. Each Rule tests for a high-level aspect of accessibility, such as color contrast, button labels, and alternate text for images. Each rule is made up of a series of Checks. Depending on the rule; all, some, or none of these checks must pass in order for the rule to pass.
|
69
|
-
|
70
|
-
Upon execution, a Rule runs each of its Checks against all relevant nodes. Which nodes are relevant is determined by the Rule's `selector` property and `matches` function. If a Rule has no Checks that apply to a given node, the Rule will result in an inapplicable result.
|
71
|
-
|
72
|
-
After execution, a Check will return `true` or `false` depending on whether or not the tested condition was satisfied. The result, as well as more information on what caused the Check to pass or fail, will be stored in either the `passes` array or the `violations` array.
|
73
|
-
|
74
|
-
### Rules
|
75
|
-
|
76
|
-
Rules are defined by JSON files in the [lib/rules directory](../lib/rules). The JSON object is used to seed the [Rule object](../lib/core/base/rule.js#L30). A valid Rule JSON consists of the following:
|
77
|
-
|
78
|
-
- `id` - `String` A unique name of the Rule.
|
79
|
-
- `selector` - **optional** `String` which is a [CSS selector](#supported-css-selectors) that specifies the elements of the page on which the Rule runs. axe-core will look inside of the light DOM and _open_ [Shadow DOM](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Shadow_DOM) trees for elements matching the provided selector. If omitted, the rule will run against every node.
|
80
|
-
- `excludeHidden` - **optional** `Boolean` Whether the rule should exclude hidden elements. Defaults to `true`.
|
81
|
-
- `enabled` - **optional** `Boolean` Whether the rule is enabled by default. Defaults to `true`.
|
82
|
-
- `pageLevel` - **optional** `Boolean` Whether the rule is page level. Page level rules will only run if given an entire `document` as context.
|
83
|
-
- `matches` - **optional** `String` Relative path to the JavaScript file of a custom matching function. See [matches function](#matches-function) for more information.
|
84
|
-
- `tags` - **optional** `Array` Strings of the accessibility guidelines of which the Rule applies.
|
85
|
-
- `metadata` - `Object` Consisting of:
|
86
|
-
- `description` - `String` Text string that describes what the rule does.
|
87
|
-
- `helpUrl` - `String` **optional** URL that provides more information about the specifics of the violation. Links to a page on the Deque University site.
|
88
|
-
- `help` - `String` Help text that describes the test that was performed.
|
89
|
-
- `any` - `Array` Checks that make up this Rule; one of these checks must return `true` for a Rule to pass.
|
90
|
-
- `all` - `Array` Checks that make up this Rule; all these checks must return `true` for a Rule to pass.
|
91
|
-
- `none` - `Array` Checks that make up this Rule; none of these checks must return `true` for a Rule to pass.
|
92
|
-
|
93
|
-
The `any`, `all` and `none` arrays must contain either a `String` which references the `id` of the Check; or an object of the following format:
|
94
|
-
|
95
|
-
- `id` - `String` The unique ID of the Check.
|
96
|
-
- `options` - `Mixed` Any options the Check requires that are specific to the Rule.
|
97
|
-
|
98
|
-
There is a Grunt target which will ensure each Rule has a valid format, which can be run with `grunt validate`.
|
99
|
-
|
100
|
-
#### Matches Function
|
101
|
-
|
102
|
-
Custom `matches` functions are executed against each node which matches the Rule's `selector` and receive two parameters:
|
103
|
-
|
104
|
-
- `node` – node, the DOM Node to test
|
105
|
-
- `virtualNode`– object, the virtual DOM representation of the node. See [virtualNode documentation](#virtual-nodes) for more.
|
106
|
-
|
107
|
-
The matches function must return either `true` or `false`. Common functions are provided as `commons`. [See the data-table matches function for an example.](../lib/rules/data-table-matches.js)
|
108
|
-
|
109
|
-
### Checks
|
110
|
-
|
111
|
-
Similar to Rules, Checks are defined by JSON files in the [lib/checks directory](../lib/checks). The JSON object is used to seed the [Check object](../lib/core/base/check.js). A valid Check JSON consists of the following:
|
112
|
-
|
113
|
-
- `id` - `String` A unique name of the Check
|
114
|
-
- `evaluate` - `String` Relative path to the JavaScript file which contains the function body of the Check itself
|
115
|
-
- `after` - **optional** `String` Relative path to the JavaScript file which contains the function body of a Check's after (or post-processing) function.f
|
116
|
-
- `options` - **optional** `Mixed` Any information the Check needs that you might need to customize and/or is locale specific. Options can be overridden at runtime (with the options parameter) or config-time. For example, the [valid-lang](../lib/checks/language/valid-lang.json) Check defines what ISO 639-1 language codes it should accept as valid. Options do not need to follow any specific format or type; it is up to the author of a Check to determine the most appropriate format.
|
117
|
-
- `metadata` - `Object` Consisting of:
|
118
|
-
- `impact` - `String` (one of `minor`, `moderate`, `serious`, or `critical`)
|
119
|
-
- `messages` - `Object` These messages are displayed when the Check passes or fails
|
120
|
-
- `pass` - `String` [doT.js](http://olado.github.io/doT/) template string displayed when the Check passes
|
121
|
-
- `fail` - `String` [doT.js](http://olado.github.io/doT/) template string displayed when the Check fails
|
122
|
-
- `incomplete` – `String|Object` – [doT.js](http://olado.github.io/doT/) template string displayed when the Check is incomplete OR an object with `missingData` on why it returned incomplete. Refer to [rules.md](./rules.md).
|
123
|
-
|
124
|
-
#### Check `evaluate`
|
125
|
-
|
126
|
-
A Check's evaluate function is run a special context in order to give access to APIs which provide more information. Checks will run against a single node and do not have access to other frames. A Check must either return `true` or `false`.
|
127
|
-
|
128
|
-
The following variables are defined for `Check#evaluate`:
|
129
|
-
|
130
|
-
- `node` - `HTMLElement` The element that the Check is run against
|
131
|
-
- `options` - `Mixed` Any options specific to this Check that may be necessary. If not specified by the user at run-time or configure-time; it will use `options` as defined by the Check's JSON file.
|
132
|
-
- `virtualNode` – `Object` The virtualNode object for use with Shadow DOM. See [virtualNode documentation](#virtual-nodes).
|
133
|
-
- `this.data()` - `Function` Free-form data that either the Check message requires or is presented as `data` in the CheckResult object. Subsequent calls to `this.data()` will overwrite previous. See [aria-valid-attr](../lib/checks/aria/valid-attr.js) for example usage.
|
134
|
-
- `this.relatedNodes()` - `Function` Array or NodeList of elements that are related to this Check. For example the [duplicate-id](../lib/checks/shared/duplicate-id.js) Check will add all Elements which share the same ID.
|
135
|
-
- `commons` - Common functions that may be used across multiple Checks. See [Common Functions](#common-functions) for more information.
|
136
|
-
|
137
|
-
#### Check `after`
|
138
|
-
|
139
|
-
You can use the `after` function to evaluate nodes that might be in other frames or to filter the number of violations or passes produced. The `after` function runs once for each Rule in the top-most (or originating) frame. Due to this, you should not perform DOM operations in after functions, but instead operate on `data` defined by the Check.
|
140
|
-
|
141
|
-
For example, the [duplicate-id](../lib/checks/shared/duplicate-id.json) Check include an [after function](../lib/checks/shared/duplicate-id-after.js) which reduces the number of violations so that only one violation per instance of a duplicate ID is found.
|
142
|
-
|
143
|
-
The following variables are defined for `Check#after`:
|
144
|
-
|
145
|
-
- `results` - `Array` Contains [CheckResults](#checkresult) for every matching node.
|
146
|
-
- `commons` - Common functions that may be used across multiple Checks. See [Common Functions](#common-functions) for more information.
|
147
|
-
|
148
|
-
The after function must return an `Array` of CheckResults, due to this, it is a very common pattern to just use `Array#filter` to filter results:
|
149
|
-
|
150
|
-
```js
|
151
|
-
var uniqueIds = [];
|
152
|
-
return results.filter(function(r) {
|
153
|
-
if (uniqueIds.indexOf(r.data) === -1) {
|
154
|
-
uniqueIds.push(r.data);
|
155
|
-
return true;
|
156
|
-
}
|
157
|
-
return false;
|
158
|
-
});
|
159
|
-
```
|
160
|
-
|
161
|
-
#### Pass, Fail and Incomplete Templates
|
162
|
-
|
163
|
-
Occasionally, you may want to add additional information about why a Check passed, failed or returned undefined into its message. For example, the [aria-valid-attr](../lib/checks/aria/valid-attr.json) will add information about any invalid ARIA attributes to its fail message. The message uses the [doT.js](http://olado.github.io/doT/) and is compiled to a JavaScript function at build-time. In the Check message, you have access to the `CheckResult` as `it`.
|
164
|
-
|
165
|
-
```js
|
166
|
-
// aria-valid-attr check
|
167
|
-
"messages": {
|
168
|
-
"pass": "ARIA attributes are used correctly for the defined role",
|
169
|
-
"fail": "ARIA attribute{{=it.data && it.data.length > 1 ? 's are' : ' is'}} not allowed:{{~it.data:value}} {{=value}}{{~}}",
|
170
|
-
"incomplete": "axe-core couldn't tell because of {{it.data.missingData}}"
|
171
|
-
}
|
172
|
-
```
|
173
|
-
|
174
|
-
See [Developing Axe-core Rules](./rule-development.md) for more information
|
175
|
-
on writing rules and checks, including incomplete results.
|
176
|
-
|
177
|
-
#### CheckResult
|
178
|
-
|
179
|
-
When a Check is executed, its result is then added to a [CheckResult object](../lib/core/base/check-result.js). Much like the RuleResult object, the CheckResult object only contains information that is required to determine whether a Check, and its parent Rule passed or failed. `metadata` from the originating Check is combined later and will not be available until axe reaches the reporting stage.
|
180
|
-
|
181
|
-
A CheckResult has the following properties:
|
182
|
-
|
183
|
-
- `id` - `String` The ID of the Check this CheckResult belongs to.
|
184
|
-
- `data` - `Mixed` Any data the Check's evaluate function added with `this.data()`. Typically used to insert data from analysis into a message or to perform further tests in the post-processing function.
|
185
|
-
- `relatedNodes` - `Array` Nodes that are related to the current Check as defined by [check.evaluate](#check-evaluate).
|
186
|
-
- `result` - `Boolean` The return value of [check.evaluate](#check-evaluate).
|
187
|
-
|
188
|
-
### Common Functions
|
189
|
-
|
190
|
-
Common functions are an internal library used by the rules and checks. If you have code repeated across rules and checks, you can use these functions and contribute to them. They are made available to every function as `commons`. Documentation is available in [source code](../lib/commons/).
|
191
|
-
|
192
|
-
#### Commons and Shadow DOM
|
193
|
-
|
194
|
-
To support open Shadow DOM while maintaining backwards compatibility, commons functions that
|
195
|
-
query DOM nodes must operate on an in-memory representation of the DOM using axe-core’s
|
196
|
-
built-in [API methods and utility functions](./API.md#virtual-dom-utilities).
|
197
|
-
|
198
|
-
Commons functions should do the virtual tree lookup and call a `virtual` function
|
199
|
-
including the rest of the commons code. The naming of this special function
|
200
|
-
should contain the original commons function name with `Virtual` added to signify
|
201
|
-
it expects to operate on a virtual DOM tree.
|
202
|
-
|
203
|
-
Let’s look at an example:
|
204
|
-
|
205
|
-
```js
|
206
|
-
axe.commons.text.accessibleText = function(element, inLabelledbyContext) {
|
207
|
-
let virtualNode = axe.utils.getNodeFromTree(axe._tree[0], element); // throws an exception on purpose if axe._tree not correct
|
208
|
-
return axe.commons.text.accessibleTextVirtual(
|
209
|
-
virtualNode,
|
210
|
-
inLabelledbyContext
|
211
|
-
);
|
212
|
-
};
|
213
|
-
|
214
|
-
axe.commons.text.accessibleTextVirtual = function(
|
215
|
-
element,
|
216
|
-
inLabelledbyContext
|
217
|
-
) {
|
218
|
-
// rest of the commons code minus the virtual tree lookup, since it’s passed in
|
219
|
-
};
|
220
|
-
```
|
221
|
-
|
222
|
-
`accessibleTextVirtual` would only be called directly if you’ve got a virtual node
|
223
|
-
you can use. If you don’t already have one, call the `accessibleText` lookup function,
|
224
|
-
which passes on a virtual DOM node with both the light DOM and Shadow DOM (if applicable).
|
225
|
-
|
226
|
-
### Virtual Nodes
|
227
|
-
|
228
|
-
To support open Shadow DOM, axe-core has the ability to handle virtual nodes in [rule matches](#matches-function)
|
229
|
-
and [check evaluate](#check-evaluate) functions. The full set of API methods for Shadow DOM can be
|
230
|
-
found in the [API documentation](./API.md#virtual-dom-utilities), but the general
|
231
|
-
structure for a virtualNode is as follows:
|
232
|
-
|
233
|
-
```js
|
234
|
-
{
|
235
|
-
actualNode: <HTMLElement>,
|
236
|
-
children: <Array>,
|
237
|
-
shadowId: <String>
|
238
|
-
}
|
239
|
-
```
|
240
|
-
|
241
|
-
- A virtualNode is an object containing an HTML DOM element (`actualNode`).
|
242
|
-
- Children contains an array of child virtualNodes.
|
243
|
-
- The shadowID indicates whether the node is in an open shadow root and if it is, which one it is inside the boundary.
|
244
|
-
|
245
|
-
### Core Utilities
|
246
|
-
|
247
|
-
Core Utilities are an internal library that provides axe with functionality used throughout its core processes. Most notably among these are the queue function and the DqElement constructor.
|
248
|
-
|
249
|
-
#### ARIA Lookup Tables
|
250
|
-
|
251
|
-
axe.commons.aria provides a namespace for ARIA-related utilities, including a lookupTable for attributes and roles.
|
252
|
-
|
253
|
-
- `axe.commons.aria.lookupTable.attributes`
|
254
|
-
- `axe.commons.aria.lookupTable.globalAttributes`
|
255
|
-
- `axe.commons.aria.lookupTable.role`
|
256
|
-
|
257
|
-
#### Common Utility Functions
|
258
|
-
|
259
|
-
In addition to the ARIA lookupTable, there are also utility functions on the axe.commons.aria and axe.commons.dom namespaces:
|
260
|
-
|
261
|
-
- `axe.commons.aria.implicitRole` - Get the implicit role for a given node
|
262
|
-
- `axe.commons.aria.label` - Gets the accessible ARIA label text of a given element
|
263
|
-
- `axe.commons.dom.isVisible` - Determine whether an element is visible
|
264
|
-
|
265
|
-
#### Queue Function
|
266
|
-
|
267
|
-
The queue function creates an asynchronous "queue", list of functions to be invoked in parallel, but not necessarily returned in order. The queue function returns an object with the following methods:
|
268
|
-
|
269
|
-
- `defer(func)` Defer a function that may or may not run asynchronously
|
270
|
-
- `then(callback)` The callback to execute once all "deferred" functions have completed. Will only be invoked once.
|
271
|
-
- `abort()` Abort the "queue" and prevent `then` function from firing
|
272
|
-
|
273
|
-
#### DqElement Class
|
274
|
-
|
275
|
-
The DqElement is a "serialized" `HTMLElement`. It will calculate the CSS selector, grab the source outerHTML and offer an array for storing frame paths. The DqElement class takes the following parameters:
|
276
|
-
|
277
|
-
- `Element` - `HTMLElement` The element to serialize
|
278
|
-
- `Spec` - `Object` Properties to use in place of the element when instantiated on Elements from other frames
|
279
|
-
|
280
|
-
```js
|
281
|
-
var firstH1 = document.getElementByTagName('h1')[0];
|
282
|
-
var dqH1 = new axe.utils.DqElement(firstH1);
|
283
|
-
```
|
284
|
-
|
285
|
-
Elements returned by the DqElement class have the following methods and properties:
|
286
|
-
|
287
|
-
- `selector` - `string` A unique CSS selector for the element
|
288
|
-
- `source` - `string` The generated HTML source code of the element
|
289
|
-
- `element` - `DOMNode` The element which this object is based off or the containing frame, used for sorting.
|
290
|
-
- `toJSON()` - Returns an object containing the selector and source properties
|
291
|
-
|
292
|
-
## Virtual DOM APIs
|
293
|
-
|
294
|
-
Note: You shouldn’t need the Shadow DOM APIs below unless you’re working on the axe-core
|
295
|
-
engine, as rules and checks already have `virtualNode` objects passed in. However, these APIs
|
296
|
-
will make it easier to work with the virtual DOM.
|
297
|
-
|
298
|
-
### API Name: axe.utils.getFlattenedTree
|
299
|
-
|
300
|
-
#### Description
|
301
|
-
|
302
|
-
Recursively return an array containing the virtual DOM tree for the node specified, excluding comment nodes
|
303
|
-
and shadow DOM nodes `<content>` and `<slot>`. This method will return a flattened tree containing both
|
304
|
-
light and shadow DOM, if applicable.
|
305
|
-
|
306
|
-
#### Synopsis
|
307
|
-
|
308
|
-
```js
|
309
|
-
var element = document.body;
|
310
|
-
axe.utils.getFlattenedTree(element, shadowId);
|
311
|
-
```
|
312
|
-
|
313
|
-
#### Parameters
|
314
|
-
|
315
|
-
- `node` – HTMLElement. The current HTML node for which you want a flattened DOM tree.
|
316
|
-
- `shadowId` – string(optional). ID of the shadow DOM that is the closest shadow ancestor of the node
|
317
|
-
|
318
|
-
#### Returns
|
319
|
-
|
320
|
-
An array of objects, where each object is a virtualNode:
|
321
|
-
|
322
|
-
```js
|
323
|
-
[
|
324
|
-
{
|
325
|
-
actualNode: body,
|
326
|
-
children: [virtualNodes],
|
327
|
-
shadowId: undefined
|
328
|
-
}
|
329
|
-
];
|
330
|
-
```
|
331
|
-
|
332
|
-
### API Name: axe.utils.getNodeFromTree
|
333
|
-
|
334
|
-
#### Description
|
335
|
-
|
336
|
-
Recursively return a single node from a virtual DOM tree. This is commonly used in rules and checks where the node is readily available without querying the DOM.
|
337
|
-
|
338
|
-
#### Synopsis
|
339
|
-
|
340
|
-
```js
|
341
|
-
axe.utils.getNodeFromTree(axe._tree[0], node);
|
342
|
-
```
|
343
|
-
|
344
|
-
#### Parameters
|
345
|
-
|
346
|
-
- `vNode` – object. The flattened DOM tree to fetch a virtual node from
|
347
|
-
- `node` – HTMLElement. The HTML DOM node for which you need a virtual representation
|
348
|
-
|
349
|
-
#### Returns
|
350
|
-
|
351
|
-
A virtualNode object:
|
352
|
-
|
353
|
-
```js
|
354
|
-
{
|
355
|
-
actualNode: div,
|
356
|
-
children: [virtualNodes],
|
357
|
-
shadowId: undefined
|
358
|
-
}
|
359
|
-
```
|
360
|
-
|
361
|
-
## Test Utilities
|
362
|
-
|
363
|
-
All tests must support open Shadow DOM, so we created some test utilities to make this easier.
|
364
|
-
|
365
|
-
### Test Util Name: MockCheckContext
|
366
|
-
|
367
|
-
Create a check context for mocking and resetting data and relatedNodes in tests.
|
368
|
-
|
369
|
-
#### Synopsis
|
370
|
-
|
371
|
-
```js
|
372
|
-
describe('region', function() {
|
373
|
-
var fixture = document.getElementById('fixture');
|
374
|
-
|
375
|
-
var checkContext = new axe.testUtils.MockCheckContext();
|
376
|
-
|
377
|
-
afterEach(function() {
|
378
|
-
fixture.innerHTML = '';
|
379
|
-
checkContext.reset();
|
380
|
-
});
|
381
|
-
|
382
|
-
it('should return true when all content is inside the region', function() {
|
383
|
-
assert.isTrue(checks.region.evaluate.apply(checkContext, checkArgs));
|
384
|
-
assert.equal(checkContext._relatedNodes.length, 0);
|
385
|
-
});
|
386
|
-
});
|
387
|
-
```
|
388
|
-
|
389
|
-
#### Parameters
|
390
|
-
|
391
|
-
None
|
392
|
-
|
393
|
-
#### Returns
|
394
|
-
|
395
|
-
An object containing the data, relatedNodes, and a way to reset them.
|
396
|
-
|
397
|
-
```js
|
398
|
-
{
|
399
|
-
data: (){},
|
400
|
-
relatedNodes: (){},
|
401
|
-
reset: (){}
|
402
|
-
}
|
403
|
-
```
|
404
|
-
|
405
|
-
### Test Util Name: shadowSupport
|
406
|
-
|
407
|
-
Provides an API for determining Shadow DOM v0 and v1 support in tests. For example: PhantomJS doesn't have Shadow DOM support, while some browsers do.
|
408
|
-
|
409
|
-
#### Synopsis
|
410
|
-
|
411
|
-
```js
|
412
|
-
(axe.testUtils.shadowSupport.v1 ? it : xit)(
|
413
|
-
'should test Shadow tree content',
|
414
|
-
function() {
|
415
|
-
// The rest of the shadow DOM test
|
416
|
-
}
|
417
|
-
);
|
418
|
-
```
|
419
|
-
|
420
|
-
#### Parameters
|
421
|
-
|
422
|
-
None
|
423
|
-
|
424
|
-
#### Returns
|
425
|
-
|
426
|
-
An object containing booleans for the following Shadow DOM supports: `v0`, `v1`, or `undefined`.
|
427
|
-
|
428
|
-
### Test Util Name: fixtureSetup
|
429
|
-
|
430
|
-
Method for injecting content into a fixture and caching the flattened DOM tree (light and Shadow DOM together).
|
431
|
-
|
432
|
-
#### Synopsis
|
433
|
-
|
434
|
-
```js
|
435
|
-
it(
|
436
|
-
'should return true if there is only one ' +
|
437
|
-
type +
|
438
|
-
' element with the same name',
|
439
|
-
function() {
|
440
|
-
axe.testUtils.fixtureSetup(
|
441
|
-
'<input type="' +
|
442
|
-
type +
|
443
|
-
'" id="target" name="uniqueyname">' +
|
444
|
-
'<input type="' +
|
445
|
-
type +
|
446
|
-
'" name="differentname">'
|
447
|
-
);
|
448
|
-
|
449
|
-
var node = fixture.querySelector('#target');
|
450
|
-
assert.isTrue(check.evaluate.call(checkContext, node));
|
451
|
-
}
|
452
|
-
);
|
453
|
-
```
|
454
|
-
|
455
|
-
#### Parameters
|
456
|
-
|
457
|
-
- `content` – Node|String. Stuff to go into the fixture (html or DOM node)
|
458
|
-
|
459
|
-
#### Returns
|
460
|
-
|
461
|
-
An HTML Element for the fixture
|
462
|
-
|
463
|
-
### Test Util Name: checkSetup
|
464
|
-
|
465
|
-
Create check arguments.
|
466
|
-
|
467
|
-
#### Synopsis
|
468
|
-
|
469
|
-
```js
|
470
|
-
it('should return true when all content is inside the region', function() {
|
471
|
-
var checkArgs = checkSetup(
|
472
|
-
'<div id="target"><div role="main"><a href="a.html#mainheader">Click Here</a><div><h1 id="mainheader" tabindex="0">Introduction</h1></div></div></div>'
|
473
|
-
);
|
474
|
-
|
475
|
-
assert.isTrue(checks.region.evaluate.apply(checkContext, checkArgs));
|
476
|
-
assert.equal(checkContext._relatedNodes.length, 0);
|
477
|
-
});
|
478
|
-
```
|
479
|
-
|
480
|
-
#### Parameters
|
481
|
-
|
482
|
-
- `content` – String|Node. Stuff to go into the fixture (html or node)
|
483
|
-
- `options` – Object. Options argument for the check (optional, default: {})
|
484
|
-
- `target` – String. Target for the check, CSS selector (default: '#target')
|
485
|
-
|
486
|
-
#### Returns
|
487
|
-
|
488
|
-
An array with the DOM Node, options and virtualNode
|
489
|
-
|
490
|
-
```js
|
491
|
-
[node, options, virtualNode];
|
492
|
-
```
|
493
|
-
|
494
|
-
## Using Rule Generation CLI
|
495
|
-
|
496
|
-
Axe provides a CLI for generating the necessary files and configuration assets for authoring a rule.
|
497
|
-
|
498
|
-
To invoke the rule generator, run:
|
499
|
-
|
500
|
-
```sh
|
501
|
-
npm run rule-gen
|
502
|
-
```
|
503
|
-
|
504
|
-
The CLI acts a wizard, by asking a series of questions related to generation of the rule, for example:
|
505
|
-
|
506
|
-
```sh
|
507
|
-
- What is the name of the RULE? (Eg: aria-valid): sample-rule
|
508
|
-
- Does the RULE need a MATCHES file to be created?: Yes
|
509
|
-
- Would you like to create a CHECK for the RULE?: No
|
510
|
-
- Would you like to create UNIT test files? Yes
|
511
|
-
- Would you like to create INTEGRATION test files? Yes
|
512
|
-
```
|
513
|
-
|
514
|
-
Upon answering of which the assets are created in the respective directories.
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# axe-chrome-debugging-protocol-example
|
2
|
-
|
3
|
-
This (very minimal) example demonstrates how to use `axe-core` with the [Chrome Debugging Protocol](https://chromedevtools.github.io/devtools-protocol/).
|
4
|
-
|
5
|
-
The example does not have feature parity with [`axe-webdriverjs`](https://github.com/dequelabs/axe-webdriverjs), and does not run on `<iframe>`s.
|
6
|
-
|
7
|
-
## To run the example
|
8
|
-
|
9
|
-
- Ensure Node v8+ is installed and on `PATH`
|
10
|
-
- Move to the `doc/examples/chrome-debugging-protocol` directory
|
11
|
-
- Run `npm install`
|
12
|
-
- Run `google-chrome --headless --remote-debugging-port=9222`. If you don't have a `google-chrome` binary, you can alias one with `alias google-chrome='/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome'` on OSX.
|
13
|
-
- Run `node axe-cdp.js http://www.deque.com` to run `axe-core` via Puppeteer against http://www.deque.com and output results to the terminal
|
@@ -1,81 +0,0 @@
|
|
1
|
-
const CDP = require('chrome-remote-interface');
|
2
|
-
const axeCore = require('axe-core');
|
3
|
-
const assert = require('assert');
|
4
|
-
const { parse: parseURL } = require('url');
|
5
|
-
|
6
|
-
// Cheap URL validation
|
7
|
-
const isValidURL = input => {
|
8
|
-
const u = parseURL(input);
|
9
|
-
return u.protocol && u.host;
|
10
|
-
};
|
11
|
-
|
12
|
-
const example = async url => {
|
13
|
-
// eslint-disable-next-line new-cap
|
14
|
-
const client = await CDP();
|
15
|
-
const { Runtime: runtime, Page: page } = client;
|
16
|
-
|
17
|
-
let results;
|
18
|
-
|
19
|
-
try {
|
20
|
-
await page.enable();
|
21
|
-
await runtime.enable();
|
22
|
-
|
23
|
-
await page.navigate({ url });
|
24
|
-
|
25
|
-
// This function is injected into the browser and is responsible for
|
26
|
-
// running `axe-core`.
|
27
|
-
const browserCode = () => {
|
28
|
-
/* eslint-env browser */
|
29
|
-
return new Promise((resolve, reject) => {
|
30
|
-
const axe = window.axe;
|
31
|
-
if (!axe) {
|
32
|
-
throw new Error('Unable to find axe-core');
|
33
|
-
}
|
34
|
-
|
35
|
-
// Finally, run axe-core
|
36
|
-
axe
|
37
|
-
.run()
|
38
|
-
// For some reason, when resolving with an object, CDP ignores
|
39
|
-
// its value (`results.result.value` is undefined). By
|
40
|
-
// `JSON.stringify()`ing it, we can `JSON.parse()` it later on
|
41
|
-
// and return a valid results set.
|
42
|
-
.then(results => JSON.stringify(results))
|
43
|
-
.then(resolve)
|
44
|
-
.catch(reject);
|
45
|
-
});
|
46
|
-
};
|
47
|
-
|
48
|
-
// Inject axe-core
|
49
|
-
await runtime.evaluate({
|
50
|
-
expression: axeCore.source
|
51
|
-
});
|
52
|
-
|
53
|
-
// Run axe-core
|
54
|
-
const ret = await runtime.evaluate({
|
55
|
-
expression: `(${browserCode})()`,
|
56
|
-
awaitPromise: true
|
57
|
-
});
|
58
|
-
|
59
|
-
// re-parse
|
60
|
-
results = JSON.parse(ret.result.value);
|
61
|
-
} catch (err) {
|
62
|
-
// Ensure we close the client before exiting the fn
|
63
|
-
client.close();
|
64
|
-
throw err;
|
65
|
-
}
|
66
|
-
client.close();
|
67
|
-
return results;
|
68
|
-
};
|
69
|
-
|
70
|
-
// node axe-cdp.js <url>
|
71
|
-
const url = process.argv[2];
|
72
|
-
assert(isValidURL(url), 'Invalid URL');
|
73
|
-
|
74
|
-
example(url)
|
75
|
-
.then(results => {
|
76
|
-
console.log(results);
|
77
|
-
})
|
78
|
-
.catch(err => {
|
79
|
-
console.error('Error running axe-core:', err.message);
|
80
|
-
process.exit(1);
|
81
|
-
});
|