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

Button Block: Use hook based border support #30194

Merged
merged 9 commits into from
Apr 13, 2021

Conversation

ockham
Copy link
Contributor

@ockham ockham commented Mar 24, 2021

Description

Part of #28913.

Remove the custom border radius panel from the Button block's edit(), and opt that button into using __experimentalBorder block supports for border radius instead. Furthermore, enable border radius support for the Button block in experimental-default-theme.json in order to preserve the current user-facing behavior.

How has this been tested?

  • Make sure you're on the trunk branch, create a new post, and insert a Buttons Block.
  • In the Buttons Block, create a button (by typing a label).
  • Note the "Border settings" panel in the sidebar. Change the border radius by using the slider, and save the post. Make note of the border radius value that you assigned.
  • Switch to this branch, build it, and reload the editor, with the post that you just created still open.
  • Verify that the Buttons block loads as before, and that the border radius in the sidebar panel is the one you assigned earlier.
  • Preview the post, and verify (e.g. in the DOM inspector) that the border radius is the one you assigned.

Screenshots

button-block-borders

@ockham ockham added the [Block] Buttons Affects the Buttons Block label Mar 24, 2021
@ockham ockham self-assigned this Mar 24, 2021
@github-actions
Copy link

github-actions bot commented Mar 24, 2021

Size Change: +1.55 kB (0%)

Total Size: 1.43 MB

Filename Size Change
build/block-editor/index.js 128 kB +1.09 kB (+1%)
build/block-editor/style-rtl.css 12.5 kB +105 B (+1%)
build/block-editor/style.css 12.5 kB +104 B (+1%)
build/block-library/blocks/query/editor-rtl.css 810 B +15 B (+2%)
build/block-library/blocks/query/editor.css 809 B +15 B (+2%)
build/block-library/editor-rtl.css 9.77 kB +12 B (0%)
build/block-library/editor.css 9.76 kB +13 B (0%)
build/block-library/index.js 153 kB +87 B (0%)
build/blocks/index.js 48.5 kB +83 B (0%)
build/i18n/index.js 4.04 kB +30 B (+1%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.79 kB 0 B
build/api-fetch/index.js 3.42 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 665 B 0 B
build/block-directory/index.js 8.63 kB 0 B
build/block-directory/style-rtl.css 1 kB 0 B
build/block-directory/style.css 1.01 kB 0 B
build/block-library/blocks/archives/editor-rtl.css 61 B 0 B
build/block-library/blocks/archives/editor.css 60 B 0 B
build/block-library/blocks/audio/editor-rtl.css 58 B 0 B
build/block-library/blocks/audio/editor.css 58 B 0 B
build/block-library/blocks/audio/style-rtl.css 112 B 0 B
build/block-library/blocks/audio/style.css 112 B 0 B
build/block-library/blocks/block/editor-rtl.css 161 B 0 B
build/block-library/blocks/block/editor.css 161 B 0 B
build/block-library/blocks/button/editor-rtl.css 475 B 0 B
build/block-library/blocks/button/editor.css 474 B 0 B
build/block-library/blocks/button/style-rtl.css 503 B 0 B
build/block-library/blocks/button/style.css 503 B 0 B
build/block-library/blocks/buttons/editor-rtl.css 315 B 0 B
build/block-library/blocks/buttons/editor.css 315 B 0 B
build/block-library/blocks/buttons/style-rtl.css 368 B 0 B
build/block-library/blocks/buttons/style.css 368 B 0 B
build/block-library/blocks/calendar/style-rtl.css 208 B 0 B
build/block-library/blocks/calendar/style.css 208 B 0 B
build/block-library/blocks/categories/editor-rtl.css 84 B 0 B
build/block-library/blocks/categories/editor.css 83 B 0 B
build/block-library/blocks/categories/style-rtl.css 79 B 0 B
build/block-library/blocks/categories/style.css 79 B 0 B
build/block-library/blocks/code/style-rtl.css 90 B 0 B
build/block-library/blocks/code/style.css 90 B 0 B
build/block-library/blocks/columns/editor-rtl.css 190 B 0 B
build/block-library/blocks/columns/editor.css 190 B 0 B
build/block-library/blocks/columns/style-rtl.css 436 B 0 B
build/block-library/blocks/columns/style.css 435 B 0 B
build/block-library/blocks/cover/editor-rtl.css 605 B 0 B
build/block-library/blocks/cover/editor.css 605 B 0 B
build/block-library/blocks/cover/style-rtl.css 1.23 kB 0 B
build/block-library/blocks/cover/style.css 1.23 kB 0 B
build/block-library/blocks/embed/editor-rtl.css 486 B 0 B
build/block-library/blocks/embed/editor.css 486 B 0 B
build/block-library/blocks/embed/style-rtl.css 401 B 0 B
build/block-library/blocks/embed/style.css 400 B 0 B
build/block-library/blocks/file/editor-rtl.css 175 B 0 B
build/block-library/blocks/file/editor.css 174 B 0 B
build/block-library/blocks/file/style-rtl.css 248 B 0 B
build/block-library/blocks/file/style.css 248 B 0 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB 0 B
build/block-library/blocks/freeform/editor.css 2.44 kB 0 B
build/block-library/blocks/gallery/editor-rtl.css 704 B 0 B
build/block-library/blocks/gallery/editor.css 705 B 0 B
build/block-library/blocks/gallery/style-rtl.css 1.09 kB 0 B
build/block-library/blocks/gallery/style.css 1.09 kB 0 B
build/block-library/blocks/group/editor-rtl.css 160 B 0 B
build/block-library/blocks/group/editor.css 160 B 0 B
build/block-library/blocks/group/style-rtl.css 57 B 0 B
build/block-library/blocks/group/style.css 57 B 0 B
build/block-library/blocks/heading/editor-rtl.css 129 B 0 B
build/block-library/blocks/heading/editor.css 129 B 0 B
build/block-library/blocks/heading/style-rtl.css 76 B 0 B
build/block-library/blocks/heading/style.css 76 B 0 B
build/block-library/blocks/html/editor-rtl.css 281 B 0 B
build/block-library/blocks/html/editor.css 281 B 0 B
build/block-library/blocks/image/editor-rtl.css 717 B 0 B
build/block-library/blocks/image/editor.css 716 B 0 B
build/block-library/blocks/image/style-rtl.css 476 B 0 B
build/block-library/blocks/image/style.css 478 B 0 B
build/block-library/blocks/latest-comments/style-rtl.css 281 B 0 B
build/block-library/blocks/latest-comments/style.css 282 B 0 B
build/block-library/blocks/latest-posts/editor-rtl.css 137 B 0 B
build/block-library/blocks/latest-posts/editor.css 137 B 0 B
build/block-library/blocks/latest-posts/style-rtl.css 523 B 0 B
build/block-library/blocks/latest-posts/style.css 522 B 0 B
build/block-library/blocks/legacy-widget/editor-rtl.css 398 B 0 B
build/block-library/blocks/legacy-widget/editor.css 399 B 0 B
build/block-library/blocks/list/style-rtl.css 63 B 0 B
build/block-library/blocks/list/style.css 63 B 0 B
build/block-library/blocks/media-text/editor-rtl.css 191 B 0 B
build/block-library/blocks/media-text/editor.css 191 B 0 B
build/block-library/blocks/media-text/style-rtl.css 535 B 0 B
build/block-library/blocks/media-text/style.css 532 B 0 B
build/block-library/blocks/more/editor-rtl.css 434 B 0 B
build/block-library/blocks/more/editor.css 434 B 0 B
build/block-library/blocks/navigation-link/editor-rtl.css 597 B 0 B
build/block-library/blocks/navigation-link/editor.css 597 B 0 B
build/block-library/blocks/navigation-link/style-rtl.css 1.07 kB 0 B
build/block-library/blocks/navigation-link/style.css 1.07 kB 0 B
build/block-library/blocks/navigation/editor-rtl.css 1.24 kB 0 B
build/block-library/blocks/navigation/editor.css 1.24 kB 0 B
build/block-library/blocks/navigation/style-rtl.css 204 B 0 B
build/block-library/blocks/navigation/style.css 205 B 0 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B 0 B
build/block-library/blocks/nextpage/editor.css 395 B 0 B
build/block-library/blocks/page-list/editor-rtl.css 239 B 0 B
build/block-library/blocks/page-list/editor.css 240 B 0 B
build/block-library/blocks/page-list/style-rtl.css 167 B 0 B
build/block-library/blocks/page-list/style.css 167 B 0 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B 0 B
build/block-library/blocks/paragraph/editor.css 157 B 0 B
build/block-library/blocks/paragraph/style-rtl.css 247 B 0 B
build/block-library/blocks/paragraph/style.css 248 B 0 B
build/block-library/blocks/post-author/editor-rtl.css 209 B 0 B
build/block-library/blocks/post-author/editor.css 209 B 0 B
build/block-library/blocks/post-author/style-rtl.css 183 B 0 B
build/block-library/blocks/post-author/style.css 184 B 0 B
build/block-library/blocks/post-comments-form/style-rtl.css 250 B 0 B
build/block-library/blocks/post-comments-form/style.css 250 B 0 B
build/block-library/blocks/post-content/editor-rtl.css 139 B 0 B
build/block-library/blocks/post-content/editor.css 139 B 0 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B 0 B
build/block-library/blocks/post-excerpt/editor.css 73 B 0 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B 0 B
build/block-library/blocks/post-excerpt/style.css 69 B 0 B
build/block-library/blocks/post-featured-image/editor-rtl.css 338 B 0 B
build/block-library/blocks/post-featured-image/editor.css 338 B 0 B
build/block-library/blocks/post-featured-image/style-rtl.css 100 B 0 B
build/block-library/blocks/post-featured-image/style.css 100 B 0 B
build/block-library/blocks/post-title/style-rtl.css 60 B 0 B
build/block-library/blocks/post-title/style.css 60 B 0 B
build/block-library/blocks/preformatted/style-rtl.css 103 B 0 B
build/block-library/blocks/preformatted/style.css 103 B 0 B
build/block-library/blocks/pullquote/editor-rtl.css 183 B 0 B
build/block-library/blocks/pullquote/editor.css 183 B 0 B
build/block-library/blocks/pullquote/style-rtl.css 318 B 0 B
build/block-library/blocks/pullquote/style.css 318 B 0 B
build/block-library/blocks/query-loop/editor-rtl.css 83 B 0 B
build/block-library/blocks/query-loop/editor.css 82 B 0 B
build/block-library/blocks/query-loop/style-rtl.css 315 B 0 B
build/block-library/blocks/query-loop/style.css 317 B 0 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B 0 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B 0 B
build/block-library/blocks/query-pagination/editor-rtl.css 270 B 0 B
build/block-library/blocks/query-pagination/editor.css 262 B 0 B
build/block-library/blocks/query-pagination/style-rtl.css 168 B 0 B
build/block-library/blocks/query-pagination/style.css 168 B 0 B
build/block-library/blocks/query-title/editor-rtl.css 86 B 0 B
build/block-library/blocks/query-title/editor.css 86 B 0 B
build/block-library/blocks/quote/style-rtl.css 169 B 0 B
build/block-library/blocks/quote/style.css 169 B 0 B
build/block-library/blocks/rss/editor-rtl.css 201 B 0 B
build/block-library/blocks/rss/editor.css 202 B 0 B
build/block-library/blocks/rss/style-rtl.css 290 B 0 B
build/block-library/blocks/rss/style.css 290 B 0 B
build/block-library/blocks/search/editor-rtl.css 189 B 0 B
build/block-library/blocks/search/editor.css 189 B 0 B
build/block-library/blocks/search/style-rtl.css 359 B 0 B
build/block-library/blocks/search/style.css 362 B 0 B
build/block-library/blocks/separator/editor-rtl.css 99 B 0 B
build/block-library/blocks/separator/editor.css 99 B 0 B
build/block-library/blocks/separator/style-rtl.css 251 B 0 B
build/block-library/blocks/separator/style.css 251 B 0 B
build/block-library/blocks/shortcode/editor-rtl.css 512 B 0 B
build/block-library/blocks/shortcode/editor.css 512 B 0 B
build/block-library/blocks/site-logo/editor-rtl.css 438 B 0 B
build/block-library/blocks/site-logo/editor.css 438 B 0 B
build/block-library/blocks/site-logo/style-rtl.css 150 B 0 B
build/block-library/blocks/site-logo/style.css 150 B 0 B
build/block-library/blocks/social-link/editor-rtl.css 164 B 0 B
build/block-library/blocks/social-link/editor.css 165 B 0 B
build/block-library/blocks/social-links/editor-rtl.css 796 B 0 B
build/block-library/blocks/social-links/editor.css 795 B 0 B
build/block-library/blocks/social-links/style-rtl.css 1.32 kB 0 B
build/block-library/blocks/social-links/style.css 1.33 kB 0 B
build/block-library/blocks/spacer/editor-rtl.css 308 B 0 B
build/block-library/blocks/spacer/editor.css 308 B 0 B
build/block-library/blocks/spacer/style-rtl.css 48 B 0 B
build/block-library/blocks/spacer/style.css 48 B 0 B
build/block-library/blocks/table/editor-rtl.css 478 B 0 B
build/block-library/blocks/table/editor.css 478 B 0 B
build/block-library/blocks/table/style-rtl.css 402 B 0 B
build/block-library/blocks/table/style.css 402 B 0 B
build/block-library/blocks/tag-cloud/editor-rtl.css 118 B 0 B
build/block-library/blocks/tag-cloud/editor.css 118 B 0 B
build/block-library/blocks/tag-cloud/style-rtl.css 94 B 0 B
build/block-library/blocks/tag-cloud/style.css 94 B 0 B
build/block-library/blocks/template-part/editor-rtl.css 552 B 0 B
build/block-library/blocks/template-part/editor.css 551 B 0 B
build/block-library/blocks/term-description/editor-rtl.css 90 B 0 B
build/block-library/blocks/term-description/editor.css 90 B 0 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B 0 B
build/block-library/blocks/text-columns/editor.css 95 B 0 B
build/block-library/blocks/text-columns/style-rtl.css 166 B 0 B
build/block-library/blocks/text-columns/style.css 166 B 0 B
build/block-library/blocks/verse/style-rtl.css 87 B 0 B
build/block-library/blocks/verse/style.css 87 B 0 B
build/block-library/blocks/video/editor-rtl.css 504 B 0 B
build/block-library/blocks/video/editor.css 503 B 0 B
build/block-library/blocks/video/style-rtl.css 173 B 0 B
build/block-library/blocks/video/style.css 173 B 0 B
build/block-library/common-rtl.css 1.31 kB 0 B
build/block-library/common.css 1.31 kB 0 B
build/block-library/reset-rtl.css 502 B 0 B
build/block-library/reset.css 503 B 0 B
build/block-library/style-rtl.css 9.39 kB 0 B
build/block-library/style.css 9.39 kB 0 B
build/block-library/theme-rtl.css 692 B 0 B
build/block-library/theme.css 693 B 0 B
build/block-serialization-default-parser/index.js 1.87 kB 0 B
build/block-serialization-spec-parser/index.js 3.06 kB 0 B
build/components/index.js 286 kB 0 B
build/components/style-rtl.css 16.3 kB 0 B
build/components/style.css 16.3 kB 0 B
build/compose/index.js 11.2 kB 0 B
build/core-data/index.js 17.1 kB 0 B
build/customize-widgets/index.js 7.09 kB 0 B
build/customize-widgets/style-rtl.css 630 B 0 B
build/customize-widgets/style.css 631 B 0 B
build/data-controls/index.js 838 B 0 B
build/data/index.js 8.88 kB 0 B
build/date/index.js 31.9 kB 0 B
build/deprecated/index.js 787 B 0 B
build/dom-ready/index.js 577 B 0 B
build/dom/index.js 5.25 kB 0 B
build/edit-navigation/index.js 17 kB 0 B
build/edit-navigation/style-rtl.css 2.86 kB 0 B
build/edit-navigation/style.css 2.86 kB 0 B
build/edit-post/classic-rtl.css 454 B 0 B
build/edit-post/classic.css 454 B 0 B
build/edit-post/index.js 307 kB 0 B
build/edit-post/style-rtl.css 6.98 kB 0 B
build/edit-post/style.css 6.97 kB 0 B
build/edit-site/index.js 28.3 kB 0 B
build/edit-site/style-rtl.css 4.9 kB 0 B
build/edit-site/style.css 4.89 kB 0 B
build/edit-widgets/index.js 15.7 kB 0 B
build/edit-widgets/style-rtl.css 2.97 kB 0 B
build/edit-widgets/style.css 2.98 kB 0 B
build/editor/index.js 42.5 kB 0 B
build/editor/style-rtl.css 3.92 kB 0 B
build/editor/style.css 3.92 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.76 kB 0 B
build/format-library/style-rtl.css 637 B 0 B
build/format-library/style.css 639 B 0 B
build/hooks/index.js 2.28 kB 0 B
build/html-entities/index.js 622 B 0 B
build/is-shallow-equal/index.js 699 B 0 B
build/keyboard-shortcuts/index.js 2.53 kB 0 B
build/keycodes/index.js 1.96 kB 0 B
build/list-reusable-blocks/index.js 3.19 kB 0 B
build/list-reusable-blocks/style-rtl.css 629 B 0 B
build/list-reusable-blocks/style.css 628 B 0 B
build/media-utils/index.js 5.38 kB 0 B
build/notices/index.js 1.86 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 731 B 0 B
build/nux/style.css 727 B 0 B
build/plugins/index.js 2.96 kB 0 B
build/primitives/index.js 1.42 kB 0 B
build/priority-queue/index.js 790 B 0 B
build/react-i18n/index.js 1.46 kB 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 3.79 kB 0 B
build/reusable-blocks/style-rtl.css 225 B 0 B
build/reusable-blocks/style.css 225 B 0 B
build/rich-text/index.js 13.5 kB 0 B
build/server-side-render/index.js 2.6 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 3.02 kB 0 B
build/viewport/index.js 1.86 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.22 kB 0 B

compressed-size-action

@stokesman
Copy link
Contributor

Glad to see this! It should please lots of folks who want to be able to disable the border-radius control #19796.

@ockham
Copy link
Contributor Author

ockham commented Mar 25, 2021

This might be getting close to working okay on the save() side, but I don't really know how to get the border radius on the edit() side -- especially the translation from the nested {"style":{"border":{"radius":22}}} format into style: border-radius: 22px. It looks like we have some logic to do this in GlobalStylesProvider, but so far, that's only used in the Site Editor, and seems to be tailored to work with serialized attributes (rather than explicit ones).

Do you have any pointers for me, @nosolosw? 🙏

@ockham
Copy link
Contributor Author

ockham commented Mar 25, 2021

I'll try an ad-hoc solution for now -- directly importing getInlineStyles, and using it to translate style to the flattened format.

I hope to come up with a more scalable fix tomorrow. IIUC, we currently perform these translations implicitly for serialized attributes. Maybe we 'just' need to carry them over to the __experimentalSkipSerialization case 🤔 (maybe in the addSaveProps/addEditProps functions that are hooked into blocks.getSaveContent.extraProps/blocks.registerBlockType, respectively).

@ockham
Copy link
Contributor Author

ockham commented Mar 25, 2021

I'll try an ad-hoc solution for now -- directly importing getInlineStyles, and using it to translate style to the flattened format.

I hope to come up with a more scalable fix tomorrow. IIUC, we currently perform these translations implicitly for serialized attributes. Maybe we 'just' need to carry them over to the __experimentalSkipSerialization case 🤔 (maybe in the addSaveProps/addEditProps functions that are hooked into blocks.getSaveContent.extraProps/blocks.registerBlockType, respectively).

This might be tricky to implement 🤔 The previous block-supports mechanism strongly relied on getEditWrapperProps (which it extended through aforementioned hooks). That worked as long as we were injecting the extra attributes into the block wrapper. However, that's the one premise we're giving up with the new mechanism 😬

@ockham
Copy link
Contributor Author

ockham commented Mar 25, 2021

On the edit side, maybe the blocks.getBlockAttributes filter could be a good fit for flattening the attributes 🤔

Copy link
Contributor

@aaronrobertshaw aaronrobertshaw left a comment

Choose a reason for hiding this comment

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

Looking good so far ✨

Verify that the Buttons block loads as before, and that the border radius in the sidebar panel is the one you assigned earlier.

I appreciate the PR is still a draft and a deprecation is likely on its way. Just thought I'd flag it again as we'll need to migrate the borderRadius attribute to style.border.radius.

Other than that, it is all testing as advertised 👍

@ockham
Copy link
Contributor Author

ockham commented Mar 30, 2021

Looking good so far ✨

Verify that the Buttons block loads as before, and that the border radius in the sidebar panel is the one you assigned earlier.

I appreciate the PR is still a draft and a deprecation is likely on its way. Just thought I'd flag it again as we'll need to migrate the borderRadius attribute to style.border.radius.

Other than that, it is all testing as advertised 👍

Thanks! Yeah, I forgot to add a TODO item to the PR desc about the deprecation. I've added one now but still need to add (and update) snapshot tests.

@ockham ockham force-pushed the update/button-block-use-hook-based-border-support branch from 345c310 to a776a91 Compare March 31, 2021 17:06
@ockham ockham marked this pull request as ready for review March 31, 2021 17:50
@ockham ockham requested a review from a team April 1, 2021 13:06
Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

This looks good.

I wonder if we should merge it and iterate on the CSS variables first or if we should hold on a bit until we decide on the next steps there because it has the potential to create "a new deprecation" since it will rely on a CSS variable instead of a regular inline style.

@ockham
Copy link
Contributor Author

ockham commented Apr 1, 2021

This looks good.

I wonder if we should merge it and iterate on the CSS variables first or if we should hold on a bit until we decide on the next steps there because it has the potential to create "a new deprecation" since it will rely on a CSS variable instead of a regular inline style.

Yeah, was wondering the same 🤔 I guess we can hold off a little longer 👍

@ockham ockham added the [Status] Blocked Used to indicate that a current effort isn't able to move forward label Apr 1, 2021
@aaronrobertshaw
Copy link
Contributor

I wonder if we should merge it and iterate on the CSS variables first or if we should hold on a bit until we decide on the next steps there because it has the potential to create "a new deprecation" since it will rely on a CSS variable instead of a regular inline style.

I'm probably missing some details on what's intended here, so feel free to ignore the following comments.

For what it's worth though, certain environments with stricter KSES strip out CSS variables from inline styles saved to post content, so could provide gotchas with block validation when used out in the wild.

I recently ran into a similar issue leveraging block support and passing colors via CSS variables to inner social link items.

@youknowriad
Copy link
Contributor

@aaroncampbell Thanks for raising that, I'm aware of this limitation. If we do embrace CSS variables as styles, they need to be generated server side.

That said, I've been thinking of the CSS variables proposal and I'm leaning towards avoiding it at the moment (I'll comment there)

@oandregal oandregal mentioned this pull request Apr 7, 2021
82 tasks
@ockham
Copy link
Contributor Author

ockham commented Apr 8, 2021

That said, I've been thinking of the CSS variables proposal and I'm leaning towards avoiding it at the moment (I'll comment there)

For reference, that's this comment: #29714 (comment)

Seems like we can go ahead with this PR then 🙂 cc/ @youknowriad @nosolosw

@oandregal
Copy link
Member

The approach here sounds good to me 👍

Do we need to keep the no-border-radius class? I see that it was added https://github.com/WordPress/gutenberg/pull/17253/files#diff-7bf60a59a90bcf0f53fa61af0e1717f2db7e31ff7bca1c0eb2e17389a351e1efR42 The blocks that already use this hook don't use it. Not sure how to gauge this: perhaps taking a look at existing default themes and see if they use it for something other than the radius? If we do keep it, it'd good to double-check that the conditions we attach it are the same as before (it doesn't look like the radius attribute had a default value, so it seems the same). For reference, two different cases we may want to consider are for this class: the hook either adds border-radius: 0px (when the user sets it to that value) or removes any border-radius (when the user clicks the "reset" button).

I can do more testing (deprecations, etc) when the PR is rebased.

@ockham ockham force-pushed the update/button-block-use-hook-based-border-support branch 2 times, most recently from 8f525f8 to afabceb Compare April 9, 2021 16:13
@ockham
Copy link
Contributor Author

ockham commented Apr 9, 2021

The approach here sounds good to me 👍

🥳

Do we need to keep the no-border-radius class? I see that it was added https://github.com/WordPress/gutenberg/pull/17253/files#diff-7bf60a59a90bcf0f53fa61af0e1717f2db7e31ff7bca1c0eb2e17389a351e1efR42 The blocks that already use this hook don't use it. Not sure how to gauge this: perhaps taking a look at existing default themes and see if they use it for something other than the radius? If we do keep it, it'd good to double-check that the conditions we attach it are the same as before (it doesn't look like the radius attribute had a default value, so it seems the same). For reference, two different cases we may want to consider are for this class: the hook either adds border-radius: 0px (when the user sets it to that value) or removes any border-radius (when the user clicks the "reset" button).

I could've sworn I'd seen some documentation on no-border-radius while working on this PR, but for the life of me haven't been able to find it now 😅 I'll look some more into it on Monday!

I can do more testing (deprecations, etc) when the PR is rebased.

Thanks! I've rebased 👍

@ockham
Copy link
Contributor Author

ockham commented Apr 12, 2021

I guess based on those findings, it's probably fine to remove no-border-radius.

However -- in the spirit of smaller iterations -- how about tackling that in a separate PR? It's arguably a rather separate concern, so I think there's some value in implementing both changes in different PRs.

@ockham
Copy link
Contributor Author

ockham commented Apr 12, 2021

I decided to transform border: { radius: ... { } } into borderRadius manually for now, and removed the __experimentalGetInlineStyles helper.

@ockham
Copy link
Contributor Author

ockham commented Apr 12, 2021

This PR will change the availability of the border radius setting and attribute for the Button block:

  • Currently: available without limitations
  • With this PR: available only for themes with experimental-theme.json, where settings.defaults.border.customRadius = true.

Are we okay with this? 😬 @nosolosw @youknowriad

@mtias
Copy link
Member

mtias commented Apr 12, 2021

We should make it available for all cases. In general, we should be making all these available by default with explicit opt-out.

@ockham
Copy link
Contributor Author

ockham commented Apr 12, 2021

We should make it available for all cases. In general, we should be making all these available by default with explicit opt-out.

@nosolosw Can we set customRadius to true (for the Button block) at a global level and make theme.json only override it if it explicitly sets it to false? (I've dug a bit into useIsBorderRadiusDisabled and useEditorFeature but didn't see anything obvious 🤔 )

@oandregal
Copy link
Member

With the current theme.json shape, to set it to true only for the button, we'd write in the lib/experimental-theme.json:

{
  "settings": {
    "core/button": {
      "border": {
        "customRadius": true
      }
    }
  } 
}

However, if we want to default it to true for everything it is (change the boolean):

{
  "settings": {
    "defaults": {
      "border": {
        "customRadius": true
      }
    }
  } 
}

@ockham
Copy link
Contributor Author

ockham commented Apr 13, 2021

With the current theme.json shape, to set it to true only for the button, we'd write in the lib/experimental-theme.json:

{
  "settings": {
    "core/button": {
      "border": {
        "customRadius": true
      }
    }
  } 
}

Thanks! That's exactly what I was looking for! 😄

However, if we want to default it to true for everything it is (change the boolean): [...]

Let's start with just the Button block, which will retain the user-facing behavior 🙂

@ockham ockham force-pushed the update/button-block-use-hook-based-border-support branch from 899ef3e to e836de3 Compare April 13, 2021 14:35
@ockham
Copy link
Contributor Author

ockham commented Apr 13, 2021

With the current theme.json shape, to set it to true only for the button, we'd write in the lib/experimental-theme.json:

{
  "settings": {
    "core/button": {
      "border": {
        "customRadius": true
      }
    }
  } 
}

Thanks! That's exactly what I was looking for! 😄

However, if we want to default it to true for everything it is (change the boolean): [...]

Let's start with just the Button block, which will retain the user-facing behavior 🙂

Done in 1e9496f. Updated PR description to reflect that the border-radius setting for the Button block is always on now.

Should be ready for review now 🤞

Copy link
Member

@oandregal oandregal left a comment

Choose a reason for hiding this comment

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

There are a couple of e2e snapshots that need updating (the background color and border-radius are flipped in order).

Other than that, this is working fine and the code looks good.

Nice work here, thanks!

@ockham ockham merged commit 37f6610 into trunk Apr 13, 2021
@ockham ockham deleted the update/button-block-use-hook-based-border-support branch April 13, 2021 19:33
@github-actions github-actions bot added this to the Gutenberg 10.5 milestone Apr 13, 2021
@BenceSzalai
Copy link

BenceSzalai commented May 23, 2021

For anyone trying to find out, how to get this work together with other theme.json settings, here's the deal. The customRadius setting is only processed under settings / core/button / border if the version is omitted or 0. However that way some other settings are ignored, such as: settings / color / palette, etc. However if the version is set to 1, settings / core/button / border gets ignored. Solution is putting the whole core/button under blocks, like this:

{
  "version": 1,
  "settings": {
    "color": {
      "palette": [
        {
          "slug": "white",
          "color": "#ffffff",
          "name": "White"
        },
        ...
      ],
      ...
    },
    "blocks": {
      "core/button": {
        "border": {
          "customRadius": false
        }
      }
    }
  }
}

At least this is what worked for me in Gutenberg v10.6.2.

@aaronrobertshaw
Copy link
Contributor

Hi @BenceSzalai 👋

The shape of the theme.json schema changed as part of #30541, you can find more details and the rationale for the change in #29891. The docs were also updated although perhaps the PR updating them might help shine a light on the differences.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Buttons Affects the Buttons Block [Status] Blocked Used to indicate that a current effort isn't able to move forward
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants