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

Make block supports server-side explicit #26192

Merged
merged 30 commits into from
Oct 19, 2020
Merged

Conversation

youknowriad
Copy link
Contributor

@youknowriad youknowriad commented Oct 16, 2020

Builds on top of #26111

This PR introduces a new get_block_wrapper_attributes function you need to call explicitly in render_functions in order to make sure the block supports work in the dynamic blocks. More details on the reasoning here #26111

@github-actions
Copy link

github-actions bot commented Oct 16, 2020

Size Change: +3.51 kB (0%)

Total Size: 1.19 MB

Filename Size Change
build/annotations/index.js 3.54 kB -1 B
build/autop/index.js 2.72 kB +1 B
build/block-directory/index.js 8.61 kB +2 B (0%)
build/block-editor/index.js 130 kB +69 B (0%)
build/block-library/editor-rtl.css 8.93 kB +283 B (3%)
build/block-library/editor.css 8.93 kB +284 B (3%)
build/block-library/index.js 144 kB +1.55 kB (1%)
build/blocks/index.js 47.6 kB +30 B (0%)
build/components/index.js 170 kB +644 B (0%)
build/components/style-rtl.css 15.4 kB -64 B (0%)
build/components/style.css 15.4 kB -65 B (0%)
build/compose/index.js 9.63 kB +1 B
build/core-data/index.js 12.1 kB +1 B
build/data-controls/index.js 683 B -1 B
build/data/index.js 8.63 kB -2 B (0%)
build/date/index.js 31.9 kB +1 B
build/edit-navigation/index.js 10.6 kB -1 B
build/edit-post/index.js 306 kB -7 B (0%)
build/edit-site/index.js 21.6 kB -1 B
build/edit-widgets/index.js 22.3 kB +772 B (3%)
build/editor/index.js 42.6 kB +4 B (0%)
build/element/index.js 4.45 kB -2 B (0%)
build/keyboard-shortcuts/index.js 2.38 kB -1 B
build/notices/index.js 1.69 kB -1 B
build/plugins/index.js 2.44 kB -1 B
build/redux-routine/index.js 2.85 kB -2 B (0%)
build/reusable-blocks/index.js 3.06 kB +23 B (0%)
build/server-side-render/index.js 2.61 kB +2 B (0%)
build/token-list/index.js 1.24 kB -1 B
build/url/index.js 4.06 kB -6 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/api-fetch/index.js 3.35 kB 0 B
build/blob/index.js 668 B 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/style-rtl.css 11 kB 0 B
build/block-editor/style.css 10.9 kB 0 B
build/block-library/style-rtl.css 7.71 kB 0 B
build/block-library/style.css 7.71 kB 0 B
build/block-library/theme-rtl.css 741 B 0 B
build/block-library/theme.css 741 B 0 B
build/block-serialization-default-parser/index.js 1.77 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 4.43 kB 0 B
build/edit-navigation/style-rtl.css 868 B 0 B
build/edit-navigation/style.css 871 B 0 B
build/edit-post/style-rtl.css 6.37 kB 0 B
build/edit-post/style.css 6.35 kB 0 B
build/edit-site/style-rtl.css 3.8 kB 0 B
build/edit-site/style.css 3.81 kB 0 B
build/edit-widgets/style-rtl.css 3.09 kB 0 B
build/edit-widgets/style.css 3.09 kB 0 B
build/editor/editor-styles-rtl.css 480 B 0 B
build/editor/editor-styles.css 482 B 0 B
build/editor/style-rtl.css 3.85 kB 0 B
build/editor/style.css 3.84 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.49 kB 0 B
build/format-library/style-rtl.css 547 B 0 B
build/format-library/style.css 548 B 0 B
build/hooks/index.js 1.74 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.54 kB 0 B
build/is-shallow-equal/index.js 709 B 0 B
build/keycodes/index.js 1.85 kB 0 B
build/list-reusable-blocks/index.js 3.02 kB 0 B
build/list-reusable-blocks/style-rtl.css 476 B 0 B
build/list-reusable-blocks/style.css 476 B 0 B
build/media-utils/index.js 5.12 kB 0 B
build/nux/index.js 3.27 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/primitives/index.js 1.35 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/rich-text/index.js 13 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/viewport/index.js 1.75 kB 0 B
build/warning/index.js 1.13 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

@youknowriad youknowriad mentioned this pull request Oct 16, 2020
11 tasks
@youknowriad youknowriad changed the title Refactor/block supports Make block supports server-side explicit Oct 16, 2020
@youknowriad youknowriad marked this pull request as ready for review October 16, 2020 12:47
@youknowriad youknowriad added [Feature] Block API API that allows to express the block paradigm. [Type] New API New API to be used by plugin developers or package users. labels Oct 16, 2020
Copy link
Contributor

@ntsekouras ntsekouras left a comment

Choose a reason for hiding this comment

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

Looks good - thanks! 👍

lib/class-wp-block-supports.php Outdated Show resolved Hide resolved
@oandregal oandregal added this to the Gutenberg 9.2 milestone Oct 19, 2020
lib/class-wp-block-supports.php Outdated Show resolved Hide resolved
lib/compat.php Outdated
/**
* Shim that hooks into `pre_render_block` so as to override `render_block` with
* a function that assigns block context.
*
* This can be removed when plugin support requires WordPress 5.5.0+.
* FIXME: THIS IS NO LONGER ACCURATE: This can be removed when plugin support
Copy link
Contributor

Choose a reason for hiding this comment

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

If we keep $current_parsed_block, then this needs to be updated to reflect that:

  1. It needs backporting to core
  2. Then, it needs to live in compat.php until 5.6 is required by the plugin

packages/block-library/src/post-comment-author/index.php Outdated Show resolved Hide resolved
packages/block-library/src/post-comment-content/index.php Outdated Show resolved Hide resolved
@youknowriad youknowriad merged commit 7c2fb7c into master Oct 19, 2020
@youknowriad youknowriad deleted the refactor/block-supports branch October 19, 2020 11:05

// This is hardcoded on purpose.
// We only support a fixed list of attributes.
$attributes_to_merge = array( 'style', 'class' );
Copy link
Member

@oandregal oandregal Oct 19, 2020

Choose a reason for hiding this comment

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

I don't remember off the top of my head how params that are objects/arrays are documented, but this seems worth adding in the PHPDoc. Even something as minimal as @param array $extra_attributes Optional. Extra classes or styles to render on the block wrapper. Use class or style as the array key, respectively..

Copy link
Contributor

Choose a reason for hiding this comment

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

Hm, good catch. Is this filtering out any elements in $extra_attributes that aren't style or class? I think we should fix that. Even if keep that restriction for $new_attributes (which makes sense) I think we should lift it for $extra_attributes, otherwise it IMO goes against developer expectations.

(edit: I had added this comment in wrong place)

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 reason it's limited to a set of known attributes is because merging attributes is different from one to another. For example the id should overwrite while the style should concat.

Copy link
Member

@oandregal oandregal Oct 19, 2020

Choose a reason for hiding this comment

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

mmm, I was thinking only about documentation expectations. Is there a need for this function to pass-through attributes other than style and class? My thinking is that it'd be ok if any other element attributes the block author needs is handled by its own mechanisms in the render_callback function (so not in this function). As long as it's documented, I believe this is fine as it is.

$wrapper_attributes = get_block_wrapper_attributes(
array(
'class' => implode( ' ', $classes ),
'style' => $colors['inline_styles'] . $font_sizes['inline_styles'],
Copy link
Member

Choose a reason for hiding this comment

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

TIL that NULL . NULL => ''. Nice simplification here!

$icon = block_core_social_link_get_icon( $service );
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => 'wp-social-link wp-social-link-' . $service . $class_name ) );

return '<li .' . $wrapper_attributes . '><a href="' . esc_url( $url ) . '" aria-label="' . esc_attr( $label ) . '" ' . $attribute . '> ' . $icon . '</a></li>';
Copy link
Member

Choose a reason for hiding this comment

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

There's a typo here, note the dot within the string <li ..

Copy link
Member

Choose a reason for hiding this comment

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

Fix at #26282

Copy link
Contributor

Choose a reason for hiding this comment

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

Good catch, thanks for the PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Feature] Block API API that allows to express the block paradigm. [Type] New API New API to be used by plugin developers or package users.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants