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

Template Parts & Reusable Blocks - try overlay element for clickthrough to edit pattern. #31109

Merged
merged 51 commits into from
Jun 25, 2021

Conversation

Addison-Stavlo
Copy link
Contributor

@Addison-Stavlo Addison-Stavlo commented Apr 22, 2021

Description

Addresses #29337 by adding an overlay requiring a click-through to template parts and reusable blocks. When the block is not selected, hovering the block will result in a blue overlay. Clicking anywhere inside the block will act to select the block itself, preventing its children from being selected before the parent.

overlay-clickthrough

How has this been tested?

Tested with template parts (and nested template parts) as well as reusable blocks.
Tested to ensure drag and drop functionality still works as expected.

Types of changes

Checklist:

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

@Addison-Stavlo Addison-Stavlo self-assigned this Apr 22, 2021
@Addison-Stavlo
Copy link
Contributor Author

Right now my main blocker is finding a way to get the overlay element to re-render/resize when the content resizes, this can be easily seen when selecting the block and opening sidebars:

overlay-wont-resize

On the first selection, the overlay takes up the original size of the content. However, the inline inserter is added into the content and the overlay does not update resulting in the bottom half of the template part not having an overlay.

This is also observable above when the sidebar is closed. 🤔

Beside this, the rest of the functionality should be working well.

@github-actions
Copy link

github-actions bot commented Apr 22, 2021

Size Change: +3.6 kB (0%)

Total Size: 1.05 MB

Filename Size Change
build/block-directory/style-rtl.css 1.02 kB +31 B (+3%)
build/block-directory/style.css 1.02 kB +31 B (+3%)
build/block-editor/index.min.js 119 kB +236 B (0%)
build/block-editor/style-rtl.css 13.9 kB +403 B (+3%)
build/block-editor/style.css 13.9 kB +402 B (+3%)
build/block-library/common-rtl.css 1.29 kB +28 B (+2%)
build/block-library/common.css 1.29 kB +28 B (+2%)
build/block-library/index.min.js 145 kB +55 B (0%)
build/components/style-rtl.css 16.2 kB +32 B (0%)
build/components/style.css 16.2 kB +32 B (0%)
build/customize-widgets/style-rtl.css 1.48 kB +29 B (+2%)
build/customize-widgets/style.css 1.48 kB +31 B (+2%)
build/edit-navigation/style-rtl.css 3.12 kB +30 B (+1%)
build/edit-navigation/style.css 3.12 kB +32 B (+1%)
build/edit-post/classic-rtl.css 483 B +29 B (+6%) 🔍
build/edit-post/classic.css 483 B +29 B (+6%) 🔍
build/edit-post/style-rtl.css 7.29 kB +251 B (+4%)
build/edit-post/style.css 7.28 kB +251 B (+4%)
build/edit-site/style-rtl.css 4.99 kB +229 B (+5%) 🔍
build/edit-site/style.css 4.98 kB +227 B (+5%) 🔍
build/edit-widgets/style-rtl.css 3.88 kB +228 B (+6%) 🔍
build/edit-widgets/style.css 3.88 kB +228 B (+6%) 🔍
build/editor/style-rtl.css 3.94 kB +30 B (+1%)
build/editor/style.css 3.94 kB +31 B (+1%)
build/format-library/style-rtl.css 668 B +31 B (+5%) 🔍
build/format-library/style.css 669 B +30 B (+5%) 🔍
build/list-reusable-blocks/style-rtl.css 842 B +213 B (+34%) 🚨
build/list-reusable-blocks/style.css 842 B +214 B (+34%) 🚨
build/nux/style-rtl.css 745 B +27 B (+4%)
build/nux/style.css 742 B +26 B (+4%)
build/reusable-blocks/style-rtl.css 256 B +31 B (+14%) ⚠️
build/reusable-blocks/style.css 256 B +31 B (+14%) ⚠️
build/widgets/style-rtl.css 899 B +33 B (+4%)
build/widgets/style.css 899 B +32 B (+4%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 1.12 kB
build/annotations/index.min.js 2.93 kB
build/api-fetch/index.min.js 2.44 kB
build/autop/index.min.js 2.28 kB
build/blob/index.min.js 672 B
build/block-directory/index.min.js 6.62 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 58 B
build/block-library/blocks/audio/editor.css 58 B
build/block-library/blocks/audio/style-rtl.css 112 B
build/block-library/blocks/audio/style.css 112 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 475 B
build/block-library/blocks/button/editor.css 474 B
build/block-library/blocks/button/style-rtl.css 603 B
build/block-library/blocks/button/style.css 602 B
build/block-library/blocks/buttons/editor-rtl.css 315 B
build/block-library/blocks/buttons/editor.css 315 B
build/block-library/blocks/buttons/style-rtl.css 375 B
build/block-library/blocks/buttons/style.css 375 B
build/block-library/blocks/calendar/style-rtl.css 208 B
build/block-library/blocks/calendar/style.css 208 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 90 B
build/block-library/blocks/code/style.css 90 B
build/block-library/blocks/code/theme-rtl.css 131 B
build/block-library/blocks/code/theme.css 131 B
build/block-library/blocks/columns/editor-rtl.css 190 B
build/block-library/blocks/columns/editor.css 190 B
build/block-library/blocks/columns/style-rtl.css 422 B
build/block-library/blocks/columns/style.css 422 B
build/block-library/blocks/cover/editor-rtl.css 670 B
build/block-library/blocks/cover/editor.css 670 B
build/block-library/blocks/cover/style-rtl.css 1.22 kB
build/block-library/blocks/cover/style.css 1.23 kB
build/block-library/blocks/embed/editor-rtl.css 486 B
build/block-library/blocks/embed/editor.css 486 B
build/block-library/blocks/embed/style-rtl.css 401 B
build/block-library/blocks/embed/style.css 400 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 301 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 780 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 704 B
build/block-library/blocks/gallery/editor.css 705 B
build/block-library/blocks/gallery/style-rtl.css 1.06 kB
build/block-library/blocks/gallery/style.css 1.06 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 160 B
build/block-library/blocks/group/editor.css 160 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 93 B
build/block-library/blocks/group/theme.css 93 B
build/block-library/blocks/heading/editor-rtl.css 152 B
build/block-library/blocks/heading/editor.css 152 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/home-link/style-rtl.css 259 B
build/block-library/blocks/home-link/style.css 259 B
build/block-library/blocks/html/editor-rtl.css 281 B
build/block-library/blocks/html/editor.css 281 B
build/block-library/blocks/image/editor-rtl.css 729 B
build/block-library/blocks/image/editor.css 727 B
build/block-library/blocks/image/style-rtl.css 481 B
build/block-library/blocks/image/style.css 485 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 281 B
build/block-library/blocks/latest-comments/style.css 282 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B
build/block-library/blocks/latest-posts/editor.css 137 B
build/block-library/blocks/latest-posts/style-rtl.css 529 B
build/block-library/blocks/latest-posts/style.css 529 B
build/block-library/blocks/list/style-rtl.css 63 B
build/block-library/blocks/list/style.css 63 B
build/block-library/blocks/media-text/editor-rtl.css 263 B
build/block-library/blocks/media-text/editor.css 264 B
build/block-library/blocks/media-text/style-rtl.css 492 B
build/block-library/blocks/media-text/style.css 489 B
build/block-library/blocks/more/editor-rtl.css 434 B
build/block-library/blocks/more/editor.css 434 B
build/block-library/blocks/navigation-link/editor-rtl.css 633 B
build/block-library/blocks/navigation-link/editor.css 634 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation/editor-rtl.css 1.55 kB
build/block-library/blocks/navigation/editor.css 1.55 kB
build/block-library/blocks/navigation/style-rtl.css 1.63 kB
build/block-library/blocks/navigation/style.css 1.63 kB
build/block-library/blocks/navigation/view.min.js 2.87 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 310 B
build/block-library/blocks/page-list/editor.css 311 B
build/block-library/blocks/page-list/style-rtl.css 240 B
build/block-library/blocks/page-list/style.css 240 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 247 B
build/block-library/blocks/paragraph/style.css 248 B
build/block-library/blocks/post-author/editor-rtl.css 209 B
build/block-library/blocks/post-author/editor.css 209 B
build/block-library/blocks/post-author/style-rtl.css 183 B
build/block-library/blocks/post-author/style.css 184 B
build/block-library/blocks/post-comments-form/style-rtl.css 140 B
build/block-library/blocks/post-comments-form/style.css 140 B
build/block-library/blocks/post-comments/style-rtl.css 360 B
build/block-library/blocks/post-comments/style.css 359 B
build/block-library/blocks/post-content/editor-rtl.css 139 B
build/block-library/blocks/post-content/editor.css 139 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 338 B
build/block-library/blocks/post-featured-image/editor.css 338 B
build/block-library/blocks/post-featured-image/style-rtl.css 141 B
build/block-library/blocks/post-featured-image/style.css 141 B
build/block-library/blocks/post-template/editor-rtl.css 100 B
build/block-library/blocks/post-template/editor.css 99 B
build/block-library/blocks/post-template/style-rtl.css 379 B
build/block-library/blocks/post-template/style.css 380 B
build/block-library/blocks/post-title/style-rtl.css 60 B
build/block-library/blocks/post-title/style.css 60 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 183 B
build/block-library/blocks/pullquote/editor.css 183 B
build/block-library/blocks/pullquote/style-rtl.css 318 B
build/block-library/blocks/pullquote/style.css 318 B
build/block-library/blocks/pullquote/theme-rtl.css 169 B
build/block-library/blocks/pullquote/theme.css 169 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 270 B
build/block-library/blocks/query-pagination/editor.css 262 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B
build/block-library/blocks/query-pagination/style.css 168 B
build/block-library/blocks/query-title/editor-rtl.css 86 B
build/block-library/blocks/query-title/editor.css 86 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 169 B
build/block-library/blocks/quote/style.css 169 B
build/block-library/blocks/quote/theme-rtl.css 221 B
build/block-library/blocks/quote/theme.css 221 B
build/block-library/blocks/rss/editor-rtl.css 201 B
build/block-library/blocks/rss/editor.css 202 B
build/block-library/blocks/rss/style-rtl.css 290 B
build/block-library/blocks/rss/style.css 290 B
build/block-library/blocks/search/editor-rtl.css 211 B
build/block-library/blocks/search/editor.css 211 B
build/block-library/blocks/search/style-rtl.css 359 B
build/block-library/blocks/search/style.css 362 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 99 B
build/block-library/blocks/separator/editor.css 99 B
build/block-library/blocks/separator/style-rtl.css 251 B
build/block-library/blocks/separator/style.css 251 B
build/block-library/blocks/separator/theme-rtl.css 172 B
build/block-library/blocks/separator/theme.css 172 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B
build/block-library/blocks/shortcode/editor.css 512 B
build/block-library/blocks/site-logo/editor-rtl.css 646 B
build/block-library/blocks/site-logo/editor.css 647 B
build/block-library/blocks/site-logo/style-rtl.css 154 B
build/block-library/blocks/site-logo/style.css 154 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 85 B
build/block-library/blocks/site-title/editor.css 85 B
build/block-library/blocks/social-link/editor-rtl.css 164 B
build/block-library/blocks/social-link/editor.css 165 B
build/block-library/blocks/social-links/editor-rtl.css 800 B
build/block-library/blocks/social-links/editor.css 799 B
build/block-library/blocks/social-links/style-rtl.css 1.34 kB
build/block-library/blocks/social-links/style.css 1.34 kB
build/block-library/blocks/spacer/editor-rtl.css 308 B
build/block-library/blocks/spacer/editor.css 308 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 478 B
build/block-library/blocks/table/editor.css 478 B
build/block-library/blocks/table/style-rtl.css 480 B
build/block-library/blocks/table/style.css 480 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/editor-rtl.css 118 B
build/block-library/blocks/tag-cloud/editor.css 118 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B
build/block-library/blocks/tag-cloud/style.css 94 B
build/block-library/blocks/template-part/editor-rtl.css 551 B
build/block-library/blocks/template-part/editor.css 550 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/term-description/editor-rtl.css 90 B
build/block-library/blocks/term-description/editor.css 90 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 569 B
build/block-library/blocks/video/editor.css 570 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/editor-rtl.css 9.75 kB
build/block-library/editor.css 9.75 kB
build/block-library/reset-rtl.css 514 B
build/block-library/reset.css 515 B
build/block-library/style-rtl.css 10.2 kB
build/block-library/style.css 10.2 kB
build/block-library/theme-rtl.css 692 B
build/block-library/theme.css 693 B
build/block-serialization-default-parser/index.min.js 1.29 kB
build/block-serialization-spec-parser/index.min.js 3.06 kB
build/blocks/index.min.js 47.3 kB
build/components/index.min.js 182 kB
build/compose/index.min.js 10.2 kB
build/core-data/index.min.js 12.4 kB
build/customize-widgets/index.min.js 10 kB
build/data-controls/index.min.js 828 B
build/data/index.min.js 7.23 kB
build/date/index.min.js 31.8 kB
build/deprecated/index.min.js 738 B
build/dom-ready/index.min.js 577 B
build/dom/index.min.js 4.62 kB
build/edit-navigation/index.min.js 13.9 kB
build/edit-post/index.min.js 58.6 kB
build/edit-site/index.min.js 25.9 kB
build/edit-widgets/index.min.js 16.1 kB
build/editor/index.min.js 38.6 kB
build/element/index.min.js 3.44 kB
build/escape-html/index.min.js 739 B
build/format-library/index.min.js 5.68 kB
build/hooks/index.min.js 1.76 kB
build/html-entities/index.min.js 628 B
build/i18n/index.min.js 3.73 kB
build/is-shallow-equal/index.min.js 710 B
build/keyboard-shortcuts/index.min.js 1.74 kB
build/keycodes/index.min.js 1.43 kB
build/list-reusable-blocks/index.min.js 2.07 kB
build/media-utils/index.min.js 3.08 kB
build/notices/index.min.js 1.07 kB
build/nux/index.min.js 2.31 kB
build/plugins/index.min.js 1.99 kB
build/primitives/index.min.js 1.03 kB
build/priority-queue/index.min.js 791 B
build/react-i18n/index.min.js 924 B
build/redux-routine/index.min.js 2.82 kB
build/reusable-blocks/index.min.js 2.56 kB
build/rich-text/index.min.js 10.6 kB
build/server-side-render/index.min.js 1.63 kB
build/shortcode/index.min.js 1.68 kB
build/token-list/index.min.js 848 B
build/url/index.min.js 1.95 kB
build/viewport/index.min.js 1.28 kB
build/warning/index.min.js 1.13 kB
build/widgets/index.min.js 6.21 kB
build/wordcount/index.min.js 1.24 kB

compressed-size-action

@jameskoster
Copy link
Contributor

🎉

I know this is still a draft, but wanted to report two small issues I spotted:

For some reason I am able to bypass the click-through in the Twenty Twentyone Header to select the spacer:

bypass.mp4

Also, if you nest a template part inside another template part, a similar issue occurs – I can bypass the parent template part and directly select the child:

nest.mp4

@Addison-Stavlo
Copy link
Contributor Author

Thanks for pointing those out! That spacer thing is weird, it seems to happen when you hover/click just above the actual boundary of the block 🤦‍♀️ . I think I can fix both of those issues with some css.

I just realized a bit of a contradiction in this colored-overlay design though @jameskoster. If we apply the color overlay when we click and select the template part block, then it gets in the way of applying/viewing background colors etc from that block. So if we try to use background colors, we cannot preview the actual color until we deselect the template part, or select an inner block:

color-contradiction

If we get the hover/selection interactions from this working well (hovering highlights the entire TP and inner contents hover effects are disabled until the template part is selected / click selection always targets the template part block itself), I think that on its own would be a large step forward. Thoughts on where to go given the color issue?

@jameskoster
Copy link
Contributor

Hmm yeah that color issue is a tricky one :D

I'm not sure it's worth diving too deeply in to it right now, as it still isn't 100% clear whether this action will be possible in this context, or whether you will need to engage the isolated template part editing view to access them.

Let's create a follow-up issue if/when we merge this PR?

@Addison-Stavlo
Copy link
Contributor Author

Let's create a follow-up issue if/when we merge this PR?

Yes for follow ups... but Im not sure if we should introduce any colored overlay on that specific block selection state if it hinders pre-existing functionality for choosing background color. 🤔 There was a project thread about a year back regarding feature parity for FSE blocks, and the spec for the template part block was to have feature parity with the group block (for managing alignment, colors, etc). If we are re-thinking that spec that is fine, but I don't think we should add anything to hinder it until a new spec is determined.

On that topic I would also argue it should always be controllable from the block inspector here regardless of whether or not it is a block level or entity level setting that it controls. Having it in the stand-alone editor I would see as an additional control but not a replacement.

@jameskoster
Copy link
Contributor

Another option could be to hide the overlay when color inputs in the Inspector are focussed. Perhaps that's worth a try?

@Addison-Stavlo
Copy link
Contributor Author

The issue with the spacer block selection and nested template parts should be fixed now:

nested-parts

Another option could be to hide the overlay when color inputs in the Inspector are focussed. Perhaps that's worth a try?

Thats not a bad idea.. it may be a little more complicated to get working. Or similar but easier to implement idea would be to only show that colored state on combination of selection + hover? 🤔

My main Q at this point is what does the color really do for us? It seems unnecessary in that on selection there is already a handful of UI in place that makes it clear what is selected and where its boundaries are. I feel the real upgrade in behavior here is the hover and selection interactions making it impossible to interact with or select inner blocks until the main parent becomes selected first.

@Addison-Stavlo
Copy link
Contributor Author

My main Q at this point is what does the color really do for us? It seems unnecessary in that on selection there is already a handful of UI in place that makes it clear what is selected and where its boundaries are. I feel the real upgrade in behavior here is the hover and selection interactions making it impossible to interact with or select inner blocks until the main parent becomes selected first.

Thinking about it more / adding onto that... if the goal of the color is to distinguish what 'type of thing' it is (template part vs. reusable block), maybe that color would be better suited on the hover interaction instead (what is currently gray). In that hover flow, there is nothing in the interface really distinguishing what type of entity we are about to select when we click.. while once the item is selected there are already various UI elements in place that can distinguish this making it less necessary.

If we move the color to the hover flow, then we would only need an overlay when hovered+unselected which would get rid of the resizing problems noted above.

@Addison-Stavlo
Copy link
Contributor Author

I updated this to be a bit more simplified, everything should behave the same but I would appreciate re-testing/reviewing when able.

@paaljoachim
Copy link
Contributor

I went to test using this approach: https://make.wordpress.org/design/2021/03/03/testing-a-gutenberg-pull-request-pr/
(Going to the tab Checks -> clicking Gutenberg build -> then downloading the Gutenberg plugin -> unzipping -> zipping it up again -> uploading to a test site. Result multiple fatal errors. Which means I am not able to test using the above approach.)
I made an issue here: #32795

@paaljoachim
Copy link
Contributor

paaljoachim commented Jun 19, 2021

Newest version.

1- Hover over a Reusable block and notice the overlay.
2- Click and the (top parent) Reusable block is selected.
3- Second click (in following example) the Heading is clicked into.

Click-through-Reusable-block.mp4

I believe at this stage the click through is finished and should be merged.

Various blocks that have inner content such as Buttons, Social Icons, Columns, Groups and other blocks could benefit well from using the Click through approach.

-level 1-
This is the most basic of protective measures that also makes it easier to select the top parent block.


-level 2-
Adding an extra measure of protection for the more vulnerable blocks. Where editing has an higher impact on the site.

For Reusable blocks an added measure of protection is needed, because these are a kind of global blocks potentially used in many pages/posts. Editing one instance has an impact on all other places where it is used.
Using the click through approach as well as adding a lock will I believe add an extra layer of protection.
I added a suggestion here: #32710 (comment)

@paaljoachim
Copy link
Contributor

paaljoachim commented Jun 20, 2021

Another test.

1- Moving block below Reusable block using arrow icons. Moves it from below and to above Reusable block.
2- Drag and drop one can drop a block into Reusable block.
(I also added other steps seen in the below video which is really a sidetrack in relation to this PR, but also needs to be fixed. As one can not publish the draft.)

The important part is that a user can accidental drag and drop a block into the Reusable block.

Drag-block-into-Reusable-block.mp4

@Addison-Stavlo
Copy link
Contributor Author

The important part is that a user can accidental drag and drop a block into the Reusable block.

Yeah im not entirely sure what we should do about that here. We have disabled the overlay on drag-and-drop so the user is still able to drag-and-drop into these containers, and have given them a border to help try to outline that container to make its boundaries more apparent in that drag-and-drop process. Disabling drag-and-drop altogether into these containers seems like it would be pretty heavy handed and limiting. 🤔

@critterverse
Copy link
Contributor

Hey all, this is working as expected for me in the post editor (having some trouble trying to open the Site Editor so I haven't re-tested there).

Disabling drag-and-drop altogether into these containers seems like it would be pretty heavy handed and limiting.

Agree, I would err towards leaving drag and drop enabled as is because it might be confusing to remove the option entirely.

One other option that could introduce a bit more friction around this interaction could be to use a long hover to bypass the overlay. So when the user activates the drag motion and hovers the block area, the overlay would be visible. After a long hover, it could "unlock" and switch to the current behavior (outlining the parent with the ability to insert anywhere amongst the children).

But I don't think this is an interaction pattern that exists elsewhere in the editor so it would probably require more consideration. It might make sense to explore the drag and drop behavior further in a follow-up PR but curious to hear what others think!

@paaljoachim
Copy link
Contributor

paaljoachim commented Jun 21, 2021

One other option that could introduce a bit more friction around this interaction could be to use a long hover to bypass the overlay. So when the user activates the drag motion and hovers the block area, the overlay would be visible. After a long hover, it could "unlock" and switch to the current behavior (outlining the parent with the ability to insert anywhere amongst the children).

This sounds very interesting @critterverse!

I do agree that is always something one can followup with in another PR.


Are there any other considerations we need to look at before we can merge this PR?
The next step might be to again get a code review.

@Addison-Stavlo
Copy link
Contributor Author

The next step might be to again get a code review.

Correct, I think we need some code reviews here again to move forward. I think folks have been a bit busy with 5.8 related items, so its completely understandable if that takes a little bit of time.

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

I did a review of the code and tested the functionality of this PR and from both the code perspective and functionality everything looked good 👍

@Addison-Stavlo Addison-Stavlo merged commit afee31e into trunk Jun 25, 2021
@Addison-Stavlo Addison-Stavlo deleted the try/template-part-clickthrough-overlay-element branch June 25, 2021 17:13
@github-actions github-actions bot added this to the Gutenberg 11.0 milestone Jun 25, 2021
@paaljoachim
Copy link
Contributor

paaljoachim commented Jun 25, 2021

@peterwilsoncc , @desrosj and @youknowriad

Should this PR with the click through approach be targeted for WP 5.8 as it does in a small way improve the protection of accidental changes with Reusable blocks?

@youknowriad
Copy link
Contributor

I'd have loved for this to land sooner to consider it for 5.8. At this point, I have doubts, I don't feel like we have enough testing time to get the necessary confidence.

@paaljoachim
Copy link
Contributor

paaljoachim commented Jun 25, 2021

Good point!
I think we instead should go with the comment made by Jonathan here: https://core.trac.wordpress.org/ticket/52779#comment:34
As Peter has been working on getting Reusable block fixes into a 5.7.3 but fixes have been slow in coming, so the idea now is to move the various fixes into a 5.8.1.

@Addison-Stavlo
Copy link
Contributor Author

I'd have loved for this to land sooner to consider it for 5.8. At this point, I have doubts, I don't feel like we have enough testing time to get the necessary confidence.

I 100% agree that its best to play it safe and not rush things there.

@mtias
Copy link
Member

mtias commented Jun 29, 2021

Great work @Addison-Stavlo !

@paaljoachim
Copy link
Contributor

Now that we have been testing out the overlay for Reusable blocks for a while in the Gutenberg plugin.
What if we add this PR to WP 5.8.1? As it would be very helpful for a small protection layer in relation to accidental changes.
Thoughts?

I am also adding @desrosj Jonathan.

@paaljoachim paaljoachim mentioned this pull request Aug 30, 2021
7 tasks
onMouseLeave={ () => setIsHovered( false ) }
>
{ isOverlayActive && (
<div
Copy link
Member

Choose a reason for hiding this comment

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

Is there on way to do this with less elements involved? Maybe pointer-events: none and enable when the block is selected?

Copy link
Contributor

Choose a reason for hiding this comment

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

I'm pretty sure we did this already in #34012

Copy link
Member

Choose a reason for hiding this comment

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

Nice! Sorry, missed that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Block The "Reusable Block" Block [Block] Template Part Affects the Template Parts Block
Projects
None yet
Development

Successfully merging this pull request may close these issues.