axe-core 4.2.4 → 4.3.0
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.
- package/CHANGELOG.md +37 -2
- package/README.md +24 -2
- package/axe.d.ts +60 -4
- package/axe.js +1198 -830
- package/axe.min.js +2 -2
- package/locales/de.json +1 -1
- package/locales/pt_BR.json +163 -44
- package/package.json +7 -1
- package/.eslintrc.js +0 -112
- package/.prettierrc.json +0 -10
- package/CONTRIBUTING.md +0 -242
- package/bower.json +0 -40
- package/doc/API.md +0 -963
- package/doc/accessibility-supported.md +0 -37
- package/doc/act-rules-format.md +0 -37
- package/doc/aria-supported.md +0 -13
- package/doc/backwards-compatibility-doc.md +0 -94
- package/doc/check-message-template.md +0 -124
- package/doc/check-options.md +0 -437
- package/doc/code-submission-guidelines.md +0 -171
- package/doc/developer-guide.md +0 -515
- package/doc/examples/chrome-debugging-protocol/README.md +0 -13
- package/doc/examples/chrome-debugging-protocol/axe-cdp.js +0 -81
- package/doc/examples/chrome-debugging-protocol/package.json +0 -11
- package/doc/examples/html-handlebars.md +0 -164
- package/doc/examples/jasmine/README.md +0 -35
- package/doc/examples/jasmine/karma.conf.js +0 -29
- package/doc/examples/jasmine/package-lock.json +0 -1489
- package/doc/examples/jasmine/package.json +0 -21
- package/doc/examples/jasmine/spec/a11y.js +0 -36
- package/doc/examples/jest_react/README.md +0 -41
- package/doc/examples/jest_react/link.js +0 -7
- package/doc/examples/jest_react/link.test.js +0 -24
- package/doc/examples/jest_react/package-lock.json +0 -7525
- package/doc/examples/jest_react/package.json +0 -28
- package/doc/examples/jest_react/test-helpers.js +0 -21
- package/doc/examples/jsdom/package.json +0 -15
- package/doc/examples/mocha/README.md +0 -35
- package/doc/examples/mocha/karma.conf.js +0 -29
- package/doc/examples/mocha/package-lock.json +0 -1671
- package/doc/examples/mocha/package.json +0 -22
- package/doc/examples/phantomjs/README.md +0 -17
- package/doc/examples/phantomjs/axe-phantom.js +0 -53
- package/doc/examples/phantomjs/package-lock.json +0 -862
- package/doc/examples/phantomjs/package.json +0 -19
- package/doc/examples/puppeteer/README.md +0 -12
- package/doc/examples/puppeteer/axe-puppeteer.js +0 -60
- package/doc/examples/puppeteer/package.json +0 -13
- package/doc/examples/qunit/README.md +0 -37
- package/doc/examples/qunit/package-lock.json +0 -2951
- package/doc/examples/qunit/package.json +0 -21
- package/doc/examples/test-examples.js +0 -40
- package/doc/frame-messenger.md +0 -107
- package/doc/plugins.md +0 -123
- package/doc/projects.md +0 -56
- package/doc/rule-descriptions.md +0 -135
- package/doc/rule-development.md +0 -123
- package/doc/rule-proposal.md +0 -106
- package/doc/standards-object.md +0 -147
- package/lib/checks/aria/abstractrole-evaluate.js +0 -40
- package/lib/checks/aria/abstractrole.json +0 -14
- package/lib/checks/aria/aria-allowed-attr-evaluate.js +0 -58
- package/lib/checks/aria/aria-allowed-attr.json +0 -14
- package/lib/checks/aria/aria-allowed-role-evaluate.js +0 -42
- package/lib/checks/aria/aria-allowed-role.json +0 -22
- package/lib/checks/aria/aria-errormessage-evaluate.js +0 -68
- package/lib/checks/aria/aria-errormessage.json +0 -18
- package/lib/checks/aria/aria-hidden-body-evaluate.js +0 -11
- package/lib/checks/aria/aria-hidden-body.json +0 -11
- package/lib/checks/aria/aria-prohibited-attr-evaluate.js +0 -68
- package/lib/checks/aria/aria-prohibited-attr.json +0 -15
- package/lib/checks/aria/aria-required-attr-evaluate.js +0 -67
- package/lib/checks/aria/aria-required-attr.json +0 -14
- package/lib/checks/aria/aria-required-children-evaluate.js +0 -137
- package/lib/checks/aria/aria-required-children.json +0 -32
- package/lib/checks/aria/aria-required-parent-evaluate.js +0 -120
- package/lib/checks/aria/aria-required-parent.json +0 -17
- package/lib/checks/aria/aria-roledescription-evaluate.js +0 -25
- package/lib/checks/aria/aria-roledescription.json +0 -23
- package/lib/checks/aria/aria-unsupported-attr-evaluate.js +0 -53
- package/lib/checks/aria/aria-unsupported-attr.json +0 -11
- package/lib/checks/aria/aria-valid-attr-evaluate.js +0 -51
- package/lib/checks/aria/aria-valid-attr-value-evaluate.js +0 -122
- package/lib/checks/aria/aria-valid-attr-value.json +0 -19
- package/lib/checks/aria/aria-valid-attr.json +0 -15
- package/lib/checks/aria/fallbackrole-evaluate.js +0 -13
- package/lib/checks/aria/fallbackrole.json +0 -11
- package/lib/checks/aria/has-global-aria-attribute-evaluate.js +0 -11
- package/lib/checks/aria/has-global-aria-attribute.json +0 -14
- package/lib/checks/aria/has-widget-role-evaluate.js +0 -20
- package/lib/checks/aria/has-widget-role.json +0 -12
- package/lib/checks/aria/invalidrole-evaluate.js +0 -45
- package/lib/checks/aria/invalidrole.json +0 -14
- package/lib/checks/aria/is-element-focusable-evaluate.js +0 -7
- package/lib/checks/aria/is-element-focusable.json +0 -11
- package/lib/checks/aria/no-implicit-explicit-label-evaluate.js +0 -54
- package/lib/checks/aria/no-implicit-explicit-label.json +0 -11
- package/lib/checks/aria/unsupportedrole-evaluate.js +0 -15
- package/lib/checks/aria/unsupportedrole.json +0 -11
- package/lib/checks/aria/valid-scrollable-semantics-evaluate.js +0 -70
- package/lib/checks/aria/valid-scrollable-semantics.json +0 -14
- package/lib/checks/color/color-contrast-evaluate.js +0 -178
- package/lib/checks/color/color-contrast.json +0 -42
- package/lib/checks/color/link-in-text-block-evaluate.js +0 -94
- package/lib/checks/color/link-in-text-block.json +0 -19
- package/lib/checks/forms/autocomplete-appropriate-evaluate.js +0 -84
- package/lib/checks/forms/autocomplete-appropriate.json +0 -11
- package/lib/checks/forms/autocomplete-valid-evaluate.js +0 -8
- package/lib/checks/forms/autocomplete-valid.json +0 -11
- package/lib/checks/generic/README.md +0 -13
- package/lib/checks/generic/attr-non-space-content-evaluate.js +0 -28
- package/lib/checks/generic/has-descendant-after.js +0 -15
- package/lib/checks/generic/has-descendant-evaluate.js +0 -20
- package/lib/checks/generic/has-text-content-evaluate.js +0 -11
- package/lib/checks/generic/matches-definition-evaluate.js +0 -7
- package/lib/checks/generic/page-no-duplicate-after.js +0 -6
- package/lib/checks/generic/page-no-duplicate-evaluate.js +0 -42
- package/lib/checks/index.js +0 -11
- package/lib/checks/keyboard/accesskeys-after.js +0 -23
- package/lib/checks/keyboard/accesskeys-evaluate.js +0 -11
- package/lib/checks/keyboard/accesskeys.json +0 -12
- package/lib/checks/keyboard/focusable-content-evaluate.js +0 -20
- package/lib/checks/keyboard/focusable-content.json +0 -11
- package/lib/checks/keyboard/focusable-disabled-evaluate.js +0 -36
- package/lib/checks/keyboard/focusable-disabled.json +0 -11
- package/lib/checks/keyboard/focusable-element-evaluate.js +0 -47
- package/lib/checks/keyboard/focusable-element.json +0 -11
- package/lib/checks/keyboard/focusable-modal-open-evaluate.js +0 -20
- package/lib/checks/keyboard/focusable-modal-open.json +0 -11
- package/lib/checks/keyboard/focusable-no-name-evaluate.js +0 -18
- package/lib/checks/keyboard/focusable-no-name.json +0 -12
- package/lib/checks/keyboard/focusable-not-tabbable-evaluate.js +0 -36
- package/lib/checks/keyboard/focusable-not-tabbable.json +0 -11
- package/lib/checks/keyboard/frame-focusable-content.json +0 -12
- package/lib/checks/keyboard/landmark-is-top-level-evaluate.js +0 -31
- package/lib/checks/keyboard/landmark-is-top-level.json +0 -11
- package/lib/checks/keyboard/no-focusable-content-evaluate.js +0 -35
- package/lib/checks/keyboard/no-focusable-content.json +0 -12
- package/lib/checks/keyboard/page-has-heading-one.json +0 -15
- package/lib/checks/keyboard/page-has-main.json +0 -15
- package/lib/checks/keyboard/page-no-duplicate-banner.json +0 -16
- package/lib/checks/keyboard/page-no-duplicate-contentinfo.json +0 -16
- package/lib/checks/keyboard/page-no-duplicate-main.json +0 -15
- package/lib/checks/keyboard/tabindex-evaluate.js +0 -10
- package/lib/checks/keyboard/tabindex.json +0 -11
- package/lib/checks/label/alt-space-value-evaluate.js +0 -7
- package/lib/checks/label/alt-space-value.json +0 -11
- package/lib/checks/label/duplicate-img-label-evaluate.js +0 -23
- package/lib/checks/label/duplicate-img-label.json +0 -14
- package/lib/checks/label/explicit-evaluate.js +0 -34
- package/lib/checks/label/explicit.json +0 -12
- package/lib/checks/label/help-same-as-label-evaluate.js +0 -28
- package/lib/checks/label/help-same-as-label.json +0 -12
- package/lib/checks/label/hidden-explicit-label-evaluate.js +0 -30
- package/lib/checks/label/hidden-explicit-label.json +0 -12
- package/lib/checks/label/implicit-evaluate.js +0 -16
- package/lib/checks/label/implicit.json +0 -12
- package/lib/checks/label/label-content-name-mismatch-evaluate.js +0 -71
- package/lib/checks/label/label-content-name-mismatch.json +0 -15
- package/lib/checks/label/multiple-label-evaluate.js +0 -44
- package/lib/checks/label/multiple-label.json +0 -11
- package/lib/checks/label/title-only-evaluate.js +0 -11
- package/lib/checks/label/title-only.json +0 -11
- package/lib/checks/landmarks/landmark-is-unique-after.js +0 -27
- package/lib/checks/landmarks/landmark-is-unique-evaluate.js +0 -14
- package/lib/checks/landmarks/landmark-is-unique.json +0 -12
- package/lib/checks/language/has-lang-evaluate.js +0 -39
- package/lib/checks/language/has-lang.json +0 -17
- package/lib/checks/language/valid-lang-evaluate.js +0 -36
- package/lib/checks/language/valid-lang.json +0 -14
- package/lib/checks/language/xml-lang-mismatch-evaluate.js +0 -10
- package/lib/checks/language/xml-lang-mismatch.json +0 -11
- package/lib/checks/lists/dlitem-evaluate.js +0 -30
- package/lib/checks/lists/dlitem.json +0 -11
- package/lib/checks/lists/listitem-evaluate.js +0 -28
- package/lib/checks/lists/listitem.json +0 -14
- package/lib/checks/lists/only-dlitems-evaluate.js +0 -51
- package/lib/checks/lists/only-dlitems.json +0 -11
- package/lib/checks/lists/only-listitems-evaluate.js +0 -63
- package/lib/checks/lists/only-listitems.json +0 -14
- package/lib/checks/lists/structured-dlitems-evaluate.js +0 -26
- package/lib/checks/lists/structured-dlitems.json +0 -11
- package/lib/checks/media/caption-evaluate.js +0 -13
- package/lib/checks/media/caption.json +0 -11
- package/lib/checks/media/frame-tested-after.js +0 -31
- package/lib/checks/media/frame-tested-evaluate.js +0 -6
- package/lib/checks/media/frame-tested.json +0 -16
- package/lib/checks/media/no-autoplay-audio-evaluate.js +0 -97
- package/lib/checks/media/no-autoplay-audio.json +0 -15
- package/lib/checks/mobile/css-orientation-lock-evaluate.js +0 -254
- package/lib/checks/mobile/css-orientation-lock.json +0 -15
- package/lib/checks/mobile/meta-viewport-large.json +0 -15
- package/lib/checks/mobile/meta-viewport-scale-evaluate.js +0 -71
- package/lib/checks/mobile/meta-viewport.json +0 -14
- package/lib/checks/navigation/header-present.json +0 -15
- package/lib/checks/navigation/heading-order-after.js +0 -132
- package/lib/checks/navigation/heading-order-evaluate.js +0 -58
- package/lib/checks/navigation/heading-order.json +0 -13
- package/lib/checks/navigation/identical-links-same-purpose-after.js +0 -106
- package/lib/checks/navigation/identical-links-same-purpose-evaluate.js +0 -35
- package/lib/checks/navigation/identical-links-same-purpose.json +0 -12
- package/lib/checks/navigation/internal-link-present-evaluate.js +0 -10
- package/lib/checks/navigation/internal-link-present.json +0 -11
- package/lib/checks/navigation/landmark.json +0 -14
- package/lib/checks/navigation/meta-refresh-evaluate.js +0 -8
- package/lib/checks/navigation/meta-refresh.json +0 -11
- package/lib/checks/navigation/p-as-heading-evaluate.js +0 -98
- package/lib/checks/navigation/p-as-heading.json +0 -30
- package/lib/checks/navigation/region-evaluate.js +0 -106
- package/lib/checks/navigation/region.json +0 -14
- package/lib/checks/navigation/skip-link-evaluate.js +0 -11
- package/lib/checks/navigation/skip-link.json +0 -12
- package/lib/checks/navigation/unique-frame-title-after.js +0 -13
- package/lib/checks/navigation/unique-frame-title-evaluate.js +0 -9
- package/lib/checks/navigation/unique-frame-title.json +0 -12
- package/lib/checks/parsing/duplicate-id-active.json +0 -12
- package/lib/checks/parsing/duplicate-id-after.js +0 -12
- package/lib/checks/parsing/duplicate-id-aria.json +0 -12
- package/lib/checks/parsing/duplicate-id-evaluate.js +0 -24
- package/lib/checks/parsing/duplicate-id.json +0 -12
- package/lib/checks/shared/aria-label-evaluate.js +0 -8
- package/lib/checks/shared/aria-label.json +0 -11
- package/lib/checks/shared/aria-labelledby-evaluate.js +0 -12
- package/lib/checks/shared/aria-labelledby.json +0 -12
- package/lib/checks/shared/avoid-inline-spacing-evaluate.js +0 -16
- package/lib/checks/shared/avoid-inline-spacing.json +0 -17
- package/lib/checks/shared/button-has-visible-text.json +0 -12
- package/lib/checks/shared/doc-has-title-evaluate.js +0 -8
- package/lib/checks/shared/doc-has-title.json +0 -11
- package/lib/checks/shared/exists-evaluate.js +0 -5
- package/lib/checks/shared/exists.json +0 -11
- package/lib/checks/shared/has-alt-evaluate.js +0 -10
- package/lib/checks/shared/has-alt.json +0 -11
- package/lib/checks/shared/has-visible-text.json +0 -12
- package/lib/checks/shared/is-on-screen-evaluate.js +0 -8
- package/lib/checks/shared/is-on-screen.json +0 -11
- package/lib/checks/shared/non-empty-alt.json +0 -17
- package/lib/checks/shared/non-empty-if-present-evaluate.js +0 -19
- package/lib/checks/shared/non-empty-if-present.json +0 -14
- package/lib/checks/shared/non-empty-placeholder.json +0 -17
- package/lib/checks/shared/non-empty-title.json +0 -17
- package/lib/checks/shared/non-empty-value.json +0 -17
- package/lib/checks/shared/presentational-role-evaluate.js +0 -42
- package/lib/checks/shared/presentational-role.json +0 -16
- package/lib/checks/shared/role-none.json +0 -19
- package/lib/checks/shared/role-presentation.json +0 -19
- package/lib/checks/shared/svg-non-empty-title-evaluate.js +0 -33
- package/lib/checks/shared/svg-non-empty-title.json +0 -15
- package/lib/checks/tables/caption-faked-evaluate.js +0 -16
- package/lib/checks/tables/caption-faked.json +0 -11
- package/lib/checks/tables/html5-scope-evaluate.js +0 -11
- package/lib/checks/tables/html5-scope.json +0 -11
- package/lib/checks/tables/same-caption-summary-evaluate.js +0 -12
- package/lib/checks/tables/same-caption-summary.json +0 -11
- package/lib/checks/tables/scope-value-evaluate.js +0 -7
- package/lib/checks/tables/scope-value.json +0 -14
- package/lib/checks/tables/td-has-header-evaluate.js +0 -33
- package/lib/checks/tables/td-has-header.json +0 -11
- package/lib/checks/tables/td-headers-attr-evaluate.js +0 -67
- package/lib/checks/tables/td-headers-attr.json +0 -12
- package/lib/checks/tables/th-has-data-cells-evaluate.js +0 -82
- package/lib/checks/tables/th-has-data-cells.json +0 -12
- package/lib/checks/visibility/hidden-content-evaluate.js +0 -34
- package/lib/checks/visibility/hidden-content.json +0 -12
- package/lib/commons/aria/allowed-attr.js +0 -31
- package/lib/commons/aria/arialabel-text.js +0 -21
- package/lib/commons/aria/arialabelledby-text.js +0 -65
- package/lib/commons/aria/get-accessible-refs.js +0 -73
- package/lib/commons/aria/get-element-unallowed-roles.js +0 -110
- package/lib/commons/aria/get-explicit-role.js +0 -26
- package/lib/commons/aria/get-owned-virtual.js +0 -27
- package/lib/commons/aria/get-role-type.js +0 -21
- package/lib/commons/aria/get-role.js +0 -178
- package/lib/commons/aria/get-roles-by-type.js +0 -16
- package/lib/commons/aria/get-roles-with-name-from-contents.js +0 -15
- package/lib/commons/aria/implicit-nodes.js +0 -23
- package/lib/commons/aria/implicit-role.js +0 -44
- package/lib/commons/aria/index.js +0 -32
- package/lib/commons/aria/is-accessible-ref.js +0 -12
- package/lib/commons/aria/is-aria-role-allowed-on-element.js +0 -32
- package/lib/commons/aria/is-unsupported-role.js +0 -16
- package/lib/commons/aria/is-valid-role.js +0 -22
- package/lib/commons/aria/label-virtual.js +0 -46
- package/lib/commons/aria/label.js +0 -17
- package/lib/commons/aria/lookup-table.js +0 -2435
- package/lib/commons/aria/named-from-contents.js +0 -39
- package/lib/commons/aria/required-attr.js +0 -21
- package/lib/commons/aria/required-context.js +0 -21
- package/lib/commons/aria/required-owned.js +0 -21
- package/lib/commons/aria/validate-attr-value.js +0 -70
- package/lib/commons/aria/validate-attr.js +0 -16
- package/lib/commons/color/center-point-of-rect.js +0 -31
- package/lib/commons/color/color.js +0 -250
- package/lib/commons/color/element-has-image.js +0 -35
- package/lib/commons/color/element-is-distinct.js +0 -87
- package/lib/commons/color/filtered-rect-stack.js +0 -51
- package/lib/commons/color/flatten-colors.js +0 -22
- package/lib/commons/color/get-background-color.js +0 -84
- package/lib/commons/color/get-background-stack.js +0 -130
- package/lib/commons/color/get-contrast.js +0 -27
- package/lib/commons/color/get-foreground-color.js +0 -69
- package/lib/commons/color/get-own-background-color.js +0 -24
- package/lib/commons/color/get-rect-stack.js +0 -32
- package/lib/commons/color/get-text-shadow-colors.js +0 -121
- package/lib/commons/color/has-valid-contrast-ratio.js +0 -30
- package/lib/commons/color/incomplete-data.js +0 -47
- package/lib/commons/color/index.js +0 -20
- package/lib/commons/dom/find-elms-in-context.js +0 -31
- package/lib/commons/dom/find-up-virtual.js +0 -52
- package/lib/commons/dom/find-up.js +0 -20
- package/lib/commons/dom/focus-disabled.js +0 -30
- package/lib/commons/dom/get-composed-parent.js +0 -26
- package/lib/commons/dom/get-element-by-reference.js +0 -34
- package/lib/commons/dom/get-element-coordinates.js +0 -38
- package/lib/commons/dom/get-element-stack.js +0 -28
- package/lib/commons/dom/get-rect-stack.js +0 -514
- package/lib/commons/dom/get-root-node.js +0 -12
- package/lib/commons/dom/get-scroll-offset.js +0 -32
- package/lib/commons/dom/get-tabbable-elements.js +0 -26
- package/lib/commons/dom/get-text-element-stack.js +0 -89
- package/lib/commons/dom/get-viewport-size.js +0 -35
- package/lib/commons/dom/has-content-virtual.js +0 -53
- package/lib/commons/dom/has-content.js +0 -21
- package/lib/commons/dom/idrefs.js +0 -41
- package/lib/commons/dom/index.js +0 -38
- package/lib/commons/dom/inserted-into-focus-order.js +0 -24
- package/lib/commons/dom/is-focusable.js +0 -36
- package/lib/commons/dom/is-hidden-with-css.js +0 -76
- package/lib/commons/dom/is-html5.js +0 -17
- package/lib/commons/dom/is-in-text-block.js +0 -107
- package/lib/commons/dom/is-modal-open.js +0 -104
- package/lib/commons/dom/is-natively-focusable.js +0 -41
- package/lib/commons/dom/is-node.js +0 -14
- package/lib/commons/dom/is-offscreen.js +0 -66
- package/lib/commons/dom/is-opaque.js +0 -16
- package/lib/commons/dom/is-skip-link.js +0 -49
- package/lib/commons/dom/is-visible.js +0 -201
- package/lib/commons/dom/is-visual-content.js +0 -49
- package/lib/commons/dom/reduce-to-elements-below-floating.js +0 -36
- package/lib/commons/dom/shadow-elements-from-point.js +0 -47
- package/lib/commons/dom/url-props-from-attribute.js +0 -152
- package/lib/commons/dom/visually-contains.js +0 -113
- package/lib/commons/dom/visually-overlaps.js +0 -46
- package/lib/commons/forms/index.js +0 -12
- package/lib/commons/forms/is-aria-combobox.js +0 -15
- package/lib/commons/forms/is-aria-listbox.js +0 -15
- package/lib/commons/forms/is-aria-range.js +0 -17
- package/lib/commons/forms/is-aria-textbox.js +0 -15
- package/lib/commons/forms/is-disabled.js +0 -40
- package/lib/commons/forms/is-native-select.js +0 -17
- package/lib/commons/forms/is-native-textbox.js +0 -34
- package/lib/commons/index.js +0 -31
- package/lib/commons/matches/attributes.js +0 -32
- package/lib/commons/matches/condition.js +0 -20
- package/lib/commons/matches/explicit-role.js +0 -24
- package/lib/commons/matches/from-definition.js +0 -73
- package/lib/commons/matches/from-function.js +0 -40
- package/lib/commons/matches/from-primative.js +0 -44
- package/lib/commons/matches/implicit-role.js +0 -24
- package/lib/commons/matches/index.js +0 -29
- package/lib/commons/matches/matches.js +0 -39
- package/lib/commons/matches/node-name.js +0 -29
- package/lib/commons/matches/properties.js +0 -32
- package/lib/commons/matches/semantic-role.js +0 -24
- package/lib/commons/standards/get-aria-roles-by-type.js +0 -14
- package/lib/commons/standards/get-aria-roles-supporting-name-from-content.js +0 -22
- package/lib/commons/standards/get-element-spec.js +0 -54
- package/lib/commons/standards/get-elements-by-content-type.js +0 -30
- package/lib/commons/standards/get-global-aria-attrs.js +0 -22
- package/lib/commons/standards/implicit-html-roles.js +0 -186
- package/lib/commons/standards/index.js +0 -11
- package/lib/commons/table/get-all-cells.js +0 -28
- package/lib/commons/table/get-cell-position.js +0 -32
- package/lib/commons/table/get-headers.js +0 -102
- package/lib/commons/table/get-scope.js +0 -58
- package/lib/commons/table/index.js +0 -19
- package/lib/commons/table/is-column-header.js +0 -15
- package/lib/commons/table/is-data-cell.js +0 -24
- package/lib/commons/table/is-data-table.js +0 -195
- package/lib/commons/table/is-header.js +0 -26
- package/lib/commons/table/is-row-header.js +0 -15
- package/lib/commons/table/to-grid.js +0 -48
- package/lib/commons/table/traverse.js +0 -76
- package/lib/commons/text/accessible-text-virtual.js +0 -152
- package/lib/commons/text/accessible-text.js +0 -19
- package/lib/commons/text/form-control-value.js +0 -216
- package/lib/commons/text/has-unicode.js +0 -38
- package/lib/commons/text/index.js +0 -32
- package/lib/commons/text/is-human-interpretable.js +0 -54
- package/lib/commons/text/is-icon-ligature.js +0 -214
- package/lib/commons/text/is-valid-autocomplete.js +0 -118
- package/lib/commons/text/label-text.js +0 -70
- package/lib/commons/text/label-virtual.js +0 -50
- package/lib/commons/text/label.js +0 -19
- package/lib/commons/text/native-element-type.js +0 -101
- package/lib/commons/text/native-text-alternative.js +0 -46
- package/lib/commons/text/native-text-methods.js +0 -136
- package/lib/commons/text/remove-unicode.js +0 -38
- package/lib/commons/text/sanitize.js +0 -21
- package/lib/commons/text/subtree-text.js +0 -74
- package/lib/commons/text/title-text.js +0 -33
- package/lib/commons/text/unicode.js +0 -85
- package/lib/commons/text/unsupported.js +0 -5
- package/lib/commons/text/visible-text-nodes.js +0 -27
- package/lib/commons/text/visible-virtual.js +0 -46
- package/lib/commons/text/visible.js +0 -18
- package/lib/core/base/audit.js +0 -767
- package/lib/core/base/cache.js +0 -30
- package/lib/core/base/check-result.js +0 -31
- package/lib/core/base/check.js +0 -215
- package/lib/core/base/context.js +0 -280
- package/lib/core/base/metadata-function-map.js +0 -353
- package/lib/core/base/rule-result.js +0 -39
- package/lib/core/base/rule.js +0 -611
- package/lib/core/base/virtual-node/abstract-virtual-node.js +0 -43
- package/lib/core/base/virtual-node/serial-virtual-node.js +0 -117
- package/lib/core/base/virtual-node/virtual-node.js +0 -194
- package/lib/core/constants.js +0 -70
- package/lib/core/core.js +0 -91
- package/lib/core/imports/index.js +0 -39
- package/lib/core/index.js +0 -40
- package/lib/core/log.js +0 -13
- package/lib/core/public/cleanup.js +0 -51
- package/lib/core/public/configure.js +0 -134
- package/lib/core/public/frame-messenger.js +0 -5
- package/lib/core/public/get-rules.js +0 -29
- package/lib/core/public/load.js +0 -65
- package/lib/core/public/plugins.js +0 -39
- package/lib/core/public/reporter.js +0 -25
- package/lib/core/public/reset.js +0 -13
- package/lib/core/public/run-rules.js +0 -83
- package/lib/core/public/run-virtual-rule.js +0 -63
- package/lib/core/public/run.js +0 -186
- package/lib/core/public/setup.js +0 -20
- package/lib/core/public/teardown.js +0 -21
- package/lib/core/reporters/helpers/failure-summary.js +0 -33
- package/lib/core/reporters/helpers/get-environment-data.js +0 -39
- package/lib/core/reporters/helpers/incomplete-fallback-msg.js +0 -12
- package/lib/core/reporters/helpers/index.js +0 -21
- package/lib/core/reporters/helpers/process-aggregate.js +0 -110
- package/lib/core/reporters/na.js +0 -24
- package/lib/core/reporters/no-passes.js +0 -20
- package/lib/core/reporters/raw-env.js +0 -17
- package/lib/core/reporters/raw.js +0 -32
- package/lib/core/reporters/v1.js +0 -33
- package/lib/core/reporters/v2.js +0 -19
- package/lib/core/utils/aggregate-checks.js +0 -90
- package/lib/core/utils/aggregate-node-results.js +0 -65
- package/lib/core/utils/aggregate-result.js +0 -39
- package/lib/core/utils/aggregate.js +0 -21
- package/lib/core/utils/are-styles-set.js +0 -18
- package/lib/core/utils/assert.js +0 -12
- package/lib/core/utils/check-helper.js +0 -36
- package/lib/core/utils/clone.js +0 -28
- package/lib/core/utils/closest.js +0 -30
- package/lib/core/utils/collect-results-from-frames.js +0 -84
- package/lib/core/utils/contains.js +0 -46
- package/lib/core/utils/css-parser.js +0 -9
- package/lib/core/utils/deep-merge.js +0 -31
- package/lib/core/utils/dq-element.js +0 -131
- package/lib/core/utils/element-matches.js +0 -43
- package/lib/core/utils/escape-selector.js +0 -79
- package/lib/core/utils/extend-meta-data.js +0 -20
- package/lib/core/utils/filter-html-attrs.js +0 -75
- package/lib/core/utils/finalize-result.js +0 -28
- package/lib/core/utils/find-by.js +0 -16
- package/lib/core/utils/frame-messenger/assert-window.js +0 -21
- package/lib/core/utils/frame-messenger/channel-store.js +0 -23
- package/lib/core/utils/frame-messenger/create-responder.js +0 -15
- package/lib/core/utils/frame-messenger/message-handler.js +0 -72
- package/lib/core/utils/frame-messenger/message-id.js +0 -22
- package/lib/core/utils/frame-messenger/message-parser.js +0 -109
- package/lib/core/utils/frame-messenger/post-message.js +0 -54
- package/lib/core/utils/frame-messenger/process-error.js +0 -30
- package/lib/core/utils/frame-messenger.js +0 -40
- package/lib/core/utils/get-all-checks.js +0 -13
- package/lib/core/utils/get-ancestry.js +0 -31
- package/lib/core/utils/get-base-lang.js +0 -18
- package/lib/core/utils/get-check-message.js +0 -24
- package/lib/core/utils/get-check-option.js +0 -41
- package/lib/core/utils/get-flattened-tree.js +0 -151
- package/lib/core/utils/get-friendly-uri-end.js +0 -143
- package/lib/core/utils/get-node-attributes.js +0 -22
- package/lib/core/utils/get-node-from-tree.js +0 -14
- package/lib/core/utils/get-root-node.js +0 -17
- package/lib/core/utils/get-rule.js +0 -17
- package/lib/core/utils/get-scroll-state.js +0 -43
- package/lib/core/utils/get-scroll.js +0 -41
- package/lib/core/utils/get-selector.js +0 -395
- package/lib/core/utils/get-shadow-selector.js +0 -31
- package/lib/core/utils/get-standards.js +0 -6
- package/lib/core/utils/get-stylesheet-factory.js +0 -53
- package/lib/core/utils/get-xpath.js +0 -84
- package/lib/core/utils/index.js +0 -90
- package/lib/core/utils/inject-style.js +0 -33
- package/lib/core/utils/is-hidden.js +0 -55
- package/lib/core/utils/is-html-element.js +0 -137
- package/lib/core/utils/is-node-in-context.js +0 -46
- package/lib/core/utils/is-shadow-root.js +0 -40
- package/lib/core/utils/is-xhtml.js +0 -15
- package/lib/core/utils/matches.js +0 -263
- package/lib/core/utils/memoize.js +0 -22
- package/lib/core/utils/merge-results.js +0 -134
- package/lib/core/utils/node-sorter.js +0 -23
- package/lib/core/utils/parse-crossorigin-stylesheet.js +0 -66
- package/lib/core/utils/parse-sameorigin-stylesheet.js +0 -100
- package/lib/core/utils/parse-stylesheet.js +0 -75
- package/lib/core/utils/performance-timer.js +0 -126
- package/lib/core/utils/pollyfills.js +0 -347
- package/lib/core/utils/preload-cssom.js +0 -249
- package/lib/core/utils/preload-media.js +0 -70
- package/lib/core/utils/preload.js +0 -150
- package/lib/core/utils/process-message.js +0 -77
- package/lib/core/utils/publish-metadata.js +0 -109
- package/lib/core/utils/query-selector-all-filter.js +0 -104
- package/lib/core/utils/query-selector-all.js +0 -15
- package/lib/core/utils/queue.js +0 -137
- package/lib/core/utils/respondable.js +0 -108
- package/lib/core/utils/rule-should-run.js +0 -83
- package/lib/core/utils/select.js +0 -87
- package/lib/core/utils/send-command-to-frame.js +0 -65
- package/lib/core/utils/set-scroll-state.js +0 -21
- package/lib/core/utils/to-array.js +0 -10
- package/lib/core/utils/token-list.js +0 -15
- package/lib/core/utils/unique-array.js +0 -13
- package/lib/core/utils/uuid.js +0 -253
- package/lib/core/utils/valid-input-type.js +0 -35
- package/lib/core/utils/valid-langs.js +0 -105
- package/lib/intro.stub +0 -15
- package/lib/misc/any-failure-summary.json +0 -6
- package/lib/misc/incomplete-fallback.json +0 -3
- package/lib/misc/none-failure-summary.json +0 -6
- package/lib/outro.stub +0 -2
- package/lib/rules/accesskeys.json +0 -13
- package/lib/rules/area-alt.json +0 -22
- package/lib/rules/aria-allowed-attr-matches.js +0 -15
- package/lib/rules/aria-allowed-attr.json +0 -12
- package/lib/rules/aria-allowed-role-matches.js +0 -12
- package/lib/rules/aria-allowed-role.json +0 -14
- package/lib/rules/aria-command-name.json +0 -18
- package/lib/rules/aria-dialog-name.json +0 -13
- package/lib/rules/aria-has-attr-matches.js +0 -9
- package/lib/rules/aria-hidden-body.json +0 -14
- package/lib/rules/aria-hidden-focus-matches.js +0 -22
- package/lib/rules/aria-hidden-focus.json +0 -18
- package/lib/rules/aria-input-field-name.json +0 -13
- package/lib/rules/aria-meter-name.json +0 -13
- package/lib/rules/aria-progressbar-name.json +0 -13
- package/lib/rules/aria-required-attr.json +0 -12
- package/lib/rules/aria-required-children-matches.js +0 -8
- package/lib/rules/aria-required-children.json +0 -13
- package/lib/rules/aria-required-parent-matches.js +0 -8
- package/lib/rules/aria-required-parent.json +0 -13
- package/lib/rules/aria-roledescription.json +0 -12
- package/lib/rules/aria-roles.json +0 -13
- package/lib/rules/aria-text.json +0 -12
- package/lib/rules/aria-toggle-field-name.json +0 -18
- package/lib/rules/aria-tooltip-name.json +0 -18
- package/lib/rules/aria-treeitem-name.json +0 -18
- package/lib/rules/aria-valid-attr-value.json +0 -12
- package/lib/rules/aria-valid-attr.json +0 -12
- package/lib/rules/audio-caption.json +0 -20
- package/lib/rules/autocomplete-matches.js +0 -58
- package/lib/rules/autocomplete-valid.json +0 -12
- package/lib/rules/avoid-inline-spacing.json +0 -12
- package/lib/rules/blink.json +0 -19
- package/lib/rules/button-name.json +0 -26
- package/lib/rules/bypass-matches.js +0 -14
- package/lib/rules/bypass.json +0 -21
- package/lib/rules/color-contrast-matches.js +0 -156
- package/lib/rules/color-contrast.json +0 -13
- package/lib/rules/css-orientation-lock.json +0 -13
- package/lib/rules/data-table-large-matches.js +0 -17
- package/lib/rules/data-table-matches.js +0 -7
- package/lib/rules/definition-list.json +0 -13
- package/lib/rules/dlitem.json +0 -13
- package/lib/rules/document-title.json +0 -13
- package/lib/rules/duplicate-id-active-matches.js +0 -15
- package/lib/rules/duplicate-id-active.json +0 -14
- package/lib/rules/duplicate-id-aria-matches.js +0 -7
- package/lib/rules/duplicate-id-aria.json +0 -14
- package/lib/rules/duplicate-id-misc-matches.js +0 -17
- package/lib/rules/duplicate-id.json +0 -14
- package/lib/rules/empty-heading.json +0 -19
- package/lib/rules/empty-table-header.json +0 -13
- package/lib/rules/focus-order-semantics.json +0 -13
- package/lib/rules/form-field-multiple-labels.json +0 -13
- package/lib/rules/frame-focusable-content-matches.js +0 -9
- package/lib/rules/frame-focusable-content.json +0 -13
- package/lib/rules/frame-tested.json +0 -12
- package/lib/rules/frame-title-has-text-matches.js +0 -8
- package/lib/rules/frame-title-unique.json +0 -13
- package/lib/rules/frame-title.json +0 -24
- package/lib/rules/has-implicit-chromium-role-matches.js +0 -7
- package/lib/rules/heading-matches.js +0 -19
- package/lib/rules/heading-order.json +0 -13
- package/lib/rules/hidden-content.json +0 -13
- package/lib/rules/html-has-lang.json +0 -13
- package/lib/rules/html-lang-valid.json +0 -12
- package/lib/rules/html-namespace-matches.js +0 -7
- package/lib/rules/html-xml-lang-mismatch.json +0 -13
- package/lib/rules/identical-links-same-purpose-matches.js +0 -18
- package/lib/rules/identical-links-same-purpose.json +0 -14
- package/lib/rules/image-alt.json +0 -26
- package/lib/rules/img-redundant-alt.json +0 -12
- package/lib/rules/input-button-name.json +0 -26
- package/lib/rules/input-image-alt.json +0 -20
- package/lib/rules/inserted-into-focus-order-matches.js +0 -7
- package/lib/rules/is-initiator-matches.js +0 -5
- package/lib/rules/label-content-name-mismatch-matches.js +0 -52
- package/lib/rules/label-content-name-mismatch.json +0 -12
- package/lib/rules/label-matches.js +0 -15
- package/lib/rules/label-title-only.json +0 -13
- package/lib/rules/label.json +0 -29
- package/lib/rules/landmark-banner-is-top-level.json +0 -13
- package/lib/rules/landmark-complementary-is-top-level.json +0 -12
- package/lib/rules/landmark-contentinfo-is-top-level.json +0 -13
- package/lib/rules/landmark-has-body-context-matches.js +0 -13
- package/lib/rules/landmark-main-is-top-level.json +0 -12
- package/lib/rules/landmark-no-duplicate-banner.json +0 -12
- package/lib/rules/landmark-no-duplicate-contentinfo.json +0 -12
- package/lib/rules/landmark-no-duplicate-main.json +0 -12
- package/lib/rules/landmark-one-main.json +0 -12
- package/lib/rules/landmark-unique-matches.js +0 -50
- package/lib/rules/landmark-unique.json +0 -13
- package/lib/rules/layout-table-matches.js +0 -8
- package/lib/rules/link-in-text-block-matches.js +0 -21
- package/lib/rules/link-in-text-block.json +0 -14
- package/lib/rules/link-name.json +0 -25
- package/lib/rules/list.json +0 -13
- package/lib/rules/listitem.json +0 -13
- package/lib/rules/marquee.json +0 -13
- package/lib/rules/meta-refresh.json +0 -20
- package/lib/rules/meta-viewport-large.json +0 -14
- package/lib/rules/meta-viewport.json +0 -14
- package/lib/rules/nested-interactive-matches.js +0 -13
- package/lib/rules/nested-interactive.json +0 -12
- package/lib/rules/no-autoplay-audio-matches.js +0 -22
- package/lib/rules/no-autoplay-audio.json +0 -15
- package/lib/rules/no-empty-role-matches.js +0 -13
- package/lib/rules/no-explicit-name-required-matches.js +0 -22
- package/lib/rules/no-naming-method-matches.js +0 -24
- package/lib/rules/no-role-matches.js +0 -5
- package/lib/rules/not-html-matches.js +0 -5
- package/lib/rules/object-alt.json +0 -24
- package/lib/rules/p-as-heading-matches.js +0 -21
- package/lib/rules/p-as-heading.json +0 -13
- package/lib/rules/page-has-heading-one.json +0 -12
- package/lib/rules/presentation-role-conflict-matches.js +0 -7
- package/lib/rules/presentation-role-conflict.json +0 -13
- package/lib/rules/region.json +0 -12
- package/lib/rules/role-img-alt.json +0 -20
- package/lib/rules/scope-attr-valid.json +0 -12
- package/lib/rules/scrollable-region-focusable-matches.js +0 -75
- package/lib/rules/scrollable-region-focusable.json +0 -12
- package/lib/rules/select-name.json +0 -27
- package/lib/rules/server-side-image-map.json +0 -18
- package/lib/rules/skip-link-matches.js +0 -7
- package/lib/rules/skip-link.json +0 -13
- package/lib/rules/svg-img-alt.json +0 -25
- package/lib/rules/svg-namespace-matches.js +0 -18
- package/lib/rules/tabindex.json +0 -12
- package/lib/rules/table-duplicate-name.json +0 -12
- package/lib/rules/table-fake-caption.json +0 -20
- package/lib/rules/td-has-header.json +0 -20
- package/lib/rules/td-headers-attr.json +0 -12
- package/lib/rules/th-has-data-cells.json +0 -13
- package/lib/rules/valid-lang.json +0 -13
- package/lib/rules/video-caption.json +0 -19
- package/lib/rules/window-is-top-matches.js +0 -8
- package/lib/rules/xml-lang-mismatch-matches.js +0 -14
- package/lib/standards/aria-attrs.js +0 -209
- package/lib/standards/aria-roles.js +0 -835
- package/lib/standards/css-colors.js +0 -153
- package/lib/standards/dpub-roles.js +0 -219
- package/lib/standards/graphics-roles.js +0 -22
- package/lib/standards/html-elms.js +0 -933
- package/lib/standards/index.js +0 -37
- package/sri-history.json +0 -274
- package/typings/axe-core/axe-core-tests.js +0 -203
- package/typings/axe-core/axe-core-tests.ts +0 -233
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
import incompleteData from './incomplete-data';
|
|
2
|
-
import getBackgroundStack from './get-background-stack';
|
|
3
|
-
import getOwnBackgroundColor from './get-own-background-color';
|
|
4
|
-
import elementHasImage from './element-has-image';
|
|
5
|
-
import Color from './color';
|
|
6
|
-
import flattenColors from './flatten-colors';
|
|
7
|
-
import getTextShadowColors from './get-text-shadow-colors';
|
|
8
|
-
import visuallyContains from '../dom/visually-contains';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Determine if element is partially overlapped, triggering a Can't Tell result
|
|
12
|
-
* @private
|
|
13
|
-
* @param {Element} elm
|
|
14
|
-
* @param {Element} bgElm
|
|
15
|
-
* @param {Object} bgColor
|
|
16
|
-
* @return {Boolean}
|
|
17
|
-
*/
|
|
18
|
-
function elmPartiallyObscured(elm, bgElm, bgColor) {
|
|
19
|
-
var obscured =
|
|
20
|
-
elm !== bgElm && !visuallyContains(elm, bgElm) && bgColor.alpha !== 0;
|
|
21
|
-
if (obscured) {
|
|
22
|
-
incompleteData.set('bgColor', 'elmPartiallyObscured');
|
|
23
|
-
}
|
|
24
|
-
return obscured;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Returns background color for element
|
|
29
|
-
* Uses getBackgroundStack() to get all elements rendered underneath the current element,
|
|
30
|
-
* to help determine the composite background color.
|
|
31
|
-
*
|
|
32
|
-
* @method getBackgroundColor
|
|
33
|
-
* @memberof axe.commons.color
|
|
34
|
-
* @param {Element} elm Element to determine background color
|
|
35
|
-
* @param {Array} [bgElms=[]] elements to inspect
|
|
36
|
-
* @param {Number} shadowOutlineEmMax Thickness of `text-shadow` at which it becomes a background color
|
|
37
|
-
* @returns {Color}
|
|
38
|
-
*/
|
|
39
|
-
function getBackgroundColor(elm, bgElms = [], shadowOutlineEmMax = 0.1) {
|
|
40
|
-
let bgColors = getTextShadowColors(elm, { minRatio: shadowOutlineEmMax });
|
|
41
|
-
const elmStack = getBackgroundStack(elm);
|
|
42
|
-
|
|
43
|
-
// Search the stack until we have an alpha === 1 background
|
|
44
|
-
(elmStack || []).some(bgElm => {
|
|
45
|
-
const bgElmStyle = window.getComputedStyle(bgElm);
|
|
46
|
-
|
|
47
|
-
// Get the background color
|
|
48
|
-
const bgColor = getOwnBackgroundColor(bgElmStyle);
|
|
49
|
-
|
|
50
|
-
if (
|
|
51
|
-
// abort if a node is partially obscured and obscuring element has a background
|
|
52
|
-
elmPartiallyObscured(elm, bgElm, bgColor) ||
|
|
53
|
-
// OR if the background elm is a graphic
|
|
54
|
-
elementHasImage(bgElm, bgElmStyle)
|
|
55
|
-
) {
|
|
56
|
-
bgColors = null;
|
|
57
|
-
bgElms.push(bgElm);
|
|
58
|
-
|
|
59
|
-
return true;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (bgColor.alpha !== 0) {
|
|
63
|
-
// store elements contributing to the br color.
|
|
64
|
-
bgElms.push(bgElm);
|
|
65
|
-
bgColors.push(bgColor);
|
|
66
|
-
|
|
67
|
-
// Exit if the background is opaque
|
|
68
|
-
return bgColor.alpha === 1;
|
|
69
|
-
} else {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
if (bgColors === null || elmStack === null) {
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Mix the colors together, on top of a default white
|
|
79
|
-
bgColors.push(new Color(255, 255, 255, 1));
|
|
80
|
-
var colors = bgColors.reduce(flattenColors);
|
|
81
|
-
return colors;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export default getBackgroundColor;
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import filteredRectStack from './filtered-rect-stack';
|
|
2
|
-
import elementHasImage from './element-has-image';
|
|
3
|
-
import getOwnBackgroundColor from './get-own-background-color';
|
|
4
|
-
import incompleteData from './incomplete-data';
|
|
5
|
-
import shadowElementsFromPoint from '../dom/shadow-elements-from-point';
|
|
6
|
-
import reduceToElementsBelowFloating from '../dom/reduce-to-elements-below-floating';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Determines overlap of node's content with a bgNode. Used for inline elements
|
|
10
|
-
* @private
|
|
11
|
-
* @param {Element} targetElement
|
|
12
|
-
* @param {Element} bgNode
|
|
13
|
-
* @return {Boolean}
|
|
14
|
-
*/
|
|
15
|
-
function contentOverlapping(targetElement, bgNode) {
|
|
16
|
-
// get content box of target element
|
|
17
|
-
// check to see if the current bgNode is overlapping
|
|
18
|
-
var targetRect = targetElement.getClientRects()[0];
|
|
19
|
-
var obscuringElements = shadowElementsFromPoint(
|
|
20
|
-
targetRect.left,
|
|
21
|
-
targetRect.top
|
|
22
|
-
);
|
|
23
|
-
if (obscuringElements) {
|
|
24
|
-
for (var i = 0; i < obscuringElements.length; i++) {
|
|
25
|
-
if (
|
|
26
|
-
obscuringElements[i] !== targetElement &&
|
|
27
|
-
obscuringElements[i] === bgNode
|
|
28
|
-
) {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Calculate alpha transparency of a background element obscuring the current node
|
|
38
|
-
* @private
|
|
39
|
-
* @param {Number} elmIndex
|
|
40
|
-
* @param {Array} elmStack
|
|
41
|
-
* @param {Element} originalElm
|
|
42
|
-
* @return {Number|undefined}
|
|
43
|
-
*/
|
|
44
|
-
function calculateObscuringElement(elmIndex, elmStack, originalElm) {
|
|
45
|
-
if (elmIndex > 0) {
|
|
46
|
-
// there are elements above our element, check if they contribute to the background
|
|
47
|
-
for (var i = elmIndex - 1; i >= 0; i--) {
|
|
48
|
-
const bgElm = elmStack[i];
|
|
49
|
-
if (contentOverlapping(originalElm, bgElm)) {
|
|
50
|
-
return true;
|
|
51
|
-
} else {
|
|
52
|
-
// remove elements not contributing to the background
|
|
53
|
-
elmStack.splice(i, 1);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Look at document and body elements for relevant background information
|
|
63
|
-
* @method sortPageBackground
|
|
64
|
-
* @private
|
|
65
|
-
* @param {Array} elmStack
|
|
66
|
-
* @returns {Array}
|
|
67
|
-
*/
|
|
68
|
-
function sortPageBackground(elmStack) {
|
|
69
|
-
const bodyIndex = elmStack.indexOf(document.body);
|
|
70
|
-
const bgNodes = elmStack;
|
|
71
|
-
|
|
72
|
-
// Body can sometimes appear out of order in the stack:
|
|
73
|
-
// 1) Body is not the first element due to negative z-index elements
|
|
74
|
-
// 2) Elements are positioned outside of body's rect coordinates
|
|
75
|
-
// (see https://github.com/dequelabs/axe-core/issues/1456)
|
|
76
|
-
// In those instances we want to reinsert body back into the element stack
|
|
77
|
-
// when not using the root document element as the html canvas for bgcolor
|
|
78
|
-
// prettier-ignore
|
|
79
|
-
const sortBodyElement =
|
|
80
|
-
bodyIndex > 1 || // negative z-index elements
|
|
81
|
-
bodyIndex === -1; // element does not intersect with body
|
|
82
|
-
|
|
83
|
-
if (
|
|
84
|
-
sortBodyElement &&
|
|
85
|
-
!elementHasImage(document.documentElement) &&
|
|
86
|
-
getOwnBackgroundColor(window.getComputedStyle(document.documentElement))
|
|
87
|
-
.alpha === 0
|
|
88
|
-
) {
|
|
89
|
-
// Only remove document.body if it was originally contained within the element stack
|
|
90
|
-
if (bodyIndex > 1) {
|
|
91
|
-
bgNodes.splice(bodyIndex, 1);
|
|
92
|
-
}
|
|
93
|
-
// Remove document element since body will be used for bgcolor
|
|
94
|
-
bgNodes.splice(elmStack.indexOf(document.documentElement), 1);
|
|
95
|
-
|
|
96
|
-
// Put the body background as the lowest element
|
|
97
|
-
bgNodes.push(document.body);
|
|
98
|
-
}
|
|
99
|
-
return bgNodes;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Get all elements rendered underneath the current element,
|
|
104
|
-
* In the order they are displayed (front to back)
|
|
105
|
-
*
|
|
106
|
-
* @method getBackgroundStack
|
|
107
|
-
* @memberof axe.commons.color
|
|
108
|
-
* @param {Element} elm
|
|
109
|
-
* @return {Array}
|
|
110
|
-
*/
|
|
111
|
-
function getBackgroundStack(elm) {
|
|
112
|
-
let elmStack = filteredRectStack(elm);
|
|
113
|
-
|
|
114
|
-
if (elmStack === null) {
|
|
115
|
-
return null;
|
|
116
|
-
}
|
|
117
|
-
elmStack = reduceToElementsBelowFloating(elmStack, elm);
|
|
118
|
-
elmStack = sortPageBackground(elmStack);
|
|
119
|
-
|
|
120
|
-
// Return all elements BELOW the current element, null if the element is undefined
|
|
121
|
-
const elmIndex = elmStack.indexOf(elm);
|
|
122
|
-
if (calculateObscuringElement(elmIndex, elmStack, elm)) {
|
|
123
|
-
// if the total of the elements above our element results in total obscuring, return null
|
|
124
|
-
incompleteData.set('bgColor', 'bgOverlap');
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
return elmIndex !== -1 ? elmStack : null;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
export default getBackgroundStack;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import flattenColors from './flatten-colors';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Get the contrast of two colors
|
|
5
|
-
* @method getContrast
|
|
6
|
-
* @memberof axe.commons.color.Color
|
|
7
|
-
* @instance
|
|
8
|
-
* @param {Color} bgcolor Background color
|
|
9
|
-
* @param {Color} fgcolor Foreground color
|
|
10
|
-
* @return {number} The contrast ratio
|
|
11
|
-
*/
|
|
12
|
-
function getContrast(bgColor, fgColor) {
|
|
13
|
-
if (!fgColor || !bgColor) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
if (fgColor.alpha < 1) {
|
|
18
|
-
fgColor = flattenColors(fgColor, bgColor);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
var bL = bgColor.getRelativeLuminance();
|
|
22
|
-
var fL = fgColor.getRelativeLuminance();
|
|
23
|
-
|
|
24
|
-
return (Math.max(fL, bL) + 0.05) / (Math.min(fL, bL) + 0.05);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default getContrast;
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import Color from './color';
|
|
2
|
-
import getBackgroundColor from './get-background-color';
|
|
3
|
-
import incompleteData from './incomplete-data';
|
|
4
|
-
import flattenColors from './flatten-colors';
|
|
5
|
-
import { getNodeFromTree } from '../../core/utils';
|
|
6
|
-
|
|
7
|
-
function getOpacity(node) {
|
|
8
|
-
if (!node) {
|
|
9
|
-
return 1;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const vNode = getNodeFromTree(node);
|
|
13
|
-
|
|
14
|
-
if (vNode && vNode._opacity !== undefined && vNode._opacity !== null) {
|
|
15
|
-
return vNode._opacity;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const nodeStyle = window.getComputedStyle(node);
|
|
19
|
-
const opacity = nodeStyle.getPropertyValue('opacity');
|
|
20
|
-
const finalOpacity = opacity * getOpacity(node.parentElement);
|
|
21
|
-
|
|
22
|
-
// cache the results of the getOpacity check on the parent tree
|
|
23
|
-
// so we don't have to look at the parent tree again for all its
|
|
24
|
-
// descendants
|
|
25
|
-
if (vNode) {
|
|
26
|
-
vNode._opacity = finalOpacity;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return finalOpacity;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Returns the flattened foreground color of an element, or null if it can't be determined because
|
|
34
|
-
* of transparency
|
|
35
|
-
* @method getForegroundColor
|
|
36
|
-
* @memberof axe.commons.color
|
|
37
|
-
* @instance
|
|
38
|
-
* @param {Element} node
|
|
39
|
-
* @param {Boolean} noScroll (default false)
|
|
40
|
-
* @param {Color} bgColor
|
|
41
|
-
* @return {Color|null}
|
|
42
|
-
*
|
|
43
|
-
* @deprecated noScroll parameter
|
|
44
|
-
*/
|
|
45
|
-
function getForegroundColor(node, _, bgColor) {
|
|
46
|
-
const nodeStyle = window.getComputedStyle(node);
|
|
47
|
-
|
|
48
|
-
const fgColor = new Color();
|
|
49
|
-
fgColor.parseString(nodeStyle.getPropertyValue('color'));
|
|
50
|
-
const opacity = getOpacity(node);
|
|
51
|
-
fgColor.alpha = fgColor.alpha * opacity;
|
|
52
|
-
if (fgColor.alpha === 1) {
|
|
53
|
-
return fgColor;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (!bgColor) {
|
|
57
|
-
bgColor = getBackgroundColor(node, []);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (bgColor === null) {
|
|
61
|
-
const reason = incompleteData.get('bgColor');
|
|
62
|
-
incompleteData.set('fgColor', reason);
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return flattenColors(fgColor, bgColor);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export default getForegroundColor;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import Color from './color';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Returns the non-alpha-blended background color of an element
|
|
5
|
-
*
|
|
6
|
-
* @method getOwnBackgroundColor
|
|
7
|
-
* @memberof axe.commons.color
|
|
8
|
-
*
|
|
9
|
-
* @param {Object} elmStyle style of the element
|
|
10
|
-
* @return {Color}
|
|
11
|
-
*/
|
|
12
|
-
function getOwnBackgroundColor(elmStyle) {
|
|
13
|
-
const bgColor = new Color();
|
|
14
|
-
bgColor.parseString(elmStyle.getPropertyValue('background-color'));
|
|
15
|
-
|
|
16
|
-
if (bgColor.alpha !== 0) {
|
|
17
|
-
const opacity = elmStyle.getPropertyValue('opacity');
|
|
18
|
-
bgColor.alpha = bgColor.alpha * opacity;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return bgColor;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export default getOwnBackgroundColor;
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import getElementStack from '../dom/get-element-stack';
|
|
2
|
-
import getTextElementStack from '../dom/get-text-element-stack';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Get relevant stacks of block and inline elements, excluding line breaks
|
|
6
|
-
* @method getRectStack
|
|
7
|
-
* @memberof axe.commons.color
|
|
8
|
-
* @param {Element} elm
|
|
9
|
-
* @return {Array}
|
|
10
|
-
*/
|
|
11
|
-
function getRectStack(elm) {
|
|
12
|
-
const boundingStack = getElementStack(elm);
|
|
13
|
-
|
|
14
|
-
// Handle inline elements spanning multiple lines to be evaluated
|
|
15
|
-
const filteredArr = getTextElementStack(elm);
|
|
16
|
-
|
|
17
|
-
// If the element does not have multiple rects, like for display:block, return a single stack
|
|
18
|
-
if (!filteredArr || filteredArr.length <= 1) {
|
|
19
|
-
return [boundingStack];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (filteredArr.some(stack => stack === undefined)) {
|
|
23
|
-
// Can be happen when one or more of the rects sits outside the viewport
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// add bounding client rect stack for comparison later
|
|
28
|
-
filteredArr.splice(0, 0, boundingStack);
|
|
29
|
-
return filteredArr;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export default getRectStack;
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import Color from './color';
|
|
2
|
-
import assert from '../../core/utils/assert';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Get text-shadow colors that can impact the color contrast of the text
|
|
6
|
-
* @param {Element} node DOM Element
|
|
7
|
-
* @param {Object} options (optional)
|
|
8
|
-
* @property {Bool} minRatio Ignore shadows smaller than this, ratio shadow size divided by font size
|
|
9
|
-
* @property {Bool} maxRatio Ignore shadows equal or larter than this, ratio shadow size divided by font size
|
|
10
|
-
*/
|
|
11
|
-
function getTextShadowColors(node, { minRatio, maxRatio } = {}) {
|
|
12
|
-
const style = window.getComputedStyle(node);
|
|
13
|
-
const textShadow = style.getPropertyValue('text-shadow');
|
|
14
|
-
if (textShadow === 'none') {
|
|
15
|
-
return [];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const fontSizeStr = style.getPropertyValue('font-size');
|
|
19
|
-
const fontSize = parseInt(fontSizeStr);
|
|
20
|
-
assert(
|
|
21
|
-
isNaN(fontSize) === false,
|
|
22
|
-
`Unable to determine font-size value ${fontSizeStr}`
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
const shadowColors = [];
|
|
26
|
-
const shadows = parseTextShadows(textShadow);
|
|
27
|
-
shadows.forEach(({ colorStr, pixels }) => {
|
|
28
|
-
// Defautls only necessary for IE
|
|
29
|
-
colorStr = colorStr || style.getPropertyValue('color');
|
|
30
|
-
const [offsetY, offsetX, blurRadius = 0] = pixels;
|
|
31
|
-
if (
|
|
32
|
-
(!minRatio || blurRadius >= fontSize * minRatio) &&
|
|
33
|
-
(!maxRatio || blurRadius < fontSize * maxRatio)
|
|
34
|
-
) {
|
|
35
|
-
const color = textShadowColor({
|
|
36
|
-
colorStr,
|
|
37
|
-
offsetY,
|
|
38
|
-
offsetX,
|
|
39
|
-
blurRadius,
|
|
40
|
-
fontSize
|
|
41
|
-
});
|
|
42
|
-
shadowColors.push(color);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
return shadowColors;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Parse text-shadow property value. Required for IE, which can return the color
|
|
50
|
-
* either at the start or the end, and either in rgb(a) or as a named color
|
|
51
|
-
*/
|
|
52
|
-
function parseTextShadows(textShadow) {
|
|
53
|
-
let current = { pixels: [] };
|
|
54
|
-
let str = textShadow.trim();
|
|
55
|
-
const shadows = [current];
|
|
56
|
-
if (!str) {
|
|
57
|
-
return [];
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
while (str) {
|
|
61
|
-
const colorMatch =
|
|
62
|
-
str.match(/^rgba?\([0-9,.\s]+\)/i) ||
|
|
63
|
-
str.match(/^[a-z]+/i) ||
|
|
64
|
-
str.match(/^#[0-9a-f]+/i);
|
|
65
|
-
const pixelMatch = str.match(/^([0-9.-]+)px/i) || str.match(/^(0)/);
|
|
66
|
-
|
|
67
|
-
if (colorMatch) {
|
|
68
|
-
assert(
|
|
69
|
-
!current.colorStr,
|
|
70
|
-
`Multiple colors identified in text-shadow: ${textShadow}`
|
|
71
|
-
);
|
|
72
|
-
str = str.replace(colorMatch[0], '').trim();
|
|
73
|
-
current.colorStr = colorMatch[0];
|
|
74
|
-
} else if (pixelMatch) {
|
|
75
|
-
assert(
|
|
76
|
-
current.pixels.length < 3,
|
|
77
|
-
`Too many pixel units in text-shadow: ${textShadow}`
|
|
78
|
-
);
|
|
79
|
-
str = str.replace(pixelMatch[0], '').trim();
|
|
80
|
-
const pixelUnit = parseFloat(
|
|
81
|
-
(pixelMatch[1][0] === '.' ? '0' : '') + pixelMatch[1]
|
|
82
|
-
);
|
|
83
|
-
current.pixels.push(pixelUnit);
|
|
84
|
-
} else if (str[0] === ',') {
|
|
85
|
-
// multiple text-shadows in a single string (e.g. `text-shadow: 1px 1px 1px #000, 3px 3px 5px blue;`
|
|
86
|
-
assert(
|
|
87
|
-
current.pixels.length >= 2,
|
|
88
|
-
`Missing pixel value in text-shadow: ${textShadow}`
|
|
89
|
-
);
|
|
90
|
-
current = { pixels: [] };
|
|
91
|
-
shadows.push(current);
|
|
92
|
-
str = str.substr(1).trim();
|
|
93
|
-
} else {
|
|
94
|
-
throw new Error(`Unable to process text-shadows: ${textShadow}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
return shadows;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
function textShadowColor({ colorStr, offsetX, offsetY, blurRadius, fontSize }) {
|
|
102
|
-
if (offsetX > blurRadius || offsetY > blurRadius) {
|
|
103
|
-
// Shadow is too far removed from the text to impact contrast
|
|
104
|
-
return new Color(0, 0, 0, 0);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
const shadowColor = new Color();
|
|
108
|
-
shadowColor.parseString(colorStr);
|
|
109
|
-
shadowColor.alpha *= blurRadiusToAlpha(blurRadius, fontSize);
|
|
110
|
-
|
|
111
|
-
return shadowColor;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function blurRadiusToAlpha(blurRadius, fontSize) {
|
|
115
|
-
// This formula is an estimate based on various tests.
|
|
116
|
-
// Different people test this differently, so opinions may vary.
|
|
117
|
-
const relativeBlur = blurRadius / fontSize;
|
|
118
|
-
return 0.185 / (relativeBlur + 0.4);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
export default getTextShadowColors;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import getContrast from './get-contrast';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Check whether certain text properties meet WCAG contrast rules
|
|
5
|
-
* @method hasValidContrastRatio
|
|
6
|
-
* @memberof axe.commons.color.Color
|
|
7
|
-
* @instance
|
|
8
|
-
* @param {Color} bgcolor Background color
|
|
9
|
-
* @param {Color} fgcolor Foreground color
|
|
10
|
-
* @param {number} fontSize Font size of text, in pixels
|
|
11
|
-
* @param {boolean} isBold Whether the text is bold
|
|
12
|
-
* @return {{isValid: boolean, contrastRatio: number, expectedContrastRatio: number}}
|
|
13
|
-
*
|
|
14
|
-
* @deprecated
|
|
15
|
-
*/
|
|
16
|
-
function hasValidContrastRatio(bg, fg, fontSize, isBold) {
|
|
17
|
-
var contrast = getContrast(bg, fg);
|
|
18
|
-
var isSmallFont =
|
|
19
|
-
(isBold && Math.ceil(fontSize * 72) / 96 < 14) ||
|
|
20
|
-
(!isBold && Math.ceil(fontSize * 72) / 96 < 18);
|
|
21
|
-
var expectedContrastRatio = isSmallFont ? 4.5 : 3;
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
isValid: contrast > expectedContrastRatio,
|
|
25
|
-
contrastRatio: contrast,
|
|
26
|
-
expectedContrastRatio: expectedContrastRatio
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export default hasValidContrastRatio;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* API for handling incomplete color data
|
|
3
|
-
* @namespace axe.commons.color.incompleteData
|
|
4
|
-
* @inner
|
|
5
|
-
*/
|
|
6
|
-
let data = {};
|
|
7
|
-
const incompleteData = {
|
|
8
|
-
/**
|
|
9
|
-
* Store incomplete data by key with a string value
|
|
10
|
-
* @method set
|
|
11
|
-
* @memberof axe.commons.color.incompleteData
|
|
12
|
-
* @instance
|
|
13
|
-
* @param {String} key Identifier for missing data point (fgColor, bgColor, etc.)
|
|
14
|
-
* @param {String} reason Missing data reason to match message template
|
|
15
|
-
*/
|
|
16
|
-
set: function(key, reason) {
|
|
17
|
-
if (typeof key !== 'string') {
|
|
18
|
-
throw new Error('Incomplete data: key must be a string');
|
|
19
|
-
}
|
|
20
|
-
if (reason) {
|
|
21
|
-
data[key] = reason;
|
|
22
|
-
}
|
|
23
|
-
return data[key];
|
|
24
|
-
},
|
|
25
|
-
/**
|
|
26
|
-
* Get incomplete data by key
|
|
27
|
-
* @method get
|
|
28
|
-
* @memberof axe.commons.color.incompleteData
|
|
29
|
-
* @instance
|
|
30
|
-
* @param {String} key Identifier for missing data point (fgColor, bgColor, etc.)
|
|
31
|
-
* @return {String} String for reason we couldn't tell
|
|
32
|
-
*/
|
|
33
|
-
get: function(key) {
|
|
34
|
-
return data[key];
|
|
35
|
-
},
|
|
36
|
-
/**
|
|
37
|
-
* Clear incomplete data on demand
|
|
38
|
-
* @method clear
|
|
39
|
-
* @memberof axe.commons.color.incompleteData
|
|
40
|
-
* @instance
|
|
41
|
-
*/
|
|
42
|
-
clear: function() {
|
|
43
|
-
data = {};
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
export default incompleteData;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Namespace for color-related utilities.
|
|
3
|
-
* @namespace commons.color
|
|
4
|
-
* @memberof axe
|
|
5
|
-
*/
|
|
6
|
-
export { default as centerPointOfRect } from './center-point-of-rect';
|
|
7
|
-
export { default as Color } from './color';
|
|
8
|
-
export { default as elementHasImage } from './element-has-image';
|
|
9
|
-
export { default as elementIsDistinct } from './element-is-distinct';
|
|
10
|
-
export { default as filteredRectStack } from './filtered-rect-stack';
|
|
11
|
-
export { default as flattenColors } from './flatten-colors';
|
|
12
|
-
export { default as getBackgroundColor } from './get-background-color';
|
|
13
|
-
export { default as getBackgroundStack } from './get-background-stack';
|
|
14
|
-
export { default as getContrast } from './get-contrast';
|
|
15
|
-
export { default as getForegroundColor } from './get-foreground-color';
|
|
16
|
-
export { default as getOwnBackgroundColor } from './get-own-background-color';
|
|
17
|
-
export { default as getRectStack } from './get-rect-stack';
|
|
18
|
-
export { default as hasValidContrastRatio } from './has-valid-contrast-ratio';
|
|
19
|
-
export { default as incompleteData } from './incomplete-data';
|
|
20
|
-
export { default as getTextShadowColors } from './get-text-shadow-colors';
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import getRootNode from './get-root-node';
|
|
2
|
-
import { escapeSelector } from '../../core/utils';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Find elements referenced from a given context
|
|
6
|
-
* @method findElmsInContext
|
|
7
|
-
* @memberof axe.commons.dom
|
|
8
|
-
* @instance
|
|
9
|
-
* @param {Object} element
|
|
10
|
-
* @param {String} element.context Element in the same context
|
|
11
|
-
* @param {String} element.value Attribute value to search for
|
|
12
|
-
* @param {String} element.attr Attribute name to search for
|
|
13
|
-
* @param {String} element.elm NodeName to search for (optional)
|
|
14
|
-
* @return {Array<Node>}
|
|
15
|
-
*/
|
|
16
|
-
function findElmsInContext({ context, value, attr, elm = '' }) {
|
|
17
|
-
let root;
|
|
18
|
-
const escapedValue = escapeSelector(value);
|
|
19
|
-
|
|
20
|
-
if (context.nodeType === 9 || context.nodeType === 11) {
|
|
21
|
-
// It's already root
|
|
22
|
-
root = context;
|
|
23
|
-
} else {
|
|
24
|
-
root = getRootNode(context);
|
|
25
|
-
}
|
|
26
|
-
return Array.from(
|
|
27
|
-
root.querySelectorAll(elm + '[' + attr + '=' + escapedValue + ']')
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default findElmsInContext;
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { matchesSelector } from '../../core/utils';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* recusively walk up the DOM, checking for a node which matches a selector
|
|
5
|
-
*
|
|
6
|
-
* **WARNING:** this should be used sparingly, as it's not even close to being performant
|
|
7
|
-
* @method findUpVirtual
|
|
8
|
-
* @memberof axe.commons.dom
|
|
9
|
-
* @instance
|
|
10
|
-
* @deprecated use axe.utils.closest
|
|
11
|
-
* @param {VirtualNode} element The starting virtualNode
|
|
12
|
-
* @param {String} target The selector for the HTMLElement
|
|
13
|
-
* @return {HTMLElement|null} Either the matching HTMLElement or `null` if there was no match
|
|
14
|
-
*/
|
|
15
|
-
function findUpVirtual(element, target) {
|
|
16
|
-
let parent;
|
|
17
|
-
|
|
18
|
-
parent = element.actualNode;
|
|
19
|
-
// virtualNode will have a shadowId if the element lives inside a shadow DOM or is
|
|
20
|
-
// slotted into a shadow DOM
|
|
21
|
-
if (!element.shadowId && typeof element.actualNode.closest === 'function') {
|
|
22
|
-
// non-shadow DOM elements
|
|
23
|
-
const match = element.actualNode.closest(target);
|
|
24
|
-
if (match) {
|
|
25
|
-
return match;
|
|
26
|
-
}
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
// handle shadow DOM elements and older browsers
|
|
30
|
-
do {
|
|
31
|
-
// recursively walk up the DOM, checking each parent node
|
|
32
|
-
parent = parent.assignedSlot ? parent.assignedSlot : parent.parentNode;
|
|
33
|
-
if (parent && parent.nodeType === 11) {
|
|
34
|
-
parent = parent.host;
|
|
35
|
-
}
|
|
36
|
-
} while (
|
|
37
|
-
parent &&
|
|
38
|
-
!matchesSelector(parent, target) &&
|
|
39
|
-
parent !== document.documentElement
|
|
40
|
-
);
|
|
41
|
-
|
|
42
|
-
if (!parent) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (!matchesSelector(parent, target)) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
return parent;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export default findUpVirtual;
|