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

Suggest block pattern transformations that are contextual to the currently selected 'simple' blocks (no InnerBlocks) #30469

Merged
merged 13 commits into from
Apr 13, 2021

Conversation

ntsekouras
Copy link
Contributor

@ntsekouras ntsekouras commented Apr 2, 2021

Description

Resolves partially: #28736
Part of: #27575

This PR is a spinoff from: #29890 for suggesting block pattern transformations that are contextual to the currently selected blocks.

The goal of this PR is to handle 'simple' blocks (without InnerBlocks) first, to better manage the complexity and arbitrariness. This is a complex problem where we need to find the right balance between magic(opinionated actions) and APIs.

Notes

  1. The core blocks that have been updated to include role:content in some of their attributes are:
    core/paragraph, core/heading, core/list, core/quote, core/pullquote, core/preformatted, core/verse, core/search.

  2. For patterns to use this transformations need to have declared blockTypes property, so it now uses only my test patterns. See: Block Patterns: Remove scope from Query patterns and introduce blockTypes #30471.

Rationale behind the current decisions

  1. I have skipped any check about transforming selected blocks to available block transforms inside patterns, as I think it would be very confusing to have a really different suggested pattern. An example would be to have a paragraph selected and show patterns that do not include paragraph but have transformed the paragraph to a quote block.
  2. To show a suggested pattern, every selected block must have matched with a pattern's block . This doesn't necessarily mean that the order will be preserved. You can test this in this PR by selecting a paragraph and two headings (in this order) and see the suggested pattern that has the following order: [heading, paragraph, heading]. Also shown at the gif.
  3. If a suggested pattern has more blocks than the selected blocks, add them as are from the pattern. Every pattern block that matched with a selected block will be transformed. IMO this is the main reason for doing this and having block patterns in general. We want to inspire/show users alternative designs.

APIs

  1. The block pattern filtering uses the experimental blockTypes API introduced here: Block Patterns: Remove scope from Query patterns and introduce blockTypes #30471
  2. A new __experimentalRole property is added to block attribute's API. This property is optional and can mark attributes based on their role. Here is utilized by having content value and an example is the Heading block. This is used by for knowing which attributes we need to retain during the pattern transformation, so as the user can keep their block's content and make use of the styling/presentation attributes of the block pattern.

I have many comments in my code trying to explain as good as I can the flows.

Testing instructions

  1. Test with the demo patterns I created in lib/test-block-patterns.php or register one yourselves
  2. Create some paragraphs or headings and make different selections (single or multiple) to observe the previews from the selected blocks.
  3. Only if all of the selected blocks can be matched in pattern's blocks, it will be shown as an option

Screenshots

simple transforms

TODO in follow ups

  • More tests for some functions + e2e.

Checklist:

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

@ntsekouras ntsekouras added [Type] Experimental Experimental feature or API. [Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced labels Apr 2, 2021
@ntsekouras ntsekouras self-assigned this Apr 2, 2021
@ntsekouras ntsekouras changed the title spin off from #29890 for simple blocks without InnerBlocks Suggest block pattern transformations that are contextual to the currently selected 'simple' blocks (no InnerBlocks) Apr 2, 2021
@github-actions
Copy link

github-actions bot commented Apr 2, 2021

Size Change: +1.34 kB (0%)

Total Size: 1.43 MB

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

compressed-size-action

@ntsekouras ntsekouras force-pushed the try/simple-blocks-pattern-transformations branch from 74e9cd0 to 617f547 Compare April 7, 2021 08:41
@ntsekouras ntsekouras marked this pull request as ready for review April 8, 2021 10:19
@jasmussen
Copy link
Contributor

This is what I see:

status

This has enormous potential, truly, and it works very seamlessly. There are a great deal of followups we need to make:

  • The "Patterns" submenu and the whole transformation dialog could use a revamp knowing what's now possible.
  • The fact that it's only Paragraphs and Headings that have patterns to transform into, I suspect that's limited in part by availability of patterns, correct? Or are there other limits imposed?
  • Many patterns are wrapped in a group. If I transform a pattern inside a group into a pattern that adds yet another group, should we be smarter about removing one of those group wrappers? My instinct is no.
  • But related to the group thing: should I be able to transform a group? Or would that simply let me transform into anything arbitrary because groups are used so widely?

These are very ux-heavy questions, and as a first iteration, I'm happy to approve what's here, because the implementation is does not weigh down what we have. But this also assumes that we are able to make the subsequent changes. For example, @jameskoster has some mockups around transforming root level blocks using a carousel — I presume that could use the same underlying tech here?

@jameskoster
Copy link
Contributor

@jameskoster has some mockups around transforming root level blocks using a carousel

For context, I assume you're referring to this one:

iron-man.mp4

Disclaimer: This is still a very rough concept :D


But related to the group thing: should I be able to transform a group?

This is an interesting question. Since Groups have very little (no?) semantic meaning in this context, I can see a world where the patterns exposed while transforming a Group are identical to the ones that would be exposed by transforming a selection of the children of that Group.

@ntsekouras
Copy link
Contributor Author

Thanks for reviewing/testing!

The fact that it's only Paragraphs and Headings that have patterns to transform into, I suspect that's limited in part by availability of patterns, correct?

For patterns to use this transformations need to have declared blockTypes, so it now uses only my test patterns.
Also I need to add the role:content attribute to other blocks as well in this PR.

Many patterns are wrapped in a group. If I transform a pattern inside a group into a pattern that adds yet another group, should we be smarter about removing one of those group wrappers? My instinct is no.

For start I think so too, that we shouldn't try to be too smart, although we have this small check in Group block. I think it can be explored in follow up PRs that will need to handle blocks with InnerBlocks, unless we find some issues with the testing now :).

But related to the group thing: should I be able to transform a group? Or would that simply let me transform into anything arbitrary because groups are used so widely?

For now, blocks with InnerBlocks are not handled and when they will be, I think Group and Columns at least, should not be handled at all, as they are grouping blocks where the user could have anything inside as content.

I'm happy to approve what's here, because the implementation is does not weigh down what we have. But this also assumes that we are able to make the subsequent changes.

The logic is here and we are getting transformed previews, so we could possibly just change the UI that shows them in the future.

@jasmussen
Copy link
Contributor

For patterns to use this transformations need to have declared blockTypes, so it now uses only my test patterns.
Also I need to add the role:content attribute to other blocks as well in this PR.

Gotcha. So it seems like to land this we need to graduate to a set of specific patterns though. Seems okay to start small, but would be good to start well. If it's Headings and Paragraphs right now, perhaps we could ask @kjellr for advice on what patterns might be good to surface as potential transformations?

@ntsekouras
Copy link
Contributor Author

Seems okay to start small, but would be good to start well.

Agreed and since this is part of all pattern integration explorations we should add just a few..

If it's Headings and Paragraphs right now...

It will be more blocks (ex list). I'm checking now and push with a couple of new test patterns.

@ntsekouras
Copy link
Contributor Author

I have updated the other core blocks that can utilize role:content in some of their attributes. See the PRs description for details.

I have also included a demo pattern for search block which seems to me a nice use case for this feature. @kjellr

@jameskoster
Copy link
Contributor

Fixed a small padding issue I noticed. Otherwise I agree with Joen, this feels like the first step towards something much bigger and more exciting, and due to the small footprint in the UI it is good to merge and iterate on.

@kjellr
Copy link
Contributor

kjellr commented Apr 8, 2021

This looks cool!

For the feature itself: I'll just note that from a casual user perspective, seeing this really blurs the lines between a "block style" and a "block pattern". The difference is purely a technical one, and I don't think users will know that at all.

In terms of the patterns though, I think we should keep it as minimal as possible in this initial PR — maybe just use a paragraph or header example or two? I should have a little time tomorrow to help narrow in on that if needed. @melchoyce and I are going to start thinking through a more cohesive set of single-block patterns for this feature separately. I've opened #30631 to start tracking that work.

@kjellr
Copy link
Contributor

kjellr commented Apr 9, 2021

In terms of the patterns though, I think we should keep it as minimal as possible in this initial PR — maybe just use a paragraph or header example or two?

After thinking about it overnight, I'm not entirely sure we need to bundle any patterns as part of this PR yet. There are a lot of new patterns coming in #29973 that will work really well here. And as noted above, we'll brainstorm more of these in #30631.

But if folks do think they're useful, here are just a couple "single block" patterns that I think are ok if we want to do that. The first is a simple customized paragraph, and the others are featuring relatively new settings for their respective blocks — I think patterns could be a way to help introduce those to folks.

Large Paragraph with Background Color

Screen Shot 2021-04-09 at 11 16 19 AM

<!-- wp:paragraph {"style":{"color":{"link":"#FFFFFF","text":"#FFFFFF","background":"#000000"},"typography":{"lineHeight":"1.3","fontSize":"26px"}}} -->
<p class="has-text-color has-background has-link-color" style="--wp--style--color--link:#FFFFFF;background-color:#000000;color:#FFFFFF;font-size:26px;line-height:1.3">The whole series of my life appeared to me as a dream; I sometimes doubted if indeed it were all true, for it never presented itself to my mind with the force of reality.</p>
<!-- /wp:paragraph -->

Social links with a shared background color

Screen Shot 2021-04-09 at 11 34 00 AM

<!-- wp:social-links {"customIconColor”:”#ffffff”,”iconColorValue”:”#ffffff,”customIconBackgroundColor":"#3962e3","iconBackgroundColorValue":"#3962e3"} -->
<ul class="wp-block-social-links has-icon-color has-icon-background-color"><!-- wp:social-link {"url":"https://wordpress.org","service":"wordpress"} /-->
<!-- wp:social-link {"url":"#","service":"chain"} /-->
<!-- wp:social-link {"url":"#","service":"mail"} /--></ul>
<!-- /wp:social-links -->

Two full-width buttons

Screen Shot 2021-04-09 at 11 46 23 AM

<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"borderRadius":4,"style":{"color":{"text":"#ffffff","background":"#3962e3"}},"width":100} -->
<div class="wp-block-button has-custom-width wp-block-button__width-100"><a class="wp-block-button__link has-text-color has-background" style="border-radius:4px;background-color:#3962e3;color:#ffffff">Learn More</a></div>
<!-- /wp:button -->
<!-- wp:button {"borderRadius":4,"style":{"color":{"background":"#3962e3","text":"#ffffff"}},"width":100} -->
<div class="wp-block-button has-custom-width wp-block-button__width-100"><a class="wp-block-button__link has-text-color has-background" style="border-radius:4px;background-color:#3962e3;color:#ffffff">Get Started</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->

@ntsekouras ntsekouras force-pushed the try/simple-blocks-pattern-transformations branch from 449a693 to 5b505ec Compare April 13, 2021 14:32
Copy link
Contributor

@kjellr kjellr left a comment

Choose a reason for hiding this comment

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

This works well in my testing! I tried out the included patterns, and also a handful of the ones in #29973 (with a temporary blockTypes prop added), and they all worked as expected. 👍

@ntsekouras ntsekouras merged commit 5c1e913 into trunk Apr 13, 2021
@ntsekouras ntsekouras deleted the try/simple-blocks-pattern-transformations branch April 13, 2021 17:06
@github-actions github-actions bot added this to the Gutenberg 10.5 milestone Apr 13, 2021
@kjellr kjellr mentioned this pull request Apr 13, 2021
7 tasks
@mcsf
Copy link
Contributor

mcsf commented Apr 13, 2021

Great job here, @ntsekouras!

MaggieCabrera pushed a commit to MaggieCabrera/gutenberg that referenced this pull request Apr 19, 2021
kjellr added a commit that referenced this pull request Apr 19, 2021
* added new block patterns

* changed background colors to group block

* Switch large text to use viewport width font sizes.

* Make "Overseas" font size slightly smaller so it sits on one line.

* renaming and pattern adjustments

* linting

* buttons block pattern

* Remove URL links.

* Adjust categories.

* Ensure "Columns" category is registered.

* alt text for images

* added missing alt text

* Revise patterns for wider theme support.

Plus some minor code cleanup.

* Replace images with optimized versions

* Fix line height and block markup error.

* Remove extra space from text.

* Add "Three columns of text" to the columns category.

* Update text for three columns pattern.

* Set line height for three columns pattern.

* Update copy for Offset Title direction.

* Simplify the Two columns of text with offset heading pattern.

* Add a small spacer to the "Three columns with images and text" pattern.

* change color values to use hexadecimal

* fixed syntax

* Update images to the final WP.org CDN URLs

* renamed patterns and unregistered duplicates

* added context and domain to translations, escaped strings

* unregistered all the old default patterns

* escape attributes with esc_attr__

* escaped strings with html tags using wp_kses_post

* linting

* Update lib/block-patterns/media-text-arquitecture.php

Co-authored-by: Kjell Reigstad <kjell@kjellr.com>

* Add blockTypes prop for compatibility with #30469.

* Add categories for uncategorized patterns.

* Add code comment.

* linting

* more linting

* updated snapshot related to 2 buttons block

* fixed conflict

* fixed adding patterns snapshot

* removed IDs from gallery to fix e2e tests

* removed unnecesary data attributes

* removed unnecesary ids

* changed ids to null

Co-authored-by: Kjell Reigstad <kjell@kjellr.com>
@jameskoster jameskoster mentioned this pull request Apr 20, 2021
@ntsekouras ntsekouras mentioned this pull request Jun 3, 2021
15 tasks
@gziolo gziolo mentioned this pull request May 23, 2022
58 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Patterns A collection of blocks that can be synced (previously reusable blocks) or unsynced [Type] Experimental Experimental feature or API.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants