Global Styles: Resolve link element styles in block inspector controls for blocks that are links - #80607
Conversation
…s for blocks that are links
|
Size Change: +103 B (0%) Total Size: 7.75 MB 📦 View Changed
|
|
Flaky tests detected in f293b7e. 🔍 Workflow run URL: https://github.com/WordPress/gutenberg/actions/runs/29983421767
|
ramonjd
left a comment
There was a problem hiding this comment.
This is working great for me, thanks for getting it up!
| Before | After |
|---|---|
![]() |
![]() |
Only site title wasn't working the way I expected both stand alone and in a query:
It was showing the text fallbacks (but not my link styles)
Not sure how tricky the following blocks are as well: tag-cloud, categories, archives. They contain <a> elements. Potential follow up.
Looking just at tag-cloud, it's server-side generated.
| * and the pagination links render `<a>` as their whole selves). Blocks that | ||
| * merely *contain* a link — the heading family, Paragraph, Group, and the | ||
| * hybrid blocks with a Link colour control (Post Author Name, Post Date, …) — | ||
| * get no `link` layer: their inner-link control reads the |
There was a problem hiding this comment.
What does "get no link layer" mean here. Is it for blocks that have an isLink attribute (and control)?
For post author name, for example: /packages/block-library/src/post-author-name/block.json
There was a problem hiding this comment.
Link "layer" here (the terminology isn't the best) refers to the layering from root to element to block and so on of the styles inheritance. So the goal of this comment is to try to capture that concept here:
I.e. we have a function called getElementLayers that returns a structure of elements that the block can use to resolve the hierarchy. These new additions "get" the link layer, and this comment is attempting to explain why some blocks rely on the inherited pass through of the link element color, whereas some get the explicit treatment here.
Gosh, this is hard to word... I'm not sure if my comment here is more opaque than the nudging I got Claude to do on this JSDoc!
Hope that somehow makes some sense.
There was a problem hiding this comment.
There was a problem hiding this comment.
You did great. Thanks for the explainer 😄
|
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message. To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
Co-authored-by: Ramon <ramonjd@users.noreply.github.com>
Thanks for flagging this, I think this one is hybrid as it can be both a heading and a link, I think I'll leave that to a follow-up exploration if it's okay!
Good catches — I might leave these for follow-ups, too, and jot down any notes in the linked issue 👍 |
Sounds good! |
…s for blocks that are links (#80607) * Global Styles: Resolve link element styles in block inspector controls for blocks that are links * Add url to changelog entry Co-authored-by: Ramon <ramonjd@users.noreply.github.com> --------- Co-authored-by: andrewserong <andrewserong@git.wordpress.org> Co-authored-by: ramonjd <ramonopoly@git.wordpress.org>
|
I just cherry-picked this PR to the wp/7.1 branch to get it included in the next release: ed5daaf |
This updates the pinned commit hash of the Gutenberg repository from `4997026b75c922d8a6f77a03d72ed7cad04c7073` to `fd715a6833679d098d9fee84b642f8f1bc27341b`. A full list of changes included in this commit can be found on GitHub: WordPress/gutenberg@4997026...fd715a6 - Update view config API versioning (WordPress/gutenberg#80319) - Perf Tests: Fix 'Selecting blocks' metric reporting 0 ms (WordPress/gutenberg#80524) - Notes: Register the inline note format at import time (WordPress/gutenberg#80576) - Media: Stop forcing crossorigin on IMG tags in media templates (WordPress/gutenberg#80532) - GradientPicker: select by slug so two presets sharing a gradient keep their identity (WordPress/gutenberg#80554) - Media Editor: Show a loading state while the cropped file loads (WordPress/gutenberg#80460) - Remove default paragraph from tab-panel template (WordPress/gutenberg#80565) - Global Styles: Resolve link element styles in block inspector controls for blocks that are links (WordPress/gutenberg#80607) - Media REST API: Backport sideload from url path upload size check (WordPress/gutenberg#80659) - Rich text: remove tabIndex from editable elements again to fix shift+click selection (WordPress/gutenberg#80651) - Gallery: make dynamic mode conversion a single undo level (WordPress/gutenberg#80665) - Background image control: Remove duplicated focus ring (WordPress/gutenberg#80671) - Detach core's note mention kses filter in the baseline strip test (WordPress/gutenberg#80656) - wp-build: sync the page template preload field list with core-data (WordPress/gutenberg#80648) - Read the contentEditable attribute in ownsSelection, not isContentEditable (WordPress/gutenberg#80549) - Writing flow: extend block selections with shift+arrow when there is no native selection (WordPress/gutenberg#80687) - Notes: Capture the target block before saving a block-level note (WordPress/gutenberg#80690) - Theme JSON: Level block-level preset class specificity with :where() (WordPress/gutenberg#80657) - Notes: Sync the sidebar selection to the inline marker under the caret (WordPress/gutenberg#80610) - Writing flow: use isMultiSelecting for shift+click (WordPress/gutenberg#80286) (WordPress/gutenberg#80726) - Block supports: Return from layout support before resolving global settings (WordPress/gutenberg#80771) - Notes: Report save success consistently from note actions (WordPress/gutenberg#80748) - Dynamic Gallery: Rename toolbar button to Detach and add a modal explaining what will happen (WordPress/gutenberg#80727) (WordPress/gutenberg#80774) - ToolsPanel: Migrate styles to an SCSS Module (WordPress/gutenberg#80445) (WordPress/gutenberg#80800) - Add a responsiveEditingEnabled editor setting to hide the Responsive styles option (WordPress/gutenberg#80814) - iOS: remove jumping hack, add typewriter (WordPress/gutenberg#74596) - Writing flow: stop the page scrolling on caret moves within blocks taller than the viewport (WordPress/gutenberg#80708) - Global Styles: Put the inheritance UI behind a Gutenberg experiment (… (WordPress/gutenberg#80818) - Notes: Cancel in-flight hover highlight when focus leaves a note thread (WordPress/gutenberg#80752) - Block Editor: Try to fix typing performance regression (WordPress/gutenberg#80507) - List Block: Preserve ordered type on indent (WordPress/gutenberg#75353) - Make editableRoot a private block setting Symbol, not a public support (WordPress/gutenberg#80820) - Fix cursor position during forward delete of empty blocks (WordPress/gutenberg#80827) - Navigation: Fixes `aria-expanded` not updating on hover submenu inside overlay (WordPress/gutenberg#80828) - Remove redundant @jest-environment jsdom pragma and lint against it (WordPress/gutenberg#80676) - View config: reject shape-mismatched merges, define empty-array semantics, strip nulls from appended members (WordPress/gutenberg#80829) - Editor: leave undo to the browser in fields that handle their own undo (WordPress/gutenberg#80768) - Fix: New route-based admin pages are empty when no JS (WordPress/gutenberg#80839) Props wildworks. See #65529. git-svn-id: https://develop.svn.wordpress.org/trunk@62896 602fd350-edb4-49c9-b593-d223f7449a82
This updates the pinned commit hash of the Gutenberg repository from `4997026b75c922d8a6f77a03d72ed7cad04c7073` to `fd715a6833679d098d9fee84b642f8f1bc27341b`. A full list of changes included in this commit can be found on GitHub: WordPress/gutenberg@4997026...fd715a6 - Update view config API versioning (WordPress/gutenberg#80319) - Perf Tests: Fix 'Selecting blocks' metric reporting 0 ms (WordPress/gutenberg#80524) - Notes: Register the inline note format at import time (WordPress/gutenberg#80576) - Media: Stop forcing crossorigin on IMG tags in media templates (WordPress/gutenberg#80532) - GradientPicker: select by slug so two presets sharing a gradient keep their identity (WordPress/gutenberg#80554) - Media Editor: Show a loading state while the cropped file loads (WordPress/gutenberg#80460) - Remove default paragraph from tab-panel template (WordPress/gutenberg#80565) - Global Styles: Resolve link element styles in block inspector controls for blocks that are links (WordPress/gutenberg#80607) - Media REST API: Backport sideload from url path upload size check (WordPress/gutenberg#80659) - Rich text: remove tabIndex from editable elements again to fix shift+click selection (WordPress/gutenberg#80651) - Gallery: make dynamic mode conversion a single undo level (WordPress/gutenberg#80665) - Background image control: Remove duplicated focus ring (WordPress/gutenberg#80671) - Detach core's note mention kses filter in the baseline strip test (WordPress/gutenberg#80656) - wp-build: sync the page template preload field list with core-data (WordPress/gutenberg#80648) - Read the contentEditable attribute in ownsSelection, not isContentEditable (WordPress/gutenberg#80549) - Writing flow: extend block selections with shift+arrow when there is no native selection (WordPress/gutenberg#80687) - Notes: Capture the target block before saving a block-level note (WordPress/gutenberg#80690) - Theme JSON: Level block-level preset class specificity with :where() (WordPress/gutenberg#80657) - Notes: Sync the sidebar selection to the inline marker under the caret (WordPress/gutenberg#80610) - Writing flow: use isMultiSelecting for shift+click (WordPress/gutenberg#80286) (WordPress/gutenberg#80726) - Block supports: Return from layout support before resolving global settings (WordPress/gutenberg#80771) - Notes: Report save success consistently from note actions (WordPress/gutenberg#80748) - Dynamic Gallery: Rename toolbar button to Detach and add a modal explaining what will happen (WordPress/gutenberg#80727) (WordPress/gutenberg#80774) - ToolsPanel: Migrate styles to an SCSS Module (WordPress/gutenberg#80445) (WordPress/gutenberg#80800) - Add a responsiveEditingEnabled editor setting to hide the Responsive styles option (WordPress/gutenberg#80814) - iOS: remove jumping hack, add typewriter (WordPress/gutenberg#74596) - Writing flow: stop the page scrolling on caret moves within blocks taller than the viewport (WordPress/gutenberg#80708) - Global Styles: Put the inheritance UI behind a Gutenberg experiment (… (WordPress/gutenberg#80818) - Notes: Cancel in-flight hover highlight when focus leaves a note thread (WordPress/gutenberg#80752) - Block Editor: Try to fix typing performance regression (WordPress/gutenberg#80507) - List Block: Preserve ordered type on indent (WordPress/gutenberg#75353) - Make editableRoot a private block setting Symbol, not a public support (WordPress/gutenberg#80820) - Fix cursor position during forward delete of empty blocks (WordPress/gutenberg#80827) - Navigation: Fixes `aria-expanded` not updating on hover submenu inside overlay (WordPress/gutenberg#80828) - Remove redundant @jest-environment jsdom pragma and lint against it (WordPress/gutenberg#80676) - View config: reject shape-mismatched merges, define empty-array semantics, strip nulls from appended members (WordPress/gutenberg#80829) - Editor: leave undo to the browser in fields that handle their own undo (WordPress/gutenberg#80768) - Fix: New route-based admin pages are empty when no JS (WordPress/gutenberg#80839) Props wildworks. See #65529. Built from https://develop.svn.wordpress.org/trunk@62896 git-svn-id: http://core.svn.wordpress.org/trunk@62163 1a063a9b-81f0-0310-95a4-ce76da25c4cd



Part of:
Follows:
What?
Very similar to #80495 that added the logic to resolve per-heading element styles in block inspector controls, this PR takes the same approach but adds
linkfor those core blocks that are links. As a result the included blocks will now reflect root typography link values set in global styles. I.e. a good example is setting Links > Typography > Appearance in global styles and seeing that the value is now reflected as an inherited value in the block inspector for the blocks included in this PR.Out of scope for this PR: parent / ancestor blocks that define element styles.
Why?
Without this many of these blocks will show element color hierarchy in the editor but the typography controls display as if nothing is set in global styles. For these blocks that effectively are links, we should do our best to reflect element typography values in the UI.
Note that this only applies to some of the blocks in the linked issue. The purpose here is to iteratively add the behaviour, and these were the simplest ones to implement as they effectively are links. Included blocks:
How?
getElementLayersfunction to also include the list of core blocks that should be treated as linksTesting Instructions
Extra Bold Italicin TT5 so that it's obviousThe following Claude-generated table gives an overview of what can be made visible thanks to this PR
linkfold can surfaceread-moreloginoutpost-navigation-linkpost-comments-linkquery-pagination-next/-previous/-numberscomments-pagination-next/-previous/-numberscomment-edit-linkcomment-reply-linkTo test these blocks out, you can do so manually, or use the following markup to add to a post or page for testing.
Test markup that includes the affected blocks
Screenshots or screencast
On trunk, note that Appearance looks as if it's empty:
Whereas in this branch it shows a default value when it's set at the link level in global styles:
Use of AI Tools
Claude Code with lots of manual verification