Skip to content

Make the tool choosers consistent - #2258

Merged
cwickham merged 2 commits into
mainfrom
fix/tool-chooser-consistency
Oct 2, 2026
Merged

cwickham merged 2 commits into
mainfrom
fix/tool-chooser-consistency

Conversation

@cwickham

@cwickham cwickham commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

The five "Choose your tool" interfaces had different labels and markup, and copied CSS and JS. This PR makes them consistent.

  • Get started, manuscripts and extensions: a new page-chooser shortcode (_extensions/page-chooser/) replaces three copies of the markup, CSS and script. Each chooser is now a <nav> named by a visible label, with aria-current on the active page. The items are in _metadata.yml.
  • tools-tabset: aria-labelledby on the visible label replaces aria-hidden plus aria-label. A selected tab no longer changes size.
  • Landing cards: role="button" is removed from the links. The manuscripts logos are decorative (alt=""). The cards now show a visible focus ring (WCAG 2.4.7).
  • CSS: the inline <style> in the extensions chooser is removed. The .tool rules are the same in both tutorial.css files, and these rules no longer apply to other links on the page.
  • "Editor" is now "Text Editor" in the get-started chooser, the same as on the landing page.

An axe scan of the same 32 pages before and after the change shows no new findings. Screenshots below.

Where to check

Related: #2222. This PR adds new files and changes filters/tools-tabset.lua, which #2222 renames. There is one small conflict in styles.css.

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

📝 Preview Deployment

🔍 Full site preview: https://deploy-preview-2258.quarto.org

🔄 Modified Documents

@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

📝 Preview Deployment

🔍 Full site preview: https://deploy-preview-2258.quarto.org

🔄 Modified Documents

@cwickham
cwickham marked this pull request as ready for review October 2, 2026 15:26
@cwickham
cwickham merged commit dab304a into main Oct 2, 2026
3 checks passed
@cwickham
cwickham deleted the fix/tool-chooser-consistency branch October 2, 2026 15:26
@github-actions

github-actions Bot commented Oct 2, 2026

Copy link
Copy Markdown
Contributor

Backport failed for prerelease, because it was unable to cherry-pick the commit(s).

Please cherry-pick the changes locally and resolve any conflicts.

git fetch origin prerelease
git worktree add -d .worktree/sync-2258-to-prerelease origin/prerelease
cd .worktree/sync-2258-to-prerelease
git switch --create sync-2258-to-prerelease
git cherry-pick -x dab304ac66444f870c8950bfa3a9c42d8a641120

cwickham added a commit that referenced this pull request Oct 6, 2026
* Fix skipped heading levels in markdown headings (#2227)

* Heading order fixes

* Remove extra h1 and reflow

* Fix headings that should have been "captions"

* Update freeze

(cherry picked from commit c56f6cb)

* Fix contrast of the extensions chooser and listing description links (#2235)

* Use the theme link color for the extensions category chooser

The chooser tiles hard-coded #5092dd, which is 3.23:1 on white (WCAG 1.4.3 needs 4.5:1). var(--bs-link-color) gives 5.15:1 in light mode and 7.27:1 in dark mode. Clears axe color-contrast-0f9515 (20 instances on 5 pages).

* Underline links in listing-table descriptions

Quarto's listing-table styles remove link underlines, so description links rely on color alone: 2.23:1 against body text, short of the 3:1 WCAG 1.4.1 needs. Clears axe link-in-text-block-82c7eb and the extensions-page instances of link-in-text-block-7b0c90.

(cherry picked from commit e26940f)

* Make the tool choosers consistent (#2258)

* Make the tool choosers consistent with a shared page-chooser shortcode

* Use --bs-border-color for chooser tiles in light mode

(cherry picked from commit dab304a)

* Close the listing-link rule so the visually-hidden code rule applies again (#2257)

#2235 left out the closing brace of the listing-description link rule.
Browsers then read the #2234 rule for screen-reader-only code blocks as a
nested rule that never matches, and the blocks became scrollable regions
again (axe scrollable-region-focusable).

(cherry picked from commit 6f27b3f)

* fix(a11y): give embedded videos an iframe title (#2141)

Screen readers announce an iframe by its title. The video shortcode
emits title="" when the author omits the title argument, so these two
embeds failed axe's frame-title check (serious, WCAG 2.0 A, SC 4.1.2).

Add title="CERN: The Journey of Discovery" to the two live {{< video >}}
calls, and to the escaped copies the same pages display as source, so
the shown example matches the rendered output. In tables.qmd the call
sits inside a data-qmd="..." attribute, so the title uses single quotes.

(cherry picked from commit ccf7a9e)
cderv added a commit that referenced this pull request Oct 16, 2026
…2293)

* Merge sync PRs to prerelease right away and retry failed backports

Since the v1.10 release merge, every auto-backport to prerelease has failed, and the fixes reached prerelease only through manual backports weeks later.
Most failures were an ordering race rather than real divergence: sync PRs stay open for minutes to hours, and a second PR to main touching the same file is cherry-picked onto a prerelease that does not have the first change yet.
#2141 conflicted on a freeze file because the sync PR of #2138 merged 19 seconds after it.
Failed backports are never retried, so each one then breaks every later PR on the same files (#2227 after #2141, #2258 and #2257 after #2235).

The workflow now merges a clean sync PR immediately and publishes prerelease itself, since a merge made with GITHUB_TOKEN does not fire the push event publish.yml listens to.
A failed backport labels the source PR backport-failed, so the missing changes are listable instead of buried in bot comments.
After each sync merge, and after any manual merge into prerelease, the workflow comments /sync-prerelease on the oldest labeled PR, so a backport that only waited on an earlier change applies on its own.

No concurrency group: GitHub cancels a pending run when another queues, which would drop backports silently when several PRs merge within minutes.
The cost of merging without review is that a main-only PR now needs the no-sync-prerelease label before it merges, where it used to be enough to leave the sync PR unmerged.

* Label sync PRs that fail to merge

A sync PR can also fail to merge when prerelease moves between the cherry-pick and the merge.
That backport now gets the backport-failed label too, instead of being missed by the list and the retry.
The open sync PR is left for a manual merge.

Publishing no longer depends on the label cleanup succeeding after the merge, since nothing else publishes a GITHUB_TOKEN merge.

* Retry the oldest failed backport even past 30 labeled PRs

gh pr list returns at most 30 results by default, newest first, so
with more labeled PRs the sort only saw the newest 30 and the oldest
backport, often the one the others wait on, would never be retried.
github-actions Bot added a commit that referenced this pull request Oct 16, 2026
…2293) (#2295)

* Merge sync PRs to prerelease right away and retry failed backports

Since the v1.10 release merge, every auto-backport to prerelease has failed, and the fixes reached prerelease only through manual backports weeks later.
Most failures were an ordering race rather than real divergence: sync PRs stay open for minutes to hours, and a second PR to main touching the same file is cherry-picked onto a prerelease that does not have the first change yet.
#2141 conflicted on a freeze file because the sync PR of #2138 merged 19 seconds after it.
Failed backports are never retried, so each one then breaks every later PR on the same files (#2227 after #2141, #2258 and #2257 after #2235).

The workflow now merges a clean sync PR immediately and publishes prerelease itself, since a merge made with GITHUB_TOKEN does not fire the push event publish.yml listens to.
A failed backport labels the source PR backport-failed, so the missing changes are listable instead of buried in bot comments.
After each sync merge, and after any manual merge into prerelease, the workflow comments /sync-prerelease on the oldest labeled PR, so a backport that only waited on an earlier change applies on its own.

No concurrency group: GitHub cancels a pending run when another queues, which would drop backports silently when several PRs merge within minutes.
The cost of merging without review is that a main-only PR now needs the no-sync-prerelease label before it merges, where it used to be enough to leave the sync PR unmerged.

* Label sync PRs that fail to merge

A sync PR can also fail to merge when prerelease moves between the cherry-pick and the merge.
That backport now gets the backport-failed label too, instead of being missed by the list and the retry.
The open sync PR is left for a manual merge.

Publishing no longer depends on the label cleanup succeeding after the merge, since nothing else publishes a GITHUB_TOKEN merge.

* Retry the oldest failed backport even past 30 labeled PRs

gh pr list returns at most 30 results by default, newest first, so
with more labeled PRs the sort only saw the newest 30 and the oldest
backport, often the one the others wait on, would never be retried.

(cherry picked from commit 35c61f4)

Co-authored-by: Christophe Dervieux <christophe.dervieux@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant