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

Escape moves focus to editor region when in select mode #62196

Merged
merged 21 commits into from
Jun 26, 2024

Conversation

jeryj
Copy link
Contributor

@jeryj jeryj commented May 31, 2024

An escape keypress previously toggled the state between editing and select mode. This returns the behavior to the previous implementation of Escape clearing block focus. Now, when in select mode, escape focuses the editor region (showing the blue outline from region focus styles).

What?

  • In select mode, Escape selects the wrapping region
  • Shows a blue border when the canvas is focused

Why?

  • Allow block deselection using Escape
  • Show focus on canvas element

How?

Clears block selection and focuses the region wrapper by:

  • Using the unselect shortcut (escape)
  • Identify when this is happening via the navigation mode button focus (the only instance we want to capture this event) by passing a ref to the button
  • If the escape key is emitted from this button, find the closest region wrapper for the block canvas by using the current ref or the iframe editor
  • If we find the region, focus it
  • If not, as it's not a requirement for the block editor to be wrapped in a region for third parties, then focus the editor canvas itself

Testing Instructions

Escape to focus canvas wrapper

  • Click a nested block
  • Escape to enter select mode
  • Escape to clear selected block and focus canvas
  • repeat test using Preferences -> Show custom fields -> reload to test this works in both iframed and non-iframed versions of the editor

Edge cases to also test

Region outline showing when you don't want it to

  • Click a nested block
  • Escape to enter select mode
  • Click block sidebar area in bottom space
  • Press Escape
  • Blue outline should not show

Navigating regions

  • Use the keyboard to navigate regions (⌃⌥N and ⌃⌥P)
  • Blue outline should show when you want it and be removed as on trunk

Testing Instructions for Keyboard

Screenshots or screencast

@jeryj jeryj requested a review from ellatrix as a code owner May 31, 2024 19:06
Copy link

github-actions bot commented May 31, 2024

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: jeryj <jeryj@git.wordpress.org>
Co-authored-by: andrewserong <andrewserong@git.wordpress.org>
Co-authored-by: ellatrix <ellatrix@git.wordpress.org>
Co-authored-by: ajlende <ajlende@git.wordpress.org>
Co-authored-by: alexstine <alexstine@git.wordpress.org>
Co-authored-by: MaggieCabrera <onemaggie@git.wordpress.org>
Co-authored-by: jasmussen <joen@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Copy link

github-actions bot commented May 31, 2024

Size Change: +158 B (+0.01%)

Total Size: 1.76 MB

Filename Size Change
build/block-editor/index.min.js 265 kB +139 B (+0.05%)
build/components/style-rtl.css 12.1 kB +9 B (+0.07%)
build/components/style.css 12.1 kB +10 B (+0.08%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 951 B
build/annotations/index.min.js 2.26 kB
build/api-fetch/index.min.js 2.31 kB
build/autop/index.min.js 2.12 kB
build/blob/index.min.js 579 B
build/block-directory/index.min.js 7.31 kB
build/block-directory/style-rtl.css 1.01 kB
build/block-directory/style.css 1.01 kB
build/block-editor/content-rtl.css 4.57 kB
build/block-editor/content.css 4.57 kB
build/block-editor/default-editor-styles-rtl.css 394 B
build/block-editor/default-editor-styles.css 394 B
build/block-editor/style-rtl.css 15.7 kB
build/block-editor/style.css 15.7 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 149 B
build/block-library/blocks/audio/editor.css 151 B
build/block-library/blocks/audio/style-rtl.css 132 B
build/block-library/blocks/audio/style.css 132 B
build/block-library/blocks/audio/theme-rtl.css 134 B
build/block-library/blocks/audio/theme.css 134 B
build/block-library/blocks/avatar/editor-rtl.css 115 B
build/block-library/blocks/avatar/editor.css 115 B
build/block-library/blocks/avatar/style-rtl.css 104 B
build/block-library/blocks/avatar/style.css 104 B
build/block-library/blocks/button/editor-rtl.css 310 B
build/block-library/blocks/button/editor.css 310 B
build/block-library/blocks/button/style-rtl.css 538 B
build/block-library/blocks/button/style.css 538 B
build/block-library/blocks/buttons/editor-rtl.css 336 B
build/block-library/blocks/buttons/editor.css 336 B
build/block-library/blocks/buttons/style-rtl.css 328 B
build/block-library/blocks/buttons/style.css 328 B
build/block-library/blocks/calendar/style-rtl.css 240 B
build/block-library/blocks/calendar/style.css 240 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 122 B
build/block-library/blocks/code/theme.css 122 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 420 B
build/block-library/blocks/columns/style.css 420 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 124 B
build/block-library/blocks/comment-author-avatar/editor.css 124 B
build/block-library/blocks/comment-content/style-rtl.css 90 B
build/block-library/blocks/comment-content/style.css 90 B
build/block-library/blocks/comment-template/style-rtl.css 200 B
build/block-library/blocks/comment-template/style.css 199 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 221 B
build/block-library/blocks/comments-pagination/editor.css 211 B
build/block-library/blocks/comments-pagination/style-rtl.css 234 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 832 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 631 B
build/block-library/blocks/cover/editor-rtl.css 668 B
build/block-library/blocks/cover/editor.css 669 B
build/block-library/blocks/cover/style-rtl.css 1.62 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 86 B
build/block-library/blocks/details/style.css 86 B
build/block-library/blocks/embed/editor-rtl.css 314 B
build/block-library/blocks/embed/editor.css 314 B
build/block-library/blocks/embed/style-rtl.css 419 B
build/block-library/blocks/embed/style.css 419 B
build/block-library/blocks/embed/theme-rtl.css 133 B
build/block-library/blocks/embed/theme.css 133 B
build/block-library/blocks/file/editor-rtl.css 326 B
build/block-library/blocks/file/editor.css 326 B
build/block-library/blocks/file/style-rtl.css 278 B
build/block-library/blocks/file/style.css 279 B
build/block-library/blocks/file/view.min.js 324 B
build/block-library/blocks/footnotes/style-rtl.css 198 B
build/block-library/blocks/footnotes/style.css 197 B
build/block-library/blocks/form-input/editor-rtl.css 229 B
build/block-library/blocks/form-input/editor.css 229 B
build/block-library/blocks/form-input/style-rtl.css 342 B
build/block-library/blocks/form-input/style.css 342 B
build/block-library/blocks/form-submission-notification/editor-rtl.css 344 B
build/block-library/blocks/form-submission-notification/editor.css 341 B
build/block-library/blocks/form-submit-button/style-rtl.css 69 B
build/block-library/blocks/form-submit-button/style.css 69 B
build/block-library/blocks/form/view.min.js 470 B
build/block-library/blocks/freeform/editor-rtl.css 2.6 kB
build/block-library/blocks/freeform/editor.css 2.6 kB
build/block-library/blocks/gallery/editor-rtl.css 958 B
build/block-library/blocks/gallery/editor.css 962 B
build/block-library/blocks/gallery/style-rtl.css 1.71 kB
build/block-library/blocks/gallery/style.css 1.71 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 402 B
build/block-library/blocks/group/editor.css 402 B
build/block-library/blocks/group/style-rtl.css 103 B
build/block-library/blocks/group/style.css 103 B
build/block-library/blocks/group/theme-rtl.css 79 B
build/block-library/blocks/group/theme.css 79 B
build/block-library/blocks/heading/style-rtl.css 188 B
build/block-library/blocks/heading/style.css 188 B
build/block-library/blocks/html/editor-rtl.css 346 B
build/block-library/blocks/html/editor.css 347 B
build/block-library/blocks/image/editor-rtl.css 845 B
build/block-library/blocks/image/editor.css 843 B
build/block-library/blocks/image/style-rtl.css 1.54 kB
build/block-library/blocks/image/style.css 1.54 kB
build/block-library/blocks/image/theme-rtl.css 137 B
build/block-library/blocks/image/theme.css 137 B
build/block-library/blocks/image/view.min.js 1.54 kB
build/block-library/blocks/latest-comments/style-rtl.css 355 B
build/block-library/blocks/latest-comments/style.css 354 B
build/block-library/blocks/latest-posts/editor-rtl.css 204 B
build/block-library/blocks/latest-posts/editor.css 204 B
build/block-library/blocks/latest-posts/style-rtl.css 509 B
build/block-library/blocks/latest-posts/style.css 510 B
build/block-library/blocks/list/style-rtl.css 104 B
build/block-library/blocks/list/style.css 104 B
build/block-library/blocks/media-text/editor-rtl.css 304 B
build/block-library/blocks/media-text/editor.css 303 B
build/block-library/blocks/media-text/style-rtl.css 516 B
build/block-library/blocks/media-text/style.css 515 B
build/block-library/blocks/more/editor-rtl.css 427 B
build/block-library/blocks/more/editor.css 427 B
build/block-library/blocks/navigation-link/editor-rtl.css 663 B
build/block-library/blocks/navigation-link/editor.css 664 B
build/block-library/blocks/navigation-link/style-rtl.css 192 B
build/block-library/blocks/navigation-link/style.css 191 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 295 B
build/block-library/blocks/navigation-submenu/editor.css 294 B
build/block-library/blocks/navigation/editor-rtl.css 2.2 kB
build/block-library/blocks/navigation/editor.css 2.21 kB
build/block-library/blocks/navigation/style-rtl.css 2.26 kB
build/block-library/blocks/navigation/style.css 2.25 kB
build/block-library/blocks/navigation/view.min.js 1.03 kB
build/block-library/blocks/nextpage/editor-rtl.css 392 B
build/block-library/blocks/nextpage/editor.css 392 B
build/block-library/blocks/page-list/editor-rtl.css 378 B
build/block-library/blocks/page-list/editor.css 378 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 236 B
build/block-library/blocks/paragraph/editor.css 236 B
build/block-library/blocks/paragraph/style-rtl.css 341 B
build/block-library/blocks/paragraph/style.css 340 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 506 B
build/block-library/blocks/post-comments-form/style.css 506 B
build/block-library/blocks/post-content/editor-rtl.css 74 B
build/block-library/blocks/post-content/editor.css 74 B
build/block-library/blocks/post-date/style-rtl.css 62 B
build/block-library/blocks/post-date/style.css 62 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 729 B
build/block-library/blocks/post-featured-image/editor.css 726 B
build/block-library/blocks/post-featured-image/style-rtl.css 341 B
build/block-library/blocks/post-featured-image/style.css 341 B
build/block-library/blocks/post-navigation-link/style-rtl.css 215 B
build/block-library/blocks/post-navigation-link/style.css 214 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 399 B
build/block-library/blocks/post-template/style.css 398 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 70 B
build/block-library/blocks/post-time-to-read/style.css 70 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 125 B
build/block-library/blocks/preformatted/style.css 125 B
build/block-library/blocks/pullquote/editor-rtl.css 134 B
build/block-library/blocks/pullquote/editor.css 134 B
build/block-library/blocks/pullquote/style-rtl.css 342 B
build/block-library/blocks/pullquote/style.css 342 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 121 B
build/block-library/blocks/query-pagination-numbers/editor.css 118 B
build/block-library/blocks/query-pagination/editor-rtl.css 220 B
build/block-library/blocks/query-pagination/editor.css 208 B
build/block-library/blocks/query-pagination/style-rtl.css 287 B
build/block-library/blocks/query-pagination/style.css 283 B
build/block-library/blocks/query-title/style-rtl.css 64 B
build/block-library/blocks/query-title/style.css 64 B
build/block-library/blocks/query/editor-rtl.css 502 B
build/block-library/blocks/query/editor.css 502 B
build/block-library/blocks/query/view.min.js 958 B
build/block-library/blocks/quote/style-rtl.css 238 B
build/block-library/blocks/quote/style.css 238 B
build/block-library/blocks/quote/theme-rtl.css 221 B
build/block-library/blocks/quote/theme.css 225 B
build/block-library/blocks/read-more/style-rtl.css 138 B
build/block-library/blocks/read-more/style.css 138 B
build/block-library/blocks/rss/editor-rtl.css 101 B
build/block-library/blocks/rss/editor.css 101 B
build/block-library/blocks/rss/style-rtl.css 288 B
build/block-library/blocks/rss/style.css 287 B
build/block-library/blocks/search/editor-rtl.css 183 B
build/block-library/blocks/search/editor.css 183 B
build/block-library/blocks/search/style-rtl.css 672 B
build/block-library/blocks/search/style.css 671 B
build/block-library/blocks/search/theme-rtl.css 113 B
build/block-library/blocks/search/theme.css 113 B
build/block-library/blocks/search/view.min.js 475 B
build/block-library/blocks/separator/editor-rtl.css 100 B
build/block-library/blocks/separator/editor.css 100 B
build/block-library/blocks/separator/style-rtl.css 248 B
build/block-library/blocks/separator/style.css 248 B
build/block-library/blocks/separator/theme-rtl.css 195 B
build/block-library/blocks/separator/theme.css 195 B
build/block-library/blocks/shortcode/editor-rtl.css 286 B
build/block-library/blocks/shortcode/editor.css 286 B
build/block-library/blocks/site-logo/editor-rtl.css 806 B
build/block-library/blocks/site-logo/editor.css 803 B
build/block-library/blocks/site-logo/style-rtl.css 218 B
build/block-library/blocks/site-logo/style.css 218 B
build/block-library/blocks/site-tagline/editor-rtl.css 87 B
build/block-library/blocks/site-tagline/editor.css 87 B
build/block-library/blocks/site-title/editor-rtl.css 123 B
build/block-library/blocks/site-title/editor.css 123 B
build/block-library/blocks/site-title/style-rtl.css 71 B
build/block-library/blocks/site-title/style.css 71 B
build/block-library/blocks/social-link/editor-rtl.css 338 B
build/block-library/blocks/social-link/editor.css 338 B
build/block-library/blocks/social-links/editor-rtl.css 676 B
build/block-library/blocks/social-links/editor.css 675 B
build/block-library/blocks/social-links/style-rtl.css 1.5 kB
build/block-library/blocks/social-links/style.css 1.5 kB
build/block-library/blocks/spacer/editor-rtl.css 346 B
build/block-library/blocks/spacer/editor.css 346 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 394 B
build/block-library/blocks/table/editor.css 394 B
build/block-library/blocks/table/style-rtl.css 640 B
build/block-library/blocks/table/style.css 639 B
build/block-library/blocks/table/theme-rtl.css 152 B
build/block-library/blocks/table/theme.css 152 B
build/block-library/blocks/tag-cloud/style-rtl.css 266 B
build/block-library/blocks/tag-cloud/style.css 265 B
build/block-library/blocks/template-part/editor-rtl.css 393 B
build/block-library/blocks/template-part/editor.css 393 B
build/block-library/blocks/template-part/theme-rtl.css 113 B
build/block-library/blocks/template-part/theme.css 113 B
build/block-library/blocks/term-description/style-rtl.css 108 B
build/block-library/blocks/term-description/style.css 108 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 165 B
build/block-library/blocks/text-columns/style.css 165 B
build/block-library/blocks/verse/style-rtl.css 98 B
build/block-library/blocks/verse/style.css 98 B
build/block-library/blocks/video/editor-rtl.css 553 B
build/block-library/blocks/video/editor.css 554 B
build/block-library/blocks/video/style-rtl.css 192 B
build/block-library/blocks/video/style.css 192 B
build/block-library/blocks/video/theme-rtl.css 134 B
build/block-library/blocks/video/theme.css 134 B
build/block-library/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 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.9 kB
build/block-library/editor.css 11.9 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/index.min.js 219 kB
build/block-library/reset-rtl.css 472 B
build/block-library/reset.css 472 B
build/block-library/style-rtl.css 14.6 kB
build/block-library/style.css 14.6 kB
build/block-library/theme-rtl.css 702 B
build/block-library/theme.css 707 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.87 kB
build/blocks/index.min.js 52.2 kB
build/commands/index.min.js 15.2 kB
build/commands/style-rtl.css 955 B
build/commands/style.css 952 B
build/components/index.min.js 223 kB
build/compose/index.min.js 12.9 kB
build/core-commands/index.min.js 2.75 kB
build/core-data/index.min.js 72.6 kB
build/customize-widgets/index.min.js 10.9 kB
build/customize-widgets/style-rtl.css 1.35 kB
build/customize-widgets/style.css 1.35 kB
build/data-controls/index.min.js 641 B
build/data/index.min.js 8.99 kB
build/date/index.min.js 18 kB
build/deprecated/index.min.js 458 B
build/dom-ready/index.min.js 325 B
build/dom/index.min.js 4.65 kB
build/edit-post/classic-rtl.css 578 B
build/edit-post/classic.css 580 B
build/edit-post/index.min.js 12.5 kB
build/edit-post/style-rtl.css 2.31 kB
build/edit-post/style.css 2.31 kB
build/edit-site/index.min.js 208 kB
build/edit-site/posts-rtl.css 6.35 kB
build/edit-site/posts.css 6.35 kB
build/edit-site/style-rtl.css 11.8 kB
build/edit-site/style.css 11.8 kB
build/edit-widgets/index.min.js 17.6 kB
build/edit-widgets/style-rtl.css 4.18 kB
build/edit-widgets/style.css 4.18 kB
build/editor/index.min.js 98.1 kB
build/editor/style-rtl.css 9.24 kB
build/editor/style.css 9.24 kB
build/element/index.min.js 4.83 kB
build/escape-html/index.min.js 537 B
build/format-library/index.min.js 8.1 kB
build/format-library/style-rtl.css 494 B
build/format-library/style.css 493 B
build/hooks/index.min.js 1.54 kB
build/html-entities/index.min.js 445 B
build/i18n/index.min.js 3.58 kB
build/interactivity/debug.min.js 16.5 kB
build/interactivity/file.min.js 447 B
build/interactivity/image.min.js 1.68 kB
build/interactivity/index.min.js 13.4 kB
build/interactivity/navigation.min.js 1.16 kB
build/interactivity/query.min.js 742 B
build/interactivity/router.min.js 2.8 kB
build/interactivity/search.min.js 615 B
build/is-shallow-equal/index.min.js 526 B
build/keyboard-shortcuts/index.min.js 1.31 kB
build/keycodes/index.min.js 1.46 kB
build/list-reusable-blocks/index.min.js 2.17 kB
build/list-reusable-blocks/style-rtl.css 846 B
build/list-reusable-blocks/style.css 846 B
build/media-utils/index.min.js 2.92 kB
build/modules/importmap-polyfill.min.js 12.3 kB
build/notices/index.min.js 946 B
build/nux/index.min.js 1.58 kB
build/nux/style-rtl.css 749 B
build/nux/style.css 745 B
build/patterns/index.min.js 7.34 kB
build/patterns/style-rtl.css 687 B
build/patterns/style.css 685 B
build/plugins/index.min.js 1.81 kB
build/preferences-persistence/index.min.js 2.06 kB
build/preferences/index.min.js 2.9 kB
build/preferences/style-rtl.css 715 B
build/preferences/style.css 715 B
build/primitives/index.min.js 829 B
build/priority-queue/index.min.js 1.54 kB
build/private-apis/index.min.js 1.01 kB
build/react-i18n/index.min.js 630 B
build/react-refresh-entry/index.min.js 9.47 kB
build/react-refresh-runtime/index.min.js 6.76 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.73 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/rich-text/index.min.js 10.1 kB
build/router/index.min.js 1.96 kB
build/server-side-render/index.min.js 1.94 kB
build/shortcode/index.min.js 1.4 kB
build/style-engine/index.min.js 2.01 kB
build/token-list/index.min.js 581 B
build/url/index.min.js 3.85 kB
build/vendors/react-dom.min.js 42.8 kB
build/vendors/react-jsx-runtime.min.js 560 B
build/vendors/react.min.js 2.65 kB
build/viewport/index.min.js 965 B
build/warning/index.min.js 250 B
build/widgets/index.min.js 7.19 kB
build/widgets/style-rtl.css 1.16 kB
build/widgets/style.css 1.16 kB
build/wordcount/index.min.js 1.03 kB

compressed-size-action

@jeryj
Copy link
Contributor Author

jeryj commented May 31, 2024

@MaggieCabrera Do you have any ideas on reworking the CSS for this? The iframe is the right container for styling, but iframe:has( body:focus ) styles won't apply.

blue border offset from parent and not wrapping entire canvas

This is the focus ring on the body, which will respond to :focus styling but isn't the right wrapper for our purpose.

@alexstine
Copy link
Contributor

@jeryj Why not just return false? I'm not seeing the value of Escape press going back to root level. Actually, I find this interaction created very challenging to understand.

  1. When editing a block, escape goes to select mode.
  2. Escape can go back to edit mode on the active block.
  3. If editing a nested/inner block, escape goes to select mode.
  4. Pressing escape from here goes to the root block vs. edit mode.

I'm kind of unsure why you went down this path in the first place. Deselecting a block makes total sense on escape but I think you may have slightly over complicated the select/edit mode shortcut interaction. Enter should activate, I think you would have quite a challenge finding a UI where escape could also activate.

Thanks.

@alexstine
Copy link
Contributor

Okay, I think I may understand a bit more. You are reverting the change.

I still don't understand why you are using escape to back all the way out though. If you press escape to switch to select mode, you could use the arrow keys to navigate. I do not think escape should focus the iFrame body ever, this would sound like focus loss to blind users using a screen reader. Not being able to see the focus ring would make the UX quite bad.

  1. Edit a block.
  2. Press escape to enter select mode.
  3. No blocks are selected.
  4. Press shift+down arrow.
  5. One block is now selected.
  6. Press escape to clear the selection.
  7. Pressing escape again does nothing because you are already in select mode.

@jeryj
Copy link
Contributor Author

jeryj commented May 31, 2024

@alexstine The challenge I'm trying to solve is, where does focus go when we deselect a block? I was hoping that by using Escape to "back out" of the levels of nested blocks, it would make the path from nested block to root level clearer. And once you don't have any more blocks to select, the root level canvas was the best place I could find to clear selection without losing focus. Very open to ideas here! And thank you for reviewing this interaction!

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Interesting exploration! I think for me, while testing it out, I'd expect the Escape key to effectively escape out of interacting within the editor canvas, rather than walk up the block hierarchy. So, when pressing Escape the second time from Edit mode to Select mode, I expected to move out of the editor canvas with no blocks selected at all.

Deselecting a block makes total sense on escape but I think you may have slightly over complicated the select/edit mode shortcut interaction.

To me this made it feel more complicated, too. Was walking through the block parent hierarchy something that folks have been wanting to be able to do via the Escape key?

@MaggieCabrera
Copy link
Contributor

MaggieCabrera commented Jun 3, 2024

@MaggieCabrera Do you have any ideas on reworking the CSS for this? The iframe is the right container for styling, but iframe:has( body:focus ) styles won't apply.

This is the focus ring on the body, which will respond to :focus styling but isn't the right wrapper for our purpose.

The CSS we are trying to apply here is going to be hidden by any backgrounds of elements inside, check this:

Screenshot 2024-06-03 at 12 12 54

@jeryj
Copy link
Contributor Author

jeryj commented Jun 3, 2024

@andrewserong - I'm mostly trying to see how to make escape not feel like a focus loss when you press it in select mode. This is more of a bandage so you don't go so far away from where you are if you press escape. I would love if we could press escape from select mode and:

  • It deselects the block
  • Leaves block focus close by in case it was an accident
  • lets you know where focus currently is

I'm not sure what to do here, so I'm playing around with ideas. Any recommendations are welcome!

@jeryj
Copy link
Contributor Author

jeryj commented Jun 3, 2024

The CSS we are trying to apply here is going to be hidden by any backgrounds of elements inside, check this:

I'm trying to apply this it to the iframe, not the body. I can only get the body selector to work for focus though.

@jeryj
Copy link
Contributor Author

jeryj commented Jun 3, 2024

@jasmussen @richtabor, how do you feel about this interaction? Escape while in select mode will:

  • Deselect the current block
  • send focus to the canvas body
  • show a blue border around the canvas

@jeryj jeryj self-assigned this Jun 3, 2024
@jeryj jeryj added [Type] Regression Related to a regression in the latest release [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). labels Jun 3, 2024
@andrewserong
Copy link
Contributor

andrewserong commented Jun 4, 2024

This is feeling much nicer to me after the update and it going straight up to the editor canvas 👍. One question: when we back out up to the canvas, would users expect it to also switch back to edit mode, so we're kind of escaping out of the current mode of what we're doing? Essentially, if after hitting Escape the second time you then go to select a block, would you expect to be back in Edit mode again? I'm a little biased here in that I find the selection mode a bit confusing to use in general.

Keen to hear what the designers think. Thanks again for digging in here!

@jasmussen
Copy link
Contributor

As a quick test, this works well. Perhaps separate, but the breadcrumb for selecting the document — the only way to deselect in trunk at the moment — is setting focus on the body, it seems pertinent to also update that to set focus on the editor canvas instead, since that's the implication of choosing that breadcrumb. What do you think?

screenshot of the bottom left corner of the editor, showing the breadcrumb bar, with the top option emphasized

@jeryj
Copy link
Contributor Author

jeryj commented Jun 4, 2024

@andrewserong

Essentially, if after hitting Escape the second time you then go to select a block, would you expect to be back in Edit mode again?

I see what you mean. I tried it out, but this would be a heavier lift, as it looks like the editor gets set to navigation/select mode when you tab into it and nothing is selected. Basically, when I setNavigationMode( false ) when clearing the selection, you press tab again to go to a block and it reverts back to setNavigationMode( true ) by the editor when the first block receives focus. You can test it out by reloading a page and pressing Tab til you reach the canvas. So, I think it's best to leave this one as is.

I'm a little biases here in that I find the selection mode a bit confusing to use in general.

Yeah, it takes a little to get the hang of, but it's especially useful to select nested blocks. It makes moving focus between blocks with a keyboard soooooo much faster. If you use it with List View open to see the structure of the blocks at the same time it will make more sense too. What made it click for me was thinking of the actions as Up/Down/In/Out instead of Up/Down/Right/Left.

@jasmussen

it seems pertinent to also update that to set focus on the editor canvas instead, since that's the implication of choosing that breadcrumb. What do you think?

I think that's a great idea. Let's do it on a follow-up.

@jeryj
Copy link
Contributor Author

jeryj commented Jun 4, 2024

Follow-up for template footer click fix: #62290

@alexstine
Copy link
Contributor

@jeryj What if it followed a path like this?

  1. Interact with a nested/inner block in edit mode.
  2. Press escape.
  3. Then we simply use the home/end keys to navigate?

Just so you can hear it, this is what it sounds like from a screen reader when we place focus on an iFrame wrapper.

Block: Paragraph document editable Testing.
Paragraph Block. Row 1. Testing.
Paragraph Block. Row 1. Testing. button
Editor canvas frame
Editor canvas document
You are currently in navigation mode. Navigate blocks using the Tab key and Arrow keys. Use Left and Right Arrow keys to move between nesting levels. To exit navigation mode and edit the selected block, press Enter.
Add title edit multi line Testing spelling error nav item focus
Paragraph Block. Row 1. Testing.
Paragraph Block. Row 1. Testing. button

I seriously think escape should simply switch to navigation mode and then do nothing after that. Placing focus on the wrapper offers no meaningful experience for blind users. There is no other place I could think of that would make more sense.

Thanks.

@jeryj
Copy link
Contributor Author

jeryj commented Jun 4, 2024

@alexstine Yeah, that announcement is a bad experience :/ The idea is to be able to clear block selection and begin from top again. But, if we clear block selection on the canvas, then we need a place to put focus that is actually useful. 🤔

@alexstine
Copy link
Contributor

@jeryj What about the title field? It would be the previous focusable.

Comment on lines 4 to 9
// Float an outline on the top of the iframe to show focus on the canvas when pressing
// escape while in select mode.
&:focus::after {
@include selectedOutline();
position: fixed;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

Is this potentially too broad? I notice that in the post editor, if I have multiple blocks selected in the canvas, then the iframe outline is also rendered, which looks unexpected:

image

Copy link
Contributor

@andrewserong andrewserong left a comment

Choose a reason for hiding this comment

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

Just gave this a re-test, and noticed a couple of subtle issues. Here's a video:

2024-06-05.16.44.44.mp4

In the video, when selecting multiple blocks in the iframed post editor, the overall canvas outline is displayed, which looks unexpected.

Then, if I go to editor preferences and enable the custom fields, which switches off the editor iframe, pressing Escape will still clear the block selection, but there's no longer an editor iframe to be focused, so it looks like there's eventually a focus loss from pressing escape. I noticed a similar issue in #62290 — I wonder if there should be a tab stop for the non-iframed post editor, too? 🤔

Please let me know if I missed something obvious in my testing, though, I'm not too familiar with the expected behaviour for the editor wrapper when it comes to focus 🙂

@jeryj
Copy link
Contributor Author

jeryj commented Jun 5, 2024

@alexstine

What about the title field? It would be the previous focusable.

That was my first thought too, but it would work for the post editor since the site editor doesn't have a title area. I'm still looking for a better place to put focus. Maybe even adding something or possibly a way to have a better announcement like "Editor canvas"?

@andrewserong Good catch on the multi-selection! Fixed and updated. The css selector is getting a little long, but it works :) Should work with both the iframe and div block editor now too.

@jeryj
Copy link
Contributor Author

jeryj commented Jun 5, 2024

@alexstine - I'd never done this before, but I put an aria-label on the body element and it's testing pretty well on safari with voice over. It's announcing "Block Editor, group with [number] items" which does seem useful for knowing where you are after clearing block selection. I'll let you be the judge if it's actually useful in practice though :)

@alexstine
Copy link
Contributor

@jeryj This does not work with NVDA on Windows with Firefox. I'm actually quite shocked this works with Voiceover. The same announcement I posted above is given. Placing focus on a wrapper and having it make sense to all users of screen readers is a non-starter. What if you simply return focus to the "Editor content" region? This might be better but I won't know until you try it.

Thanks.

@jeryj
Copy link
Contributor Author

jeryj commented Jun 6, 2024

@alexstine I've updated it to focus the editor content region. Code is sloppy. If this announcement works well for you, let me know and I'll try to get it working in a cleaner way.

@jeryj
Copy link
Contributor Author

jeryj commented Jun 26, 2024

@jasmussen - Here's an update to the focus styles for after this PR is merged: #62881

@jeryj jeryj disabled auto-merge June 26, 2024 16:35
@jeryj jeryj enabled auto-merge (squash) June 26, 2024 16:36
jeryj added 21 commits June 26, 2024 11:37
An escape keypress previously toggled the state between editing and select mode. This returns the behavior to the previous implemenetation of Escape clearing block focus... eventually. Now escape will select the parent element all the way up until there are no more, at which point it clears block focus and focuses the body iframe (showing blue outline).
- moves selected-block-outline to base styles css so it can be used anywhere
- renames the mixin to match mixin naming convention
- moves editor canvas outline to block-canvas styles because it needs to work for both iframed and non-iframed versions of the editor
- restyle to make canvas focus work for both iframe and non-iframed versions
@jeryj jeryj force-pushed the try/escape-to-select-parent branch from ed018ef to 387ed23 Compare June 26, 2024 16:37
@jeryj jeryj merged commit 37a60b2 into trunk Jun 26, 2024
61 of 62 checks passed
@jeryj jeryj deleted the try/escape-to-select-parent branch June 26, 2024 17:12
@github-actions github-actions bot added this to the Gutenberg 18.8 milestone Jun 26, 2024
@jasmussen
Copy link
Contributor

Thank you for the work here!

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). [Type] Enhancement A suggestion for improvement.
Projects
Development

Successfully merging this pull request may close these issues.

7 participants