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

Use onClick to make Site Editor Open Admin Sidebar Button keyboard accessible #50067

Closed
wants to merge 2 commits into from

Conversation

jeryj
Copy link
Contributor

@jeryj jeryj commented Apr 25, 2023

What?

The Open Admin Sidebar Button only works with a mouse click since it uses onMouseDown to open the Admin Sidebar. This PR switches from onMouseDown to onClick. When the sidebar is in the open state, the button label says, "Open Admin Sidebar," but the sidebar is already open.

To get the conversation started, I switched it to a toggle as the classNames within the file call it a toggle. However, other options are possible:

Alternative Proposals:

  1. When the sidebar is open, have the button go back to the dashboard. This action would mean after clicking the Open Admin Dashboard <button>, changing it to an <a> element to semantically describe the functionality and give it the proper href. Switching the element's action like that feels a little confusing from a screen reader perspective.

  2. Disable the button when the panel is open as it has no action. and send focus to the Back to Dashboard Link. This could be a fine solution, but would require more work as the Back to Dashboard link isn't within the same component, and would require more complex work to figure out the focus management code. I didn't want to go through with that interaction unless others agreed it was the right way to go.

Why?

The Site Editor Open Admin Sidebar button is not keyboard accessible.

How?

Switches the button from using onMouseDown to onClick to make it keyboard accessible, and switching the behavior of the button to a toggle.

Testing Instructions

  1. Go to /wp-admin/site-editor.php
  2. Click the editor pane to close the sidebar
  3. Click the logo in the top left corner of the page to close the sidebar
  4. Click the logo again to close the sidebar

Testing Instructions for Keyboard

  1. Go to /wp-admin/site-editor.php
  2. Click the editor pane to close the sidebar
  3. Use the keyboard to get focus to the Wordpress logo in the top left corner of the page
  4. Tooltip should be "Open Admin Sidebar"
  5. Press Enter to close the sidebar.
  6. Tooltip should be "Close Admin Sidebar"
  7. Press Enter to close the sidebar

Screenshots or screencast

On the site editor, when the Admin Sidebar is open, the button label and tooltip says "Open Admin Sidebar," but it is already open, so the button doesn't do anything when clicked again which makes it seem broken.

I switched it into a toggle to open/close the Admin Sidebar as a starting point to at least fix the accessbility of it, as a non-functional button feels broken. I considered a couple other options but they had their own issues:

1. When the sidebar is open, have the button go back to the dashboard. This action would mean switching it from a `<button>` when the dashboard is closed, and then changing it to an `<a>` element afterwards to semantically describe the functionality. Switching the element's action like that feels confusing.

2. Disable focus on the button when the panel is open. When the panel is closed, clicking the Open Admin Sidebar button could open the sidebar and then place focus on the first item of the navigation menu. This could be a fine solution, but would require more work, so I didn't want to go through with that interaction unless others agreed it was desired. Switching to a toggle was the simplest way to address it in a sensible way.
@jeryj
Copy link
Contributor Author

jeryj commented Apr 25, 2023

Follow-up: Sidebar is being removed from the labelling in many spots, and this button uses Open Admin Sidebar. I didn't remove the Sidebar from the label as Open Admin felt off. Is there an alternative name we can use for this panel?

@github-actions
Copy link

Size Change: +11 B (0%)

Total Size: 1.37 MB

Filename Size Change
build/edit-site/index.min.js 64.6 kB +11 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/annotations/index.min.js 2.78 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 483 B
build/block-directory/index.min.js 7.2 kB
build/block-directory/style-rtl.css 1.04 kB
build/block-directory/style.css 1.04 kB
build/block-editor/content-rtl.css 4.17 kB
build/block-editor/content.css 4.17 kB
build/block-editor/default-editor-styles-rtl.css 403 B
build/block-editor/default-editor-styles.css 403 B
build/block-editor/index.min.js 201 kB
build/block-editor/style-rtl.css 15.1 kB
build/block-editor/style.css 15.1 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 90 B
build/block-library/blocks/archives/style.css 90 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 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 138 B
build/block-library/blocks/audio/theme.css 138 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 91 B
build/block-library/blocks/avatar/style.css 91 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 587 B
build/block-library/blocks/button/editor.css 587 B
build/block-library/blocks/button/style-rtl.css 628 B
build/block-library/blocks/button/style.css 627 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 B
build/block-library/blocks/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 121 B
build/block-library/blocks/code/style.css 121 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 409 B
build/block-library/blocks/columns/style.css 409 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-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 199 B
build/block-library/blocks/comment-template/style.css 198 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-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.6 kB
build/block-library/blocks/cover/style.css 1.59 kB
build/block-library/blocks/details-summary/editor-rtl.css 65 B
build/block-library/blocks/details-summary/editor.css 65 B
build/block-library/blocks/details-summary/style-rtl.css 61 B
build/block-library/blocks/details-summary/style.css 61 B
build/block-library/blocks/details/style-rtl.css 54 B
build/block-library/blocks/details/style.css 54 B
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 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 138 B
build/block-library/blocks/embed/theme.css 138 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 269 B
build/block-library/blocks/file/style.css 270 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 984 B
build/block-library/blocks/gallery/editor.css 988 B
build/block-library/blocks/gallery/style-rtl.css 1.55 kB
build/block-library/blocks/gallery/style.css 1.55 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 654 B
build/block-library/blocks/group/editor.css 654 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 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 340 B
build/block-library/blocks/html/editor.css 341 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/style-rtl.css 652 B
build/block-library/blocks/image/style.css 652 B
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/latest-comments/style-rtl.css 357 B
build/block-library/blocks/latest-comments/style.css 357 B
build/block-library/blocks/latest-posts/editor-rtl.css 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 478 B
build/block-library/blocks/latest-posts/style.css 478 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 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 507 B
build/block-library/blocks/media-text/style.css 505 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 716 B
build/block-library/blocks/navigation-link/editor.css 715 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 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/editor-rtl.css 2.13 kB
build/block-library/blocks/navigation/editor.css 2.14 kB
build/block-library/blocks/navigation/style-rtl.css 2.22 kB
build/block-library/blocks/navigation/style.css 2.21 kB
build/block-library/blocks/navigation/view-modal.min.js 2.81 kB
build/block-library/blocks/navigation/view.min.js 447 B
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 401 B
build/block-library/blocks/page-list/editor.css 401 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 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 279 B
build/block-library/blocks/paragraph/style.css 281 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/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 501 B
build/block-library/blocks/post-comments-form/style.css 501 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 B
build/block-library/blocks/post-excerpt/editor-rtl.css 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 322 B
build/block-library/blocks/post-featured-image/style.css 322 B
build/block-library/blocks/post-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/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 281 B
build/block-library/blocks/post-template/style.css 281 B
build/block-library/blocks/post-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 B
build/block-library/blocks/post-title/style-rtl.css 100 B
build/block-library/blocks/post-title/style.css 100 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 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 335 B
build/block-library/blocks/pullquote/style.css 335 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 288 B
build/block-library/blocks/query-pagination/style.css 284 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 149 B
build/block-library/blocks/rss/editor.css 149 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 408 B
build/block-library/blocks/search/style.css 406 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 329 B
build/block-library/blocks/shortcode/editor.css 329 B
build/block-library/blocks/site-logo/editor-rtl.css 756 B
build/block-library/blocks/site-logo/editor.css 756 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 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 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 B
build/block-library/blocks/social-link/editor-rtl.css 184 B
build/block-library/blocks/social-link/editor.css 184 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.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 359 B
build/block-library/blocks/spacer/editor.css 359 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 651 B
build/block-library/blocks/table/style.css 650 B
build/block-library/blocks/table/theme-rtl.css 157 B
build/block-library/blocks/table/theme.css 157 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 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 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 B
build/block-library/blocks/video/style-rtl.css 179 B
build/block-library/blocks/video/style.css 179 B
build/block-library/blocks/video/theme-rtl.css 139 B
build/block-library/blocks/video/theme.css 139 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.12 kB
build/block-library/common.css 1.12 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 11.8 kB
build/block-library/editor.css 11.8 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 204 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 12.8 kB
build/block-library/style.css 12.8 kB
build/block-library/theme-rtl.css 698 B
build/block-library/theme.css 703 B
build/block-serialization-default-parser/index.min.js 1.13 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 51.1 kB
build/commands/index.min.js 14.8 kB
build/commands/style-rtl.css 789 B
build/commands/style.css 786 B
build/components/index.min.js 210 kB
build/components/style-rtl.css 11.8 kB
build/components/style.css 11.8 kB
build/compose/index.min.js 12.4 kB
build/core-data/index.min.js 16.3 kB
build/customize-widgets/index.min.js 12.2 kB
build/customize-widgets/style-rtl.css 1.41 kB
build/customize-widgets/style.css 1.41 kB
build/data-controls/index.min.js 718 B
build/data/index.min.js 8.68 kB
build/date/index.min.js 40.4 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.76 kB
build/edit-post/classic-rtl.css 571 B
build/edit-post/classic.css 571 B
build/edit-post/index.min.js 35.2 kB
build/edit-post/style-rtl.css 7.83 kB
build/edit-post/style.css 7.83 kB
build/edit-site/style-rtl.css 10.2 kB
build/edit-site/style.css 10.2 kB
build/edit-widgets/index.min.js 17.3 kB
build/edit-widgets/style-rtl.css 4.56 kB
build/edit-widgets/style.css 4.56 kB
build/editor/index.min.js 45.9 kB
build/editor/style-rtl.css 3.49 kB
build/editor/style.css 3.48 kB
build/element/index.min.js 4.95 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 7.26 kB
build/format-library/style-rtl.css 557 B
build/format-library/style.css 556 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.79 kB
build/keycodes/index.min.js 1.94 kB
build/list-reusable-blocks/index.min.js 2.14 kB
build/list-reusable-blocks/style-rtl.css 865 B
build/list-reusable-blocks/style.css 865 B
build/media-utils/index.min.js 2.99 kB
build/notices/index.min.js 977 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.35 kB
build/primitives/index.min.js 960 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 942 B
build/react-i18n/index.min.js 702 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.75 kB
build/reusable-blocks/index.min.js 2.26 kB
build/reusable-blocks/style-rtl.css 265 B
build/reusable-blocks/style.css 265 B
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 2.09 kB
build/shortcode/index.min.js 1.52 kB
build/style-engine/index.min.js 1.55 kB
build/token-list/index.min.js 650 B
build/url/index.min.js 3.74 kB
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react-dom.min.js 41.8 kB
build/vendors/react.min.js 4.02 kB
build/viewport/index.min.js 1.09 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.3 kB
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.18 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@github-actions
Copy link

github-actions bot commented Apr 25, 2023

Flaky tests detected in 6e809d6.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/4798993907
📝 Reported issues:

@joedolson
Copy link
Contributor

Thanks, @jeryj!

If this is a toggle, then the accessible name shouldn't include the word 'Open'; it should describe the object that is being activated; the word 'Toggle' would be better. The state of the toggle should be communicated using the button's state, via aria-expanded.

Removing the word sidebar here is only viable if it can be replaced with something else more meaningful - just 'Admin' would just not be accurate.

I'm not 100% certain what control we're looking at here; if I try to follow the instructions using the Gutenberg plugin, I'm seeing that the control says 'Open Navigation Sidebar' - is this changed recently, or am I looking at the wrong control?

@alexstine alexstine requested a review from afercia April 25, 2023 17:17
@afercia
Copy link
Contributor

afercia commented Apr 26, 2023

Thanks for opening this PR @jeryj. I'm a bit surprised #48886 went in, as it started with the intent of polishing the CSS animation and ended up with introducing functional changes that break accessibility and keyboard interaction. I'm not sure that's the best way to keep the quality of this project high.

That said, a few notes:

@mtias
Copy link
Member

mtias commented Apr 26, 2023

Thanks for the follow up @jeryj. Let's fix the event handler oversight first and foremost #50094.

For the broader navigation consideration, the situation before with swapping the element tag was clunky and had subtle bugs, so best to avoid. The issue here is the longer term plan is for the button to allow going up in levels quickly (like a "home" button) but that only works if the flow is controlled. When it functions as a link it's not very clear and the effect is disruptive (it's not easy to get back). So let's avoid the dashboard link.

We could add the toggle behavior (I believe @richtabor also suggested that) but under the caveat that it'd be a temporary measure. I worry int hat case we'll train some muscle memory only to be changed at a later phase. I think it's safer from that perspective to keep it inert, but open to other suggestions.

@richtabor
Copy link
Member

We could add the toggle behavior (I believe @richtabor also suggested that) but under the caveat that it'd be a temporary measure. I worry int hat case we'll train some muscle memory only to be changed at a later phase. I think it's safer from that perspective to keep it inert, but open to other suggestions.

Agreed, I'm not thinking it should toggle any longer. Though we do need a method for entering the canvas (edit view) from via keyboard.

@afercia
Copy link
Contributor

afercia commented Apr 26, 2023

I think it's safer from that perspective to keep it inert, but open to other suggestions.

To me, keeping a button that doesn't do anything is arguably a good UI. If this button was changed in preparation for a future feature (the 'go back' functionality) but that feature is not ready yet, I'd argue the change shouldn't have been merged in the first place. In its current state, the UI is not functional. #48886 should have been limited to its original scope: the CSS animation. Instead, it ended up introducing functional and breaking changes.

One more thing that likely broke in #48886 is the focus style of the 'navigate regions': when navigating the main UI sections with Control + backtick (or Control + Option + N), a blue outline highlights the focused region. The sit eicon button now partially hides the outline, I guess because its wrapper has a dark background. Screenshot:

Screenshot 2023-04-26 at 15 09 58

@mtias
Copy link
Member

mtias commented Apr 26, 2023

No, that visual bug is unrelated to that change.

@joedolson
Copy link
Contributor

The issue here is the longer term plan is for the button to allow going up in levels quickly (like a "home" button) but that only works if the flow is controlled.

This sounds interesting, but potentially confusing - are you saying that the long term goal is to use this single button to perform different actions depending on context? In my view, that's already part of the problem with this control - that it doesn't perform a consistent action, so it's very difficult to predict. Will this long-term goal include any kind of breadcrumb-like affordance that would help users understand how it performs?

@mtias
Copy link
Member

mtias commented Apr 26, 2023

@joedolson yes, the intent is to see if we can establish that control as a fixed anchor point that allows users to exit any full screen state (like the editor) and then also navigate back to the root of the dashboard quickly, very similar to a home button (exit app, press again to go to your Home Screen root). There's a small section on the home button here for more context. It's meant to also work alongside plugin specific sections and sub-sections, with a breadcrumb as part of the design next to the section title. This may or may not work in practice; as you mentioned, elements that perform contextual actions can be tricky, but also quite dependable if established well. Prototypes seem to suggest there's potential in there, but it's hard to fully grasp until more parts of the experience are developed.

@jeryj
Copy link
Contributor Author

jeryj commented Apr 27, 2023

For now I see three things that need resolved for interacting with the Site Editor with a keyboard to make it functional for now:

1. Be able to enter the Site Editor

As @richtabor mentioned, we can't use a keyboard to enter the Site Editor. Would an acceptable flow for now be:

  • make the editor canvas a tab stop
  • with the editor canvas focused, press Enter to collapse the sidebar
  • which moves focus to the first focusable element within the canvas

If this is OK, I can work on a PR for this this to see how it feels.

2. Rename the label on the control that opens the navigation

I wouldn't say it should be the long-term one, but reverting to "Open Navigation" seems clearer for now until the sidebar is more of an admin panel.

3. Do something with the control when the navigation is open.

When the Navigation is opened, we could disable the "Open Navigation," control and move focus to the "Back to Dashboard" button.

I know these may not be perfect solutions, but they would be a point to iterate from.

@mtias
Copy link
Member

mtias commented Apr 27, 2023

1.

Indeed, I think being able to focus on the canvas frame would be great for the top level routes. Other sections, like "styles" or individual templates like "archive" have a dedicated edit button. Being able to jump into the editor at root levels is more of a shortcut to editing the homepage, essentially.

2.

"Open Navigation" can be confusing since there's a section called "Navigation" for managing nav menus already. But it'd be nice to have a straightforward name.

@joedolson
Copy link
Contributor

Perhaps "editor navigation", to differentiate it from the navigation management tools. It might be good to name both tools unambiguously: "Site navigation" vs "Editor navigation".

@jeryj
Copy link
Contributor Author

jeryj commented Apr 28, 2023

Perhaps "editor navigation", to differentiate it from the navigation management tools. It might be good to name both tools unambiguously: "Site navigation" vs "Editor navigation".

I'm not sure what the future of that Editor Sidebar panel is, but I do agree that in it's current state it does function as a Navigation. So, using the term "Navigation" in the button label most accurately describes its function. I'd be happy with "Open Editor Navigation," then once more things are added/that panel is changed to be more than a navigation, we can rename it to accurately describe its function.

@draganescu
Copy link
Contributor

Definitely missing something obvious here but:

  • can we have a button internally toggles between role button and role link:
    • being a button that opens the Site View when we're in Edit View and having a label of "Open Site VIew"
    • being a link that exits the Site View when we're in Site View and having a label of "Exit to Dashboard"

This way:

  • we avoid having a button that does nothing in trunk
  • we start the process of separating the idea of WP admin from the new complex UX in the site editor
  • we avoid the problems of switching from button to link under the hood, not it'd always be a button

@mtias
Copy link
Member

mtias commented Apr 28, 2023

@draganescu that's what we had before — it's clunky because the tag change causes repaints and the flow breaks.

@draganescu
Copy link
Contributor

@mtias does changing the role account to being a tag change? I am proposing it stays a button.

@mtias
Copy link
Member

mtias commented May 3, 2023

Ah, I thought you meant at the component level

@jeryj
Copy link
Contributor Author

jeryj commented May 3, 2023

Ooooh - nice idea @draganescu! The <Button> component switches the tag based on the presence of an href. So, if switching the tag between <button> and <a> is the issue, I think the only way to preserve the tag is to have it as an <a> with role="button" when it's in the edit view, like:

const siteIconButtonProps = isBackToDashboardButton ? {
		href: dashboardLink,
		label: __( 'Go back to the Dashboard' ),
  	} : {
		href: dashboardLink,
		role: 'button',
		label: __( 'Site Editor Navigation' ),
		onClick: ( event ) => {
			event.preventDefault();
			if ( canvasMode === 'edit' ) {
				clearSelectedBlock();
				setCanvasMode( 'view' );
			}
		},
	};

I've tested it out in #50296, and it does preserve the WordPress W animation effect.

@jeryj jeryj closed this Jun 23, 2023
@priethor priethor added [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). and removed [a11y] Keyboard & Focus labels Jul 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes).
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants