Skip to content
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

Add aria label to Nav block on front of site #39161

Merged
merged 5 commits into from
Mar 14, 2022
Merged

Conversation

getdave
Copy link
Contributor

@getdave getdave commented Mar 2, 2022

Description

Currently when rendered on the front of the site the Navigation block has no accessible label to identify it. We have a Menu name field on the block which is saved to the post_title field of the underlying wp_navigation post.

This PR utilises the Menu name as the aria-label attribute on the main <nav> tag on the front of the site (only).

I added an e2e test to provide coverage.

Closes #24369.

Limitations

I'm aware of the following:

  • Menu names are automatically generated by the block so they may not always be the most descriptive out of the box (although they can be edited in the inspector controls under the Advanced section).
  • If you reuse the same Navigation Menu (i.e. wp_navigation) across multiple Navigation block's on the same page then you will have duplicate aria-labels. This is probably an edge case. We could add an additional aria-label` field to the block if necessary but I'm unclear on how we could dedupe names across Nav blocks on a page.

Testing Instructions

  1. New Post.
  2. Add Nav block.
  3. Add some items.
  4. Publish post being sure to save the Navigation Menu in the entity saving flow at the publish step.
  5. Switch to front of site.
  6. Inspect Nav block <nav> tag for presence of aria-label attribute.
  7. Try renaming the Nav in the editor - under Advanced -> Menu name.
  8. Update the post.
  9. Inspect Nav block <nav> tag for presence of modified aria-label attribute.

Screenshots

Screen Shot 2022-03-02 at 13 40 03

Types of changes

New feature (non-breaking change which adds functionality)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • I've tested my changes with keyboard and screen readers.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR (please manually search all *.native.js files for terms that need renaming or removal).
  • I've updated related schemas if appropriate.

@getdave getdave added [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). Needs Accessibility Feedback Need input from accessibility [Block] Navigation Affects the Navigation Block labels Mar 2, 2022
@getdave getdave self-assigned this Mar 2, 2022
@getdave getdave mentioned this pull request Mar 2, 2022
38 tasks
@github-actions
Copy link

github-actions bot commented Mar 2, 2022

Size Change: 0 B

Total Size: 1.16 MB

ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
build/block-editor/index.min.js 144 kB
build/block-editor/style-rtl.css 14.8 kB
build/block-editor/style.css 14.8 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.56 kB
build/block-library/blocks/cover/style.css 1.56 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 649 B
build/block-library/blocks/navigation-link/editor.css 650 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 389 B
build/block-library/blocks/pullquote/style.css 388 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 201 B
build/block-library/blocks/quote/style.css 201 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-library/common-rtl.css 934 B
build/block-library/common.css 932 B
build/block-library/editor-rtl.css 9.92 kB
build/block-library/editor.css 9.92 kB
build/block-library/index.min.js 168 kB
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.4 kB
build/block-library/style.css 11.4 kB
build/block-library/theme-rtl.css 665 B
build/block-library/theme.css 670 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 46.4 kB
build/components/index.min.js 217 kB
build/components/style-rtl.css 15.6 kB
build/components/style.css 15.6 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.05 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 4.04 kB
build/edit-navigation/style.css 4.05 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/index.min.js 29.8 kB
build/edit-post/style-rtl.css 7.07 kB
build/edit-post/style.css 7.07 kB
build/edit-site/index.min.js 41.9 kB
build/edit-site/style-rtl.css 7.44 kB
build/edit-site/style.css 7.42 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.39 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/list-reusable-blocks/style-rtl.css 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

Copy link
Contributor

@alexstine alexstine left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@getdave Thanks for the PR.

I think for me, I would be concerned that the aria-label appearing on the page multiple times could actually do more harm than good. Especially if it sends users mixed messages. E.g. If you named your menu "Main Navigation" and put the block in the header/footer, this is now confusing as usually this wording would only appear at the top of the site.

You are seeing my mistrust of users come out on this. :(

Copy link
Contributor

@MarcoZehe MarcoZehe left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with @alexstine that we wanna be very careful with these. They should be named, yes, but the name should definitely not be duplicated. E. g. if there are several nav blocks, each should have a distinct name.

Copy link
Contributor

@joedolson joedolson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems to me like there's a fair argument that if the same navigation menu appears multiple times, it should have the same name. But if not, it shouldn't have a fully unique name, and only be differentiated by order in the DOM, e.g. "Main Navigation (1 of 2)", "Main Navigation (2 of 2)". Having fully unique names would imply that the menus have different content.

Is it feasible to add menu counts to differentiate if a menu is reused?

@getdave
Copy link
Contributor Author

getdave commented Mar 3, 2022

Thanks for all the feedback folks. That's super helpful.

So what I'm hearing is that:

  1. We should avoid have identical aria-labels across a given page. I agree 👍
  2. We can use a numerical identifier to differentiate if the same menu name appears on the page more than once.

Let me know if that is correct.

I'll have to look into how we can do this but it could be possible.

Thanks again all 🙇‍♂️

@draganescu
Copy link
Contributor

draganescu commented Mar 3, 2022

We can count on render or store the association between a navigation block and it's navigation CPT in any block template.

Given that this association does not change often I think counting on render is not a good choice.

Given we already store the navigation data in the DB whenever a navigation block is associated with a CPT we can send that to the API and have all the navigation CPTs have a prop that holds a count of how many navigation blocks are associated.

My proposal is not fancy, I know.

The other way, @getdave @alexstine is to combine the name of the navigation with the name of the parent template part. However this does not block a user to use the same navigation in the same template part multiple times. But for that we could add a warning in the block inspector "You are using this navigation in this template part already". <- I think this option is better than storing in the DB.

@alexstine
Copy link
Contributor

@draganescu I think we should just store it in the DB or run a .length on render. We're talking about super simple information, right?

@getdave
Copy link
Contributor Author

getdave commented Mar 4, 2022

Following the feedback, I searched the codebase for any prior art on something like this. I found something similar in the Template Part block:

Therefore, I've opted to keep things simple and added a commit which implements a very basic method of ensuring a unique ID based on remembering the names of previously rendered menus and appending an ID if the menu has already been rendered.

Eg:

My Menu
My Menu 1
My Menu 2
...etc

I'd be cautious about adding DB queries here as the block would need to run them on render. That said I'm open to suggestions or alternative PRs if folk believe that would be a better option.

@alexstine
Copy link
Contributor

@getdave Is there any way I could get a test site for this? The navigation block is still pretty inaccessible for me to configure.

@draganescu
Copy link
Contributor

@alexstine isn't it more clear to have the label be Main Navigation Footer compared to Main Navigation 2?

Copy link
Contributor

@anton-vlasenko anton-vlasenko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tested this PR using the testing instructions above, and the value of the aria-label attribute changed according to the Menu name parameter.
Great job.
I only have one small suggestion on how to possibly improve the code.

packages/block-library/src/navigation/index.php Outdated Show resolved Hide resolved
@getdave
Copy link
Contributor Author

getdave commented Mar 8, 2022

isn't it more clear to have the label be Main Navigation Footer compared to Main Navigation 2?

@draganescu I see an argument for looking at this. Indeed, in the future the Nav block may be more aware of its location within a given template. However, I think we'll need to jump through a few more hoops to get to that solution.

This PR does solve the "must be unique" problem. I wonder how we feel about merging and iterating? Is this better than what we have now?

...combine the name of the navigation with the name of the parent template part

@draganescu Are you aware of any APIs that might allow us to achieve this? Also noting we'd still need the logic to de-duplicate within a given Template Part.

@getdave
Copy link
Contributor Author

getdave commented Mar 8, 2022

@getdave Is there any way I could get a test site for this? The navigation block is still pretty inaccessible for me to configure.

@alexstine I'm really sorry but I don't have a throw away instance available where I can have this PR running.

Are you able to

  • switch to Code View (shortcut: ⇧⌥⌘M).
  • paste the following into the editor:
<!-- wp:navigation --><!-- wp:navigation-link {"label":"WP.org","url":"http://www.wordpress.org","kind":"custom","isTopLevelLink":true} /--><!-- wp:navigation-link {"label":"Google","url":"http://www.google.com","kind":"custom","isTopLevelLink":true} /--><!-- wp:navigation-link {"label":"BBC","url":"http://www.bbc.co.uk","kind":"custom","isTopLevelLink":true} /--><!-- /wp:navigation -->
  • exit code view (shortcut: ⇧⌥⌘M).

As all of the links are to external URLs it should create a configured Nav block for you.

I hope that helps?

@alexstine
Copy link
Contributor

@getdave When I test your built branch with the code you provided, the aria-label is empty.

<nav class="wp-container-8 is-responsive wp-block-navigation" aria-label="">

Thoughts?

Thanks.

@getdave
Copy link
Contributor Author

getdave commented Mar 9, 2022

@getdave When I test your built branch with the code you provided, the aria-label is empty.

Hi @alexstine. I'm really sorry this is proving tricky to test. Let me see what I can do to help. I appreciate your patience.

I suspect what is happening is that the Navigation Menu Post is not being created from the inner blocks which have been pasted into the Code View.

I think once you exit Code View you will need to reselect the Nav block in order for the items to be transformed into a wp_navigation post. This might take a few seconds depending on your network connection.

Here's a video of me walking through the process. I hope that is able to help?

Screen.Capture.on.2022-03-09.at.06-07-38.mov

I would suggest these are the new steps:

  • new Post
  • switch to Code View (shortcut: ⇧⌥⌘M).
  • paste the following into the editor:
<!-- wp:navigation --><!-- wp:navigation-link {"label":"WP.org","url":"http://www.wordpress.org","kind":"custom","isTopLevelLink":true} /--><!-- wp:navigation-link {"label":"Google","url":"http://www.google.com","kind":"custom","isTopLevelLink":true} /--><!-- wp:navigation-link {"label":"BBC","url":"http://www.bbc.co.uk","kind":"custom","isTopLevelLink":true} /--><!-- /wp:navigation -->
  • exit code view (shortcut: ⇧⌥⌘M).
  • select the Navigation block
  • jump to the Advanced section of the block's Inspector controls (right hand siderbar)
  • check the Menu name field exists and is populated

Screen Shot 2022-03-09 at 06 12 46

- Publish post - check that the Navigation Menu is saved.

Screen Shot 2022-03-09 at 06 13 43

  • check front of site for aria-label.

This whole problem tells me we need to show a notice when the Navigation menu is created from inner blocks. That way it would be obvious when the operation had succeeded. As things stand there is no visual or auditory feedback that this has happened.

@alexstine
Copy link
Contributor

@getdave This is almost good for me. What I would like to see is every navigation output having a label. E.g.

  1. If I add 2 navigation blocks, I can find the first navigation block and then I hear "navigation name 1" on the second menu. What I would like to hear is "navigation name 1", "navigation name 2".
  2. If there is only one navigation menu on the page, it should just be the navigation name.

Does this make sense? Probably just needs some conditional tweaking.

In the future, I would like to see authors receive a warning when the same navigation block is added to the content with the same name. I believe we can teach accessibility through a means of guiding. However, this makes our problem better for now which is why I am in favor of this PR. 👍

Thanks.

@getdave
Copy link
Contributor Author

getdave commented Mar 10, 2022

Does this make sense? Probably just needs some conditional tweaking.

I took a look at this and at the moment I can't see a way to achieve it.

When we render a given block X we don't know about any blocks that will be rendered afterwards. Therefore when it comes to outputting the block can choose to conditionally add a numeric ID based on other blocks.

Scenario:

  1. we come to the block no other Nav blocks have been seen so don't add a number. Result: My Navigation.
  2. we come to the next block and the previous block has been seen so we add a number. Result My Navigation 1.

What we can't do is output My Navigation for step 1 and then retrospectively change that to My Navigation 1 when we detect the 2nd block in step 2.

At the moment I'm a bit stumped. Will ask around for any advice/input.

Copy link
Contributor

@scruffian scruffian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This solution looks better than what we have at present. I think we should merge this and follow up with improvements.

@joedolson
Copy link
Contributor

From a user comprehension standpoint, I think it would better if the added count started at 2. Having the first appearance unnumbered is fine, but the 2nd should be numbered based on actual count.

@alexstine
Copy link
Contributor

I must be honest. I am not sure excluding "1" is a good idea especially if the first item would be "2". Can you imagine? A user hears "My Navigation 2" and they are going to start thinking where "My Navigation 1" is. Honestly, I am not sure this is really going to help a lot at the end of the day.

It would be great to have other screen reader users feedback in here.

Maybe it is worth waiting for some type of accessibility check for this block. After all, sometimes the best things are worth waiting for. 👍

Just my thoughts...

Thanks.

@joedolson
Copy link
Contributor

@alexstine I'm not sure you understood what I was suggesting correctly. Based on @getdave's comment, the first found block doesn't know whether there will be additional, so it can't be numbered. Following on that, the first block would be 'Main', the second would be 'Main 2', because it's the second found block.

I think this makes a lot more sense than the first block being "Main", and the second being "Main 1". To me, that would be very confusing.

@alexstine
Copy link
Contributor

@joedolson

I think this makes a lot more sense than the first block being "Main", and the second being "Main 1". To me, that would be very confusing.

Yes, I completely agree.

I still struggle with though if excluding the "1" will cause any confusion. You don't think this could play an issue at all?

@joedolson
Copy link
Contributor

@alexstine I don't know about "no issue". I do think that a count of one is commonly represented by existence, without an actual number present.

I think that the scenario where only one menu is present including a count would be worse. The presence of "Menu 1" strongly implies that there are more instances of this menu.

It would be ideal to have the count present on all instances of a menu if there was more than one, but in my opinion, omitting the 1 is not a deal breaker, and is less of a problem than including a count unnecessarily.

Copy link
Contributor

@anton-vlasenko anton-vlasenko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@alexstine
Copy link
Contributor

Sounds fair.

@getdave Can you change the code so the second menu on the page gets number "2" to start? First menu will have no number, second will have "2", third will have "3", and so on.

After giving this some thought, I think it is an improvement and we should get it in.

@scruffian
Copy link
Contributor

Can you change the code so the second menu on the page gets number "2" to start? First menu will have no number, second will have "2", third will have "3", and so on.

I pushed a commit to do this.

Copy link
Contributor

@alexstine alexstine left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good.

@getdave
Copy link
Contributor Author

getdave commented Mar 14, 2022

Thanks all. e2e test failure seems unrelated. Will re-run and look to merge.

Tests still failing. Have rebased to see if that helps. They seem completely unrelated to this PR.

@getdave getdave force-pushed the add/aria-label-to-nav-block branch from b8513f7 to 2a43c00 Compare March 14, 2022 08:45
@getdave
Copy link
Contributor Author

getdave commented Mar 14, 2022

Looks like e2e tests have caught an unrelated bug.

I'm going to force merge this one.

@getdave getdave merged commit ee405ee into trunk Mar 14, 2022
@getdave getdave deleted the add/aria-label-to-nav-block branch March 14, 2022 09:38
@github-actions github-actions bot added this to the Gutenberg 12.9 milestone Mar 14, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Navigation Affects the Navigation Block [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). Needs Accessibility Feedback Need input from accessibility
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Navigation block should be identifiable with aria-label
7 participants