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

List View: Add right-click behaviour to open block settings dropdown, and add right click overrides editor setting #41041

Conversation

andrewserong
Copy link
Contributor

@andrewserong andrewserong commented May 13, 2022

What?

Fixes #40287

Adds in right-click behaviour to the individual block buttons within the List View, that opens up the block settings dropdown menu instead of the browser default rick-click behaviour.

Because overriding browser default behaviour can be a contentious issue, this PR also adds in an editor setting (in the post and site editors) allowRightClickOverrides that defaults to true. That way, for folks who'd like to retain the browser default behaviour, they can opt-out.

Why?

As raised in #40287, in other web apps that people are used to, right-clicking an item opens up a contextual menu that is part of the app — and for those spending a lot of time in the List View this change should make it a little easier to quickly make changes, rather than having to hover over the ellipsis menu to get to the settings dropdown.

How?

  • Add an allowRightClickOverrides setting in the post and site editors.
  • At the button level in the List View, add an onContextMenu handler, and if the settings allow it, simulate a click on the settings dropdown when the button is right-clicked.

Testing Instructions

  1. In the post editor, add some blocks.
  2. Open up the list view, and right click on an item in the list. The block settings menu should open up.
  3. Multi-select multiple blocks and right click on an item — you should still be able to remove multiple blocks via this dropdown.
  4. Open up the Preferences in the editor, and toggle the right click overrides setting off.
  5. Check that the browser default context menu opens up when right clicking list view items.
  6. Repeat the above in the site editor

Screenshots or screencast

Right click on list item The new setting
2022-05-13 13 37 03 image

Screengrab of right-click and toggling the setting:

2022-05-13 13 41 22

@andrewserong andrewserong added [Type] Enhancement A suggestion for improvement. [Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Type] Experimental Experimental feature or API. labels May 13, 2022
@andrewserong andrewserong self-assigned this May 13, 2022
@andrewserong andrewserong changed the title Try/hijack right click in list view to show block settings List View: Add right-click behaviour to open block settings dropdown, and add right click overrides editor setting May 13, 2022
@github-actions
Copy link

github-actions bot commented May 13, 2022

Size Change: +363 B (0%)

Total Size: 1.24 MB

Filename Size Change
build/block-editor/index.min.js 151 kB +149 B (0%)
build/edit-post/index.min.js 30.5 kB +108 B (0%)
build/edit-site/index.min.js 48 kB +92 B (0%)
build/editor/index.min.js 38.5 kB +14 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
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.51 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/style-rtl.css 14.6 kB
build/block-editor/style.css 14.6 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/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 59 B
build/block-library/blocks/avatar/style.css 59 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-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 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-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 95 B
build/block-library/blocks/comments/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 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 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 333 B
build/block-library/blocks/group/editor.css 333 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 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 738 B
build/block-library/blocks/image/editor.css 737 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 463 B
build/block-library/blocks/latest-posts/style.css 462 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 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 708 B
build/block-library/blocks/navigation-link/editor.css 706 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-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.95 kB
build/block-library/blocks/navigation/style.css 1.94 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 395 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 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 260 B
build/block-library/blocks/paragraph/style.css 260 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 69 B
build/block-library/blocks/post-comments-form/editor.css 69 B
build/block-library/blocks/post-comments-form/style-rtl.css 495 B
build/block-library/blocks/post-comments-form/style.css 495 B
build/block-library/blocks/post-comments/editor-rtl.css 77 B
build/block-library/blocks/post-comments/editor.css 77 B
build/block-library/blocks/post-comments/style-rtl.css 628 B
build/block-library/blocks/post-comments/style.css 628 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 370 B
build/block-library/blocks/pullquote/style.css 370 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 369 B
build/block-library/blocks/query/editor.css 369 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 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 146 B
build/block-library/blocks/separator/editor.css 146 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 194 B
build/block-library/blocks/separator/theme.css 194 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 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 192 B
build/block-library/blocks/site-logo/style.css 192 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 504 B
build/block-library/blocks/table/editor.css 504 B
build/block-library/blocks/table/style-rtl.css 625 B
build/block-library/blocks/table/style.css 625 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 149 B
build/block-library/blocks/template-part/editor.css 149 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 561 B
build/block-library/blocks/video/editor.css 563 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 993 B
build/block-library/common.css 990 B
build/block-library/editor-rtl.css 10.2 kB
build/block-library/editor.css 10.3 kB
build/block-library/index.min.js 181 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/style-rtl.css 11.6 kB
build/block-library/style.css 11.6 kB
build/block-library/theme-rtl.css 689 B
build/block-library/theme.css 694 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 47.1 kB
build/components/index.min.js 228 kB
build/components/style-rtl.css 13.9 kB
build/components/style.css 13.9 kB
build/compose/index.min.js 11.7 kB
build/core-data/index.min.js 14.6 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.4 kB
build/customize-widgets/style.css 1.4 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 7.98 kB
build/date/index.min.js 32 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.69 kB
build/edit-navigation/index.min.js 16 kB
build/edit-navigation/style-rtl.css 4.05 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/style-rtl.css 7.08 kB
build/edit-post/style.css 7.08 kB
build/edit-site/style-rtl.css 7.73 kB
build/edit-site/style.css 7.71 kB
build/edit-widgets/index.min.js 16.4 kB
build/edit-widgets/style-rtl.css 4.4 kB
build/edit-widgets/style.css 4.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.7 kB
build/element/index.min.js 4.3 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 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.9 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.1 kB
build/nux/style-rtl.css 744 B
build/nux/style.css 741 B
build/plugins/index.min.js 1.98 kB
build/preferences-persistence/index.min.js 2.23 kB
build/preferences/index.min.js 1.32 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 628 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.2 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/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.2 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

*/
function ListView(
{ id, blocks, showBlockMovers = false, isExpanded = false },
{
allowRightClickOverrides,
Copy link
Contributor

Choose a reason for hiding this comment

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

I personally don't think the preference is needed to trial this. It's the kind of thing that could be added to the plugin with the goal of seeking feedback.

It'd also be good to avoid introducing new stable props as I think ListView should move towards become a stable API soon. (some discussion here - #40777)

An alternative if the preference is required could be making this an editor setting and pulling it in using useSelect.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Thanks for taking a look @talldan! It'll be easy enough to strip out the setting.

The main reason I included it is that we don't yet have a precedent in Gutenberg (that I could find, at least 🙂) to override the browser default behaviour, and I imagined that there could be some folks that might feel strongly about whether or not it's okay to override right click. I'll be keen to hear if anyone feels strongly about it!

An alternative if the preference is required could be making this an editor setting and pulling it in using useSelect.

If we do keep the setting, that does sound like a better way to do it, it felt a bit awkward adding it as a stable prop (and all the prop drilling involved). I might not get a chance today to switch over to that approach, but can take a look on Monday.

Thanks again!

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've moved it over to an editor setting in 8fd68db — that makes the change to ListView much neater, without the additional prop drilling 👍

Happy to remove the setting, too, if need be, but 🤞 this PR should be in a better place for gathering more feedback now. Cheers! 🙇

@andrewserong andrewserong force-pushed the try/hijack-right-click-in-list-view-to-show-block-settings branch from 7ac27ce to 125c4f5 Compare May 13, 2022 06:43
@alexstine
Copy link
Contributor

Please keep the setting. I believe feature specific context menus would be great but I still use browser menu to open element inspector for accessibility related stuff. Allowing users to choose is a must even if the default is to use the item specific menus for the editor, not the browser menu.

Thanks.

@glendaviesnz
Copy link
Contributor

Tested well for me, but will hold off giving an approval to see if there is any more comment on the concept in general first.

@andrewserong
Copy link
Contributor Author

Thanks for confirming @alexstine! I had a feeling there would be a good reason to include the setting, and this very much confirms it. I'll keep the setting in this PR 🙂

@andrewserong andrewserong force-pushed the try/hijack-right-click-in-list-view-to-show-block-settings branch from 125c4f5 to 051ecea Compare May 16, 2022 00:32
@ramonjd
Copy link
Member

ramonjd commented May 16, 2022

Hi!

Thanks for working on and pushing this PR up. It's working as advertised!

There's a UX problem here, but I can't help but doubt that swapping the native browser context menu with a Gutenberg one solves it universally.

I don't have an alternative, but the following came to mind while testing:

  1. It might become a hurdle to anyone trying to inspect the list view :)
  2. The menu doesn't appear where I click, and so doesn't behave like regular right-clicks
  3. Do you think this will create the expectation of displaying a Gutenberg context menu in other circumstances?
  4. The block ellipsis icon displays the same menu, so there's an existing design pattern (see screenshot below) In my view, the block list view is a secondary means of accessing the menu, which exists in that context as an enhancement to what I see is the primary benefit of the block list view: to manage the block tree, and quickly access child blocks.

Screen Shot 2022-05-16 at 11 11 47 am

I suppose I'm struggling with coming up with an alternative because I'm caught wondering what problem are we trying to solve. A UX-one fundamentally, that is, to reduce the effort required to open the context menu. Additionally, reading the issue, to accommodate the user's expectations and habitual use of the mouse.

As for the effort component, the menu, at least for me, would have to appear at the place where I right-click otherwise it requires just as much effort.

With regards to users' expectations, we might want to ask a few more people. I mean, it might be useful to a lot of folks to have such a feature, I don't know 😄

Also, I think I found a small anomaly.

When I right click on multiple items, the context menus appear to persist for me. It doesn't happen all the time, normally after I've left-clicked on the ellipsis icon.

2022-05-16 11 00 04

@andrewserong
Copy link
Contributor Author

Thanks for testing @ramonjd! You raise excellent questions:

It might become a hurdle to anyone trying to inspect the list view

One of the reasons I thought adding in the setting to switch off the behaviour could be helpful, was to help those of us working on the list view to inspect it when needed! 😄

The menu doesn't appear where I click, and so doesn't behave like regular right-clicks

Good point — if folks think this feature is worthwhile, we could always explore seeing if we could change the position of the popover

Do you think this will create the expectation of displaying a Gutenberg context menu in other circumstances?

Yes, I think so — it'd be good to gather more feedback to see if this change makes sense holistically as a part of how users interact with Gutenberg. If it's just in one place, it could be confusing (both in seeing that the browser behaviour is overridden, or that it's only overridden in one place)

When I right click on multiple items, the context menus appear to persist for me. It doesn't happen all the time, normally after I've left-clicked on the ellipsis icon.

Nice catch! It looks like there's something to fine-tune here — I can reproduce that reliably in the site editor, but not the post editor.


I'm caught wondering what problem are we trying to solve

I think this is the central question to answer before spending too much more time fine-tuning this PR — is this, as a feature, a UX concern that we'd like to deal with in Gutenberg and cover, or not? Personally, I don't think I'd use it all that much myself (I mostly picked up the task as a quick hack-day like exploration last Friday to see how hard it might be to implement 😄), so I'm very happy to shelve it if folks think it isn't a worthwhile enhancement. I might ping a few more folks to see whether or not this is even something that we think Gutenberg should attempt to do (overriding browser behaviour in this way, and imposing a right-click UX in the editor).

Thanks for the feedback! 🙇

@alexstine
Copy link
Contributor

I am really happy with a feature like this. It brings Gutenberg more aligned with Google Drive and that navigation style is amazing for screen readers. It is much better to context menu something than remembering tons of different interaction models per application.

Might want to check this out for additional context. I think this will benefit the suggested improvements here.

#38311

@andrewserong
Copy link
Contributor Author

Thanks Alex!

@mtias and / or @priethor — do either of you have any feedback on introducing a feature to override right-click behaviour (and in the list view) and how that fits into our UX strategy for Gutenberg? It doesn't look like we're overriding right-click anywhere else in Gutenberg as far as I can tell, so just thought I'd check before adding this PR to the editor chat agenda for wider feedback.

I'm equally happy to continue refining this PR if there's consensus that it'll be a useful feature, or to shelve it if we don't think it's suitable to start overriding right-click at this time. Thanks, all!

@joyously
Copy link

I think that the right click should not be hijacked from the browser. There can be all sorts of useful browser actions in the right click menu (Inspect, Page Source, Screenshot, other browser extension stuff).

Not all devices have a mouse or multiple buttons on the mouse, so the interface would become inconsistent. That means more code, more documentation, and more support problems.

Since you have that menu already, perhaps a shortcut key for the menu is all that is needed (although this doesn't help for touch interface).

@mtias
Copy link
Member

mtias commented May 21, 2022

Thanks for exploring this! We held off on doing something like this before because it's a pretty significant paradigm shift that we need to be mindful of. However, being able to have contextual menus would open up so many doors for improving critical flows that are tricky to accommodate widely otherwise. It's great to hear this could potentially improve accessibility as well, @alexstine.

I'm all for exploring this, but let's definitely have a way to disable it. It'd make sense to introduce a top level Accessibility group of settings (contain keyboard nav within blocks, show button labels, etc) because the changes go a bit beyond Appearance and would be easier to discover.

@mtias mtias added the [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). label May 21, 2022
@andrewserong
Copy link
Contributor Author

Thanks for the feedback folks, and confirming that it's worth exploring further, Matías!

It'd make sense to introduce a top level Accessibility group of settings (contain keyboard nav within blocks, show button labels, etc)

That makes a lot of sense to me, and I think would help with the visibility of the setting, particularly for folks who'd prefer not to have the browser override. I'll look into fine-tuning some of these things this week (and also Ramon's feedback on the positioning of the popover) so we can then get a better sense of how it feels to use 👍

@andrewserong andrewserong force-pushed the try/hijack-right-click-in-list-view-to-show-block-settings branch from 051ecea to 3b48415 Compare May 27, 2022 02:57
@andrewserong
Copy link
Contributor Author

Update: in 3b48415, I've had a go at Ramon's idea of anchoring the settings dropdown to the mouse cursor position when using right-click, and I think it improves how it feels to use quite considerably. Thanks for the suggestion! Here's a screengrab:

2022-05-27 12 55 49

There's still some glitchy behaviour to deal with (like the menu not hiding again properly when you right click elsewhere), and I'd like to explore moving the settings to an Accessibility panel. I'll continue chipping away at this sometime next week, but just thought I'd share where I'm up to 🙂

For clarity sake: this is still very much an experimental idea, so the goal is to get the PR to a stable state where it can serve as a good proposal for how the feature might work — I'll still be happy to shelve it if folks feel like it isn't a change we'd like to land just yet.

@andrewserong
Copy link
Contributor Author

Update: I think this could still be a cool addition, however this PR is now pretty stale and trunk has since moved on from it a fair bit. I'll close out this PR now, but we can borrow things from this PR in a new PR if and when we'd like to revisit the feature.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] List View Menu item in the top toolbar to select blocks from a list of links. [Focus] Accessibility (a11y) Changes that impact accessibility and need corresponding review (e.g. markup changes). [Type] Enhancement A suggestion for improvement. [Type] Experimental Experimental feature or API.
Projects
None yet
7 participants