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

Calendar Block: Add color supports and polish styles #42029

Merged
merged 16 commits into from
Sep 20, 2022
Merged

Conversation

t-hamano
Copy link
Contributor

Fix: #40989

What?

This PR adds color block support to the calendar block and updates the style to match a variety of themes.

Why?

This block has hard-coded text color and border color.
This causes problems that the text is difficult to read and the design doesn't match the other blocks, depending on the background color of the content.

How?

I've made the following changes based on a table block (using the same table tag):

  • Remove hard-coded colors
  • Border color inherit text color
  • Make thead bottom border thicker
  • Add text and link color with block support

Testing Instructions

  • Check out this branch, and build sources.
  • Insert a calendar block in the site editor ( or the post editor ).
  • Change the global style and see how the appearance of the calendar block changes.
  • If possible, check with classic themes or other block themes as well.

Screenshots or screencast

175876129-b9d22262-cfdd-4499-ba0d-9d9eca0ac6e1.mp4

"align": true,
"color": {
"link": true,
"background": false,
Copy link
Contributor Author

Choose a reason for hiding this comment

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

The table block supports background color, should it also support it in the calendar block?
In my opinion, I think support is unnecessary.

Copy link
Contributor

Choose a reason for hiding this comment

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

I think it should be enabled because it would give everyone more design options.

Copy link
Contributor

Choose a reason for hiding this comment

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

I agree

Copy link
Member

@ramonjd ramonjd Aug 19, 2022

Choose a reason for hiding this comment

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

Sorry, late to the party. I had been toying around with adding color support for the calendar block over in #43299

I'll close my PR in favour of this one.

Just wanted to mention something I discovered in relation to background color support:

When selecting a preset color, followed by a custom color, the block doesn't rerender.

I've pinpointed it to the use of useDebounce in the ServerSideRender component.

The debounced function is called, but it doesn't fire. I suspect that it's cancelled too early here.

It's a strange equality check bug that I haven't worked out yet.

I tested on this branch:

2022-08-19.11.57.12.mp4

It occurs every so often, but not all the time so might be acceptable.

But if I enable"gradients": true in color supports, the effect is more pronounced:

2022-08-19.12.08.58.mp4

Lesson: don't enable "gradient" for now 😄

@carolinan carolinan added the [Block] Calendar Affects the Calendar Block label Jun 29, 2022
@github-actions
Copy link

github-actions bot commented Jun 29, 2022

Size Change: +4.75 kB (0%)

Total Size: 1.26 MB

Filename Size Change
build/block-editor/index.min.js 163 kB +518 B (0%)
build/block-editor/style-rtl.css 15.4 kB +114 B (+1%)
build/block-editor/style.css 15.4 kB +115 B (+1%)
build/block-library/blocks/calendar/style-rtl.css 239 B +32 B (+15%) ⚠️
build/block-library/blocks/calendar/style.css 239 B +32 B (+15%) ⚠️
build/block-library/blocks/navigation/style-rtl.css 2.17 kB +14 B (+1%)
build/block-library/blocks/navigation/style.css 2.16 kB +15 B (+1%)
build/block-library/blocks/post-featured-image/editor-rtl.css 547 B +40 B (+8%) 🔍
build/block-library/blocks/post-featured-image/editor.css 545 B +40 B (+8%) 🔍
build/block-library/blocks/post-featured-image/style-rtl.css 315 B +149 B (+90%) 🆘
build/block-library/blocks/post-featured-image/style.css 315 B +149 B (+90%) 🆘
build/block-library/blocks/search/style-rtl.css 409 B +13 B (+3%)
build/block-library/blocks/search/style.css 406 B +13 B (+3%)
build/block-library/editor-rtl.css 11 kB +28 B (0%)
build/block-library/editor.css 11 kB +31 B (0%)
build/block-library/index.min.js 190 kB +1.95 kB (+1%)
build/block-library/style-rtl.css 12.2 kB +192 B (+2%)
build/block-library/style.css 12.2 kB +190 B (+2%)
build/components/index.min.js 198 kB -200 B (0%)
build/components/style-rtl.css 11.4 kB -18 B (0%)
build/components/style.css 11.5 kB -16 B (0%)
build/compose/index.min.js 12.5 kB +489 B (+4%)
build/core-data/index.min.js 15.5 kB +4 B (0%)
build/data/index.min.js 8.08 kB +21 B (0%)
build/edit-navigation/index.min.js 16 kB +3 B (0%)
build/edit-post/index.min.js 30.7 kB +7 B (0%)
build/edit-site/index.min.js 58 kB -532 B (-1%)
build/edit-site/style-rtl.css 8.36 kB +62 B (+1%)
build/edit-site/style.css 8.34 kB +63 B (+1%)
build/editor/index.min.js 41.7 kB +79 B (0%)
build/format-library/index.min.js 6.76 kB +13 B (0%)
build/priority-queue/index.min.js 1.58 kB +973 B (+159%) 🆘
build/redux-routine/index.min.js 2.74 kB -1 B (0%)
build/rich-text/index.min.js 10.6 kB +176 B (+2%)
build/viewport/index.min.js 1.09 kB +1 B (0%)
build/widgets/index.min.js 7.18 kB -8 B (0%)
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 982 B
build/annotations/index.min.js 2.76 kB
build/api-fetch/index.min.js 2.26 kB
build/autop/index.min.js 2.14 kB
build/blob/index.min.js 475 B
build/block-directory/index.min.js 7.05 kB
build/block-directory/style-rtl.css 990 B
build/block-directory/style.css 991 B
build/block-editor/default-editor-styles-rtl.css 378 B
build/block-editor/default-editor-styles.css 378 B
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 122 B
build/block-library/blocks/audio/style.css 122 B
build/block-library/blocks/audio/theme-rtl.css 126 B
build/block-library/blocks/audio/theme.css 126 B
build/block-library/blocks/avatar/editor-rtl.css 116 B
build/block-library/blocks/avatar/editor.css 116 B
build/block-library/blocks/avatar/style-rtl.css 84 B
build/block-library/blocks/avatar/style.css 84 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 482 B
build/block-library/blocks/button/editor.css 482 B
build/block-library/blocks/button/style-rtl.css 523 B
build/block-library/blocks/button/style.css 523 B
build/block-library/blocks/buttons/editor-rtl.css 337 B
build/block-library/blocks/buttons/editor.css 337 B
build/block-library/blocks/buttons/style-rtl.css 332 B
build/block-library/blocks/buttons/style.css 332 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 100 B
build/block-library/blocks/categories/style.css 100 B
build/block-library/blocks/code/editor-rtl.css 53 B
build/block-library/blocks/code/editor.css 53 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-content/style-rtl.css 92 B
build/block-library/blocks/comment-content/style.css 92 B
build/block-library/blocks/comment-template/style-rtl.css 187 B
build/block-library/blocks/comment-template/style.css 185 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-title/editor-rtl.css 75 B
build/block-library/blocks/comments-title/editor.css 75 B
build/block-library/blocks/comments/editor-rtl.css 834 B
build/block-library/blocks/comments/editor.css 832 B
build/block-library/blocks/comments/style-rtl.css 632 B
build/block-library/blocks/comments/style.css 630 B
build/block-library/blocks/cover/editor-rtl.css 605 B
build/block-library/blocks/cover/editor.css 607 B
build/block-library/blocks/cover/style-rtl.css 1.57 kB
build/block-library/blocks/cover/style.css 1.55 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 410 B
build/block-library/blocks/embed/style.css 410 B
build/block-library/blocks/embed/theme-rtl.css 126 B
build/block-library/blocks/embed/theme.css 126 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 253 B
build/block-library/blocks/file/style.css 254 B
build/block-library/blocks/file/view.min.js 346 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 948 B
build/block-library/blocks/gallery/editor.css 950 B
build/block-library/blocks/gallery/style-rtl.css 1.53 kB
build/block-library/blocks/gallery/style.css 1.53 kB
build/block-library/blocks/gallery/theme-rtl.css 108 B
build/block-library/blocks/gallery/theme.css 108 B
build/block-library/blocks/group/editor-rtl.css 337 B
build/block-library/blocks/group/editor.css 337 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 76 B
build/block-library/blocks/heading/style.css 76 B
build/block-library/blocks/html/editor-rtl.css 327 B
build/block-library/blocks/html/editor.css 329 B
build/block-library/blocks/image/editor-rtl.css 876 B
build/block-library/blocks/image/editor.css 873 B
build/block-library/blocks/image/style-rtl.css 627 B
build/block-library/blocks/image/style.css 630 B
build/block-library/blocks/image/theme-rtl.css 126 B
build/block-library/blocks/image/theme.css 126 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 213 B
build/block-library/blocks/latest-posts/editor.css 212 B
build/block-library/blocks/latest-posts/style-rtl.css 463 B
build/block-library/blocks/latest-posts/style.css 462 B
build/block-library/blocks/list/style-rtl.css 88 B
build/block-library/blocks/list/style.css 88 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 507 B
build/block-library/blocks/media-text/style.css 505 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 705 B
build/block-library/blocks/navigation-link/editor.css 703 B
build/block-library/blocks/navigation-link/style-rtl.css 115 B
build/block-library/blocks/navigation-link/style.css 115 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 296 B
build/block-library/blocks/navigation-submenu/editor.css 295 B
build/block-library/blocks/navigation-submenu/view.min.js 423 B
build/block-library/blocks/navigation/editor-rtl.css 1.99 kB
build/block-library/blocks/navigation/editor.css 2 kB
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB
build/block-library/blocks/navigation/view.min.js 443 B
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 174 B
build/block-library/blocks/paragraph/editor.css 174 B
build/block-library/blocks/paragraph/style-rtl.css 260 B
build/block-library/blocks/paragraph/style.css 260 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/editor-rtl.css 96 B
build/block-library/blocks/post-comments-form/editor.css 96 B
build/block-library/blocks/post-comments-form/style-rtl.css 493 B
build/block-library/blocks/post-comments-form/style.css 493 B
build/block-library/blocks/post-date/style-rtl.css 61 B
build/block-library/blocks/post-date/style.css 61 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-navigation-link/style-rtl.css 153 B
build/block-library/blocks/post-navigation-link/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 282 B
build/block-library/blocks/post-template/style.css 282 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 100 B
build/block-library/blocks/post-title/style.css 100 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 135 B
build/block-library/blocks/pullquote/editor.css 135 B
build/block-library/blocks/pullquote/style-rtl.css 326 B
build/block-library/blocks/pullquote/style.css 325 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 282 B
build/block-library/blocks/query-pagination/style.css 278 B
build/block-library/blocks/query-title/style-rtl.css 63 B
build/block-library/blocks/query-title/style.css 63 B
build/block-library/blocks/query/editor-rtl.css 439 B
build/block-library/blocks/query/editor.css 439 B
build/block-library/blocks/quote/style-rtl.css 213 B
build/block-library/blocks/quote/style.css 213 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/theme-rtl.css 114 B
build/block-library/blocks/search/theme.css 114 B
build/block-library/blocks/separator/editor-rtl.css 146 B
build/block-library/blocks/separator/editor.css 146 B
build/block-library/blocks/separator/style-rtl.css 234 B
build/block-library/blocks/separator/style.css 234 B
build/block-library/blocks/separator/theme-rtl.css 194 B
build/block-library/blocks/separator/theme.css 194 B
build/block-library/blocks/shortcode/editor-rtl.css 464 B
build/block-library/blocks/shortcode/editor.css 464 B
build/block-library/blocks/site-logo/editor-rtl.css 488 B
build/block-library/blocks/site-logo/editor.css 488 B
build/block-library/blocks/site-logo/style-rtl.css 203 B
build/block-library/blocks/site-logo/style.css 203 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 184 B
build/block-library/blocks/social-link/editor.css 184 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.4 kB
build/block-library/blocks/social-links/style.css 1.39 kB
build/block-library/blocks/spacer/editor-rtl.css 322 B
build/block-library/blocks/spacer/editor.css 322 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 494 B
build/block-library/blocks/table/editor.css 494 B
build/block-library/blocks/table/style-rtl.css 611 B
build/block-library/blocks/table/style.css 609 B
build/block-library/blocks/table/theme-rtl.css 190 B
build/block-library/blocks/table/theme.css 190 B
build/block-library/blocks/tag-cloud/style-rtl.css 239 B
build/block-library/blocks/tag-cloud/style.css 239 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 561 B
build/block-library/blocks/video/editor.css 563 B
build/block-library/blocks/video/style-rtl.css 174 B
build/block-library/blocks/video/style.css 174 B
build/block-library/blocks/video/theme-rtl.css 126 B
build/block-library/blocks/video/theme.css 126 B
build/block-library/common-rtl.css 1.02 kB
build/block-library/common.css 1.02 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 719 B
build/block-library/theme.css 722 B
build/block-serialization-default-parser/index.min.js 1.1 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/blocks/index.min.js 49.6 kB
build/customize-widgets/index.min.js 11.3 kB
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/data-controls/index.min.js 653 B
build/date/index.min.js 32.1 kB
build/deprecated/index.min.js 507 B
build/dom-ready/index.min.js 324 B
build/dom/index.min.js 4.7 kB
build/edit-navigation/style-rtl.css 3.99 kB
build/edit-navigation/style.css 4 kB
build/edit-post/classic-rtl.css 546 B
build/edit-post/classic.css 547 B
build/edit-post/style-rtl.css 6.94 kB
build/edit-post/style.css 6.94 kB
build/edit-widgets/index.min.js 16.5 kB
build/edit-widgets/style-rtl.css 4.34 kB
build/edit-widgets/style.css 4.34 kB
build/editor/style-rtl.css 3.66 kB
build/editor/style.css 3.65 kB
build/element/index.min.js 4.68 kB
build/escape-html/index.min.js 537 B
build/format-library/style-rtl.css 571 B
build/format-library/style.css 571 B
build/hooks/index.min.js 1.64 kB
build/html-entities/index.min.js 448 B
build/i18n/index.min.js 3.77 kB
build/is-shallow-equal/index.min.js 527 B
build/keyboard-shortcuts/index.min.js 1.78 kB
build/keycodes/index.min.js 1.81 kB
build/list-reusable-blocks/index.min.js 1.74 kB
build/list-reusable-blocks/style-rtl.css 835 B
build/list-reusable-blocks/style.css 835 B
build/media-utils/index.min.js 2.93 kB
build/notices/index.min.js 953 B
build/nux/index.min.js 2.05 kB
build/nux/style-rtl.css 732 B
build/nux/style.css 728 B
build/plugins/index.min.js 1.94 kB
build/preferences-persistence/index.min.js 2.22 kB
build/preferences/index.min.js 1.3 kB
build/primitives/index.min.js 933 B
build/react-i18n/index.min.js 696 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/reusable-blocks/index.min.js 2.21 kB
build/reusable-blocks/style-rtl.css 256 B
build/reusable-blocks/style.css 256 B
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.53 kB
build/style-engine/index.min.js 1.45 kB
build/token-list/index.min.js 644 B
build/url/index.min.js 3.61 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/warning/index.min.js 268 B
build/widgets/style-rtl.css 1.18 kB
build/widgets/style.css 1.19 kB
build/wordcount/index.min.js 1.06 kB

compressed-size-action

@carolinan
Copy link
Contributor

@WordPress/block-themers Any feedback on this calendar block PR?
I personally prefer the style after the PR is applied, but will the changes, especially the removal of the background color, be too much for existing themes?

@carolinan
Copy link
Contributor

Pinging @markhowellsmead as well in case you want to review this CSS change.

@draganescu draganescu changed the title Calender Block: Add color supports and polish styles Calendar Block: Add color supports and polish styles Jul 11, 2022
@draganescu draganescu added [Type] Enhancement A suggestion for improvement. Needs Testing Needs further testing to be confirmed. Needs Technical Feedback Needs testing from a developer perspective. [Feature] Themes Questions or issues with incorporating or styling blocks in a theme. labels Jul 11, 2022
@scruffian
Copy link
Contributor

will the changes, especially the removal of the background color, be too much for existing themes?

I am concerned about the loss of the background color too. Maybe we can scope this back to changes which won't have a significant impact on existing blocks?

I also think the calendar caption should have a wp-element-caption class added to it, so it can be styled consistent with other captions. This is another example where the HTML Walker class will be very useful: #42485

@t-hamano
Copy link
Contributor Author

t-hamano commented Aug 9, 2022

I tried to support background but hit a wall.

First, if we simply opt for background with block support, the style will be applied to the block itself and will look like this:

calendar_1

But most people would expect the background color to be applied to the table tag inside, just as the table block is:
calendar_2

In this case, __ExperimentalSkipSerialization must be enabled and the style must be explicitly generated in the render_block callback function.
There is no problem If only text and background colors are supported, but there is a problem with link color support.

If a link color is applied in a static block, render_block / pre_render_block filter will execute wp_render_elements_support and wp_render_elements_support_styles. Then, a class name such as wp-elements-XXX is given and the following inline style will be output:

link

However, this process is not executed on dynamic blocks that support link colors and have skipped serialization. Therefore, we need to generate the class name and inline styles within the render_callback function of the calendar block. Or, prepare a similar function for dynamic blocks.

Does anyone have a better way to do this? 🙏

@t-hamano t-hamano self-assigned this Aug 9, 2022
@pagelab
Copy link
Contributor

pagelab commented Aug 15, 2022

Please also remove the hard-coded text-decoration property in the CSS files for this block. It's just unnecessary.

@draganescu
Copy link
Contributor

@t-hamano the way you described your approaches sounds pretty good to me!

@ramonjd
Copy link
Member

ramonjd commented Aug 19, 2022

I am concerned about the loss of the background color too. Maybe we can scope this back to changes which won't have a significant impact on existing blocks?

In #43299 I rather inelegantly got around this using &:not(.has-text-color) and &:not(.has-background)

https://github.com/WordPress/gutenberg/pull/43299/files#diff-ed2baf015a5fd6164b7e4aa9596ae4f8ca30d10d16720cb43625b138487ee5ceR31

There's probably a better way than my hack though.

@t-hamano
Copy link
Contributor Author

t-hamano commented Aug 21, 2022

I have added the following brush ups:

Backward compatibility for the header background color

If both text and background color are not set, the previous gray header background color is retained.

table {
width: 100%;
border-collapse: collapse;
// Keep the hard-coded header background color for backward compatibility.
&:not(.has-text-color):not(.has-background) th {
background: $gray-300;
}
}

Background color support

I think text and background colors should only apply to tables, just as table blocks do.
Therefore, I opted for __experimentalSkipSerialization and rendered the required styles and classes in the render callback function.

The code is based on the search block, but if the HTML Walker class is adopted, it will be simpler to write.

Remove text-decoration style

text-decoration: underline is hard coded in the post link.
Although this point is mentioned in this comment, I think the theme should be responsible for this and removed it.

About skip serialization

In this case, __ExperimentalSkipSerialization must be enabled and the style must be explicitly generated in the render_block callback function.
There is no problem If only text and background colors are supported, but there is a problem with link color support.

If a link color is applied in a static block, render_block / pre_render_block filter will execute wp_render_elements_support and wp_render_elements_support_styles. Then, a class name such as wp-elements-XXX is given and the following inline style will be output:

I had assumed that __ExperimentalSkipSerialization could only specify boolean values about the above problem.

However, I learned that __ExperimentalSkipSerialization can specify properties to be skipped, so I excluded the link property.
I believe that all color support has worked as expected.

Screencast

a23c0c68be0f3e3d682519554c2fb8e3.mp4

@t-hamano
Copy link
Contributor Author

I also think the calendar caption should have a wp-element-caption class added to it, so it can be styled consistent with other captions.

Regarding the above proposal, I would like to push an additional issue and PR if this PR is merged.

@t-hamano
Copy link
Contributor Author

Thank you for your kind advice, @aaronrobertshaw !
I have made the following improvements:

  • Remove border-bottom style from thead
  • Reduced thead background color specificity for backward compatibility
  • Use style-engine for class names and inline CSS (with __experimentalSelector)
  • Enable color support by global style (with (gutenberg|wp)_style_engine_get_styles)
a55779cb19f31f7c852efe320847f54c.mp4

Generally works as expected, but there is a problem with the gray header background color for backward compatibility.
When a color is applied via global style, has-text-color and has-background classes aren't applied to the table, so the gray background color is retained.
I think the only way to solve this is to remove this backward compatibility, what do you think?

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.

Thanks for the continued effort @t-hamano 🙇

I think this PR is really starting to take shape!

After reviewing the latest changes, it appears as though we are currently split only half using the style engine, i.e. for inline styles only. I think being consistent and using it for all the block support generated styles would be beneficial and automatically pick up color support changes in the future.

I've added a diff below that updates the use of the style engine, among other fixes, and I think this cleans things up a little.

Generally works as expected, but there is a problem with the gray header background color for backward compatibility.
When a color is applied via global style, has-text-color and has-background classes aren't applied to the table, so the gray background color is retained.
I think the only way to solve this is to remove this backward compatibility, what do you think?

Luckily, I don't think that is the only way to solve this. We could target the th with the feature-level selectors as well so that they'll trump the :where rule you've already added. Then with a few extra tweaks to the styles, we can smooth out the consequences for individual blocks. I also noticed a bug in that setting a text color prevented the default background from applying.

I've included the suggestions above in the final diff below. The demo video below is the result I get when applying the diff.

Diff illustrating suggestions
diff --git a/packages/block-library/src/calendar/block.json b/packages/block-library/src/calendar/block.json
index 747bfd67c8..d1f2e0b604 100644
--- a/packages/block-library/src/calendar/block.json
+++ b/packages/block-library/src/calendar/block.json
@@ -24,7 +24,7 @@
 				"background": true,
 				"text": true
 			},
-			"__experimentalSelector": "table"
+			"__experimentalSelector": "table, table th"
 		},
 		"typography": {
 			"fontSize": true,
diff --git a/packages/block-library/src/calendar/editor.scss b/packages/block-library/src/calendar/editor.scss
new file mode 100644
index 0000000000..b12256cb74
--- /dev/null
+++ b/packages/block-library/src/calendar/editor.scss
@@ -0,0 +1,13 @@
+.editor-styles-wrapper {
+	.wp-block-calendar {
+		table {
+			&.has-background th {
+				background-color: inherit;
+			}
+
+			&.has-text-color th {
+				color: inherit;
+			}
+		}
+	}
+}
diff --git a/packages/block-library/src/calendar/index.php b/packages/block-library/src/calendar/index.php
index eac45b486b..c3b89f67e8 100644
--- a/packages/block-library/src/calendar/index.php
+++ b/packages/block-library/src/calendar/index.php
@@ -40,29 +40,25 @@ function render_block_core_calendar( $attributes ) {
 		}
 	}
 
-	$color_classes = array();
+	$color_block_styles = array();
 
-	if ( ! empty( $attributes['textColor'] ) ) {
-		$color_classes[] = sprintf( 'has-text-color has-%s-color', $attributes['textColor'] );
-	}
-	if ( ! empty( $attributes['backgroundColor'] ) ) {
-		$color_classes[] = sprintf( 'has-background has-%s-background-color', $attributes['backgroundColor'] );
-	}
+	// Text color.
+	$preset_text_color          = array_key_exists( 'textColor', $attributes ) ? "var:preset|color|{$attributes['textColor']}" : null;
+	$custom_text_color          = _wp_array_get( $attributes, array( 'style', 'color', 'text' ), null );
+	$color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
 
-	$inline_styles = '';
+	// Background Color.
+	$preset_background_color          = array_key_exists( 'backgroundColor', $attributes ) ? "var:preset|color|{$attributes['backgroundColor']}" : null;
+	$custom_background_color          = _wp_array_get( $attributes, array( 'style', 'color', 'background' ), null );
+	$color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
 
-	if ( ! empty( $attributes['style'] ) ) {
-		$styles = gutenberg_style_engine_get_styles( $attributes['style'] );
-		if ( ! empty( $styles['css'] ) ) {
-			$inline_styles = " style=\"${styles['css']}\"";
-		}
-		if ( ! empty( $styles['classnames'] ) ) {
-			$color_classes[] = $styles['classnames'];
-		}
-	}
+	// Generate color styles and classes.
+	$styles        = gutenberg_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );
+	$inline_styles = empty( $styles['css'] ) ? '' : sprintf( ' style="%s"', esc_attr( $styles['css'] ) );
 
-	$calendar = str_replace( '<table', '<table' . $inline_styles, get_calendar( true, false ) );
-	$calendar = str_replace( 'class="wp-calendar-table', 'class="wp-calendar-table ' . implode( ' ', $color_classes ), $calendar );
+	// Apply color classes and styles to the calendar.
+	$calendar      = str_replace( '<table', '<table' . $inline_styles, get_calendar( true, false ) );
+	$calendar      = str_replace( 'class="wp-calendar-table', 'class="wp-calendar-table ' . esc_attr( $styles['classnames'] ), $calendar );
 
 	$wrapper_attributes = get_block_wrapper_attributes();
 	$output             = sprintf(
diff --git a/packages/block-library/src/calendar/style.scss b/packages/block-library/src/calendar/style.scss
index 3095e3f50a..f28900c0ae 100644
--- a/packages/block-library/src/calendar/style.scss
+++ b/packages/block-library/src/calendar/style.scss
@@ -12,8 +12,16 @@
 		border-collapse: collapse;
 
 		// Keep the hard-coded header background color for backward compatibility.
-		&:where(:not(.has-text-color):not(.has-background)) th {
+		&:where(:not(.has-background)) th {
 			background: $gray-300;
 		}
+
+		&.has-background th {
+			background-color: inherit;
+		}
+
+		&.has-text-color th {
+			color: inherit;
+		}
 	}
 }
diff --git a/packages/block-library/src/editor.scss b/packages/block-library/src/editor.scss
index edb66416af..3af72b2448 100644
--- a/packages/block-library/src/editor.scss
+++ b/packages/block-library/src/editor.scss
@@ -4,6 +4,7 @@
 @import "./block/editor.scss";
 @import "./button/editor.scss";
 @import "./buttons/editor.scss";
+@import "./calendar/editor.scss";
 @import "./categories/editor.scss";
 @import "./code/editor.scss";
 @import "./columns/editor.scss";
Demo video
Screen.Recording.2022-09-12.at.7.22.34.pm.mp4

Lastly, is there anything else we can do to maintain backwards compatibility for the other default styles removed in this PR? I've run out of time for today to digger any deeper sorry.

Hope this helps; good luck!

@t-hamano
Copy link
Contributor Author

I appreciate your detailed advice, @aaronrobertshaw!

Again, I would like to summarize the specifications of the calendar block in trunk and the behavior expected by this PR.
(If there is any misunderstanding, please point it out.)

The calendar block in the trunk

calendar

  • body (th, td) and caption have #40464d text color
  • th and td have #dddddd border-color
  • th has #dddddd background color
  • th has normal font-weight
  • Link has test-decoration: underline; (As mentioned by this comment, it might not be originally necessary.)

The behavior expected by this PR

  • Keep the previous style as long as the color is not changed.
  • Changing the background color affects in the entire table, including the header.
  • Changing the text color affects all text except links and the border color of all cells.
  • Individual block color settings override global styles.
  • Remove hard-coded text-decoration: underline; on links

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.

I appreciate your patience with this PR @t-hamano. 🙇

Unfortunately, the latest changes adding more backwards compatibility, removing some of the previously suggested CSS rules, and including th and caption in the feature level selector have resulted in a few regressions.

During my latest round of testing, the link color still functions well, but there were issues with the background and text colors, as well as the caption.

  • Global Styles set background colors don't override the default th background on the frontend
  • Individual block text and background colors now don't override the Global Styles set values
  • The background color doesn't get applied to the caption when setting it only for individual blocks

After some more fiddling with our combination of feature level selectors and styles I believe I have it working and ticking all the boxes you outlined in your last comment. The suggested diff is included below.

Click for suggested changes
diff --git a/packages/block-library/src/calendar/block.json b/packages/block-library/src/calendar/block.json
index 89afb26410..2accd7142c 100644
--- a/packages/block-library/src/calendar/block.json
+++ b/packages/block-library/src/calendar/block.json
@@ -24,7 +24,7 @@
 				"background": true,
 				"text": true
 			},
-			"__experimentalSelector": "table, th, td, caption"
+			"__experimentalSelector": "table, th"
 		},
 		"typography": {
 			"fontSize": true,
diff --git a/packages/block-library/src/calendar/style.scss b/packages/block-library/src/calendar/style.scss
index ddeb10d421..969d1aafec 100644
--- a/packages/block-library/src/calendar/style.scss
+++ b/packages/block-library/src/calendar/style.scss
@@ -11,21 +11,16 @@
 		font-weight: 400;
 	}
 
+	caption {
+		background-color: inherit;
+	}
+
 	table {
 		width: 100%;
 		border-collapse: collapse;
 
-		// Keep the hard-coded header background color for backward compatibility.
-		&:where(:not(.has-background)) th {
-			background: $gray-300;
-		}
-
 		&:where(:not(.has-text-color)) {
-			// Keep the hard-coded body and caption color for backward compatibility.
-			tbody,
-			caption {
-				color: #40464d;
-			}
+			color: #40464d;
 
 			// Keep the hard-coded border color for backward compatibility.
 			th,
@@ -33,5 +28,18 @@
 				border-color: $gray-300;
 			}
 		}
+
+		&.has-background th {
+			background-color: inherit;
+		}
+
+		&.has-text-color th {
+			color: inherit;
+		}
 	}
 }
+
+// Keep the hard-coded header background color for backward compatibility.
+:where(.wp-block-calendar table:not(.has-background) th) {
+	background: $gray-300;
+}
  • I removed the recently added td and caption from the feature level selectors
  • Added a style for the caption so it would inherit any background applied to the table
  • Simplified the default color fallback. Although it lowers the specificity, I believe this was the intent by introducing the :where selector
  • Restored the previously suggested CSS rules to inherit background color and text color when set at the individual block level
  • Moved the default th background color so it was contained within a single :where selector allowing global styles to override it

The styles might still be able to be cleaned up further but I've run out of time tonight.

Below are demo videos from before my latest suggested changes and after.

Before (Current PR) After (With changes Above)
Screen.Recording.2022-09-15.at.7.08.16.pm.mp4
Screen.Recording.2022-09-15.at.7.01.14.pm.mp4

@t-hamano
Copy link
Contributor Author

Thanks for the further suggestions, @aaronrobertshaw !

I was just wrestling with the idea of somehow maintaining all backward compatibility.
The result must have been a regression 😅
I will try to work on improvements based on the code you suggested.

@t-hamano
Copy link
Contributor Author

I have tested your suggestion, but could not solve the only problem regarding the border color.

When I change the text color, the border color should be the same color. But when I change the text color from the global style, it retains the backward compatible $gray-300.

8213cd3f2db0ec15d49147219500d69e.mp4

I have done a lot of testing and I think there are two possible choices:

  • Remove backward compatibility of border colors
  • Allow current behavior

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.

When I change the text color, the border color should be the same color. But when I change the text color from the global style, it retains the backward compatible $gray-300.

This is understandable and a tricky one to solve given when styles are generated for global styles we have nothing to be able to hook onto to override or omit that default border color.

To be clear for others coming to this PR in future:

  • Setting text color for individual blocks does result in the default border color being omitted and thus picking up the currentColor value.
  • It is only the global styles or theme.json application of a text color that does not result in this behaviour.

The matching of the border color to the text color is a new feature. As such I don't think it should trump breaking existing uses of this block out in the wild. Especially, when there is a workaround i.e. setting it on the individual block, even if tedious.

There's also another option. You could opt into border supports for this block. It would provide a means to set the border color at the Calendar block level in the Global Styles or theme.json.

I don't think that needs to block this PR but is definitely something you could do in a follow-up to this.

Given all of that, I believe this PR is in a reasonable place to land. Thank you for your patience and continued iteration towards this end.

Nice work @t-hamano 🚢


✅ Theme.json - Colors applied via theme.json blocks config appear correctly
✅ Global Styles - Global Styles correctly override the theme.json values
✅ Individual Block Styles - Color values set at the individual block level take precedence above others
✅ The caption receives any background color that's been set
✅ The table header receives background color selection
✅ Without a background the table header gets a default grey background
✅ Original hardcoded default values for text, header background, and border colors are maintained.

@t-hamano
Copy link
Contributor Author

Setting text color for individual blocks does result in the default border color being omitted and thus picking up the currentColor value.
It is only the global styles or theme.json application of a text color that does not result in this behaviour.

I see, let's go with this!
Thank you for helping me resolve the issue, even though it was a complex one 😊

@t-hamano t-hamano merged commit dc57581 into trunk Sep 20, 2022
@t-hamano t-hamano deleted the try/block-calendar branch September 20, 2022 07:18
@github-actions github-actions bot added this to the Gutenberg 14.2 milestone Sep 20, 2022
@t-hamano t-hamano removed Needs Testing Needs further testing to be confirmed. Needs Technical Feedback Needs testing from a developer perspective. labels Sep 20, 2022
@femkreations femkreations added the Needs User Documentation Needs new user documentation label Jan 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Calendar Affects the Calendar Block [Feature] Themes Questions or issues with incorporating or styling blocks in a theme. Needs User Documentation Needs new user documentation [Type] Enhancement A suggestion for improvement.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Calendar: Consider removing the hardcoded colors
8 participants