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

Update mechanism that resolves Global Styles data #27237

Merged
merged 6 commits into from
Nov 25, 2020

Conversation

oandregal
Copy link
Member

@oandregal oandregal commented Nov 24, 2020

This PR continues the work started at #26803 to stabilize the "Global Styles" mechanism in the server, so it can be landed to WordPress core as soon the pieces are ready.

It extracts a new piece that takes care of pulling & merging the data from the different origins that are processed: core, theme, and user. It doesn't change existing behavior.

How to test

  • Make sure existing PHP tests still pass.
  • Install and activate a theme with support for theme.json
  • Make sure it works as expected in the front-end, site-editor, post-editor.

@oandregal oandregal self-assigned this Nov 24, 2020
@oandregal oandregal added the Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json label Nov 24, 2020
@oandregal
Copy link
Member Author

@jorgefilipecosta this is one of those PRs that would benefit from quick landing if the direction makes sense (tweaks can be done in subsequent PRs) to avoid getting caught in tons of rebases!

@github-actions
Copy link

github-actions bot commented Nov 24, 2020

Size Change: +28 B (0%)

Total Size: 1.2 MB

Filename Size Change
build/edit-site/index.js 23.6 kB +3 B (0%)
build/edit-site/style-rtl.css 3.87 kB +13 B (0%)
build/edit-site/style.css 3.87 kB +12 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.8 kB 0 B
build/api-fetch/index.js 3.42 kB 0 B
build/autop/index.js 2.84 kB 0 B
build/blob/index.js 664 B 0 B
build/block-directory/index.js 8.72 kB 0 B
build/block-directory/style-rtl.css 943 B 0 B
build/block-directory/style.css 942 B 0 B
build/block-editor/index.js 133 kB 0 B
build/block-editor/style-rtl.css 11.3 kB 0 B
build/block-editor/style.css 11.3 kB 0 B
build/block-library/editor-rtl.css 8.96 kB 0 B
build/block-library/editor.css 8.96 kB 0 B
build/block-library/index.js 148 kB 0 B
build/block-library/style-rtl.css 8.23 kB 0 B
build/block-library/style.css 8.23 kB 0 B
build/block-library/theme-rtl.css 792 B 0 B
build/block-library/theme.css 793 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/blocks/index.js 48.1 kB 0 B
build/components/index.js 172 kB 0 B
build/components/style-rtl.css 15.3 kB 0 B
build/components/style.css 15.3 kB 0 B
build/compose/index.js 9.95 kB 0 B
build/core-data/index.js 14.8 kB 0 B
build/data-controls/index.js 827 B 0 B
build/data/index.js 8.8 kB 0 B
build/date/index.js 11.2 kB 0 B
build/deprecated/index.js 768 B 0 B
build/dom-ready/index.js 571 B 0 B
build/dom/index.js 4.95 kB 0 B
build/edit-navigation/index.js 11.1 kB 0 B
build/edit-navigation/style-rtl.css 881 B 0 B
build/edit-navigation/style.css 885 B 0 B
build/edit-post/index.js 306 kB 0 B
build/edit-post/style-rtl.css 6.46 kB 0 B
build/edit-post/style.css 6.44 kB 0 B
build/edit-widgets/index.js 26.3 kB 0 B
build/edit-widgets/style-rtl.css 3.13 kB 0 B
build/edit-widgets/style.css 3.13 kB 0 B
build/editor/editor-styles-rtl.css 476 B 0 B
build/editor/editor-styles.css 478 B 0 B
build/editor/index.js 43.3 kB 0 B
build/editor/style-rtl.css 3.85 kB 0 B
build/editor/style.css 3.85 kB 0 B
build/element/index.js 4.62 kB 0 B
build/escape-html/index.js 735 B 0 B
build/format-library/index.js 6.86 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 2.27 kB 0 B
build/html-entities/index.js 623 B 0 B
build/i18n/index.js 3.57 kB 0 B
build/is-shallow-equal/index.js 698 B 0 B
build/keyboard-shortcuts/index.js 2.54 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.1 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.32 kB 0 B
build/notices/index.js 1.81 kB 0 B
build/nux/index.js 3.42 kB 0 B
build/nux/style-rtl.css 671 B 0 B
build/nux/style.css 668 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.43 kB 0 B
build/priority-queue/index.js 790 B 0 B
build/redux-routine/index.js 2.84 kB 0 B
build/reusable-blocks/index.js 2.92 kB 0 B
build/rich-text/index.js 13.3 kB 0 B
build/server-side-render/index.js 2.77 kB 0 B
build/shortcode/index.js 1.69 kB 0 B
build/token-list/index.js 1.27 kB 0 B
build/url/index.js 4.05 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

Copy link
Member

@aristath aristath 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 test this but the code looks good to me 👍

Copy link
Member

@jorgefilipecosta jorgefilipecosta left a comment

Choose a reason for hiding this comment

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

Things seem to work well on my tests 👍

* Class that abstracts the processing
* of the different data sources.
*/
class WP_Theme_JSON_Resolver {
Copy link
Member

Choose a reason for hiding this comment

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

Would it make sense to add some tests to this class?

Copy link
Member Author

Choose a reason for hiding this comment

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

I thought about that but discarded it because I'm not sure if there's a lot of value for this one. This is my rationale: if you look at the methods, all are straightforward calls from WordPress that mostly pull data from sources (files the active theme and core, user data from the CPT, etc). The important logic is in WP_Theme_JSON, for which I already wrote extensive testing.

However, I'm always happy to reconsider it, adding tests is always fun. What would you think needs testing and is not covered yet?

*
* @var WP_Theme_JSON
*/
private $theme = null;
Copy link
Member

Choose a reason for hiding this comment

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

$core and $user are static fields, while $theme is not static. Similarly get_core_origin and get_user_origin and static functions while get_theme_origin. What is the reason to have the difference between core and user and the theme?

Copy link
Member Author

Choose a reason for hiding this comment

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

The idea here is that core & user won't change during a page load while theme can ― hence we can share core&user among all instances while the theme data is per instance. The reason why the theme data can change is that it uses existing theme support data, which can be filtered by 3rd parties ― hence it needs to be recalculated upon every call. Does this make sense?

@oandregal oandregal merged commit 67fc3fa into master Nov 25, 2020
@oandregal oandregal deleted the update/gs-pull-data-mechanism branch November 25, 2020 11:12
@github-actions github-actions bot added this to the Gutenberg 9.5 milestone Nov 25, 2020
@oandregal oandregal mentioned this pull request Nov 26, 2020
82 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Global Styles Anything related to the broader Global Styles efforts, including Styles Engine and theme.json
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants