diff --git a/doc/rule-descriptions.md b/doc/rule-descriptions.md index 4f143435d6..c865207e6c 100644 --- a/doc/rule-descriptions.md +++ b/doc/rule-descriptions.md @@ -10,119 +10,119 @@ ## WCAG 2.0 Level A & AA Rules -| Rule ID | Description | Impact | Tags | Issue Type | -| :------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ | :---------------- | :----------------------------------------------------------------------------------------- | :------------------------- | -| [area-alt](https://dequeuniversity.com/rules/axe/4.1/area-alt?application=RuleDescription) | Ensures <area> elements of image maps have alternate text | Critical | cat.text-alternatives, wcag2a, wcag111, wcag244, wcag412, section508, section508.22.a, ACT | failure, needs review | -| [aria-allowed-attr](https://dequeuniversity.com/rules/axe/4.1/aria-allowed-attr?application=RuleDescription) | Ensures ARIA attributes are allowed for an element's role | Critical | cat.aria, wcag2a, wcag412 | failure | -| [aria-command-name](https://dequeuniversity.com/rules/axe/4.1/aria-command-name?application=RuleDescription) | Ensures every ARIA button, link and menuitem has an accessible name | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | -| [aria-hidden-body](https://dequeuniversity.com/rules/axe/4.1/aria-hidden-body?application=RuleDescription) | Ensures aria-hidden='true' is not present on the document body. | Critical | cat.aria, wcag2a, wcag412 | failure | -| [aria-hidden-focus](https://dequeuniversity.com/rules/axe/4.1/aria-hidden-focus?application=RuleDescription) | Ensures aria-hidden elements do not contain focusable elements | Serious | cat.name-role-value, wcag2a, wcag412, wcag131 | failure, needs review | -| [aria-input-field-name](https://dequeuniversity.com/rules/axe/4.1/aria-input-field-name?application=RuleDescription) | Ensures every ARIA input field has an accessible name | Moderate, Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | -| [aria-meter-name](https://dequeuniversity.com/rules/axe/4.1/aria-meter-name?application=RuleDescription) | Ensures every ARIA meter node has an accessible name | Serious | cat.aria, wcag2a, wcag111 | failure, needs review | -| [aria-progressbar-name](https://dequeuniversity.com/rules/axe/4.1/aria-progressbar-name?application=RuleDescription) | Ensures every ARIA progressbar node has an accessible name | Serious | cat.aria, wcag2a, wcag111 | failure, needs review | -| [aria-required-attr](https://dequeuniversity.com/rules/axe/4.1/aria-required-attr?application=RuleDescription) | Ensures elements with ARIA roles have all required ARIA attributes | Critical | cat.aria, wcag2a, wcag412 | failure | -| [aria-required-children](https://dequeuniversity.com/rules/axe/4.1/aria-required-children?application=RuleDescription) | Ensures elements with an ARIA role that require child roles contain them | Critical | cat.aria, wcag2a, wcag131 | failure, needs review | -| [aria-required-parent](https://dequeuniversity.com/rules/axe/4.1/aria-required-parent?application=RuleDescription) | Ensures elements with an ARIA role that require parent roles are contained by them | Critical | cat.aria, wcag2a, wcag131 | failure | -| [aria-roledescription](https://dequeuniversity.com/rules/axe/4.1/aria-roledescription?application=RuleDescription) | Ensure aria-roledescription is only used on elements with an implicit or explicit role | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | -| [aria-roles](https://dequeuniversity.com/rules/axe/4.1/aria-roles?application=RuleDescription) | Ensures all elements with a role attribute use a valid value | Serious, Critical | cat.aria, wcag2a, wcag412 | failure | -| [aria-toggle-field-name](https://dequeuniversity.com/rules/axe/4.1/aria-toggle-field-name?application=RuleDescription) | Ensures every ARIA toggle field has an accessible name | Moderate, Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | -| [aria-tooltip-name](https://dequeuniversity.com/rules/axe/4.1/aria-tooltip-name?application=RuleDescription) | Ensures every ARIA tooltip node has an accessible name | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | -| [aria-valid-attr-value](https://dequeuniversity.com/rules/axe/4.1/aria-valid-attr-value?application=RuleDescription) | Ensures all ARIA attributes have valid values | Critical | cat.aria, wcag2a, wcag412 | failure, needs review | -| [aria-valid-attr](https://dequeuniversity.com/rules/axe/4.1/aria-valid-attr?application=RuleDescription) | Ensures attributes that begin with aria- are valid ARIA attributes | Critical | cat.aria, wcag2a, wcag412 | failure | -| [audio-caption](https://dequeuniversity.com/rules/axe/4.1/audio-caption?application=RuleDescription) | Ensures <audio> elements have captions | Critical | cat.time-and-media, wcag2a, wcag121, section508, section508.22.a | needs review | -| [blink](https://dequeuniversity.com/rules/axe/4.1/blink?application=RuleDescription) | Ensures <blink> elements are not used | Serious | cat.time-and-media, wcag2a, wcag222, section508, section508.22.j | failure | -| [button-name](https://dequeuniversity.com/rules/axe/4.1/button-name?application=RuleDescription) | Ensures buttons have discernible text | Critical | cat.name-role-value, wcag2a, wcag412, section508, section508.22.a, ACT | failure, needs review | -| [bypass](https://dequeuniversity.com/rules/axe/4.1/bypass?application=RuleDescription) | Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content | Serious | cat.keyboard, wcag2a, wcag241, section508, section508.22.o | failure | -| [color-contrast](https://dequeuniversity.com/rules/axe/4.1/color-contrast?application=RuleDescription) | Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds | Serious | cat.color, wcag2aa, wcag143 | failure, needs review | -| [definition-list](https://dequeuniversity.com/rules/axe/4.1/definition-list?application=RuleDescription) | Ensures <dl> elements are structured correctly | Serious | cat.structure, wcag2a, wcag131 | failure | -| [dlitem](https://dequeuniversity.com/rules/axe/4.1/dlitem?application=RuleDescription) | Ensures <dt> and <dd> elements are contained by a <dl> | Serious | cat.structure, wcag2a, wcag131 | failure | -| [document-title](https://dequeuniversity.com/rules/axe/4.1/document-title?application=RuleDescription) | Ensures each HTML document contains a non-empty <title> element | Serious | cat.text-alternatives, wcag2a, wcag242, ACT | failure | -| [duplicate-id-active](https://dequeuniversity.com/rules/axe/4.1/duplicate-id-active?application=RuleDescription) | Ensures every id attribute value of active elements is unique | Serious | cat.parsing, wcag2a, wcag411 | failure | -| [duplicate-id-aria](https://dequeuniversity.com/rules/axe/4.1/duplicate-id-aria?application=RuleDescription) | Ensures every id attribute value used in ARIA and in labels is unique | Critical | cat.parsing, wcag2a, wcag411 | failure | -| [duplicate-id](https://dequeuniversity.com/rules/axe/4.1/duplicate-id?application=RuleDescription) | Ensures every id attribute value is unique | Minor | cat.parsing, wcag2a, wcag411 | failure | -| [form-field-multiple-labels](https://dequeuniversity.com/rules/axe/4.1/form-field-multiple-labels?application=RuleDescription) | Ensures form field does not have multiple label elements | Moderate | cat.forms, wcag2a, wcag332 | needs review | -| [frame-title](https://dequeuniversity.com/rules/axe/4.1/frame-title?application=RuleDescription) | Ensures <iframe> and <frame> elements contain a non-empty title attribute | Serious | cat.text-alternatives, wcag2a, wcag241, wcag412, section508, section508.22.i | failure, needs review | -| [html-has-lang](https://dequeuniversity.com/rules/axe/4.1/html-has-lang?application=RuleDescription) | Ensures every HTML document has a lang attribute | Serious | cat.language, wcag2a, wcag311, ACT | failure | -| [html-lang-valid](https://dequeuniversity.com/rules/axe/4.1/html-lang-valid?application=RuleDescription) | Ensures the lang attribute of the <html> element has a valid value | Serious | cat.language, wcag2a, wcag311, ACT | failure | -| [html-xml-lang-mismatch](https://dequeuniversity.com/rules/axe/4.1/html-xml-lang-mismatch?application=RuleDescription) | Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page | Moderate | cat.language, wcag2a, wcag311, ACT | failure | -| [image-alt](https://dequeuniversity.com/rules/axe/4.1/image-alt?application=RuleDescription) | Ensures <img> elements have alternate text or a role of none or presentation | Critical | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | -| [input-button-name](https://dequeuniversity.com/rules/axe/4.1/input-button-name?application=RuleDescription) | Ensures input buttons have discernible text | Critical | cat.name-role-value, wcag2a, wcag412, section508, section508.22.a | failure, needs review | -| [input-image-alt](https://dequeuniversity.com/rules/axe/4.1/input-image-alt?application=RuleDescription) | Ensures <input type="image"> elements have alternate text | Critical | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | -| [label](https://dequeuniversity.com/rules/axe/4.1/label?application=RuleDescription) | Ensures every form element has a label | Minor, Critical | cat.forms, wcag2a, wcag412, wcag131, section508, section508.22.n, ACT | failure, needs review | -| [link-name](https://dequeuniversity.com/rules/axe/4.1/link-name?application=RuleDescription) | Ensures links have discernible text | Serious | cat.name-role-value, wcag2a, wcag412, wcag244, section508, section508.22.a, ACT | failure, needs review | -| [list](https://dequeuniversity.com/rules/axe/4.1/list?application=RuleDescription) | Ensures that lists are structured correctly | Serious | cat.structure, wcag2a, wcag131 | failure | -| [listitem](https://dequeuniversity.com/rules/axe/4.1/listitem?application=RuleDescription) | Ensures <li> elements are used semantically | Serious | cat.structure, wcag2a, wcag131 | failure | -| [marquee](https://dequeuniversity.com/rules/axe/4.1/marquee?application=RuleDescription) | Ensures <marquee> elements are not used | Serious | cat.parsing, wcag2a, wcag222 | failure | -| [meta-refresh](https://dequeuniversity.com/rules/axe/4.1/meta-refresh?application=RuleDescription) | Ensures <meta http-equiv="refresh"> is not used | Critical | cat.time-and-media, wcag2a, wcag2aaa, wcag221, wcag224, wcag325 | failure | -| [object-alt](https://dequeuniversity.com/rules/axe/4.1/object-alt?application=RuleDescription) | Ensures <object> elements have alternate text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a | failure, needs review | -| [role-img-alt](https://dequeuniversity.com/rules/axe/4.1/role-img-alt?application=RuleDescription) | Ensures [role='img'] elements have alternate text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | -| [scrollable-region-focusable](https://dequeuniversity.com/rules/axe/4.1/scrollable-region-focusable?application=RuleDescription) | Elements that have scrollable content should be accessible by keyboard | Moderate | cat.keyboard, wcag2a, wcag211 | failure | -| [select-name](https://dequeuniversity.com/rules/axe/4.1/select-name?application=RuleDescription) | Ensures select element has an accessible name | Minor, Critical | cat.forms, wcag2a, wcag412, wcag131, section508, section508.22.n, ACT | failure, needs review | -| [server-side-image-map](https://dequeuniversity.com/rules/axe/4.1/server-side-image-map?application=RuleDescription) | Ensures that server-side image maps are not used | Minor | cat.text-alternatives, wcag2a, wcag211, section508, section508.22.f | needs review | -| [svg-img-alt](https://dequeuniversity.com/rules/axe/4.1/svg-img-alt?application=RuleDescription) | Ensures svg elements with an img, graphics-document or graphics-symbol role have an accessible text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | -| [td-headers-attr](https://dequeuniversity.com/rules/axe/4.1/td-headers-attr?application=RuleDescription) | Ensure that each cell in a table using the headers refers to another cell in that table | Serious | cat.tables, wcag2a, wcag131, section508, section508.22.g | failure, needs review | -| [th-has-data-cells](https://dequeuniversity.com/rules/axe/4.1/th-has-data-cells?application=RuleDescription) | Ensure that each table header in a data table refers to data cells | Serious | cat.tables, wcag2a, wcag131, section508, section508.22.g | failure, needs review | -| [valid-lang](https://dequeuniversity.com/rules/axe/4.1/valid-lang?application=RuleDescription) | Ensures lang attributes have valid values | Serious | cat.language, wcag2aa, wcag312 | failure | -| [video-caption](https://dequeuniversity.com/rules/axe/4.1/video-caption?application=RuleDescription) | Ensures <video> elements have captions | Critical | cat.text-alternatives, wcag2a, wcag122, section508, section508.22.a | needs review | +| Rule ID | Description | Impact | Tags | Issue Type | +| :--------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------ | :---------------- | :----------------------------------------------------------------------------------------- | :------------------------- | +| [area-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/area-alt?application=RuleDescription) | Ensures <area> elements of image maps have alternate text | Critical | cat.text-alternatives, wcag2a, wcag111, wcag244, wcag412, section508, section508.22.a, ACT | failure, needs review | +| [aria-allowed-attr](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-allowed-attr?application=RuleDescription) | Ensures ARIA attributes are allowed for an element's role | Critical | cat.aria, wcag2a, wcag412 | failure | +| [aria-command-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-command-name?application=RuleDescription) | Ensures every ARIA button, link and menuitem has an accessible name | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | +| [aria-hidden-body](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-hidden-body?application=RuleDescription) | Ensures aria-hidden='true' is not present on the document body. | Critical | cat.aria, wcag2a, wcag412 | failure | +| [aria-hidden-focus](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-hidden-focus?application=RuleDescription) | Ensures aria-hidden elements do not contain focusable elements | Serious | cat.name-role-value, wcag2a, wcag412, wcag131 | failure, needs review | +| [aria-input-field-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-input-field-name?application=RuleDescription) | Ensures every ARIA input field has an accessible name | Moderate, Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | +| [aria-meter-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-meter-name?application=RuleDescription) | Ensures every ARIA meter node has an accessible name | Serious | cat.aria, wcag2a, wcag111 | failure, needs review | +| [aria-progressbar-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-progressbar-name?application=RuleDescription) | Ensures every ARIA progressbar node has an accessible name | Serious | cat.aria, wcag2a, wcag111 | failure, needs review | +| [aria-required-attr](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-required-attr?application=RuleDescription) | Ensures elements with ARIA roles have all required ARIA attributes | Critical | cat.aria, wcag2a, wcag412 | failure | +| [aria-required-children](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-required-children?application=RuleDescription) | Ensures elements with an ARIA role that require child roles contain them | Critical | cat.aria, wcag2a, wcag131 | failure, needs review | +| [aria-required-parent](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-required-parent?application=RuleDescription) | Ensures elements with an ARIA role that require parent roles are contained by them | Critical | cat.aria, wcag2a, wcag131 | failure | +| [aria-roledescription](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-roledescription?application=RuleDescription) | Ensure aria-roledescription is only used on elements with an implicit or explicit role | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | +| [aria-roles](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-roles?application=RuleDescription) | Ensures all elements with a role attribute use a valid value | Serious, Critical | cat.aria, wcag2a, wcag412 | failure | +| [aria-toggle-field-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-toggle-field-name?application=RuleDescription) | Ensures every ARIA toggle field has an accessible name | Moderate, Serious | cat.aria, wcag2a, wcag412, ACT | failure, needs review | +| [aria-tooltip-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-tooltip-name?application=RuleDescription) | Ensures every ARIA tooltip node has an accessible name | Serious | cat.aria, wcag2a, wcag412 | failure, needs review | +| [aria-valid-attr-value](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-valid-attr-value?application=RuleDescription) | Ensures all ARIA attributes have valid values | Critical | cat.aria, wcag2a, wcag412 | failure, needs review | +| [aria-valid-attr](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-valid-attr?application=RuleDescription) | Ensures attributes that begin with aria- are valid ARIA attributes | Critical | cat.aria, wcag2a, wcag412 | failure | +| [audio-caption](https://dequeuniversity.com/rules/axe/4.1.1-daisy/audio-caption?application=RuleDescription) | Ensures <audio> elements have captions | Critical | cat.time-and-media, wcag2a, wcag121, section508, section508.22.a | needs review | +| [blink](https://dequeuniversity.com/rules/axe/4.1.1-daisy/blink?application=RuleDescription) | Ensures <blink> elements are not used | Serious | cat.time-and-media, wcag2a, wcag222, section508, section508.22.j | failure | +| [button-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/button-name?application=RuleDescription) | Ensures buttons have discernible text | Critical | cat.name-role-value, wcag2a, wcag412, section508, section508.22.a, ACT | failure, needs review | +| [bypass](https://dequeuniversity.com/rules/axe/4.1.1-daisy/bypass?application=RuleDescription) | Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content | Serious | cat.keyboard, wcag2a, wcag241, section508, section508.22.o | failure | +| [color-contrast](https://dequeuniversity.com/rules/axe/4.1.1-daisy/color-contrast?application=RuleDescription) | Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds | Serious | cat.color, wcag2aa, wcag143 | failure, needs review | +| [definition-list](https://dequeuniversity.com/rules/axe/4.1.1-daisy/definition-list?application=RuleDescription) | Ensures <dl> elements are structured correctly | Serious | cat.structure, wcag2a, wcag131 | failure | +| [dlitem](https://dequeuniversity.com/rules/axe/4.1.1-daisy/dlitem?application=RuleDescription) | Ensures <dt> and <dd> elements are contained by a <dl> | Serious | cat.structure, wcag2a, wcag131 | failure | +| [document-title](https://dequeuniversity.com/rules/axe/4.1.1-daisy/document-title?application=RuleDescription) | Ensures each HTML document contains a non-empty <title> element | Serious | cat.text-alternatives, wcag2a, wcag242, ACT | failure | +| [duplicate-id-active](https://dequeuniversity.com/rules/axe/4.1.1-daisy/duplicate-id-active?application=RuleDescription) | Ensures every id attribute value of active elements is unique | Serious | cat.parsing, wcag2a, wcag411 | failure | +| [duplicate-id-aria](https://dequeuniversity.com/rules/axe/4.1.1-daisy/duplicate-id-aria?application=RuleDescription) | Ensures every id attribute value used in ARIA and in labels is unique | Critical | cat.parsing, wcag2a, wcag411 | failure | +| [duplicate-id](https://dequeuniversity.com/rules/axe/4.1.1-daisy/duplicate-id?application=RuleDescription) | Ensures every id attribute value is unique | Minor | cat.parsing, wcag2a, wcag411 | failure | +| [form-field-multiple-labels](https://dequeuniversity.com/rules/axe/4.1.1-daisy/form-field-multiple-labels?application=RuleDescription) | Ensures form field does not have multiple label elements | Moderate | cat.forms, wcag2a, wcag332 | needs review | +| [frame-title](https://dequeuniversity.com/rules/axe/4.1.1-daisy/frame-title?application=RuleDescription) | Ensures <iframe> and <frame> elements contain a non-empty title attribute | Serious | cat.text-alternatives, wcag2a, wcag241, wcag412, section508, section508.22.i | failure, needs review | +| [html-has-lang](https://dequeuniversity.com/rules/axe/4.1.1-daisy/html-has-lang?application=RuleDescription) | Ensures every HTML document has a lang attribute | Serious | cat.language, wcag2a, wcag311, ACT | failure | +| [html-lang-valid](https://dequeuniversity.com/rules/axe/4.1.1-daisy/html-lang-valid?application=RuleDescription) | Ensures the lang attribute of the <html> element has a valid value | Serious | cat.language, wcag2a, wcag311, ACT | failure | +| [html-xml-lang-mismatch](https://dequeuniversity.com/rules/axe/4.1.1-daisy/html-xml-lang-mismatch?application=RuleDescription) | Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page | Moderate | cat.language, wcag2a, wcag311, ACT | failure | +| [image-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/image-alt?application=RuleDescription) | Ensures <img> elements have alternate text or a role of none or presentation | Critical | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | +| [input-button-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/input-button-name?application=RuleDescription) | Ensures input buttons have discernible text | Critical | cat.name-role-value, wcag2a, wcag412, section508, section508.22.a | failure, needs review | +| [input-image-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/input-image-alt?application=RuleDescription) | Ensures <input type="image"> elements have alternate text | Critical | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | +| [label](https://dequeuniversity.com/rules/axe/4.1.1-daisy/label?application=RuleDescription) | Ensures every form element has a label | Minor, Critical | cat.forms, wcag2a, wcag412, wcag131, section508, section508.22.n, ACT | failure, needs review | +| [link-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/link-name?application=RuleDescription) | Ensures links have discernible text | Serious | cat.name-role-value, wcag2a, wcag412, wcag244, section508, section508.22.a, ACT | failure, needs review | +| [list](https://dequeuniversity.com/rules/axe/4.1.1-daisy/list?application=RuleDescription) | Ensures that lists are structured correctly | Serious | cat.structure, wcag2a, wcag131 | failure | +| [listitem](https://dequeuniversity.com/rules/axe/4.1.1-daisy/listitem?application=RuleDescription) | Ensures <li> elements are used semantically | Serious | cat.structure, wcag2a, wcag131 | failure | +| [marquee](https://dequeuniversity.com/rules/axe/4.1.1-daisy/marquee?application=RuleDescription) | Ensures <marquee> elements are not used | Serious | cat.parsing, wcag2a, wcag222 | failure | +| [meta-refresh](https://dequeuniversity.com/rules/axe/4.1.1-daisy/meta-refresh?application=RuleDescription) | Ensures <meta http-equiv="refresh"> is not used | Critical | cat.time-and-media, wcag2a, wcag2aaa, wcag221, wcag224, wcag325 | failure | +| [object-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/object-alt?application=RuleDescription) | Ensures <object> elements have alternate text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a | failure, needs review | +| [role-img-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/role-img-alt?application=RuleDescription) | Ensures [role='img'] elements have alternate text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | +| [scrollable-region-focusable](https://dequeuniversity.com/rules/axe/4.1.1-daisy/scrollable-region-focusable?application=RuleDescription) | Elements that have scrollable content should be accessible by keyboard | Moderate | cat.keyboard, wcag2a, wcag211 | failure | +| [select-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/select-name?application=RuleDescription) | Ensures select element has an accessible name | Minor, Critical | cat.forms, wcag2a, wcag412, wcag131, section508, section508.22.n, ACT | failure, needs review | +| [server-side-image-map](https://dequeuniversity.com/rules/axe/4.1.1-daisy/server-side-image-map?application=RuleDescription) | Ensures that server-side image maps are not used | Minor | cat.text-alternatives, wcag2a, wcag211, section508, section508.22.f | needs review | +| [svg-img-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/svg-img-alt?application=RuleDescription) | Ensures svg elements with an img, graphics-document or graphics-symbol role have an accessible text | Serious | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a, ACT | failure, needs review | +| [td-headers-attr](https://dequeuniversity.com/rules/axe/4.1.1-daisy/td-headers-attr?application=RuleDescription) | Ensure that each cell in a table using the headers refers to another cell in that table | Serious | cat.tables, wcag2a, wcag131, section508, section508.22.g | failure, needs review | +| [th-has-data-cells](https://dequeuniversity.com/rules/axe/4.1.1-daisy/th-has-data-cells?application=RuleDescription) | Ensure that each table header in a data table refers to data cells | Serious | cat.tables, wcag2a, wcag131, section508, section508.22.g | failure, needs review | +| [valid-lang](https://dequeuniversity.com/rules/axe/4.1.1-daisy/valid-lang?application=RuleDescription) | Ensures lang attributes have valid values | Serious | cat.language, wcag2aa, wcag312 | failure | +| [video-caption](https://dequeuniversity.com/rules/axe/4.1.1-daisy/video-caption?application=RuleDescription) | Ensures <video> elements have captions | Critical | cat.text-alternatives, wcag2a, wcag122, section508, section508.22.a | needs review | ## WCAG 2.1 Level A & AA Rules -| Rule ID | Description | Impact | Tags | Issue Type | -| :----------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :------ | :-------------------------------- | :--------- | -| [autocomplete-valid](https://dequeuniversity.com/rules/axe/4.1/autocomplete-valid?application=RuleDescription) | Ensure the autocomplete attribute is correct and suitable for the form field | Serious | cat.forms, wcag21aa, wcag135 | failure | -| [avoid-inline-spacing](https://dequeuniversity.com/rules/axe/4.1/avoid-inline-spacing?application=RuleDescription) | Ensure that text spacing set through style attributes can be adjusted with custom stylesheets | Serious | cat.structure, wcag21aa, wcag1412 | failure | +| Rule ID | Description | Impact | Tags | Issue Type | +| :------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :------ | :-------------------------------- | :--------- | +| [autocomplete-valid](https://dequeuniversity.com/rules/axe/4.1.1-daisy/autocomplete-valid?application=RuleDescription) | Ensure the autocomplete attribute is correct and suitable for the form field | Serious | cat.forms, wcag21aa, wcag135 | failure | +| [avoid-inline-spacing](https://dequeuniversity.com/rules/axe/4.1.1-daisy/avoid-inline-spacing?application=RuleDescription) | Ensure that text spacing set through style attributes can be adjusted with custom stylesheets | Serious | cat.structure, wcag21aa, wcag1412 | failure | ## Best Practices Rules Rules that do not necessarily conform to WCAG success criterion but are industry accepted practices that improve the user experience. -| Rule ID | Description | Impact | Tags | Issue Type | -| :----------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- | :----------------- | :---------------------------------------------- | :------------------------- | -| [accesskeys](https://dequeuniversity.com/rules/axe/4.1/accesskeys?application=RuleDescription) | Ensures every accesskey attribute value is unique | Serious | cat.keyboard, best-practice | failure | -| [aria-allowed-role](https://dequeuniversity.com/rules/axe/4.1/aria-allowed-role?application=RuleDescription) | Ensures role attribute has an appropriate value for the element | Minor | cat.aria, best-practice | failure, needs review | -| [aria-dialog-name](https://dequeuniversity.com/rules/axe/4.1/aria-dialog-name?application=RuleDescription) | Ensures every ARIA dialog and alertdialog node has an accessible name | Serious | cat.aria, best-practice | failure, needs review | -| [aria-treeitem-name](https://dequeuniversity.com/rules/axe/4.1/aria-treeitem-name?application=RuleDescription) | Ensures every ARIA treeitem node has an accessible name | Serious | cat.aria, best-practice | failure, needs review | -| [empty-heading](https://dequeuniversity.com/rules/axe/4.1/empty-heading?application=RuleDescription) | Ensures headings have discernible text | Minor | cat.name-role-value, best-practice | failure, needs review | -| [frame-tested](https://dequeuniversity.com/rules/axe/4.1/frame-tested?application=RuleDescription) | Ensures <iframe> and <frame> elements contain the axe-core script | Critical | cat.structure, review-item, best-practice | failure, needs review | -| [frame-title-unique](https://dequeuniversity.com/rules/axe/4.1/frame-title-unique?application=RuleDescription) | Ensures <iframe> and <frame> elements contain a unique title attribute | Serious | cat.text-alternatives, best-practice | failure | -| [heading-order](https://dequeuniversity.com/rules/axe/4.1/heading-order?application=RuleDescription) | Ensures the order of headings is semantically correct | Moderate | cat.semantics, best-practice | failure | -| [identical-links-same-purpose](https://dequeuniversity.com/rules/axe/4.1/identical-links-same-purpose?application=RuleDescription) | Ensure that links with the same accessible name serve a similar purpose | Minor | cat.semantics, wcag2aaa, wcag249, best-practice | needs review | -| [image-redundant-alt](https://dequeuniversity.com/rules/axe/4.1/image-redundant-alt?application=RuleDescription) | Ensure image alternative is not repeated as text | Minor | cat.text-alternatives, best-practice | failure | -| [label-title-only](https://dequeuniversity.com/rules/axe/4.1/label-title-only?application=RuleDescription) | Ensures that every form element is not solely labeled using the title or aria-describedby attributes | Serious | cat.forms, best-practice | failure | -| [landmark-banner-is-top-level](https://dequeuniversity.com/rules/axe/4.1/landmark-banner-is-top-level?application=RuleDescription) | Ensures the banner landmark is at top level | Moderate | cat.semantics, best-practice | failure | -| [landmark-complementary-is-top-level](https://dequeuniversity.com/rules/axe/4.1/landmark-complementary-is-top-level?application=RuleDescription) | Ensures the complementary landmark or aside is at top level | Moderate | cat.semantics, best-practice | failure | -| [landmark-contentinfo-is-top-level](https://dequeuniversity.com/rules/axe/4.1/landmark-contentinfo-is-top-level?application=RuleDescription) | Ensures the contentinfo landmark is at top level | Moderate | cat.semantics, best-practice | failure | -| [landmark-main-is-top-level](https://dequeuniversity.com/rules/axe/4.1/landmark-main-is-top-level?application=RuleDescription) | Ensures the main landmark is at top level | Moderate | cat.semantics, best-practice | failure | -| [landmark-no-duplicate-banner](https://dequeuniversity.com/rules/axe/4.1/landmark-no-duplicate-banner?application=RuleDescription) | Ensures the document has at most one banner landmark | Moderate | cat.semantics, best-practice | failure | -| [landmark-no-duplicate-contentinfo](https://dequeuniversity.com/rules/axe/4.1/landmark-no-duplicate-contentinfo?application=RuleDescription) | Ensures the document has at most one contentinfo landmark | Moderate | cat.semantics, best-practice | failure | -| [landmark-no-duplicate-main](https://dequeuniversity.com/rules/axe/4.1/landmark-no-duplicate-main?application=RuleDescription) | Ensures the document has at most one main landmark | Moderate | cat.semantics, best-practice | failure | -| [landmark-one-main](https://dequeuniversity.com/rules/axe/4.1/landmark-one-main?application=RuleDescription) | Ensures the document has a main landmark | Moderate | cat.semantics, best-practice | failure | -| [landmark-unique](https://dequeuniversity.com/rules/axe/4.1/landmark-unique?application=RuleDescription) | Landmarks must have a unique role or role/label/title (i.e. accessible name) combination | Moderate | cat.semantics, best-practice | failure | -| [meta-viewport-large](https://dequeuniversity.com/rules/axe/4.1/meta-viewport-large?application=RuleDescription) | Ensures <meta name="viewport"> can scale a significant amount | Minor | cat.sensory-and-visual-cues, best-practice | failure | -| [meta-viewport](https://dequeuniversity.com/rules/axe/4.1/meta-viewport?application=RuleDescription) | Ensures <meta name="viewport"> does not disable text scaling and zooming | Critical | cat.sensory-and-visual-cues, best-practice, ACT | failure | -| [page-has-heading-one](https://dequeuniversity.com/rules/axe/4.1/page-has-heading-one?application=RuleDescription) | Ensure that the page, or at least one of its frames contains a level-one heading | Moderate | cat.semantics, best-practice | failure | -| [presentation-role-conflict](https://dequeuniversity.com/rules/axe/4.1/presentation-role-conflict?application=RuleDescription) | Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger. | Minor | cat.aria, best-practice | failure | -| [region](https://dequeuniversity.com/rules/axe/4.1/region?application=RuleDescription) | Ensures all page content is contained by landmarks | Moderate | cat.keyboard, best-practice | failure | -| [scope-attr-valid](https://dequeuniversity.com/rules/axe/4.1/scope-attr-valid?application=RuleDescription) | Ensures the scope attribute is used correctly on tables | Moderate, Critical | cat.tables, best-practice | failure | -| [skip-link](https://dequeuniversity.com/rules/axe/4.1/skip-link?application=RuleDescription) | Ensure all skip links have a focusable target | Moderate | cat.keyboard, best-practice | failure, needs review | -| [tabindex](https://dequeuniversity.com/rules/axe/4.1/tabindex?application=RuleDescription) | Ensures tabindex attribute values are not greater than 0 | Serious | cat.keyboard, best-practice | failure | -| [table-duplicate-name](https://dequeuniversity.com/rules/axe/4.1/table-duplicate-name?application=RuleDescription) | Ensure that tables do not have the same summary and caption | Minor | cat.tables, best-practice | failure | +| Rule ID | Description | Impact | Tags | Issue Type | +| :------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------- | :----------------- | :---------------------------------------------- | :------------------------- | +| [accesskeys](https://dequeuniversity.com/rules/axe/4.1.1-daisy/accesskeys?application=RuleDescription) | Ensures every accesskey attribute value is unique | Serious | cat.keyboard, best-practice | failure | +| [aria-allowed-role](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-allowed-role?application=RuleDescription) | Ensures role attribute has an appropriate value for the element | Minor | cat.aria, best-practice | failure, needs review | +| [aria-dialog-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-dialog-name?application=RuleDescription) | Ensures every ARIA dialog and alertdialog node has an accessible name | Serious | cat.aria, best-practice | failure, needs review | +| [aria-treeitem-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/aria-treeitem-name?application=RuleDescription) | Ensures every ARIA treeitem node has an accessible name | Serious | cat.aria, best-practice | failure, needs review | +| [empty-heading](https://dequeuniversity.com/rules/axe/4.1.1-daisy/empty-heading?application=RuleDescription) | Ensures headings have discernible text | Minor | cat.name-role-value, best-practice | failure, needs review | +| [frame-tested](https://dequeuniversity.com/rules/axe/4.1.1-daisy/frame-tested?application=RuleDescription) | Ensures <iframe> and <frame> elements contain the axe-core script | Critical | cat.structure, review-item, best-practice | failure, needs review | +| [frame-title-unique](https://dequeuniversity.com/rules/axe/4.1.1-daisy/frame-title-unique?application=RuleDescription) | Ensures <iframe> and <frame> elements contain a unique title attribute | Serious | cat.text-alternatives, best-practice | failure | +| [heading-order](https://dequeuniversity.com/rules/axe/4.1.1-daisy/heading-order?application=RuleDescription) | Ensures the order of headings is semantically correct | Moderate | cat.semantics, best-practice | failure | +| [identical-links-same-purpose](https://dequeuniversity.com/rules/axe/4.1.1-daisy/identical-links-same-purpose?application=RuleDescription) | Ensure that links with the same accessible name serve a similar purpose | Minor | cat.semantics, wcag2aaa, wcag249, best-practice | needs review | +| [image-redundant-alt](https://dequeuniversity.com/rules/axe/4.1.1-daisy/image-redundant-alt?application=RuleDescription) | Ensure image alternative is not repeated as text | Minor | cat.text-alternatives, best-practice | failure | +| [label-title-only](https://dequeuniversity.com/rules/axe/4.1.1-daisy/label-title-only?application=RuleDescription) | Ensures that every form element is not solely labeled using the title or aria-describedby attributes | Serious | cat.forms, best-practice | failure | +| [landmark-banner-is-top-level](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-banner-is-top-level?application=RuleDescription) | Ensures the banner landmark is at top level | Moderate | cat.semantics, best-practice | failure | +| [landmark-complementary-is-top-level](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-complementary-is-top-level?application=RuleDescription) | Ensures the complementary landmark or aside is at top level | Moderate | cat.semantics, best-practice | failure | +| [landmark-contentinfo-is-top-level](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-contentinfo-is-top-level?application=RuleDescription) | Ensures the contentinfo landmark is at top level | Moderate | cat.semantics, best-practice | failure | +| [landmark-main-is-top-level](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-main-is-top-level?application=RuleDescription) | Ensures the main landmark is at top level | Moderate | cat.semantics, best-practice | failure | +| [landmark-no-duplicate-banner](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-no-duplicate-banner?application=RuleDescription) | Ensures the document has at most one banner landmark | Moderate | cat.semantics, best-practice | failure | +| [landmark-no-duplicate-contentinfo](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-no-duplicate-contentinfo?application=RuleDescription) | Ensures the document has at most one contentinfo landmark | Moderate | cat.semantics, best-practice | failure | +| [landmark-no-duplicate-main](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-no-duplicate-main?application=RuleDescription) | Ensures the document has at most one main landmark | Moderate | cat.semantics, best-practice | failure | +| [landmark-one-main](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-one-main?application=RuleDescription) | Ensures the document has a main landmark | Moderate | cat.semantics, best-practice | failure | +| [landmark-unique](https://dequeuniversity.com/rules/axe/4.1.1-daisy/landmark-unique?application=RuleDescription) | Landmarks must have a unique role or role/label/title (i.e. accessible name) combination | Moderate | cat.semantics, best-practice | failure | +| [meta-viewport-large](https://dequeuniversity.com/rules/axe/4.1.1-daisy/meta-viewport-large?application=RuleDescription) | Ensures <meta name="viewport"> can scale a significant amount | Minor | cat.sensory-and-visual-cues, best-practice | failure | +| [meta-viewport](https://dequeuniversity.com/rules/axe/4.1.1-daisy/meta-viewport?application=RuleDescription) | Ensures <meta name="viewport"> does not disable text scaling and zooming | Critical | cat.sensory-and-visual-cues, best-practice, ACT | failure | +| [page-has-heading-one](https://dequeuniversity.com/rules/axe/4.1.1-daisy/page-has-heading-one?application=RuleDescription) | Ensure that the page, or at least one of its frames contains a level-one heading | Moderate | cat.semantics, best-practice | failure | +| [presentation-role-conflict](https://dequeuniversity.com/rules/axe/4.1.1-daisy/presentation-role-conflict?application=RuleDescription) | Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger. | Minor | cat.aria, best-practice | failure | +| [region](https://dequeuniversity.com/rules/axe/4.1.1-daisy/region?application=RuleDescription) | Ensures all page content is contained by landmarks | Moderate | cat.keyboard, best-practice | failure | +| [scope-attr-valid](https://dequeuniversity.com/rules/axe/4.1.1-daisy/scope-attr-valid?application=RuleDescription) | Ensures the scope attribute is used correctly on tables | Moderate, Critical | cat.tables, best-practice | failure | +| [skip-link](https://dequeuniversity.com/rules/axe/4.1.1-daisy/skip-link?application=RuleDescription) | Ensure all skip links have a focusable target | Moderate | cat.keyboard, best-practice | failure, needs review | +| [tabindex](https://dequeuniversity.com/rules/axe/4.1.1-daisy/tabindex?application=RuleDescription) | Ensures tabindex attribute values are not greater than 0 | Serious | cat.keyboard, best-practice | failure | +| [table-duplicate-name](https://dequeuniversity.com/rules/axe/4.1.1-daisy/table-duplicate-name?application=RuleDescription) | Ensure that tables do not have the same summary and caption | Minor | cat.tables, best-practice | failure | ## Experimental Rules Rules we are still testing and developing. They are not enabled by default in axe-core, but are enabled for the axe browser extensions. -| Rule ID | Description | Impact | Tags | Issue Type | -| :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :--------------------------------------------------------------------- | :------------------------- | -| [css-orientation-lock](https://dequeuniversity.com/rules/axe/4.1/css-orientation-lock?application=RuleDescription) | Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations | Serious | cat.structure, wcag134, wcag21aa, experimental | failure, needs review | -| [focus-order-semantics](https://dequeuniversity.com/rules/axe/4.1/focus-order-semantics?application=RuleDescription) | Ensures elements in the focus order have an appropriate role | Minor | cat.keyboard, best-practice, experimental | failure | -| [hidden-content](https://dequeuniversity.com/rules/axe/4.1/hidden-content?application=RuleDescription) | Informs users about hidden content. | Minor | cat.structure, experimental, review-item, best-practice | failure, needs review | -| [label-content-name-mismatch](https://dequeuniversity.com/rules/axe/4.1/label-content-name-mismatch?application=RuleDescription) | Ensures that elements labelled through their content must have their visible text as part of their accessible name | Serious | cat.semantics, wcag21a, wcag253, experimental | failure | -| [link-in-text-block](https://dequeuniversity.com/rules/axe/4.1/link-in-text-block?application=RuleDescription) | Links can be distinguished without relying on color | Serious | cat.color, experimental, wcag2a, wcag141 | failure, needs review | -| [no-autoplay-audio](https://dequeuniversity.com/rules/axe/4.1/no-autoplay-audio?application=RuleDescription) | Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio | Moderate | cat.time-and-media, wcag2a, wcag142, experimental | failure, needs review | -| [p-as-heading](https://dequeuniversity.com/rules/axe/4.1/p-as-heading?application=RuleDescription) | Ensure p elements are not used to style headings | Serious | cat.semantics, wcag2a, wcag131, experimental | failure | -| [table-fake-caption](https://dequeuniversity.com/rules/axe/4.1/table-fake-caption?application=RuleDescription) | Ensure that tables with a caption use the <caption> element. | Serious | cat.tables, experimental, wcag2a, wcag131, section508, section508.22.g | failure | -| [td-has-header](https://dequeuniversity.com/rules/axe/4.1/td-has-header?application=RuleDescription) | Ensure that each non-empty data cell in a large table has one or more table headers | Critical | cat.tables, experimental, wcag2a, wcag131, section508, section508.22.g | failure | +| Rule ID | Description | Impact | Tags | Issue Type | +| :--------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :--------------------------------------------------------------------- | :------------------------- | +| [css-orientation-lock](https://dequeuniversity.com/rules/axe/4.1.1-daisy/css-orientation-lock?application=RuleDescription) | Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations | Serious | cat.structure, wcag134, wcag21aa, experimental | failure, needs review | +| [focus-order-semantics](https://dequeuniversity.com/rules/axe/4.1.1-daisy/focus-order-semantics?application=RuleDescription) | Ensures elements in the focus order have an appropriate role | Minor | cat.keyboard, best-practice, experimental | failure | +| [hidden-content](https://dequeuniversity.com/rules/axe/4.1.1-daisy/hidden-content?application=RuleDescription) | Informs users about hidden content. | Minor | cat.structure, experimental, review-item, best-practice | failure, needs review | +| [label-content-name-mismatch](https://dequeuniversity.com/rules/axe/4.1.1-daisy/label-content-name-mismatch?application=RuleDescription) | Ensures that elements labelled through their content must have their visible text as part of their accessible name | Serious | cat.semantics, wcag21a, wcag253, experimental | failure | +| [link-in-text-block](https://dequeuniversity.com/rules/axe/4.1.1-daisy/link-in-text-block?application=RuleDescription) | Links can be distinguished without relying on color | Serious | cat.color, experimental, wcag2a, wcag141 | failure, needs review | +| [no-autoplay-audio](https://dequeuniversity.com/rules/axe/4.1.1-daisy/no-autoplay-audio?application=RuleDescription) | Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio | Moderate | cat.time-and-media, wcag2a, wcag142, experimental | failure, needs review | +| [p-as-heading](https://dequeuniversity.com/rules/axe/4.1.1-daisy/p-as-heading?application=RuleDescription) | Ensure p elements are not used to style headings | Serious | cat.semantics, wcag2a, wcag131, experimental | failure | +| [table-fake-caption](https://dequeuniversity.com/rules/axe/4.1.1-daisy/table-fake-caption?application=RuleDescription) | Ensure that tables with a caption use the <caption> element. | Serious | cat.tables, experimental, wcag2a, wcag131, section508, section508.22.g | failure | +| [td-has-header](https://dequeuniversity.com/rules/axe/4.1.1-daisy/td-has-header?application=RuleDescription) | Ensure that each non-empty data cell in a large table has one or more table headers | Critical | cat.tables, experimental, wcag2a, wcag131, section508, section508.22.g | failure | ## Deprecated Rules diff --git a/lib/checks/aria/aria-required-children-evaluate.js b/lib/checks/aria/aria-required-children-evaluate.js index 7b225d1a26..fdce5b330b 100644 --- a/lib/checks/aria/aria-required-children-evaluate.js +++ b/lib/checks/aria/aria-required-children-evaluate.js @@ -10,16 +10,22 @@ import { hasContentVirtual, idrefs } from '../../commons/dom'; * Get all owned roles of an element */ function getOwnedRoles(virtualNode) { + const parentRole = getRole(virtualNode, { dpub: true }); + const ownedRoles = []; const ownedElements = getOwnedVirtual(virtualNode); for (let i = 0; i < ownedElements.length; i++) { let ownedElement = ownedElements[i]; - let role = getRole(ownedElement); + let role = getRole(ownedElement, { dpub: true }); // if owned node has no role or is presentational we keep // parsing the descendant tree. this means intermediate roles // between a required parent and child will fail the check - if (['presentation', 'none', null].includes(role)) { + if ( + ['presentation', 'none', null].includes(role) || + (['list'].includes(role) && + ['doc-bibliography', 'doc-endnotes'].includes(parentRole)) + ) { ownedElements.push(...ownedElement.children); } else if (role) { ownedRoles.push(role); diff --git a/lib/checks/lists/listitem-evaluate.js b/lib/checks/lists/listitem-evaluate.js index aebcbd8cc9..b00c140276 100644 --- a/lib/checks/lists/listitem-evaluate.js +++ b/lib/checks/lists/listitem-evaluate.js @@ -1,5 +1,5 @@ import { getComposedParent } from '../../commons/dom'; -import { isValidRole } from '../../commons/aria'; +import { getRoleType, isValidRole } from '../../commons/aria'; function listitemEvaluate(node) { const parent = getComposedParent(node); @@ -16,6 +16,10 @@ function listitemEvaluate(node) { } if (parentRole && isValidRole(parentRole)) { + if (getRoleType(parentRole) === 'list') { + return true; + } + this.data({ messageKey: 'roleNotValid' }); diff --git a/lib/checks/lists/only-listitems-evaluate.js b/lib/checks/lists/only-listitems-evaluate.js index d1ab863428..1e76ef6ada 100644 --- a/lib/checks/lists/only-listitems-evaluate.js +++ b/lib/checks/lists/only-listitems-evaluate.js @@ -1,5 +1,5 @@ import { isVisible } from '../../commons/dom'; -import { getRole } from '../../commons/aria'; +import { getRole, getRoleType } from '../../commons/aria'; function onlyListitemsEvaluate(node, options, virtualNode) { let hasNonEmptyTextNode = false; @@ -24,7 +24,8 @@ function onlyListitemsEvaluate(node, options, virtualNode) { isEmpty = false; const isLi = actualNode.nodeName.toUpperCase() === 'LI'; const role = getRole(vNode); - const isListItemRole = role === 'listitem'; + const isListItemRole = + role === 'listitem' || getRoleType(role) === 'listitem'; if (!isLi && !isListItemRole) { badNodes.push(actualNode); diff --git a/package-lock.json b/package-lock.json index 7b7a697c81..882b4c9178 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "axe-core", - "version": "4.1.1", + "name": "@daisy/axe-core-for-ace", + "version": "4.1.1-daisy.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d16519fa0f..bb47e60f5c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "axe-core", + "name": "@daisy/axe-core-for-ace", "description": "Accessibility engine for automated Web UI testing", - "version": "4.1.1", + "version": "4.1.1-daisy.0", "license": "MPL-2.0", "engines": { "node": ">=4" @@ -50,6 +50,15 @@ ], "main": "axe.js", "typings": "axe.d.ts", + "files": [ + "LICENSE", + "README.md", + "CHANGELOG.md", + "locales/**/*", + "axe.js", + "axe.min.js", + "axe.d.ts" + ], "standard-version": { "scripts": { "postbump": "npm ci && npm run sri-update" @@ -64,6 +73,7 @@ "eslint": "eslint --color --format stylish '{lib,test,build,doc}/**/*.js' 'Gruntfile.js'", "test:headless": "node ./build/test/headless", "test": "tsc && grunt test", + "test-fast": "tsc && grunt test-fast", "test:examples": "node ./doc/examples/test-examples", "test:locales": "mocha test/test-locales.js", "test:rule-help-version": "mocha test/test-rule-help-version.js", @@ -149,5 +159,8 @@ "prettier --write", "git add" ] + }, + "publishConfig": { + "access": "public" } } diff --git a/test/commons/aria/get-role.js b/test/commons/aria/get-role.js index 6a82302dc6..e76a1bfb90 100644 --- a/test/commons/aria/get-role.js +++ b/test/commons/aria/get-role.js @@ -315,11 +315,29 @@ describe('aria.getRole', function() { assert.equal(aria.getRole(node, { dpub: true }), 'doc-chapter'); }); - it('does not returns DPUB roles with `dpub: false`', function() { + it('returns DPUB roles with `dpub: true` whilst ignoring implicit roles', function() { + var node = document.createElement('li'); + node.setAttribute('role', 'doc-chapter'); + flatTreeSetup(node); + assert.equal(aria.getRole(node, { dpub: true }), 'doc-chapter'); + }); + + it('returns non-DPUB implicit roles with `dpub: false/undefined`', function() { + var node = document.createElement('li'); + node.setAttribute('role', 'doc-chapter'); + var parentNode = document.createElement('div'); + parentNode.appendChild(node); + flatTreeSetup(parentNode); + assert.equal(aria.getRole(node, { dpub: false }), 'listitem'); + assert.equal(aria.getRole(node, { dpub: undefined }), 'listitem'); + }); + + it('does not returns DPUB roles with `dpub: false/undefined`', function() { var node = document.createElement('section'); node.setAttribute('role', 'doc-chapter'); flatTreeSetup(node); assert.isNull(aria.getRole(node, { dpub: false })); + assert.isNull(aria.getRole(node, { dpub: undefined })); }); }); @@ -379,6 +397,54 @@ describe('aria.getRole', function() { 'doc-chapter' ); }); + + it('respect the `dpub: false/undefined` option, whilst skipping the implicit roles due to non-abstract explicit role', function() { + var node = document.createElement('li'); + node.setAttribute('role', 'doc-chapter region'); + var parentNode = document.createElement('div'); + parentNode.appendChild(node); + flatTreeSetup(parentNode); + assert.equal( + aria.getRole(node, { fallback: true, dpub: false }), + 'region' + ); + assert.equal( + aria.getRole(node, { fallback: true, dpub: undefined }), + 'region' + ); + }); + + it('respect the `dpub: false/undefined` option, whilst ignoring the implicit roles and abstract explicit role', function() { + var node = document.createElement('li'); + node.setAttribute('role', 'doc-chapter section'); + var parentNode = document.createElement('div'); + parentNode.appendChild(node); + flatTreeSetup(parentNode); + assert.isNull( + aria.getRole(node, { noImplicit: true, fallback: true, dpub: false }) + ); + assert.isNull( + aria.getRole(node, { + noImplicit: true, + fallback: true, + dpub: undefined + }) + ); + }); + + it('respect the `dpub: false/undefined` option', function() { + var node = document.createElement('div'); + node.setAttribute('role', 'doc-chapter region'); + flatTreeSetup(node); + assert.equal( + aria.getRole(node, { fallback: true, dpub: false }), + 'region' + ); + assert.equal( + aria.getRole(node, { fallback: true, dpub: undefined }), + 'region' + ); + }); }); describe('noPresentational is honored', function() { diff --git a/test/runner.tmpl b/test/runner.tmpl index 6c71d29d20..d673adba45 100644 --- a/test/runner.tmpl +++ b/test/runner.tmpl @@ -24,7 +24,8 @@