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

Style Engine: block supports backend #39446

Merged
merged 12 commits into from
Mar 28, 2022

Conversation

ramonjd
Copy link
Member

@ramonjd ramonjd commented Mar 15, 2022

Tracking Issue: #38167

What?

A backend version of

Experimenting with classname obfuscation. Reverted (see commit history)

Works on block support styles (margin/padding for now) that are serverside rendered, e.g., core/site-title

Why?

To create a backend engine for style object -> css rule transformation to complement the frontend code: #37978

How?

WP_Style_Engine_Gutenberg has a STYLE_DEFINITIONS_METADATA dictionary that contains instructions on how to parse a Gutenberg style attributes in order to return CSS rules.

Testing Instructions

Insert a few core/site-title blocks and add padding.

Editor code
<!-- wp:site-title {"style":{"spacing":{"padding":{"top":"104px","right":"104px","bottom":"104px","left":"104px"},"margin":{"top":"72px","right":"72px","bottom":"72px","left":"72px"}},"color":{"background":"#f71c1c"}}} /-->

<!-- wp:site-title {"style":{"spacing":{"padding":{"top":"104px","right":"104px","bottom":"104px","left":"104px"},"margin":{"top":"286px","bottom":"286px","right":"286px","left":"286px"}},"color":{"background":"#ee8c8c"}}} /-->

<!-- wp:site-title {"style":{"spacing":{"padding":{"top":"104px","right":"104px","bottom":"148px","left":"104px"},"margin":{"top":"4px","right":"8.9vw","bottom":"4%","left":"4px"}},"color":{"background":"#f68888"}}} /-->

<!-- wp:site-title {"style":{"spacing":{"padding":{"bottom":"2vw","top":"1rem"},"margin":{"top":"3vh","right":"3vh","bottom":"3vh","left":"3vh"}},"color":{"background":"#896b6b"}}} /-->

Check the resulting output and CSS inline styles.

<h1 style="background-color: #ee8c8c; padding-top: 104px; padding-right: 104px; padding-bottom: 104px; padding-left: 104px;  margin-top: 286px; margin-bottom: 286px; margin-right: 286px; margin-left: 286px; " class="has-background wp-block-site-title"><a href="http://localhost:4759" rel="home">a8c-wp-env</a></h1>

Related PRs

@ramonjd ramonjd self-assigned this Mar 15, 2022
@ramonjd ramonjd added Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json CSS Styling Related to editor and front end styles, CSS-specific issues. labels Mar 15, 2022
@ramonjd ramonjd force-pushed the try/style-engine-block-supports-backend branch from 50ed43b to 3b1ed82 Compare March 17, 2022 00:11
*/
class WP_Style_Engine_Gutenberg_Test extends WP_UnitTestCase {
function test_returns_inline_styles_from_string() {
$style_engine = WP_Style_Engine_Gutenberg::get_instance();
Copy link
Contributor

Choose a reason for hiding this comment

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

Does it need to be a class? Why not just a function, mostly curious about the reasoning here.

Copy link
Member Author

Choose a reason for hiding this comment

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

Good question. It doesn't have to be a class. The reasons why I left it as a class are:

  • because I copied the structure over from one of our initial experiments 😄
  • to namespace methods and encapsulate constants such as BLOCK_STYLE_DEFINITIONS_METADATA (similar to WP_Theme_JSON_Gutenberg)
  • portability across applications
  • related to the last point, so we can be free to use generic method names such as generate to harmonize the backend and frontend APIs, as mentioned below.
  • while a more conceptual point, to lend the functionality a degree of authority and conspicuousness, that is, so folks recognize it as a unified collection of properties and behaviours.

Copy link
Contributor

Choose a reason for hiding this comment

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

Good question, and good answers! 😁

while a more conceptual point, to lend the functionality a degree of authority and conspicuousness, that is, so folks recognize it as a unified collection of properties and behaviours.

Yes, in PHP, because we're not using namespaces and can't encapsulate our functions in a separate module like we do in JS, I think it's better for us to gather together our style engine functions in a class rather than expose each of them in the global namespace. Plus, it's looking like we'll likely need to carry around some state in the style engine to deal with de-duping styles and / or deferring processing to a later part of the execution process, so starting with a class likely makes it easier for us to extend the style engine in follow-up PRs, too.

Copy link
Contributor

Choose a reason for hiding this comment

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

Makes sense. I just wanted us to avoid the "stateful" trap if possible. When we add state to classes that are not meant to be classes, the problems start happening :)

@ramonjd
Copy link
Member Author

ramonjd commented Mar 22, 2022

@youknowriad Thanks for your comments and help on this one.

I wanted to also get your opinion on:

  • whether we should move the style engine PHP file to the package now or later,
  • and if and when we do move it, what's the best way to load it in Gutenberg? Just a require in load.php?

@ramonjd ramonjd marked this pull request as ready for review March 22, 2022 22:40
@ramonjd ramonjd force-pushed the try/style-engine-block-supports-backend branch from 2304cff to 83e0bbd Compare March 22, 2022 23:46
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.

Apologies if this isn't ready for a full review. I'm just a bit late to the party and trying to get my head around all the style engine work.

I've tried testing this as per the PR instructions however it doesn't work for me.

Any margin styles added to the block are lost. In their place, I get duplicate inline padding styles. This occurred both with the example code and manually adding my own site title block.

Trunk This PR
Screen Shot 2022-03-23 at 12 21 35 pm Screen Shot 2022-03-23 at 12 21 43 pm

I've added a couple of questions as inline comments. Feel free to ignore them if I've just missed something obvious.

lib/block-supports/spacing.php Outdated Show resolved Hide resolved
lib/style-engine/class-wp-style-engine-gutenberg.php Outdated Show resolved Hide resolved
Copy link
Contributor

@andrewserong andrewserong 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 reworking this to be closer to the JS implementation, @ramonjd! I ran into similar issues to Aaron where the margin was rendered twice for the site title block:

image

In terms of the style engine being called multiple times, or processing things more times than it should:

  • Do we try to ensure that we're only calling generate once per block instance (across all block supports), and then defer as much as possible to the style engine? Or:
  • Do we selectively call the style engine with only part of the style object. For instance, in the spacing support, perhaps we'd only call generate with an associative array containing spacing so that we don't accidentally process typography at the same time 🤔

I think I'm leaning toward (at this stage) calling the style engine only once in the spacing support, and processing the style object a little bit before sending it to the style engine. What do you think?

lib/style-engine/class-wp-style-engine-gutenberg.php Outdated Show resolved Hide resolved
lib/style-engine/class-wp-style-engine-gutenberg.php Outdated Show resolved Hide resolved
lib/block-supports/spacing.php Outdated Show resolved Hide resolved
@ramonjd
Copy link
Member Author

ramonjd commented Mar 23, 2022

Thanks @aaronrobertshaw and @andrewserong for taking a look at this.

Sorry for wasting your time with buggy code. I've pushed the code I should have pushed when I pushed this morning before I got distracted 🙏

@ramonjd ramonjd force-pushed the try/style-engine-block-supports-backend branch from 22ea656 to 443dfc8 Compare March 23, 2022 04:39
@ramonjd
Copy link
Member Author

ramonjd commented Mar 23, 2022

Do we try to ensure that we're only calling generate once per block instance (across all block supports), and then defer as much as possible to the style engine?

Do we selectively call the style engine with only part of the style object. For instance, in the spacing support, perhaps we'd only call generate with an associative array containing spacing so that we don't accidentally process typography at the same time 🤔

I think I'm leaning toward (at this stage) calling the style engine only once in the spacing support, and processing the style object a little bit before sending it to the style engine. What do you think?

I agree that we should only call it once. ✅

It crossed my mind but I got bogged down thinking about how to determine the logic for $has_padding_support and $has_margin_support

I guess we could rebuild the style object before we pass it. Very rough (but working) example 😄

...
	$spacing_block_styles = array();

	if ( $has_padding_support ) {
		$padding_style_value = _wp_array_get( $block_styles, array( 'spacing', 'padding' ), null );
		if ( $padding_style_value ) {
			$spacing_block_styles['padding'] = $padding_style_value;
		}
	}

	if ( $has_margin_support ) {
		$margin_style_value = _wp_array_get( $block_styles, array( 'spacing', 'margin' ), null );
		if ( $margin_style_value ) {
			$spacing_block_styles['margin'] = $margin_style_value;
		}
	}

	$inline_styles = $style_engine->generate(
		array( 'spacing' => $spacing_block_styles ),
		array(
			'inline' => true,
		)
	);

...
	if ( ! empty( $inline_styles ) ) {
		$attributes['style'] = $inline_styles;
	}

	return $attributes;

Or we could have generate() accept more granular style rules, e.g., { padding: '12px' } instead of the entire style object.

In a later version I'd also like to be able to support passing a path like array( 'spacing' ) which will then process all the spacing styles only.

I was trying to keep it kinda the same as the JS version, but maybe we don't need to be so strict about that? What do you reckon?

@andrewserong
Copy link
Contributor

Thanks for following up, it's a tricky balance to strike!

I guess we could rebuild the style object before we pass it. Very rough (but working) example

I like that idea, I think it's worth exploring further. In terms of responsibilities, I think it makes sense that "block supports" owns whether or not something is supported, and the "style engine" owns generating the styles, so this kind of logic feels like a good direction to me.

In a later version I'd also like to be able to support passing a path like array( 'spacing' ) which will then process all the spacing styles only.

Nice — yes, iteratively moving toward being able to call the style engine as few times as possible sounds good, and this sort of thing could mean calling once in spacing and then once in typography, etc.

I was trying to keep it kinda the same as the JS version, but maybe we don't need to be so strict about that? What do you reckon?

I don't think we need to be too strict, personally — as we implement things in PHP or in JS we'll encounter things that reveal changes we need to make in the other one. Here we've encountered two things, I think, that warrant going in a slightly different direction to what we expected if we need to:

  • Needing to factor in whether or not the block has opted in to the support
  • Dealing with padding and margin (in JS we've only implemented one)

We'll then hopefully learn from the PHP implementation what's missing from the JS side and vice versa 😀

@youknowriad
Copy link
Contributor

whether we should move the style engine PHP file to the package now or later,

I don't mind if it's done separately in another PR but I'd love if we can do soon to avoid falling in the trap of having two different JS/php implementations. Keeping them together kind of gives the necessary incentive that they should be implemented the same.

and if and when we do move it, what's the best way to load it in Gutenberg? Just a require in load.php?

Yes, I think so. The difficulty is going to be more on the "naming" as we need to write the package as if it was consumed by core (so no gutenberg_ prefixes) but we also need to have a dedicated version in gutenberg that don't conflict with core (so gutenberg_ prefixes). The way we do this for the block-library functions is that we rewrite them on the fly in the webpack build.

@ramonjd
Copy link
Member Author

ramonjd commented Mar 23, 2022

I think it makes sense that "block supports" owns whether or not something is supported,

When you put it like that it sounds so obvious! 😄 Good call.

I don't mind if it's done separately in another PR but I'd love if we can do soon to avoid falling in the trap of having two different JS/php implementations. Keeping them together kind of gives the necessary incentive that they should be implemented the same.

Excellent. This is great to know. And thanks for the interesting tips. I'll take a closer look at the block-library. 🙇

@github-actions
Copy link

Size Change: -170 kB (-14%) 👏

Total Size: 1.04 MB

Filename Size Change
build/block-directory/style-rtl.css 0 B -1.01 kB (removed) 🏆
build/block-directory/style.css 0 B -1.01 kB (removed) 🏆
build/block-editor/default-editor-styles-rtl.css 0 B -378 B (removed) 🏆
build/block-editor/default-editor-styles.css 0 B -378 B (removed) 🏆
build/block-editor/index.min.js 146 kB +138 B (0%)
build/block-editor/style-rtl.css 0 B -15.1 kB (removed) 🏆
build/block-editor/style.css 0 B -15.1 kB (removed) 🏆
build/block-library/common-rtl.css 0 B -934 B (removed) 🏆
build/block-library/common.css 0 B -932 B (removed) 🏆
build/block-library/editor-rtl.css 0 B -10 kB (removed) 🏆
build/block-library/editor.css 0 B -10 kB (removed) 🏆
build/block-library/index.min.js 171 kB +616 B (0%)
build/block-library/reset-rtl.css 0 B -474 B (removed) 🏆
build/block-library/reset.css 0 B -474 B (removed) 🏆
build/block-library/style-rtl.css 0 B -11.2 kB (removed) 🏆
build/block-library/style.css 0 B -11.2 kB (removed) 🏆
build/block-library/theme-rtl.css 0 B -689 B (removed) 🏆
build/block-library/theme.css 0 B -694 B (removed) 🏆
build/blocks/index.min.js 46.8 kB +34 B (0%)
build/components/index.min.js 223 kB +4.47 kB (+2%)
build/components/style-rtl.css 0 B -15.6 kB (removed) 🏆
build/components/style.css 0 B -15.6 kB (removed) 🏆
build/core-data/index.min.js 14.3 kB -3 B (0%)
build/customize-widgets/style-rtl.css 0 B -1.39 kB (removed) 🏆
build/customize-widgets/style.css 0 B -1.39 kB (removed) 🏆
build/date/index.min.js 32 kB +66 B (0%)
build/edit-navigation/style-rtl.css 0 B -4.04 kB (removed) 🏆
build/edit-navigation/style.css 0 B -4.05 kB (removed) 🏆
build/edit-post/classic-rtl.css 0 B -546 B (removed) 🏆
build/edit-post/classic.css 0 B -547 B (removed) 🏆
build/edit-post/index.min.js 29.8 kB -11 B (0%)
build/edit-post/style-rtl.css 0 B -7.07 kB (removed) 🏆
build/edit-post/style.css 0 B -7.07 kB (removed) 🏆
build/edit-site/index.min.js 45.4 kB +417 B (+1%)
build/edit-site/style-rtl.css 0 B -7.58 kB (removed) 🏆
build/edit-site/style.css 0 B -7.56 kB (removed) 🏆
build/edit-widgets/style-rtl.css 0 B -4.4 kB (removed) 🏆
build/edit-widgets/style.css 0 B -4.39 kB (removed) 🏆
build/editor/index.min.js 38.4 kB +17 B (0%)
build/editor/style-rtl.css 0 B -3.71 kB (removed) 🏆
build/editor/style.css 0 B -3.71 kB (removed) 🏆
build/format-library/style-rtl.css 0 B -571 B (removed) 🏆
build/format-library/style.css 0 B -571 B (removed) 🏆
build/list-reusable-blocks/style-rtl.css 0 B -838 B (removed) 🏆
build/list-reusable-blocks/style.css 0 B -838 B (removed) 🏆
build/nux/style-rtl.css 0 B -751 B (removed) 🏆
build/nux/style.css 0 B -749 B (removed) 🏆
build/reusable-blocks/style-rtl.css 0 B -256 B (removed) 🏆
build/reusable-blocks/style.css 0 B -256 B (removed) 🏆
build/widgets/style-rtl.css 0 B -1.16 kB (removed) 🏆
build/widgets/style.css 0 B -1.16 kB (removed) 🏆
ℹ️ View Unchanged
Filename Size
build/a11y/index.min.js 993 B
build/admin-manifest/index.min.js 1.24 kB
build/annotations/index.min.js 2.77 kB
build/api-fetch/index.min.js 2.27 kB
build/autop/index.min.js 2.15 kB
build/blob/index.min.js 487 B
build/block-directory/index.min.js 6.49 kB
build/block-library/blocks/archives/editor-rtl.css 61 B
build/block-library/blocks/archives/editor.css 60 B
build/block-library/blocks/archives/style-rtl.css 65 B
build/block-library/blocks/archives/style.css 65 B
build/block-library/blocks/audio/editor-rtl.css 150 B
build/block-library/blocks/audio/editor.css 150 B
build/block-library/blocks/audio/style-rtl.css 111 B
build/block-library/blocks/audio/style.css 111 B
build/block-library/blocks/audio/theme-rtl.css 125 B
build/block-library/blocks/audio/theme.css 125 B
build/block-library/blocks/avatar/editor-rtl.css 59 B
build/block-library/blocks/avatar/editor.css 59 B
build/block-library/blocks/block/editor-rtl.css 161 B
build/block-library/blocks/block/editor.css 161 B
build/block-library/blocks/button/editor-rtl.css 445 B
build/block-library/blocks/button/editor.css 445 B
build/block-library/blocks/button/style-rtl.css 560 B
build/block-library/blocks/button/style.css 560 B
build/block-library/blocks/buttons/editor-rtl.css 292 B
build/block-library/blocks/buttons/editor.css 292 B
build/block-library/blocks/buttons/style-rtl.css 275 B
build/block-library/blocks/buttons/style.css 275 B
build/block-library/blocks/calendar/style-rtl.css 207 B
build/block-library/blocks/calendar/style.css 207 B
build/block-library/blocks/categories/editor-rtl.css 84 B
build/block-library/blocks/categories/editor.css 83 B
build/block-library/blocks/categories/style-rtl.css 79 B
build/block-library/blocks/categories/style.css 79 B
build/block-library/blocks/code/style-rtl.css 103 B
build/block-library/blocks/code/style.css 103 B
build/block-library/blocks/code/theme-rtl.css 124 B
build/block-library/blocks/code/theme.css 124 B
build/block-library/blocks/columns/editor-rtl.css 108 B
build/block-library/blocks/columns/editor.css 108 B
build/block-library/blocks/columns/style-rtl.css 406 B
build/block-library/blocks/columns/style.css 406 B
build/block-library/blocks/comment-author-avatar/editor-rtl.css 125 B
build/block-library/blocks/comment-author-avatar/editor.css 125 B
build/block-library/blocks/comment-template/style-rtl.css 127 B
build/block-library/blocks/comment-template/style.css 127 B
build/block-library/blocks/comments-pagination-numbers/editor-rtl.css 123 B
build/block-library/blocks/comments-pagination-numbers/editor.css 121 B
build/block-library/blocks/comments-pagination/editor-rtl.css 222 B
build/block-library/blocks/comments-pagination/editor.css 209 B
build/block-library/blocks/comments-pagination/style-rtl.css 235 B
build/block-library/blocks/comments-pagination/style.css 231 B
build/block-library/blocks/comments-query-loop/editor-rtl.css 95 B
build/block-library/blocks/comments-query-loop/editor.css 95 B
build/block-library/blocks/cover/editor-rtl.css 546 B
build/block-library/blocks/cover/editor.css 547 B
build/block-library/blocks/cover/style-rtl.css 1.56 kB
build/block-library/blocks/cover/style.css 1.56 kB
build/block-library/blocks/embed/editor-rtl.css 293 B
build/block-library/blocks/embed/editor.css 293 B
build/block-library/blocks/embed/style-rtl.css 417 B
build/block-library/blocks/embed/style.css 417 B
build/block-library/blocks/embed/theme-rtl.css 124 B
build/block-library/blocks/embed/theme.css 124 B
build/block-library/blocks/file/editor-rtl.css 300 B
build/block-library/blocks/file/editor.css 300 B
build/block-library/blocks/file/style-rtl.css 255 B
build/block-library/blocks/file/style.css 255 B
build/block-library/blocks/file/view.min.js 353 B
build/block-library/blocks/freeform/editor-rtl.css 2.44 kB
build/block-library/blocks/freeform/editor.css 2.44 kB
build/block-library/blocks/gallery/editor-rtl.css 961 B
build/block-library/blocks/gallery/editor.css 964 B
build/block-library/blocks/gallery/style-rtl.css 1.51 kB
build/block-library/blocks/gallery/style.css 1.51 kB
build/block-library/blocks/gallery/theme-rtl.css 122 B
build/block-library/blocks/gallery/theme.css 122 B
build/block-library/blocks/group/editor-rtl.css 159 B
build/block-library/blocks/group/editor.css 159 B
build/block-library/blocks/group/style-rtl.css 57 B
build/block-library/blocks/group/style.css 57 B
build/block-library/blocks/group/theme-rtl.css 78 B
build/block-library/blocks/group/theme.css 78 B
build/block-library/blocks/heading/style-rtl.css 114 B
build/block-library/blocks/heading/style.css 114 B
build/block-library/blocks/html/editor-rtl.css 332 B
build/block-library/blocks/html/editor.css 333 B
build/block-library/blocks/image/editor-rtl.css 731 B
build/block-library/blocks/image/editor.css 730 B
build/block-library/blocks/image/style-rtl.css 529 B
build/block-library/blocks/image/style.css 535 B
build/block-library/blocks/image/theme-rtl.css 124 B
build/block-library/blocks/image/theme.css 124 B
build/block-library/blocks/latest-comments/style-rtl.css 284 B
build/block-library/blocks/latest-comments/style.css 284 B
build/block-library/blocks/latest-posts/editor-rtl.css 199 B
build/block-library/blocks/latest-posts/editor.css 198 B
build/block-library/blocks/latest-posts/style-rtl.css 447 B
build/block-library/blocks/latest-posts/style.css 446 B
build/block-library/blocks/list/style-rtl.css 94 B
build/block-library/blocks/list/style.css 94 B
build/block-library/blocks/media-text/editor-rtl.css 266 B
build/block-library/blocks/media-text/editor.css 263 B
build/block-library/blocks/media-text/style-rtl.css 493 B
build/block-library/blocks/media-text/style.css 490 B
build/block-library/blocks/more/editor-rtl.css 431 B
build/block-library/blocks/more/editor.css 431 B
build/block-library/blocks/navigation-link/editor-rtl.css 708 B
build/block-library/blocks/navigation-link/editor.css 706 B
build/block-library/blocks/navigation-link/style-rtl.css 94 B
build/block-library/blocks/navigation-link/style.css 94 B
build/block-library/blocks/navigation-submenu/editor-rtl.css 299 B
build/block-library/blocks/navigation-submenu/editor.css 299 B
build/block-library/blocks/navigation-submenu/view.min.js 375 B
build/block-library/blocks/navigation/editor-rtl.css 2.03 kB
build/block-library/blocks/navigation/editor.css 2.04 kB
build/block-library/blocks/navigation/style-rtl.css 1.89 kB
build/block-library/blocks/navigation/style.css 1.88 kB
build/block-library/blocks/navigation/view.min.js 2.85 kB
build/block-library/blocks/nextpage/editor-rtl.css 395 B
build/block-library/blocks/nextpage/editor.css 395 B
build/block-library/blocks/page-list/editor-rtl.css 363 B
build/block-library/blocks/page-list/editor.css 363 B
build/block-library/blocks/page-list/style-rtl.css 175 B
build/block-library/blocks/page-list/style.css 175 B
build/block-library/blocks/paragraph/editor-rtl.css 157 B
build/block-library/blocks/paragraph/editor.css 157 B
build/block-library/blocks/paragraph/style-rtl.css 273 B
build/block-library/blocks/paragraph/style.css 273 B
build/block-library/blocks/post-author/style-rtl.css 175 B
build/block-library/blocks/post-author/style.css 176 B
build/block-library/blocks/post-comments-form/style-rtl.css 446 B
build/block-library/blocks/post-comments-form/style.css 446 B
build/block-library/blocks/post-comments/style-rtl.css 521 B
build/block-library/blocks/post-comments/style.css 521 B
build/block-library/blocks/post-excerpt/editor-rtl.css 73 B
build/block-library/blocks/post-excerpt/editor.css 73 B
build/block-library/blocks/post-excerpt/style-rtl.css 69 B
build/block-library/blocks/post-excerpt/style.css 69 B
build/block-library/blocks/post-featured-image/editor-rtl.css 721 B
build/block-library/blocks/post-featured-image/editor.css 721 B
build/block-library/blocks/post-featured-image/style-rtl.css 153 B
build/block-library/blocks/post-featured-image/style.css 153 B
build/block-library/blocks/post-template/editor-rtl.css 99 B
build/block-library/blocks/post-template/editor.css 98 B
build/block-library/blocks/post-template/style-rtl.css 323 B
build/block-library/blocks/post-template/style.css 323 B
build/block-library/blocks/post-terms/style-rtl.css 73 B
build/block-library/blocks/post-terms/style.css 73 B
build/block-library/blocks/post-title/style-rtl.css 80 B
build/block-library/blocks/post-title/style.css 80 B
build/block-library/blocks/preformatted/style-rtl.css 103 B
build/block-library/blocks/preformatted/style.css 103 B
build/block-library/blocks/pullquote/editor-rtl.css 198 B
build/block-library/blocks/pullquote/editor.css 198 B
build/block-library/blocks/pullquote/style-rtl.css 370 B
build/block-library/blocks/pullquote/style.css 370 B
build/block-library/blocks/pullquote/theme-rtl.css 167 B
build/block-library/blocks/pullquote/theme.css 167 B
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122 B
build/block-library/blocks/query-pagination-numbers/editor.css 121 B
build/block-library/blocks/query-pagination/editor-rtl.css 221 B
build/block-library/blocks/query-pagination/editor.css 211 B
build/block-library/blocks/query-pagination/style-rtl.css 234 B
build/block-library/blocks/query-pagination/style.css 231 B
build/block-library/blocks/query/editor-rtl.css 131 B
build/block-library/blocks/query/editor.css 132 B
build/block-library/blocks/quote/style-rtl.css 201 B
build/block-library/blocks/quote/style.css 201 B
build/block-library/blocks/quote/theme-rtl.css 223 B
build/block-library/blocks/quote/theme.css 226 B
build/block-library/blocks/read-more/style-rtl.css 132 B
build/block-library/blocks/read-more/style.css 132 B
build/block-library/blocks/rss/editor-rtl.css 202 B
build/block-library/blocks/rss/editor.css 204 B
build/block-library/blocks/rss/style-rtl.css 289 B
build/block-library/blocks/rss/style.css 288 B
build/block-library/blocks/search/editor-rtl.css 165 B
build/block-library/blocks/search/editor.css 165 B
build/block-library/blocks/search/style-rtl.css 397 B
build/block-library/blocks/search/style.css 398 B
build/block-library/blocks/search/theme-rtl.css 64 B
build/block-library/blocks/search/theme.css 64 B
build/block-library/blocks/separator/editor-rtl.css 140 B
build/block-library/blocks/separator/editor.css 140 B
build/block-library/blocks/separator/style-rtl.css 233 B
build/block-library/blocks/separator/style.css 233 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 474 B
build/block-library/blocks/shortcode/editor.css 474 B
build/block-library/blocks/site-logo/editor-rtl.css 759 B
build/block-library/blocks/site-logo/editor.css 759 B
build/block-library/blocks/site-logo/style-rtl.css 181 B
build/block-library/blocks/site-logo/style.css 181 B
build/block-library/blocks/site-tagline/editor-rtl.css 86 B
build/block-library/blocks/site-tagline/editor.css 86 B
build/block-library/blocks/site-title/editor-rtl.css 84 B
build/block-library/blocks/site-title/editor.css 84 B
build/block-library/blocks/social-link/editor-rtl.css 177 B
build/block-library/blocks/social-link/editor.css 177 B
build/block-library/blocks/social-links/editor-rtl.css 674 B
build/block-library/blocks/social-links/editor.css 673 B
build/block-library/blocks/social-links/style-rtl.css 1.37 kB
build/block-library/blocks/social-links/style.css 1.36 kB
build/block-library/blocks/spacer/editor-rtl.css 332 B
build/block-library/blocks/spacer/editor.css 332 B
build/block-library/blocks/spacer/style-rtl.css 48 B
build/block-library/blocks/spacer/style.css 48 B
build/block-library/blocks/table/editor-rtl.css 471 B
build/block-library/blocks/table/editor.css 472 B
build/block-library/blocks/table/style-rtl.css 481 B
build/block-library/blocks/table/style.css 481 B
build/block-library/blocks/table/theme-rtl.css 188 B
build/block-library/blocks/table/theme.css 188 B
build/block-library/blocks/tag-cloud/style-rtl.css 226 B
build/block-library/blocks/tag-cloud/style.css 227 B
build/block-library/blocks/template-part/editor-rtl.css 235 B
build/block-library/blocks/template-part/editor.css 235 B
build/block-library/blocks/template-part/theme-rtl.css 101 B
build/block-library/blocks/template-part/theme.css 101 B
build/block-library/blocks/text-columns/editor-rtl.css 95 B
build/block-library/blocks/text-columns/editor.css 95 B
build/block-library/blocks/text-columns/style-rtl.css 166 B
build/block-library/blocks/text-columns/style.css 166 B
build/block-library/blocks/verse/style-rtl.css 87 B
build/block-library/blocks/verse/style.css 87 B
build/block-library/blocks/video/editor-rtl.css 571 B
build/block-library/blocks/video/editor.css 572 B
build/block-library/blocks/video/style-rtl.css 173 B
build/block-library/blocks/video/style.css 173 B
build/block-library/blocks/video/theme-rtl.css 124 B
build/block-library/blocks/video/theme.css 124 B
build/block-serialization-default-parser/index.min.js 1.12 kB
build/block-serialization-spec-parser/index.min.js 2.83 kB
build/compose/index.min.js 11.2 kB
build/customize-widgets/index.min.js 11.2 kB
build/data-controls/index.min.js 663 B
build/data/index.min.js 8.19 kB
build/deprecated/index.min.js 518 B
build/dom-ready/index.min.js 336 B
build/dom/index.min.js 4.53 kB
build/edit-navigation/index.min.js 16.1 kB
build/edit-widgets/index.min.js 16.5 kB
build/element/index.min.js 4.29 kB
build/escape-html/index.min.js 548 B
build/format-library/index.min.js 6.62 kB
build/hooks/index.min.js 1.66 kB
build/html-entities/index.min.js 454 B
build/i18n/index.min.js 3.79 kB
build/is-shallow-equal/index.min.js 535 B
build/keyboard-shortcuts/index.min.js 1.83 kB
build/keycodes/index.min.js 1.41 kB
build/list-reusable-blocks/index.min.js 1.75 kB
build/media-utils/index.min.js 2.94 kB
build/notices/index.min.js 957 B
build/nux/index.min.js 2.12 kB
build/plugins/index.min.js 1.98 kB
build/preferences/index.min.js 1.2 kB
build/primitives/index.min.js 949 B
build/priority-queue/index.min.js 611 B
build/react-i18n/index.min.js 704 B
build/react-refresh-entry/index.min.js 8.44 kB
build/react-refresh-runtime/index.min.js 7.31 kB
build/redux-routine/index.min.js 2.69 kB
build/reusable-blocks/index.min.js 2.24 kB
build/rich-text/index.min.js 11.1 kB
build/server-side-render/index.min.js 1.61 kB
build/shortcode/index.min.js 1.52 kB
build/token-list/index.min.js 668 B
build/url/index.min.js 1.99 kB
build/vendors/react-dom.min.js 38.5 kB
build/vendors/react.min.js 4.34 kB
build/viewport/index.min.js 1.08 kB
build/warning/index.min.js 280 B
build/widgets/index.min.js 7.21 kB
build/wordcount/index.min.js 1.07 kB

compressed-size-action

@ramonjd
Copy link
Member Author

ramonjd commented Mar 24, 2022

I'm not sure if I'm on the right track but I decided to try out copying the PHP file from packages/style-engine over to /lib during the package build in 3a9ef2b

I rolled it back already. Although the build step is part of the PHP tests (and I assumed the webpack copy), they still fail for some reason. I'll throw up a separate PR for moving the style engine PHP file to the package folder so we can get some expert 👀 on it. 👍

Copy link
Contributor

@andrewserong andrewserong 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 all the follow-ups, @ramonjd!

Just gave this a re-test and it's still working nicely for me, and I tested the tests locally to make sure that they all break in expected ways if we fiddle with the expected data 👍

This LGTM as a place for us to start now, particularly with the intended follow-up PR to look at the build process and switching out of the Gutenberg suffix in the classname.

Just left a couple of tiny comments about comments, but nothing major. Would it be good to get a second approval since I'm maybe slightly biased toward the implementation? 😁

lib/load.php Outdated Show resolved Hide resolved
Copy link
Contributor

@youknowriad youknowriad left a comment

Choose a reason for hiding this comment

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

I didn't check deeply but this looks good to me.

ramonjd and others added 12 commits March 28, 2022 12:32
Add optional options array
Explicitly tell `generate()` to return styles so we can open it up to further functionality
Update tests
Update comments, fix typos
Filter CSS output
- move style engine into `/packages/style-engine`
- create webpack copy pattern for packages with classes
- switched class methods to static so we don't have to get the instance
@ramonjd
Copy link
Member Author

ramonjd commented Mar 28, 2022

Given that I've sneaked margin support into this one, I've added it to the JS version over here for consistency.

@ramonjd ramonjd merged commit 44925a9 into trunk Mar 28, 2022
@ramonjd ramonjd deleted the try/style-engine-block-supports-backend branch March 28, 2022 02:18
@github-actions github-actions bot added this to the Gutenberg 13.0 milestone Mar 28, 2022
@ramonjd ramonjd added the [Package] Style Engine /packages/style-engine label Apr 12, 2022
@bph bph mentioned this pull request Sep 21, 2022
89 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CSS Styling Related to editor and front end styles, CSS-specific issues. Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json [Package] Style Engine /packages/style-engine
Projects
Status: 🏆 Done
Development

Successfully merging this pull request may close these issues.

4 participants