Skip to content

feat(bulk-editor): link the row title to the post editor#23434

Open
JorPV wants to merge 2 commits into
trunkfrom
bulk-editor/clickable-title
Open

feat(bulk-editor): link the row title to the post editor#23434
JorPV wants to merge 2 commits into
trunkfrom
bulk-editor/clickable-title

Conversation

@JorPV

@JorPV JorPV commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Context

Implements Yoast/reserved-tasks#1303: in the bulk editor, the post/page title in each row should be a link to that post's editor screen, with a hover state. The title now links to the single post editor screen (falling back to plain text when the item has no edit link).

Summary

This PR can be summarized in the following changelog entry:

  • Makes the bulk editor row title a link to the post editor.

Relevant technical choices:

  • Hover treatment copied from the dashboard Task list — an animated pseudo-element underline (::after, fades in via opacity) plus a slate-800 → slate-900 text darkening. A pseudo-element is used because text-decoration cannot animate.
  • Visited state pinned across all states — the title is a real <a>, so ui-library's .yst-root a:visited / a:hover:visited link styling would otherwise tint followed links magenta. The rules include :visited / :hover:visited / :focus-visible:visited selectors that outrank it, so followed links match unvisited ones.
  • Focus indicator kept for keyboard users — the focus ring is dropped only for pointer clicks (:focus:not(:focus-visible)), and the underline also appears on :focus-visible, preserving WCAG 2.4.7.

Test instructions

Test instructions for the acceptance test before the PR gets merged

This PR can be acceptance tested by following these steps:

  • Go to Yoast SEO → Tools → Bulk editor.
  • Confirm each row's title is a link; clicking it opens that post's editor screen.
  • Smoke test it with different editors (Classic, Block, etc.)
  • Hover a title: the text darkens slightly and an underline fades in (no underline at rest).
  • Visit a post, return to the bulk editor, and confirm the followed title link is the same dark colour as the others (not a magenta "visited" colour), both at rest and on hover.
  • Tab to a title with the keyboard: confirm it shows a visible focus indicator.

Relevant test scenarios

  • Changes should be tested with the browser console open
  • Changes should be tested on different posts/pages/taxonomies/custom post types/custom taxonomies
  • Changes should be tested on different editors (Default Block/Gutenberg/Classic/Elementor/other)
  • Changes should be tested on different browsers
  • Changes should be tested on multisite

Test instructions for QA when the code is in the RC

  • QA should use the same steps as above.

QA can test this PR by following these steps:

  • Not applicable — the bulk editor feature is unreleased; this is a non-user-facing enhancement within it.

Impact check

This PR affects the following parts of the plugin, which may require extra testing:

  • The bulk editor table (title cell) and its page stylesheet only. No change to data, saving, or endpoints.

Other environments

  • This PR also affects Shopify. I have added a changelog entry starting with [shopify-seo], added test instructions for Shopify and attached the Shopify label to this PR.
  • This PR also affects Yoast SEO for Google Docs. I have added a changelog entry starting with [yoast-doc-extension], added test instructions for Yoast SEO for Google Docs and attached the Google Docs Add-on label to this PR.

Documentation

  • I have written documentation for this change. (Code comments.)

Quality assurance

  • I have tested this code to the best of my abilities.
  • During testing, I had activated all plugins that Yoast SEO provides integrations for.
  • I have added unit tests to verify the code works as intended.
  • If any part of the code is behind a feature flag, my test instructions also cover cases where the feature flag is switched off.
  • I have written this PR in accordance with my team's definition of done.
  • I have checked that the base branch is correctly set.

Innovation

  • No innovation project is applicable for this PR.
  • This PR falls under an innovation project. I have attached the innovation label.
  • I have added my hours to the WBSO document.

Fixes Yoast/reserved-tasks#1303

@JorPV JorPV added innovation Innovative issue. Relating to performance, memory or data-flow. changelog: non-user-facing Needs to be included in the 'Non-userfacing' category in the changelog labels Jul 3, 2026
@JorPV JorPV requested a review from Copilot July 3, 2026 13:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds an editor link to each bulk editor row title (with a plain-text fallback when no edit link is available), plus styling for hover/focus and a unit test to lock the behavior in.

Changes:

  • Render the bulk editor row title as an <a> to the post edit screen when editLink is present; otherwise render plain text.
  • Add bulk-editor page CSS for hover/focus-visible underline + visited-state overrides.
  • Add a unit test covering link rendering and the no-link fallback.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.

File Description
packages/js/tests/bulk-editor/bulk-editor-table.test.js Adds coverage ensuring titles render as links when an edit URL exists and as plain text when it doesn’t.
packages/js/src/bulk-editor/components/table/table-cells.js Updates TitleCell to conditionally render the title as an anchor to the edit screen.
css/src/bulk-editor-page.css Implements the link’s hover/focus-visible underline animation and prevents visited-link tinting.

@coveralls

Copy link
Copy Markdown

Coverage Report for CI Build 11

Coverage decreased (-5.8%) to 45.848%

Details

  • Coverage decreased (-5.8%) from the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 61399
Covered Lines: 29525
Line Coverage: 48.09%
Relevant Branches: 11965
Covered Branches: 4111
Branch Coverage: 34.36%
Branches in Coverage %: Yes
Coverage Strength: 6.82 hits per line

💛 - Coveralls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog: non-user-facing Needs to be included in the 'Non-userfacing' category in the changelog innovation Innovative issue. Relating to performance, memory or data-flow.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants