-
Notifications
You must be signed in to change notification settings - Fork 780
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(landmark-unique): follow spec, aside -> landmark #4469
Conversation
@@ -128,6 +124,51 @@ describe('landmark-unique-matches', function () { | |||
}); | |||
}); | |||
|
|||
describe('aside should not match when scoped to a sectioning content element unless it has an accessible name', function () { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If you look at the rest of the test file, this newly added code is nearly copy-paste of the header and footer tests. Is that preferred, or should I attempt to reduce the repetition?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Repetition is fine, we can clean it up later if we decide to.
lib/rules/landmark-unique-matches.js
Outdated
function isAsideLandmark(asideElement) { | ||
return ( | ||
!closest( | ||
asideElement.parent, // closest() can match self, which we do not want, so start at parent element |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wouldn't have caught this without tests
lib/rules/landmark-unique-matches.js
Outdated
!closest( | ||
asideElement.parent, // closest() can match self, which we do not want, so start at parent element | ||
sectioningContentSelector | ||
) || !!accessibleTextVirtual(asideElement) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not 100% sure that this function, accessibleTextVirtual(), is 100% equivalent to the "accessible name" requirement of the specification (Section 3.4.9)
Thanks for being willing to take on a pr for this. Unfortunately I don't think this is the correct place for the change. We have a file implicit-html-roles that dictates what the role of an element is when it has no
Fixing that should then fix the landmark unique issue as the |
Oh that's great. Putting this aside-complementary logic in the landmark-unique matcher felt off to me, but I was patterning off of what was already there. Given what you wrote, I think the isHeaderFooterLandmark() function is redundant. In fact, I just checked and if I comment it out, then run Would you like me to update this pull request? |
Yep, that'd be great. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
self review
@@ -42,7 +25,3 @@ function isLandmarkVirtual(vNode) { | |||
|
|||
return landmarkRoles.indexOf(role) >= 0 || role === 'region'; | |||
} | |||
|
|||
function isHeaderFooterLandmark(headerFooterElement) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As mentioned in a previous comment, this function has apparently been redundant ever since the implicit role mapping was introduced/updated.
Awesome work! Thanks for the pr. Reviewed for security. |
## [4.10.0](v4.9.1...v4.10.0) (2024-07-29) ### Features - **new-rule:** summary elements must have an accessible name ([#4511](#4511)) ([0d8a99e](0d8a99e)), closes [#4510](#4510) ### Bug Fixes - **all-rules:** fix flakey all-rules firefox test ([#4467](#4467)) ([3f13aa1](3f13aa1)) - **aria-allowed-attr:** allow aria-multiline=false for element with contenteditable ([#4537](#4537)) ([f019068](f019068)) - **aria-allowed-attr:** allow aria-required=false when normally not allowed ([#4532](#4532)) ([2e242e1](2e242e1)) - **aria-prohibited-attr:** allow aria-label/ledby on decendants of widget ([#4541](#4541)) ([07c5d91](07c5d91)) - **aria-roledescription:** keep disabled with { runOnly: 'wcag2a' } ([#4526](#4526)) ([5b4cb9d](5b4cb9d)), closes [#4523](#4523) - **autocomplete-valid:** incomplete for invalid but safe values ([#4500](#4500)) ([e31a974](e31a974)), closes [#4492](#4492) - **build:** limit locales to valid files when using the --all-lang option ([#4486](#4486)) ([d3db593](d3db593)), closes [#4485](#4485) - colorio.js patch mocking CSS ([#4456](#4456)) ([3ef9353](3ef9353)), closes [#4400](#4400) - correct typos in texts ([#4499](#4499)) ([11fad59](11fad59)) - **landmark-unique:** follow spec, aside -> landmark ([#4469](#4469)) ([e32f803](e32f803)), closes [#4460](#4460) - **required-attr:** allow aria-valuetext on slider instead of valuenow ([#4518](#4518)) ([135898b](135898b)), closes [#4515](#4515) This PR was opened by a robot 🤖 🎉
Update the landmark-unique rule matcher for aside elements so that they are treated as landmarks using the same criteria specified in Sections 3.4.8 and 3.4.9 of the HTML Accessibility API Mappings 1.0.
Closes: #4460