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

Add block spacing and layout to Post Template #49050

Merged
merged 28 commits into from
Jun 2, 2023

Conversation

tellthemachines
Copy link
Contributor

@tellthemachines tellthemachines commented Mar 14, 2023

What?

Fixes #44899 and #44557.

  • Converts the custom "grid" layout in the Post Template block to use the grid layout type from Try adding a grid layout type #49018.
  • The grid is configured to be static with a user-defined number of columns and a identical responsive behaviour to the current custom styes.
  • The controls to toggle between List and Grid layouts are moved from Query into Post Template toolbar.
  • Adds block spacing support to Post Template.

Note: the deprecation had to be done at Query level, because that's where the legacy layout type is stored. This doesn't really work on the server side though, so I opted to leave legacy classnames and styles for unchanged blocks on the front end.

Testing Instructions

  1. Go to the Home template in a block theme and check that Query and Post Template display as expected on this branch: should look exactly the same as on trunk before any changes are made.
  2. Set the layout to Grid in Post Template toolbar, and change the number of columns in the sidebar. This should work the same as on trunk.
  3. Change block spacing from the Post Template block sidebar; check that it works for both the list and the grid layout options.

Testing Instructions for Keyboard

Screenshots or screencast

@github-actions
Copy link

github-actions bot commented Mar 14, 2023

Size Change: -16.6 kB (-1%)

Total Size: 1.39 MB

Filename Size Change
build/a11y/index.min.js 955 B -27 B (-3%)
build/annotations/index.min.js 2.69 kB -72 B (-3%)
build/api-fetch/index.min.js 2.28 kB -49 B (-2%)
build/autop/index.min.js 2.1 kB -38 B (-2%)
build/blob/index.min.js 451 B -21 B (-4%)
build/block-directory/index.min.js 7.05 kB -128 B (-2%)
build/block-editor/content-rtl.css 4.22 kB -14 B (0%)
build/block-editor/content.css 4.22 kB -13 B (0%)
build/block-editor/index.min.js 195 kB -4.93 kB (-2%)
build/block-editor/style-rtl.css 14.9 kB -229 B (-2%)
build/block-editor/style.css 14.9 kB -227 B (-2%)
build/block-library/blocks/navigation/interactivity.min.js 976 B +80 B (+9%) 🔍
build/block-library/blocks/navigation/view-modal.min.js 2.78 kB -27 B (-1%)
build/block-library/blocks/navigation/view.min.js 438 B -5 B (-1%)
build/block-library/blocks/post-template/style-rtl.css 314 B +33 B (+12%) ⚠️
build/block-library/blocks/post-template/style.css 314 B +33 B (+12%) ⚠️
build/block-library/index.min.js 201 kB -4 kB (-2%)
build/block-library/interactivity/runtime.min.js 2.71 kB +32 B (+1%)
build/block-library/style-rtl.css 13.1 kB +17 B (0%)
build/block-library/style.css 13.1 kB +17 B (0%)
build/block-serialization-spec-parser/index.min.js 2.87 kB +39 B (+1%)
build/blocks/index.min.js 50.3 kB -663 B (-1%)
build/commands/index.min.js 14.9 kB -59 B (0%)
build/components/index.min.js 231 kB -1.27 kB (-1%)
build/components/style-rtl.css 11.8 kB +120 B (+1%)
build/components/style.css 11.8 kB +121 B (+1%)
build/compose/index.min.js 12.1 kB -351 B (-3%)
build/core-commands/index.min.js 1.74 kB -66 B (-4%)
build/core-data/index.min.js 15.7 kB -879 B (-5%)
build/customize-widgets/index.min.js 12 kB -168 B (-1%)
build/data-controls/index.min.js 640 B -68 B (-10%) 👏
build/data/index.min.js 8.23 kB -447 B (-5%)
build/date/index.min.js 40.4 kB -32 B (0%)
build/deprecated/index.min.js 451 B -56 B (-11%) 👏
build/dom/index.min.js 4.63 kB -99 B (-2%)
build/edit-post/index.min.js 33.9 kB -1.41 kB (-4%)
build/edit-post/style-rtl.css 7.57 kB -189 B (-2%)
build/edit-post/style.css 7.56 kB -188 B (-2%)
build/edit-site/index.min.js 65.9 kB +1.7 kB (+3%)
build/edit-site/style-rtl.css 10.9 kB +371 B (+4%)
build/edit-site/style.css 10.9 kB +362 B (+3%)
build/edit-widgets/index.min.js 16.8 kB -444 B (-3%)
build/editor/index.min.js 44.6 kB -1.1 kB (-2%)
build/element/index.min.js 4.8 kB -89 B (-2%)
build/format-library/index.min.js 7.57 kB -202 B (-3%)
build/hooks/index.min.js 1.55 kB -90 B (-6%)
build/i18n/index.min.js 3.58 kB -149 B (-4%)
build/keyboard-shortcuts/index.min.js 1.71 kB -77 B (-4%)
build/keycodes/index.min.js 1.84 kB -68 B (-4%)
build/list-reusable-blocks/index.min.js 2.13 kB -12 B (-1%)
build/media-utils/index.min.js 2.9 kB -69 B (-2%)
build/notices/index.min.js 948 B -15 B (-2%)
build/plugins/index.min.js 1.84 kB -10 B (-1%)
build/preferences-persistence/index.min.js 1.84 kB -381 B (-17%) 👏
build/preferences/index.min.js 1.24 kB -89 B (-7%)
build/primitives/index.min.js 941 B -3 B (0%)
build/redux-routine/index.min.js 2.7 kB -39 B (-1%)
build/reusable-blocks/index.min.js 2.21 kB -44 B (-2%)
build/rich-text/index.min.js 10.7 kB -347 B (-3%)
build/router/index.min.js 1.77 kB -6 B (0%)
build/server-side-render/index.min.js 2.02 kB -50 B (-2%)
build/shortcode/index.min.js 1.39 kB -28 B (-2%)
build/style-engine/index.min.js 1.42 kB -105 B (-7%)
build/token-list/index.min.js 582 B -62 B (-10%) 👏
build/url/index.min.js 3.57 kB -80 B (-2%)
build/vendors/react-dom.min.js 41.8 kB -13 B (0%)
build/viewport/index.min.js 1.04 kB -42 B (-4%)
build/widgets/index.min.js 7.16 kB -123 B (-2%)
build/wordcount/index.min.js 1.02 kB -36 B (-3%)
ℹ️ View Unchanged
Filename Size
build/block-directory/style-rtl.css 1.02 kB
build/block-directory/style.css 1.02 kB
build/block-editor/default-editor-styles-rtl.css 381 B
build/block-editor/default-editor-styles.css 381 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 90 B
build/block-library/blocks/archives/style.css 90 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 91 B
build/block-library/blocks/avatar/style.css 91 B
build/block-library/blocks/block/editor-rtl.css 305 B
build/block-library/blocks/block/editor.css 305 B
build/block-library/blocks/button/editor-rtl.css 584 B
build/block-library/blocks/button/editor.css 582 B
build/block-library/blocks/button/style-rtl.css 624 B
build/block-library/blocks/button/style.css 623 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/calendar/style-rtl.css 239 B
build/block-library/blocks/calendar/style.css 239 B
build/block-library/blocks/categories/editor-rtl.css 113 B
build/block-library/blocks/categories/editor.css 112 B
build/block-library/blocks/categories/style-rtl.css 124 B
build/block-library/blocks/categories/style.css 124 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 121 B
build/block-library/blocks/code/style.css 121 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 409 B
build/block-library/blocks/columns/style.css 409 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 199 B
build/block-library/blocks/comment-template/style.css 198 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 840 B
build/block-library/blocks/comments/editor.css 839 B
build/block-library/blocks/comments/style-rtl.css 637 B
build/block-library/blocks/comments/style.css 636 B
build/block-library/blocks/cover/editor-rtl.css 647 B
build/block-library/blocks/cover/editor.css 650 B
build/block-library/blocks/cover/style-rtl.css 1.61 kB
build/block-library/blocks/cover/style.css 1.6 kB
build/block-library/blocks/details/editor-rtl.css 65 B
build/block-library/blocks/details/editor.css 65 B
build/block-library/blocks/details/style-rtl.css 159 B
build/block-library/blocks/details/style.css 159 B
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 316 B
build/block-library/blocks/file/editor.css 316 B
build/block-library/blocks/file/interactivity.min.js 395 B
build/block-library/blocks/file/style-rtl.css 269 B
build/block-library/blocks/file/style.css 270 B
build/block-library/blocks/file/view.min.js 375 B
build/block-library/blocks/freeform/editor-rtl.css 2.58 kB
build/block-library/blocks/freeform/editor.css 2.58 kB
build/block-library/blocks/gallery/editor-rtl.css 947 B
build/block-library/blocks/gallery/editor.css 952 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 654 B
build/block-library/blocks/group/editor.css 654 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 336 B
build/block-library/blocks/html/editor.css 337 B
build/block-library/blocks/image/editor-rtl.css 834 B
build/block-library/blocks/image/editor.css 833 B
build/block-library/blocks/image/interactivity.min.js 783 B
build/block-library/blocks/image/style-rtl.css 1.07 kB
build/block-library/blocks/image/style.css 1.07 kB
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 357 B
build/block-library/blocks/latest-comments/style.css 357 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 478 B
build/block-library/blocks/latest-posts/style.css 478 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 712 B
build/block-library/blocks/navigation-link/editor.css 711 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/editor-rtl.css 2.33 kB
build/block-library/blocks/navigation/editor.css 2.33 kB
build/block-library/blocks/navigation/style-rtl.css 2.21 kB
build/block-library/blocks/navigation/style.css 2.2 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 401 B
build/block-library/blocks/page-list/editor.css 401 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 279 B
build/block-library/blocks/paragraph/style.css 281 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 508 B
build/block-library/blocks/post-comments-form/style.css 508 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 71 B
build/block-library/blocks/post-excerpt/editor.css 71 B
build/block-library/blocks/post-excerpt/style-rtl.css 141 B
build/block-library/blocks/post-excerpt/style.css 141 B
build/block-library/blocks/post-featured-image/editor-rtl.css 588 B
build/block-library/blocks/post-featured-image/editor.css 586 B
build/block-library/blocks/post-featured-image/style-rtl.css 319 B
build/block-library/blocks/post-featured-image/style.css 319 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-terms/style-rtl.css 96 B
build/block-library/blocks/post-terms/style.css 96 B
build/block-library/blocks/post-time-to-read/style-rtl.css 69 B
build/block-library/blocks/post-time-to-read/style.css 69 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 335 B
build/block-library/blocks/pullquote/style.css 335 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 288 B
build/block-library/blocks/query-pagination/style.css 284 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 450 B
build/block-library/blocks/query/editor.css 449 B
build/block-library/blocks/quote/style-rtl.css 222 B
build/block-library/blocks/quote/style.css 222 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 149 B
build/block-library/blocks/rss/editor.css 149 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 178 B
build/block-library/blocks/search/editor.css 178 B
build/block-library/blocks/search/style-rtl.css 434 B
build/block-library/blocks/search/style.css 432 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 323 B
build/block-library/blocks/shortcode/editor.css 323 B
build/block-library/blocks/site-logo/editor-rtl.css 754 B
build/block-library/blocks/site-logo/editor.css 754 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 116 B
build/block-library/blocks/site-title/editor.css 116 B
build/block-library/blocks/site-title/style-rtl.css 57 B
build/block-library/blocks/site-title/style.css 57 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 348 B
build/block-library/blocks/spacer/editor.css 348 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 433 B
build/block-library/blocks/table/editor.css 433 B
build/block-library/blocks/table/style-rtl.css 645 B
build/block-library/blocks/table/style.css 644 B
build/block-library/blocks/table/theme-rtl.css 146 B
build/block-library/blocks/table/theme.css 146 B
build/block-library/blocks/tag-cloud/style-rtl.css 251 B
build/block-library/blocks/tag-cloud/style.css 253 B
build/block-library/blocks/template-part/editor-rtl.css 403 B
build/block-library/blocks/template-part/editor.css 403 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 99 B
build/block-library/blocks/verse/style.css 99 B
build/block-library/blocks/video/editor-rtl.css 552 B
build/block-library/blocks/video/editor.css 555 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/classic-rtl.css 179 B
build/block-library/classic.css 179 B
build/block-library/common-rtl.css 1.1 kB
build/block-library/common.css 1.1 kB
build/block-library/editor-elements-rtl.css 75 B
build/block-library/editor-elements.css 75 B
build/block-library/editor-rtl.css 12.1 kB
build/block-library/editor.css 12.1 kB
build/block-library/elements-rtl.css 54 B
build/block-library/elements.css 54 B
build/block-library/interactivity/vendors.min.js 8.2 kB
build/block-library/reset-rtl.css 478 B
build/block-library/reset.css 478 B
build/block-library/theme-rtl.css 686 B
build/block-library/theme.css 691 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/commands/style-rtl.css 827 B
build/commands/style.css 827 B
build/customize-widgets/style-rtl.css 1.38 kB
build/customize-widgets/style.css 1.38 kB
build/dom-ready/index.min.js 324 B
build/edit-post/classic-rtl.css 544 B
build/edit-post/classic.css 545 B
build/edit-widgets/style-rtl.css 4.53 kB
build/edit-widgets/style.css 4.53 kB
build/editor/style-rtl.css 3.54 kB
build/editor/style.css 3.53 kB
build/escape-html/index.min.js 537 B
build/format-library/style-rtl.css 554 B
build/format-library/style.css 553 B
build/html-entities/index.min.js 448 B
build/is-shallow-equal/index.min.js 527 B
build/list-reusable-blocks/style-rtl.css 836 B
build/list-reusable-blocks/style.css 836 B
build/priority-queue/index.min.js 1.52 kB
build/private-apis/index.min.js 939 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/style-rtl.css 243 B
build/reusable-blocks/style.css 243 B
build/vendors/inert-polyfill.min.js 2.48 kB
build/vendors/react.min.js 4.02 kB
build/warning/index.min.js 268 B
build/widgets/style-rtl.css 1.15 kB
build/widgets/style.css 1.16 kB

compressed-size-action

@tellthemachines
Copy link
Contributor Author

Updated this draft to use column width instead of number of columns, to align better with #49018. If this approach is good, I can start working out deprecation details soon 😅

@github-actions
Copy link

github-actions bot commented Mar 21, 2023

Flaky tests detected in 82b6193.
Some tests passed with failed attempts. The failures may not be related to this commit but are still reported for visibility. See the documentation for more information.

🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/5140490121
📝 Reported issues:

@richtabor
Copy link
Member

richtabor commented Mar 28, 2023

We should use the same control that's on the new grid layout (and it should probably go in the "Layout" panel:

CleanShot 2023-03-28 at 15 10 11

And it seems funky having the Layout Inner blocks controls with the grid controls—the grid block does not have these:

CleanShot 2023-03-28 at 15 12 45

Is there a cheap way to inherit that same Layout panel from the Grid block? It'll continue to get enhancements moving forward as well.

@richtabor
Copy link
Member

Perhaps the control should fallback to a default column width value, if switched from list to grid. Would prevent cases where you can't tell that it gridded, if the column width was large:

CleanShot.2023-03-28.at.15.26.25.mp4

@tellthemachines
Copy link
Contributor Author

We should use the same control that's on the new grid layout (and it should probably go in the "Layout" panel:

And it seems funky having the Layout Inner blocks controls with the grid controls—the grid block does not have these:

The problem here is that the Query block itself has a flow/constrained layout so it can set the content width of its children, and it's using custom logic to toggle between the list and the grid display, but those list/grid styles are actually applied to the child Post Template block. To complicate things further, Post Template itself has a locked flow layout type, probably in order to leverage the default theme block spacing value when it's set to list display.

Untangling all this is going to be complicated! It helps to be clear about the ideal state we want to move towards, so with that in mind here are some questions:

  • Do we want to preserve the ability to set content width in the Query block? If so, we'll need some controls there for that purpose.
  • Would we consider moving the list/grid display controls into the Post Template block where they belong? This has the disadvantage of forcing users to switch between blocks in order to configure the display, so I'm guessing it's a no 😅 but at the same time it's a bit weird that layout controls are all in Query and style controls (colors, typography) are all in Post Template.
  • As per Post Template Block: Add blockGap support #44899 we want to make block spacing configurable in Post Template, but given that Post Template's layout related controls currently live in Query, should the block spacing control be in Query too? This will probably require some re-wiring because block supports are meant to apply to whichever block they are set on.

Ultimately the important thing is deciding whereabouts in this interdependent nested block structure we want the controls to display; I think it would make sense to have them all together.

It would greatly simplify the interface if Post Template could be invisible and non-configurable, but at this point I'm not sure we can change that without breaking back compat 🤔

const updatedLayoutType =
layoutType === 'list' || layoutType === 'default' ? 'default' : 'grid';

useEffect( () => {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't love this but don't think there's a way around it unless we move the list/grid controls into Post Template instead of keeping them in Query.

Copy link
Contributor

Choose a reason for hiding this comment

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

It might be worth looking into exploring moving them down 🤔

@tellthemachines
Copy link
Contributor Author

Looking at ways to leverage this work for #44899; I've now added block spacing support to the Post Template block. Controls can be found in the Post Template sidebar, under "Dimensions".

@andrewserong
Copy link
Contributor

andrewserong commented Apr 21, 2023

Very interesting questions and problems to solve! Some first impressions from testing it out:

Would we consider moving the list/grid display controls into the Post Template block where they belong?

Personally, I'd expect the controls to exist at the Post Template block level, though it might be challenging for folks to discover. The Query block has a lot of complexity to the settings with options for post type, ordering, filters, etc, so I quite like the idea of the styling being deferred to the Post Template level, so that there's a semantic difference there (Query is where you manage the query, Post Template is where you manage the appearance). But that could just be me!

Is it acceptable to change the "grid" layout setting in Query loop to "minimum column width" instead of "number of colums"? (We could potentially keep "number of columns" by adding further logic to the grid layout type to handle that case)

I feel like in an ideal case we might have both options. At the moment, switching to minimum column width could be perceived as a regression depending on the pattern or layout in use, since it's a widely used block and there are plugins that depend on it (e.g. WooCommerce). For example, here's how the default grid / 3 column pattern appears on trunk versus this PR when using a wide alignment:

image

Another thought: for backwards compatibility, are there any existing aspects of using flex that will be lost with switching to grid? We currently don't have alignment controls exposed, but I wonder if there's a case to be made for also having flex layout exposed in the future so that folks could use either flex or grid layouts 🤔

@tellthemachines
Copy link
Contributor Author

Thanks for the feedback @andrewserong !

I feel like in an ideal case we might have both options.

Sure, but for now I'll settle whatever gets us to a mergeable solution without too much back and forth around how to materialise those options in the UI 😅

here's how the default grid / 3 column pattern appears on trunk versus this PR when using a wide alignment

Hmm, the default column width could be changed to match the 3 col default better, but yeah it will always behave differently.

Another thought: for backwards compatibility, are there any existing aspects of using flex that will be lost with switching to grid?

Not with the current implementation of flex in Post Template. In the future, for most alignment options we can rely on grid for the same features as flex; I think flex could only really be useful in super edge case situations such as having only 2 posts in the query and wanting them to be spaced-between? But that seems like a pretty unlikely use case.

@andrewserong
Copy link
Contributor

andrewserong commented Apr 24, 2023

Sure, but for now I'll settle whatever gets us to a mergeable solution without too much back and forth around how to materialise those options in the UI 😅

Good point, it'd be good to try to keep the change as simple as possible if we can to avoid scope creep. In that case, would it be worth exploring retaining the number of columns behaviour, even if it is a bit different to the minimum column width controls in the Grid block? I'm mostly wondering if that would help with the backwards compatibility concern for blocks that might already have a custom column count set.

@tellthemachines
Copy link
Contributor Author

I added an unstable "columns" property to layout and some extra logic to make it work. Given the experimental nature of grid (and layout in general 😅 ) this shouldn't work against future experimentation.

That solves the back compat issue, all except for the responsive behaviour that isn't working yet. I'm undecided on whether to add some custom logic to Post Template or to add it as part of layout support; if we ever want to explicitly support defining a fixed number of columns we'll probably want it to have some responsivity.

I guess the main decision left to make is whether to leave the layout controls where they are or bring them down into Post Template.

Deprecations etc. to be dealt with once we're clear on how much to change here 😄

@andrewserong
Copy link
Contributor

Deprecations etc. to be dealt with once we're clear on how much to change here 😄

They can be very fiddly, so good idea to hold off until it's clear which direction to go in!

I added an unstable "columns" property to layout and some extra logic to make it work.

This looks like a good approach to me! One quick question: since these values will be stored in post content, would it help in the long-term to give it something closer to a final name, possibly columnCount — that way if and when we want the attribute to no longer be unstable, we don't have to have code paths to convert the name? Or do we want to reserve that namespace so that __unstableColumns is treated explicitly as something to deprecate in code?

@tellthemachines
Copy link
Contributor Author

One quick question: since these values will be stored in post content, would it help in the long-term to give it something closer to a final name, possibly columnCount — that way if and when we want the attribute to no longer be unstable, we don't have to have code paths to convert the name? Or do we want to reserve that namespace so that __unstableColumns is treated explicitly as something to deprecate in code?

Good question. My main aim for now is to signal that this property could change and shouldn't be relied on. But yeah it's worth making the not-unstable part of the name whatever we want it to be if this property becomes stable, as that's how it's usually done elsewhere in the codebase. columnCount is a good option!

@tellthemachines
Copy link
Contributor Author

Dev note

Added layout and block spacing support to Post Template block

Previously, Post Template block had custom layout styles that allowed for either a "list" or a "grid" (implemented behind the scenes with CSS flex) layout, with controls living in its parent Query block.

For 6.3, layout and block spacing support have been added to Post Template, and its controls now live in the Post Template toolbar. There is still a choice of "list" and "grid" styles, but "grid" is now implemented with CSS grid.

sethrubenstein pushed a commit to pewresearch/gutenberg that referenced this pull request Jul 13, 2023
* Add static column number option

* Address feedback and fix Group placeholder

* Revert non-responsive option

* Try using grid layout in Post Template

* Update Post Template to use auto-fill columns

* Add block spacing to post template

* Show gap control by default

* Add unstable columns grid property

* Rename layout column attribute.

* Add a media query to reproduce current responsiveness

* Move layout controls to Post Template block

* Reduce max columns to 6.

* Remove unstable prefix

* fix cols breaking out of container

* Try adding deprecation

* Fix broken loop

* Update fixtures

* Code improvements

* Add some comments to the CSS.

* Add back deleted line

* Remove legacy attributes in deprecation

* Fix deprecation logic

* Update fixtures

* Fallback gap for classic themes

* fix spacing

* match old default value

* Update PHP test strings.

* Fix tag discrepancy in fixtures
@fabiankaegy
Copy link
Member

Stupid question, was this feature reverted from WordPress core at some point? 🤔 In 6.4 I only see the option to choose the number of columns. Not the minimum column width for some reason?

@tellthemachines
Copy link
Contributor Author

Not a stupid question at all @fabiankaegy! The grid option in Post Template has a slightly different configuration than the experimental Group grid variation. They both use grid layout, but this solution was thought best to preserve back compat, because Post Template always had the option to pick the number of columns. I think ideally there should be a way to switch between both grid configurations; with #42385 still in (slow) progress we haven't settled the best way to expose that in the UI.

@fabiankaegy
Copy link
Member

@tellthemachines Thanks for that clarification. Just to make sure, this means there also isn't a simple attribute one can change in a pattern for example to get the different grid behavior?

@tellthemachines
Copy link
Contributor Author

You can change the behaviour by editing the block attributes in the markup; the only thing that hasn't been implemented yet is the UI for switching between grid types. Essentially you'd need to replace the columnCount attrib with minimumColumnWidth.

So you'd end up with the Post Template layout attribute looking something like "layout":{"type":"grid","minimumColumnWidth":"10rem"}.

@ObliviousHarmony
Copy link
Contributor

@tellthemachines I'm working on a block with a requirement that responsiveness be implemented with a configurable number of maximum columns. This isn't something that layout supports, however, I did come up with a solution by setting minimumColumnWidth to max( 150px, (100% - ${blockGap * ( columns - 1 )}em) / ${ columns } ). While this works, I am weary of shipping something that feels more like a consequence of missing validation than a deliberate decision.

Would you say that's a valid assumption, and if so, what would you suggest? I'm fine with opening up a PR if you agree supporting both columnCount and minimumColumnWidth makes sense. We have an L-2 WordPress support policy though so it would be great to have an interim solution.

@tellthemachines
Copy link
Contributor Author

@ObliviousHarmony columnCount and minimumColumnWidth should be mutually exclusive: the grid is either configured with a fixed number of columns, or with a fixed minimum width and adjustable number of columns. What you're describing sounds like it would work better as a fixed number of columns with perhaps some container queries to adjust that number as needed on smaller screens/containers.

Container query based responsiveness is under discussion as a feature to add to core, but it will take a while to ship so my suggestion in the meantime would be to add some custom styles to your block in a way that can be removed later once core support is in place.

@ObliviousHarmony
Copy link
Contributor

ObliviousHarmony commented Apr 9, 2024

Thanks for getting back to me so quickly @tellthemachines.

Sorry, I wrote this comment way too early in the morning and shared very little information; I even gave some CSS without any context 😅. I appreciate your suggestion here, however, a container query doesn't quite meet my requirements. The feedback we've received has steered us towards having a maximum number of columns that decreases the number of columns if one of them would fall below a minimum width. We're currently migrating a Query Loop like block from displayLayout to layout and previously used column class styles like this:

grid-template-columns: repeat( auto-fill, minmax( max( 150px, ( 100% - 3.75em ) / 4 ), 1fr ) );

The approach basically just boils down to using a percentage width (4 columns in this case) (with a minimum, 150px in this case) to select the maximum number of columns. When it can't fit that many columns it creates new rows and decreases the number of columns accordingly. This is much simpler than a container query. It provides an easy user experience in the form of a single slider rather than potentially complicated configuration using container sizes.

I don't think columnCount and minimumColumnWidth are necessarily mutually exclusive because they're describing two different concepts. One is a constraint that you'd like a specific number of columns while the other is a constraint that you'd like for your columns to have a minimum width. It feels reasonable to assume you could combine these two constraints to create a more constrained but still responsive grid.

As noted, I do have a working implementation by passing part of the above style to minimumColumnWidth. This just feels like a hack since it doesn't seem intentional that you can pass CSS functions to something described as a "width" 😄

@tellthemachines
Copy link
Contributor Author

@ObliviousHarmony that's an interesting use case!

It provides an easy user experience in the form of a single slider rather than potentially complicated configuration using container sizes.

So which variable would you allow users to configure, column count or minimum width? I wasn't thinking of exposing the container query configuration to users; rather it could be a dynamic query based on the column count/min width values such as we already have for grid span resizing.

@ObliviousHarmony
Copy link
Contributor

ObliviousHarmony commented Apr 12, 2024

So which variable would you allow users to configure, column count or minimum width?

In our case we would be letting them set the column count and handle setting the minimum width internally. Since the layout control is delegated to the implementing block it seems reasonable that developers could decide how to utilize it?

I wasn't thinking of exposing the container query configuration to users; rather it could be a dynamic query based on the column count/min width values such as we already have for grid span resizing.

Even so, it still feels like one of the powerful aspects of a CSS Grid is the ability for the browser to handle column overflow behavior. Since that's the specific kind of responsiveness I'm suggesting here it seems like a reasonable feature to add. What do you think? Would you be opposed to me opening a PR adding a case for both columnCount and minimumColumnWidth being set?

@tellthemachines
Copy link
Contributor Author

Since the layout control is delegated to the implementing block it seems reasonable that developers could decide how to utilize it?

The primary goal for layout (and other block supports) is to provide a way to configure layout options in the UI. Block developers can define a layout type and choose to expose the controls or not, and theme authors can further choose to hide layout controls altogether or for specific blocks.

The way block supports are built relies on a close correspondence between settings such as columnCount and minimumColumnWidth and specific UI controls. In the case of these two settings, the presence of one or the other determines which controls are exposed for a given block, and it's possible to toggle between them with the Manual/Auto buttons in the layout panel. For that reason, it's not viable to use minimumColumnWidth as a way for developers to configure custom responsive behaviour when columnCount is also present.

It's very likely that at some point additional responsiveness will be added to the "Manual" grid option, but it's not yet clear how that might be exposed in the UI or as an API for developers. That should be a part of the wider work on responsive controls being discussed in #19909. The reason I mentioned container queries above is partly because the discussion over there is leaning towards them, but also because responsive styles for grid need to take into account the behaviour of multi-span children, and once #59483 is moved out of experimental status, blocks with fixed positions in the grid. Container queries are a good way of ensuring consistent behaviour between the parent grid and its children on resize.

@ObliviousHarmony
Copy link
Contributor

In our design the control is expressed as the number of maximum columns. With the context you've provided, how would you feel about a new maximumColumnCount option to pair with minimumColumnWidth? When set it would apply a grid-template-columns style like the one I shared earlier. This would be a new control for the "Auto" mode.

@tellthemachines
Copy link
Contributor Author

With the context you've provided, how would you feel about a new maximumColumnCount option to pair with minimumColumnWidth?

@ObliviousHarmony this is a timely comment, because #60941 was started yesterday proposing something similar 😄

It's a bit buggy right now because the logic to toggle between Auto and Manual modes is still looking at columnCount but if you switch it to Auto you should be able to test the behaviour.

For context, that draft resulted from this conversation, where we're looking at changing Manual mode to more easily allow for positioning blocks in fixed points in the grid. Feedback is welcome in either place!

@ObliviousHarmony
Copy link
Contributor

this is a timely comment, because #60941 was started yesterday proposing something similar

This is timely. I wrote essentially the exact same thing, even down to using the presence of minimumColumnWidth in the layout to indicate whether or not the count should be static or responsive. Thanks @tellthemachines, I'll leave feedback there. Really excited about the Grid block too, just not something I can use for this purpose!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Block] Post Template Affects the Post Template Block [Block] Query Loop Affects the Query Loop Block [Feature] Layout Layout block support, its UI controls, and style output. Needs Dev Note Requires a developer note for a major WordPress release cycle 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.

Post Template Block: Add blockGap support
8 participants