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

Separator block: refactor to use color block supports #38428

Merged
merged 26 commits into from Mar 21, 2022

Conversation

glendaviesnz
Copy link
Contributor

@glendaviesnz glendaviesnz commented Feb 2, 2022

Description

The separator block is currently using its own color control to set a custom color attribute, which means it can't take advantage of the alpha channel support in the color block supports color picker in order to fix this issue.

This PR refactors the block to use the new color block support.

Testing Instructions

  • In a block based theme add a Separator block and make sure all the options work in editor and frontend, including setting the alpha channel in the color picker
  • Make sure blocks created with all options migrate successfully when opened in editor running on this branch.
  • Check that the v1 blocks with color get a default 0.4 opacity applied, when unmigrated and viewed in the frontend, and also when loaded in the editor and resaved. If the blocks color is edited the default opacity should be removed.
V1 Block code examples
<!-- wp:separator -->
<hr class="wp-block-separator"/>
<!-- /wp:separator -->

<!-- wp:separator {"className":"is-style-wide"} -->
<hr class="wp-block-separator is-style-wide"/>
<!-- /wp:separator -->

<!-- wp:separator {"className":"is-style-dots"} -->
<hr class="wp-block-separator is-style-dots"/>
<!-- /wp:separator -->

<!-- wp:separator {"color":"vivid-red"} -->
<hr class="wp-block-separator has-text-color has-background has-vivid-red-background-color has-vivid-red-color"/>
<!-- /wp:separator -->

<!-- wp:separator {"customColor":"#ff0000"} -->
<hr class="wp-block-separator has-text-color has-background" style="background-color:#ff0000;color:#ff0000"/>
<!-- /wp:separator -->

<!-- wp:separator {"color":"vivid-red","className":"is-style-dots"} -->
<hr class="wp-block-separator has-text-color has-background has-vivid-red-background-color has-vivid-red-color is-style-dots"/>
<!-- /wp:separator -->

<!-- wp:separator {"customColor":"#ff0000","className":"is-style-dots"} -->
<hr class="wp-block-separator has-text-color has-background is-style-dots" style="background-color:#ff0000;color:#ff0000"/>
<!-- /wp:separator -->

Screenshots

separator

Backwards compatibility considerations

As well as ensuring that the 0.4 opacity was maintained for both static content, and content that has been opened in the editor, the HTML structure and classnames were checked between old and new block versions.

The HTML structure of saved content remains the same, with just the addition of a new classname to cover the opacity backwards compatibility. This change should have no impact on themes and plugins that are applying custom CSS via the existing classes and elements.

Screen Shot 2022-02-23 at 4 07 17 PM

@glendaviesnz glendaviesnz added [Status] In Progress Tracking issues with work in progress [Block] Separator Affects the Separator Block labels Feb 2, 2022
@glendaviesnz glendaviesnz self-assigned this Feb 2, 2022
@github-actions
Copy link

github-actions bot commented Feb 2, 2022

Size Change: +476 B (0%)

Total Size: 1.16 MB

Filename Size Change
build/block-library/blocks/separator/editor-rtl.css 140 B +41 B (+41%) 🚨
build/block-library/blocks/separator/editor.css 140 B +41 B (+41%) 🚨
build/block-library/blocks/separator/theme-rtl.css 194 B +22 B (+13%) ⚠️
build/block-library/blocks/separator/theme.css 194 B +22 B (+13%) ⚠️
build/block-library/editor-rtl.css 9.98 kB +13 B (0%)
build/block-library/editor.css 9.98 kB +13 B (0%)
build/block-library/index.min.js 169 kB +276 B (0%)
build/block-library/theme-rtl.css 689 B +24 B (+4%)
build/block-library/theme.css 694 B +24 B (+4%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
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.49 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/index.min.js 145 kB
build/block-editor/style-rtl.css 15 kB
build/block-editor/style.css 15 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/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-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-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/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 965 B
build/block-library/blocks/gallery/editor.css 967 B
build/block-library/blocks/gallery/style-rtl.css 1.61 kB
build/block-library/blocks/gallery/style.css 1.61 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 159 B
build/block-library/blocks/group/editor.css 159 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 114 B
build/block-library/blocks/heading/style.css 114 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 731 B
build/block-library/blocks/image/editor.css 730 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 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 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 94 B
build/block-library/blocks/navigation-link/style.css 94 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.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 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 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 273 B
build/block-library/blocks/paragraph/style.css 273 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/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 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 389 B
build/block-library/blocks/pullquote/style.css 388 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 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 201 B
build/block-library/blocks/quote/style.css 201 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/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 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 744 B
build/block-library/blocks/site-logo/editor.css 744 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 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 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 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 235 B
build/block-library/blocks/template-part/editor.css 235 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 571 B
build/block-library/blocks/video/editor.css 572 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 934 B
build/block-library/common.css 932 B
build/block-library/reset-rtl.css 474 B
build/block-library/reset.css 474 B
build/block-library/style-rtl.css 11.4 kB
build/block-library/style.css 11.4 kB
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 46.5 kB
build/components/index.min.js 218 kB
build/components/style-rtl.css 15.6 kB
build/components/style.css 15.6 kB
build/compose/index.min.js 11.2 kB
build/core-data/index.min.js 14.2 kB
build/customize-widgets/index.min.js 11.2 kB
build/customize-widgets/style-rtl.css 1.39 kB
build/customize-widgets/style.css 1.39 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.19 kB
build/date/index.min.js 31.9 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-navigation/style-rtl.css 4.04 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/index.min.js 29.8 kB
build/edit-post/style-rtl.css 7.07 kB
build/edit-post/style.css 7.07 kB
build/edit-site/index.min.js 43.8 kB
build/edit-site/style-rtl.css 7.44 kB
build/edit-site/style.css 7.42 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.39 kB
build/edit-widgets/style.css 4.39 kB
build/editor/index.min.js 38.4 kB
build/editor/style-rtl.css 3.71 kB
build/editor/style.css 3.71 kB
build/element/index.min.js 4.29 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 838 B
build/list-reusable-blocks/style.css 838 B
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/nux/style-rtl.css 751 B
build/nux/style.css 749 B
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 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.1 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/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 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

@glendaviesnz glendaviesnz force-pushed the refactor/separator-to-use-color-support branch from 73bcebb to d562aed Compare February 4, 2022 03:38
@glendaviesnz glendaviesnz changed the title WIP: Refactor separator block to use color supports Separator block: refactor to use color block supports Feb 4, 2022
@glendaviesnz glendaviesnz marked this pull request as ready for review February 4, 2022 04:17
@glendaviesnz glendaviesnz removed the [Status] In Progress Tracking issues with work in progress label Feb 4, 2022
@glendaviesnz
Copy link
Contributor Author

@scruffian Not sure if this is a 100% suitable fix for #34637 as the 'Opacity' option isn't as in your face as in the Cover block UX. Is this good enough do you think for the sort of users that are likely to want to tweak this?

It is worth migrating to the block to block supports anyway I think separate to the Opacity question.

@scruffian
Copy link
Contributor

Thanks for working on this.

Not sure if this is a 100% suitable fix for #34637 as the 'Opacity' option isn't as in your face as in the Cover block UX. Is this good enough do you think for the sort of users that are likely to want to tweak this?

I think this way of doing it is fine, this isn't going to be something that most users need, its more useful for themes.

One problem with this PR as it stands is that it doesn't remove the opacity CSS from the block - this means that all separators are forced to have the 0.4 opacity setting on top of whatever other settings there are. This is the main issue with the separator block from my perspective as sometimes themes will want a solid separator and then they have to use custom CSS to achieve it. If we could find a way to only apply the 0.4 opacity to older blocks that would be ideal from my perspective.

I'm not sure "Background" makes sense for the color option here - since we only have one color setting then I think using "color" is more obvious to users.

@glendaviesnz
Copy link
Contributor Author

One problem with this PR as it stands is that it doesn't remove the opacity CSS from the block

Ah, ok, will take a look at that next week and see what is possible.

I'm not sure "Background" makes sense for the color option here - since we only have one color setting then I think using "color" is more obvious to users.

I am pretty sure that currently with the color block supports you can only have 'background', 'text', 'link' colours, ie. you can't specify what the label says in the settings bar so just 'color' isn't possible currently. 'text' is probably just as confusing as well? I will follow up next week though and check that I am not overlooking something with the block supports color options.

@scruffian
Copy link
Contributor

I am pretty sure that currently with the color block supports you can only have 'background', 'text', 'link' colours, ie. you can't specify what the label says in the settings bar so just 'color' isn't possible currently. 'text' is probably just as confusing as well? I will follow up next week though and check that I am not overlooking something with the block supports color options.

Oh yes you're right. In that case background is fine!

@glendaviesnz
Copy link
Contributor Author

glendaviesnz commented Feb 7, 2022

If we could find a way to only apply the 0.4 opacity to older blocks that would be ideal from my perspective.

@scruffian, the only way I could think of to do this is to add an additional style to the v2 version of the blocks, and remove the default 0.4 opacity if this class exists. Let me know if you can think of a better approach than this.

@aaronrobertshaw
Copy link
Contributor

I am pretty sure that currently with the color block supports you can only have 'background', 'text', 'link' colours, ie. you can't specify what the label says in the settings bar so just 'color' isn't possible currently.

I'm a bit late to this party and am likely missing context, so feel free to disregard this (I can look into my suggestion more fully tomorrow if needed).

If the naming of the color control is still a problem, the recent switch of the color panel to leverage the ToolsPanel and grouped InspectorControls slot might provide some flexibility. It should now be possible to inject an ad hoc color control into the panel labelled however you want.

Taking this approach you'd need to apply the color classes and styles manually rather than relying on block supports. This wouldn't be much different than skipping the serialization of those supports. Particularly if the values were stored in the block attributes the same as the block supports would. If stored the same way, you could then also leverage the utils in use-color-props.js to generate classes and styles.

In terms of generating the ad hoc control, you might find the ToolsPanelColorDropdown a starting point. It's what the color block support panel uses but was also used when testing injection of controls to that slot.

@scruffian
Copy link
Contributor

@scruffian, the only way I could think of to do this is to add an additional style to the v2 version of the blocks

That is what I was anticipating. Thanks

@glendaviesnz
Copy link
Contributor Author

If the naming of the color control is still a problem, the recent switch of the color panel to leverage the ToolsPanel and grouped InspectorControls slot might provide some flexibility.

Thanks for this detail @aaronrobertshaw. I am thinking at the moment because 'Background' is the only color listed that it will be obvious enough that it will set the separator color in some way, so probably not worth going down a custom control path in order to change this label. What do you think @scruffian?

@glendaviesnz
Copy link
Contributor Author

That is what I was anticipating. Thanks

@scruffian I had to make some changes to this, as looking for a new class in order to not apply the opacity, meant that the existing blocks only maintained the opacity until they were opened in the editor and saved. I figure that opening a post and editing some text, and also having all the separators lose their opacity would be something users won't expect. With the code as it is now any existing blocks should keep the default 0.4 opacity unless the color of the separator block is edited. Does this make sense?

@scruffian
Copy link
Contributor

Does this make sense?

💯

@glendaviesnz
Copy link
Contributor Author

glendaviesnz commented Feb 11, 2022

In order to apply the deprecated opacity in instances where the block has no color applied I needed to force the addition of a new attribute and associated class, eg.
attribute opacity = 'css' => becomes class .has-css-opacity
and
attribute opacity = 'alpha-channel' => becomes class .has-alpha-channel-opacity

This seems to work for all the deprecated block code with twentytwentytwo theme:

<!-- wp:separator -->
<hr class="wp-block-separator"/>
<!-- /wp:separator -->

<!-- wp:separator {"className":"is-style-wide"} -->
<hr class="wp-block-separator is-style-wide"/>
<!-- /wp:separator -->

<!-- wp:separator {"className":"is-style-dots"} -->
<hr class="wp-block-separator is-style-dots"/>
<!-- /wp:separator -->

<!-- wp:separator {"color":"vivid-red"} -->
<hr class="wp-block-separator has-text-color has-background has-vivid-red-background-color has-vivid-red-color"/>
<!-- /wp:separator -->

<!-- wp:separator {"customColor":"#ff0000"} -->
<hr class="wp-block-separator has-text-color has-background" style="background-color:#ff0000;color:#ff0000"/>
<!-- /wp:separator -->

<!-- wp:separator {"color":"vivid-red","className":"is-style-dots"} -->
<hr class="wp-block-separator has-text-color has-background has-vivid-red-background-color has-vivid-red-color is-style-dots"/>
<!-- /wp:separator -->

<!-- wp:separator {"customColor":"#ff0000","className":"is-style-dots"} -->
<hr class="wp-block-separator has-text-color has-background is-style-dots" style="background-color:#ff0000;color:#ff0000"/>
<!-- /wp:separator -->

The opacity for these stay at 0.4 in editor and frontend, until their color is edited, and any new blocks have no opacity applied unless the alpha channel is set in color picker.

It seems slightly messy/hacky to add a new attribute purely to support backwards compatibility, but I can't see another option - open to alternative suggestions.

@paaljoachim
Copy link
Contributor

This issue might be associated:
Separator color not working if --text variable is defined
#38729

Btw as one is working on a specific feature it would be helpful to also check out other Separator block issues to see what feels natural to also look closer at this time. As one gets into a kind of zone with working on a feature/block. https://github.com/WordPress/gutenberg/issues?q=is%3Aissue+is%3Aopen+label%3A%22%5BBlock%5D+Separator%22+

Thanks!

@ramonjd ramonjd force-pushed the refactor/separator-to-use-color-support branch from 6fba0cd to 4a9e904 Compare February 14, 2022 02:01
@glendaviesnz glendaviesnz force-pushed the refactor/separator-to-use-color-support branch from e0c1c90 to 22ff3a2 Compare March 16, 2022 20:12
@glendaviesnz
Copy link
Contributor Author

@oandregal are you happy with this now with the move to skipSerialization?

@oandregal
Copy link
Member

👍

@glendaviesnz
Copy link
Contributor Author

glendaviesnz commented Mar 20, 2022

Information for dev note:

The Separator block has been updated to allow the setting of a custom opacity for each block via the alpha channel of the block supports color settings.

separator-opacity.mp4

The HMTL structure of the block is unchanged, all of the existing classes are still in place, but two additional classes have been added - .has-alpha-channel-opacity and .has-css-opacity. These new classes have been added in order to maintain the default 0.4 opacity for all existing blocks in both the editor and the frontend. The opacity for existing blocks will only change if the block itself has its color setting changed.

If theme authors have opted in to block styles with add_theme_support( 'wp-block-styles' ); and wish to maintain the default 0.4 opacity setting for both new and old blocks the following CSS can be added:

hr.wp-block-separator.has-alpha-channel-opacity {
	opacity: 0.4;
}

.wp-block-separator {
border: none;
border-bottom: 2px solid currentColor;
margin-left: auto;
margin-right: auto;
opacity: 0.4;

&.has-alpha-channel-opacity {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@ramonjd do you think we should maybe change this to &:where( .has-alpha-channel-opacity ) so easier for themes to override if needed?

Copy link
Member

Choose a reason for hiding this comment

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

This sounds appealing but I think it lowers the specificity so that the styles from deprecated.scss, i.e., .wp-block-separator and therefore opacity: 0.4; take precedence.

Screen Shot 2022-03-21 at 1 53 40 pm

Copy link
Member

Choose a reason for hiding this comment

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

Actually, now I look again, I'm not sure where that opacity: 0.4; is coming from.

I'm looking at a new Separator using this branch

<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide">

Yet the scss is

.wp-block-separator {
	// V1 version of the block expects a default opactiy of 0.4 to be set.
	&.has-css-opacity {
		opacity: 0.4;
	}
}

@ramonjd
Copy link
Member

ramonjd commented Mar 21, 2022

This is still working as advertised in test description.

  • Separator block work and look consistent between editor and frontend ✅
  • v1 Separator code is successfully migrated ✅
  • v1 Separator blocks have the has-css-opacity classname and therefore opacity: 0.4; by default ✅
  • If a v1 Separator block's color is edited the default opacity should be removed. ✅

do you think we should maybe change this to &:where( .has-alpha-channel-opacity ) so easier for themes to override if needed?

On the specificity question, to me :where looks like it lets the v1 opacity rule through. But I'm not sure how... 🤷

@glendaviesnz
Copy link
Contributor Author

On the specificity question, to me :where looks like it lets the v1 opacity rule through. But I'm not sure how... 🤷

yeh, this is strange, in TwentyTwentyTwo, somewhere/somehow the following CSS is being set:

.wp-block-separator {
    opacity: .4;
}

but I can't work out where, doesn't seem to be anywhere in Gutenberg, and can't find in the TwentyTwentyTwo theme either. With TT1 there is a theme setting of hr.wp-block-separator , and that overrides the where as expected:
Screen Shot 2022-03-21 at 6 06 22 PM

but on thinking about it, maybe we want the opacity: initial to have the higher specificity by default, and if a theme doesn't like it they have to increase their setting, otherwise, there is the potential that the alpha channel opacity will be broken by default in some themes?

@glendaviesnz
Copy link
Contributor Author

@ramonjd I am going to go ahead and merge and we can circle back on the opacity if needed.

@glendaviesnz glendaviesnz merged commit c9e1159 into trunk Mar 21, 2022
@glendaviesnz glendaviesnz deleted the refactor/separator-to-use-color-support branch March 21, 2022 05:21
@github-actions github-actions bot added this to the Gutenberg 12.9 milestone Mar 21, 2022
SiobhyB added a commit that referenced this pull request Mar 22, 2022
With this commit, the expected HTML for the separator block is updated to reflect recent changes from #38428.

This is done so that the tests pass as expected.
jostnes pushed a commit to jostnes/gutenberg that referenced this pull request Mar 23, 2022
…channel opacity to be set(WordPress#38428)

Co-authored-by: Glen Davies <glen.davies@a8c.com>
Co-authored-by: ramonjd <ramonjd@gmail.com>
@ndiego
Copy link
Member

ndiego commented Mar 30, 2022

@glendaviesnz I am not sure, but the "mysterious" opacity CSS might be related to this issue: #39393. We have found that some core styles are coming through, even when they should be overridden by Gutenberg.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Separator Affects the Separator Block Needs Dev Note Requires a developer note for a major WordPress release cycle
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

9 participants