From ae76e02ab22d8d4bb4078632097e49e4536feee1 Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Mon, 13 Jul 2026 15:40:18 -0700 Subject: [PATCH 01/10] Document axe standard and best-practice options MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a section on scoping accessibility checks to a WCAG conformance level (quarto-dev/quarto-cli#14607, quarto-dev/quarto-cli#14682) and updates the CDN note now that axe-core is bundled with Quarto 1.10 (quarto-dev/quarto-cli#14677). Also adds fig-alt to the two example screenshots — an axe site audit of this page flagged them as missing alt text (the bracket text of a figure becomes the caption, not the alt). --- docs/output-formats/html-accessibility.qmd | 43 ++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index ccf6d85fb1..77271e04c6 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -63,6 +63,43 @@ Quarto supports two additional output formats for the accessibility checks, avai This option is equivalent to `axe: true`. +### Checking against a WCAG conformance level + +::: callout-note +The `standard` and `best-practice` options were introduced in Quarto 1.10. +::: + +By default, `axe-core` runs its full default rule set, which combines rules for several WCAG versions and levels with axe's own "best practice" rules. If you are working toward a specific WCAG conformance level, use the `standard` option to check only the rules for that level: + +``` yaml +format: + html: + axe: + output: document + standard: wcag21aa +``` + +The available values name a WCAG version followed by a level: `wcag2a`, `wcag2aa`, `wcag2aaa`, `wcag21a`, `wcag21aa`, `wcag21aaa`, `wcag22a`, `wcag22aa`, and `wcag22aaa`. Each standard is cumulative — it includes the rules for the lower levels and earlier versions it builds on. For example, `standard: wcag21aa` checks the rules for WCAG 2.0 A, 2.0 AA, 2.1 A, and 2.1 AA. + +For the full list of rules, grouped by these same WCAG versions and levels, see `axe-core`'s [rule descriptions](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md); each rule links to a page describing what it checks, why it matters, and how to fix violations. + +Setting `standard` has two effects beyond filtering the checks to the chosen level: + +- Choosing a standard can surface violations the default checks don't report, because `axe-core` keeps a few rules off by default and Quarto enables them when your standard requires them. For example, `standard: wcag2aaa` checks text contrast against the stricter AAA ratio rather than the AA ratio, and `standard: wcag22aa` checks that interactive elements like buttons and links are large enough to tap — a requirement introduced in WCAG 2.2. + +- Axe's best-practice rules — recommendations that aren't required by any WCAG success criterion — are excluded. To check them alongside a standard, add `best-practice: true`: + + ``` yaml + format: + html: + axe: + output: document + standard: wcag21aa + best-practice: true + ``` + +You can also exclude the best-practice rules without choosing a standard by setting `best-practice: false` on its own; the WCAG rules from the default rule set still run. + ## Example: insufficient contrast As a minimal example of how this works in Quarto, consider this simple document: @@ -103,15 +140,15 @@ This violates contrast rules: [insufficient contrast.]{style="color: #111"}. This is the produced result visible on the page: ::: {.light-content} -![The rendered webpage with an accessibility violation warning](images/axe-violation.png) +![The rendered webpage with an accessibility violation warning](images/axe-violation.png){fig-alt="A rendered webpage with an overlay in the bottom right corner reporting a color contrast violation found by axe-core, including the selector of the offending element."} ::: ::: {.dark-content} -![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.autodark} +![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.autodark fig-alt="A rendered webpage with an overlay in the bottom right corner reporting a color contrast violation found by axe-core, including the selector of the offending element."} ::: ## Planned work: automated checks before publishing -Currently, this feature requires users to open the webpage in a [local preview](/docs/websites/index.html#website-preview), and it uses a CDN to load the `axe-core` library itself. +Currently, this feature requires users to open the webpage in a [local preview](/docs/websites/index.html#website-preview). (Before Quarto 1.10, the `axe-core` library was loaded from a CDN; it is now bundled with Quarto, so checks also work offline.) In the future, we envision a mode where every page of a website can be checked at the time of `quarto render` or `quarto publish` in order to reduce the amount of required manual intervention. \ No newline at end of file From f2ceaa47374e772654255cdde08b31c0051e9aac Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Mon, 13 Jul 2026 16:00:06 -0700 Subject: [PATCH 02/10] Clarify that choosing a standard never adds deprecated rules --- docs/output-formats/html-accessibility.qmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index 77271e04c6..552f064fd7 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -85,7 +85,7 @@ For the full list of rules, grouped by these same WCAG versions and levels, see Setting `standard` has two effects beyond filtering the checks to the chosen level: -- Choosing a standard can surface violations the default checks don't report, because `axe-core` keeps a few rules off by default and Quarto enables them when your standard requires them. For example, `standard: wcag2aaa` checks text contrast against the stricter AAA ratio rather than the AA ratio, and `standard: wcag22aa` checks that interactive elements like buttons and links are large enough to tap — a requirement introduced in WCAG 2.2. +- Choosing a standard can surface violations the default checks don't report, because `axe-core` keeps a few rules off by default and Quarto enables them when your standard requires them. For example, `standard: wcag2aaa` checks text contrast against the stricter AAA ratio rather than the AA ratio, and `standard: wcag22aa` checks that interactive elements like buttons and links are large enough to tap — a requirement introduced in WCAG 2.2. Rules that `axe-core` has deprecated are never added, whichever standard you choose. - Axe's best-practice rules — recommendations that aren't required by any WCAG success criterion — are excluded. To check them alongside a standard, add `best-practice: true`: From b39e5e9285f08e08771411d55b4539375f7539ff Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Wed, 29 Jul 2026 13:29:43 -0700 Subject: [PATCH 03/10] Update axe overlay fig-alt to describe severity and conformance label --- docs/output-formats/html-accessibility.qmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index 552f064fd7..72248fd96c 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -140,11 +140,11 @@ This violates contrast rules: [insufficient contrast.]{style="color: #111"}. This is the produced result visible on the page: ::: {.light-content} -![The rendered webpage with an accessibility violation warning](images/axe-violation.png){fig-alt="A rendered webpage with an overlay in the bottom right corner reporting a color contrast violation found by axe-core, including the selector of the offending element."} +![The rendered webpage with an accessibility violation warning](images/axe-violation.png){fig-alt="A rendered webpage with an overlay along the bottom reporting a color contrast violation found by axe-core, including its severity, WCAG conformance level, and the selector of the offending element."} ::: ::: {.dark-content} -![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.autodark fig-alt="A rendered webpage with an overlay in the bottom right corner reporting a color contrast violation found by axe-core, including the selector of the offending element."} +![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.autodark fig-alt="A rendered webpage with an overlay along the bottom reporting a color contrast violation found by axe-core, including its severity, WCAG conformance level, and the selector of the offending element."} ::: ## Planned work: automated checks before publishing From aa622ba6d72c7908f6d6ea590cfed50c8172acd6 Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Wed, 29 Jul 2026 13:39:34 -0700 Subject: [PATCH 04/10] Add prerelease callout for 1.10 axe options --- docs/output-formats/html-accessibility.qmd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index 72248fd96c..350c539add 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -65,6 +65,8 @@ Quarto supports two additional output formats for the accessibility checks, avai ### Checking against a WCAG conformance level +{{< prerelease-callout 1.10 >}} + ::: callout-note The `standard` and `best-practice` options were introduced in Quarto 1.10. ::: From ecd4379d04dc57f3317490f06b25050d007aa4c5 Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Wed, 29 Jul 2026 13:47:48 -0700 Subject: [PATCH 05/10] Remove prerelease callout shortcode --- docs/output-formats/html-accessibility.qmd | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index 350c539add..72248fd96c 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -65,8 +65,6 @@ Quarto supports two additional output formats for the accessibility checks, avai ### Checking against a WCAG conformance level -{{< prerelease-callout 1.10 >}} - ::: callout-note The `standard` and `best-practice` options were introduced in Quarto 1.10. ::: From 67c1f5422296368b68355b01aa67220a752cf992 Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Wed, 29 Jul 2026 14:10:08 -0700 Subject: [PATCH 06/10] Replace introduced-in callout notes with prerelease-callout shortcodes --- docs/output-formats/html-accessibility.qmd | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index 72248fd96c..6e95b4eb19 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -4,9 +4,7 @@ css: - autodark.css --- -::: callout-note -This feature was introduced in Quarto 1.8. -::: +{{< prerelease-callout 1.8 >}} Quarto includes integrated support for [`axe-core`](https://github.com/dequelabs/axe-core), a broadly-supported, open source, industry standard tool for accessibility checks in HTML documents. @@ -65,9 +63,7 @@ Quarto supports two additional output formats for the accessibility checks, avai ### Checking against a WCAG conformance level -::: callout-note -The `standard` and `best-practice` options were introduced in Quarto 1.10. -::: +{{< prerelease-callout 1.10 >}} By default, `axe-core` runs its full default rule set, which combines rules for several WCAG versions and levels with axe's own "best practice" rules. If you are working toward a specific WCAG conformance level, use the `standard` option to check only the rules for that level: From de2aefdae4d0b15e62979abe84f17c8e1c6e9d7f Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Wed, 29 Jul 2026 14:16:03 -0700 Subject: [PATCH 07/10] Simplify --- docs/output-formats/html-accessibility.qmd | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index 6e95b4eb19..b85ba2ab5f 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -77,13 +77,9 @@ format: The available values name a WCAG version followed by a level: `wcag2a`, `wcag2aa`, `wcag2aaa`, `wcag21a`, `wcag21aa`, `wcag21aaa`, `wcag22a`, `wcag22aa`, and `wcag22aaa`. Each standard is cumulative — it includes the rules for the lower levels and earlier versions it builds on. For example, `standard: wcag21aa` checks the rules for WCAG 2.0 A, 2.0 AA, 2.1 A, and 2.1 AA. -For the full list of rules, grouped by these same WCAG versions and levels, see `axe-core`'s [rule descriptions](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md); each rule links to a page describing what it checks, why it matters, and how to fix violations. +For the full list of rules, grouped by these same WCAG versions and levels, see `axe-core`'s [rule descriptions](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md). -Setting `standard` has two effects beyond filtering the checks to the chosen level: - -- Choosing a standard can surface violations the default checks don't report, because `axe-core` keeps a few rules off by default and Quarto enables them when your standard requires them. For example, `standard: wcag2aaa` checks text contrast against the stricter AAA ratio rather than the AA ratio, and `standard: wcag22aa` checks that interactive elements like buttons and links are large enough to tap — a requirement introduced in WCAG 2.2. Rules that `axe-core` has deprecated are never added, whichever standard you choose. - -- Axe's best-practice rules — recommendations that aren't required by any WCAG success criterion — are excluded. To check them alongside a standard, add `best-practice: true`: +When you specify `standard` Axe's best-practice rules are excluded. To check them alongside a standard, add `best-practice: true`: ``` yaml format: @@ -94,7 +90,7 @@ Setting `standard` has two effects beyond filtering the checks to the chosen lev best-practice: true ``` -You can also exclude the best-practice rules without choosing a standard by setting `best-practice: false` on its own; the WCAG rules from the default rule set still run. +You can also exclude the best-practice rules without choosing a standard by setting `best-practice: false` on its own. ## Example: insufficient contrast From b55d4575813d62850adb6780fec459dba8f841fe Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Wed, 29 Jul 2026 14:19:06 -0700 Subject: [PATCH 08/10] Dedent best-practice YAML example left over from removed bullet list --- docs/output-formats/html-accessibility.qmd | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index b85ba2ab5f..b3163afa5c 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -81,14 +81,14 @@ For the full list of rules, grouped by these same WCAG versions and levels, see When you specify `standard` Axe's best-practice rules are excluded. To check them alongside a standard, add `best-practice: true`: - ``` yaml - format: - html: - axe: - output: document - standard: wcag21aa - best-practice: true - ``` +``` yaml +format: + html: + axe: + output: document + standard: wcag21aa + best-practice: true +``` You can also exclude the best-practice rules without choosing a standard by setting `best-practice: false` on its own. From bbd3cfbbc2e55e8371cf66cfb40cfffdb58f19ac Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Thu, 30 Jul 2026 09:40:35 -0700 Subject: [PATCH 09/10] Reorganize accessibility page around interactive and site-wide checks - Promote the interactive workflow to its own section and move the example up into it, with a new DevTools console screenshot for the default axe: true output - Rename Customization to Output location and attach the existing overlay screenshots to output: document - Reframe Planned work as Site-wide accessibility checks - Add capture-axe-devtools.mjs (window-ID capture of headed Chromium with DevTools open) and a console.qmd example page --- .../examples/axe-violation/_quarto.yml | 1 + .../examples/axe-violation/console.qmd | 11 ++ .../scripts/capture-axe-devtools.mjs | 105 ++++++++++++++++ docs/output-formats/html-accessibility.qmd | 119 +++++++++--------- docs/output-formats/images/axe-console.png | Bin 0 -> 105951 bytes 5 files changed, 178 insertions(+), 58 deletions(-) create mode 100644 _tools/screenshots/examples/axe-violation/console.qmd create mode 100644 _tools/screenshots/scripts/capture-axe-devtools.mjs create mode 100644 docs/output-formats/images/axe-console.png diff --git a/_tools/screenshots/examples/axe-violation/_quarto.yml b/_tools/screenshots/examples/axe-violation/_quarto.yml index 2c02f8c89f..e37ebdf0dc 100644 --- a/_tools/screenshots/examples/axe-violation/_quarto.yml +++ b/_tools/screenshots/examples/axe-violation/_quarto.yml @@ -2,6 +2,7 @@ project: type: website render: - index.qmd + - console.qmd website: title: "Axe Violation Example" diff --git a/_tools/screenshots/examples/axe-violation/console.qmd b/_tools/screenshots/examples/axe-violation/console.qmd new file mode 100644 index 0000000000..0914b6eb73 --- /dev/null +++ b/_tools/screenshots/examples/axe-violation/console.qmd @@ -0,0 +1,11 @@ +--- +title: Testing Quarto's accessibility checker +format: + html: + axe: true + include-in-header: + # keep the DevTools console free of a favicon 404 in captures + text: '' +--- + +This violates contrast rules: [insufficient contrast.]{style="color: #eee"}. diff --git a/_tools/screenshots/scripts/capture-axe-devtools.mjs b/_tools/screenshots/scripts/capture-axe-devtools.mjs new file mode 100644 index 0000000000..a9c7644fb6 --- /dev/null +++ b/_tools/screenshots/scripts/capture-axe-devtools.mjs @@ -0,0 +1,105 @@ +// Capture docs/output-formats/images/axe-console.png: a real Chromium window +// with the DevTools console open on the axe `output: console` example. +// +// This can't go through capture.js/manifest.json — Playwright screenshots only +// the page, and the DevTools panel lives outside it. Instead this launches +// headed Chromium with DevTools auto-opened and uses macOS `screencapture -l` +// on the window ID, which composites only that window (other windows can't +// leak in even if they're in front). macOS only. +// +// Usage (from _tools/screenshots/): +// node scripts/render.js examples/axe-violation +// (cd examples/axe-violation/_site && python3 -m http.server 8931) & +// node scripts/capture-axe-devtools.mjs +import { chromium } from "playwright"; +import sharp from "sharp"; +import { mkdirSync, writeFileSync, rmSync, mkdtempSync } from "fs"; +import { execSync } from "child_process"; +import { tmpdir } from "os"; +import path from "path"; +import { fileURLToPath } from "url"; + +const URL = "http://localhost:8931/console.html"; +const W = 1100, H = 650; +const CHROME_PX = 174; // browser chrome height in device px (2x), cropped off +const BOTTOM_PX = 1150; // keep a little space below the console prompt +const repoRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../.."); +const OUT = path.join(repoRoot, "docs/output-formats/images/axe-console.png"); + +const profile = mkdtempSync(path.join(tmpdir(), "axe-devtools-")); +mkdirSync(path.join(profile, "Default"), { recursive: true }); +// Preseed DevTools prefs: dock bottom, Console panel, light theme. +// Keys changed casing across Chrome versions — set both spellings. +writeFileSync( + path.join(profile, "Default", "Preferences"), + JSON.stringify({ + devtools: { + preferences: { + currentDockState: '"bottom"', + "current-dock-state": '"bottom"', + "panel-selectedTab": '"console"', + "panel-selected-tab": '"console"', + uiTheme: '"default"', + "ui-theme": '"default"', + "InspectorView.splitViewState": JSON.stringify({ horizontal: { size: 380 } }), + "inspector-view.split-view-state": JSON.stringify({ horizontal: { size: 380 } }), + }, + }, + // Zoom the DevTools UI so console text stays legible once the image is + // scaled down into the docs page. Zoom level 2 = factor 1.2^2 ≈ 1.44. + partition: { per_host_zoom_levels: { x: { devtools: 2.0 } } }, + }) +); + +const ctx = await chromium.launchPersistentContext(profile, { + headless: false, + viewport: null, + args: ["--auto-open-devtools-for-tabs"], +}); +const page = ctx.pages()[0] ?? (await ctx.newPage()); + +// Pin the OS window to exact bounds via CDP (--window-size is unreliable here). +const cdp = await ctx.newCDPSession(page); +const { windowId } = await cdp.send("Browser.getWindowForTarget"); +await cdp.send("Browser.setWindowBounds", { + windowId, + bounds: { left: 20, top: 40, width: W, height: H, windowState: "normal" }, +}); + +await page.goto(URL); +await page.waitForSelector("[data-quarto-axe-complete]", { timeout: 15000 }); +// The page scrollbar renders as a dark strip at the window edge — hide it. +await page.addStyleTag({ content: "::-webkit-scrollbar{display:none !important}" }); +await page.waitForTimeout(3000); // let DevTools finish painting + +// Find the OS window ID (owner is "Chromium" or "Google Chrome for Testing"). +const jxa = ` +ObjC.import('CoreGraphics'); +const list = ObjC.deepUnwrap(ObjC.castRefToObject( + $.CGWindowListCopyWindowInfo($.kCGWindowListOptionOnScreenOnly, $.kCGNullWindowID))); +const win = list.find(w => /Chrom/.test(w.kCGWindowOwnerName) + && w.kCGWindowBounds && Math.round(w.kCGWindowBounds.Width) === ${W}); +win ? String(win.kCGWindowNumber) : 'NOTFOUND'`; +const winId = execSync(`osascript -l JavaScript -e '${jxa.replace(/'/g, "'\\''")}'`) + .toString().trim(); +if (winId === "NOTFOUND") throw new Error("Chromium window not found"); + +const raw = path.join(profile, "devtools-raw.png"); +execSync(`screencapture -x -o -l ${winId} ${raw}`); +await ctx.close(); + +// Crop off the (dark) browser chrome and the empty console below the prompt; +// trim 8px sides where the window's rounded corners show the background. +const meta = await sharp(raw).metadata(); +await sharp(raw) + .extract({ + left: 8, + top: CHROME_PX, + width: meta.width - 16, + height: Math.min(BOTTOM_PX, meta.height) - CHROME_PX, + }) + .flatten({ background: "#ffffff" }) + .png() + .toFile(OUT); +rmSync(profile, { recursive: true, force: true }); +console.log("wrote", OUT); diff --git a/docs/output-formats/html-accessibility.qmd b/docs/output-formats/html-accessibility.qmd index b3163afa5c..69e3a33edc 100644 --- a/docs/output-formats/html-accessibility.qmd +++ b/docs/output-formats/html-accessibility.qmd @@ -8,9 +8,9 @@ css: Quarto includes integrated support for [`axe-core`](https://github.com/dequelabs/axe-core), a broadly-supported, open source, industry standard tool for accessibility checks in HTML documents. -## Accessibility checks with `axe-core` +## Interactive accessibility checks -To enable the simplest form of accessibility checks in Quarto 1.8, add the `axe` YAML metadata configuration to HTML `format`s (`html`, `dashboard`, and `revealjs`): +To enable the simplest form of accessibility checks, add the `axe` YAML metadata configuration to HTML `format`s (`html`, `dashboard`, and `revealjs`): ``` yaml format: @@ -18,11 +18,53 @@ format: axe: true ``` -In this situation, if your webpage has accessibility violations that `axe-core` can catch, Quarto will produce console messages that are visible by opening your browser's development tools. +Render and open the document in a browser. Accessibility violations will be visible as console messages in your browser's development tools. -### Customization +For example, this document contains a color contrast violation: -Quarto supports two additional output formats for the accessibility checks, available through the `output` option. +::: light-content + +``` markdown +--- +title: Testing Quarto's accessibility checker +format: + html: + axe: true +--- + +This violates contrast rules: [insufficient contrast.]{style="color: #eee"}. +``` + +::: + +::: dark-content + +``` markdown +--- +title: Testing Quarto's accessibility checker +format: + html: + axe: true +--- + +This violates contrast rules: [insufficient contrast.]{style="color: #111"}. +``` + +::: + +Previewing the rendered page and opening the browser's developer tools shows the violation `axe-core` found: + +::: {.light-content} +![The rendered webpage with the developer tools console open](images/axe-console.png){fig-alt="A rendered webpage with the browser developer tools open below it. The console shows messages from axe-core: a violation description reading 'Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds', followed by the selector and HTML of the offending element."} +::: + +::: {.dark-content} +![The rendered webpage with the developer tools console open](images/axe-console.png){.autodark fig-alt="A rendered webpage with the browser developer tools open below it. The console shows messages from axe-core: a violation description reading 'Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds', followed by the selector and HTML of the offending element."} +::: + +### Output location + +Quarto supports three output formats for the accessibility checks, available through the `output` option. - `document`: embedded reports @@ -30,7 +72,7 @@ Quarto supports two additional output formats for the accessibility checks, avai format: html: axe: - output: document + output: document ``` With this option, Quarto will generate a visible report of `axe-core` violations on the webpage itself. Each violation displays its WCAG conformance level (e.g., `WCAG 2.0 AA`), so best-practice findings are distinguishable from genuine WCAG failures. This is useful for visual inspection of a page. Note that with this setting, Quarto will always produce a report. @@ -61,6 +103,16 @@ Quarto supports two additional output formats for the accessibility checks, avai This option is equivalent to `axe: true`. +For the example above, `output: document` places the report on the page itself: + +::: {.light-content} +![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.border fig-alt="A rendered webpage with an overlay along the bottom reporting a color contrast violation found by axe-core, including its severity, WCAG conformance level, and the selector of the offending element."} +::: + +::: {.dark-content} +![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.border .autodark fig-alt="A rendered webpage with an overlay along the bottom reporting a color contrast violation found by axe-core, including its severity, WCAG conformance level, and the selector of the offending element."} +::: + ### Checking against a WCAG conformance level {{< prerelease-callout 1.10 >}} @@ -71,7 +123,6 @@ By default, `axe-core` runs its full default rule set, which combines rules for format: html: axe: - output: document standard: wcag21aa ``` @@ -85,62 +136,14 @@ When you specify `standard` Axe's best-practice rules are excluded. To check the format: html: axe: - output: document standard: wcag21aa best-practice: true ``` You can also exclude the best-practice rules without choosing a standard by setting `best-practice: false` on its own. -## Example: insufficient contrast - -As a minimal example of how this works in Quarto, consider this simple document: - -::: light-content - -``` markdown ---- -title: Testing Quarto's accessibility checker -format: - html: - axe: - output: document ---- - -This violates contrast rules: [insufficient contrast.]{style="color: #eee"}. -``` - -::: - -::: dark-content - -``` markdown ---- -title: Testing Quarto's accessibility checker -format: - html: - axe: - output: document ---- - -This violates contrast rules: [insufficient contrast.]{style="color: #111"}. -``` - -::: - - -This is the produced result visible on the page: - -::: {.light-content} -![The rendered webpage with an accessibility violation warning](images/axe-violation.png){fig-alt="A rendered webpage with an overlay along the bottom reporting a color contrast violation found by axe-core, including its severity, WCAG conformance level, and the selector of the offending element."} -::: - -::: {.dark-content} -![The rendered webpage with an accessibility violation warning](images/axe-violation.png){.autodark fig-alt="A rendered webpage with an overlay along the bottom reporting a color contrast violation found by axe-core, including its severity, WCAG conformance level, and the selector of the offending element."} -::: - -## Planned work: automated checks before publishing +## Site-wide accessibility checks -Currently, this feature requires users to open the webpage in a [local preview](/docs/websites/index.html#website-preview). (Before Quarto 1.10, the `axe-core` library was loaded from a CDN; it is now bundled with Quarto, so checks also work offline.) +The checks above are interactive: they require opening each page in a [local preview](/docs/websites/index.html#website-preview) and inspecting the results in the browser. -In the future, we envision a mode where every page of a website can be checked at the time of `quarto render` or `quarto publish` in order to reduce the amount of required manual intervention. \ No newline at end of file +In the future, we envision a mode where every page of a website can be checked at the time of `quarto render` or `quarto publish` in order to reduce the amount of required manual intervention. diff --git a/docs/output-formats/images/axe-console.png b/docs/output-formats/images/axe-console.png new file mode 100644 index 0000000000000000000000000000000000000000..07f365fc7e1be83567e8e36f4fbbcaf2570517a9 GIT binary patch literal 105951 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

  • VWZaOw`GU&kaSaZ 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 literal 0 HcmV?d00001 From 59e721f8fe27925e9c3e0bf712385085c44e2e3d Mon Sep 17 00:00:00 2001 From: Charlotte Wickham Date: Thu, 30 Jul 2026 09:45:06 -0700 Subject: [PATCH 10/10] Register manual captures in the screenshot manifest Adds a manual array to manifest.json for screenshots capture.js can't produce (currently axe-console, which needs the DevTools panel). The schema validates entries, --list and list.js show them, and --name points at the producing script instead of failing. --- _tools/screenshots/CLAUDE.md | 17 +++++++++++++ _tools/screenshots/capture.js | 13 +++++++++- _tools/screenshots/manifest-schema.json | 18 ++++++++++++++ _tools/screenshots/manifest.json | 12 ++++++++++ _tools/screenshots/scripts/list.js | 32 +++++++++++++++++-------- 5 files changed, 81 insertions(+), 11 deletions(-) diff --git a/_tools/screenshots/CLAUDE.md b/_tools/screenshots/CLAUDE.md index 29bba9c313..5c16a0be5d 100644 --- a/_tools/screenshots/CLAUDE.md +++ b/_tools/screenshots/CLAUDE.md @@ -32,6 +32,23 @@ Use `/screenshot` to walk through the process: 5. Run `npm run capture` to produce the final image 6. Verify output — iterate on manifest/example if needed +## Manual Captures + +Some screenshots can't go through capture.js. They're registered in the +manifest's `manual` array — name, output, the script that produces them, and +why they're manual — so `npm run capture -- --list` and the listing tools show +them, and `npm run capture -- --name ` points at the right script instead +of failing. + +Current manual captures: + +- **axe-console** (`docs/output-formats/images/axe-console.png`) — the browser + DevTools console lives outside the page, so Playwright can't screenshot it. + `scripts/capture-axe-devtools.mjs` launches headed Chromium with DevTools + auto-opened (dock, panel, theme, and zoom preseeded via profile preferences) + and captures the OS window by window ID (macOS only). Prerequisites in the + script header. + ## Tools | Tool | Role | diff --git a/_tools/screenshots/capture.js b/_tools/screenshots/capture.js index 0a2d2fec83..77c1b6ae1a 100644 --- a/_tools/screenshots/capture.js +++ b/_tools/screenshots/capture.js @@ -83,8 +83,9 @@ function matchName(name, pattern) { } const screenshots = manifest.screenshots.filter(s => matchName(s.name, namePattern)); +const manualMatches = (manifest.manual ?? []).filter(s => matchName(s.name, namePattern)); -if (screenshots.length === 0) { +if (screenshots.length === 0 && manualMatches.length === 0) { console.error(`No screenshots match pattern: ${namePattern}`); process.exit(1); } @@ -98,9 +99,19 @@ if (listOnly) { console.log(`${s.name} (dark) → ${s.output.slice(0, ext)}-dark${s.output.slice(ext)}`); } } + for (const m of manualMatches) { + console.log(`${m.name} (manual: node ${m.script}) → ${m.output}`); + } process.exit(0); } +// Manual entries can't be captured by this script — point at theirs. +for (const m of manualMatches) { + console.log(`${m.name}: manual capture — ${m.reason}`); + console.log(` Run: node ${m.script} (see the script header for prerequisites)`); +} +if (screenshots.length === 0) process.exit(0); + // Group by source project (avoid re-rendering the same project) function groupBySource(shots) { const groups = new Map(); diff --git a/_tools/screenshots/manifest-schema.json b/_tools/screenshots/manifest-schema.json index 8718328b9e..7cbd4e2cd1 100644 --- a/_tools/screenshots/manifest-schema.json +++ b/_tools/screenshots/manifest-schema.json @@ -16,6 +16,11 @@ "type": "array", "description": "List of screenshot entries to capture.", "items": { "$ref": "#/$defs/screenshotEntry" } + }, + "manual": { + "type": "array", + "description": "Screenshots capture.js cannot produce; each entry points to the script that does.", + "items": { "$ref": "#/$defs/manualEntry" } } }, "$defs": { @@ -225,6 +230,19 @@ "dark": { "$ref": "#/$defs/darkConfig" } } }, + "manualEntry": { + "type": "object", + "description": "A screenshot produced by a dedicated script instead of capture.js.", + "additionalProperties": false, + "required": ["name", "output", "script", "reason"], + "properties": { + "name": { "type": "string", "description": "Unique identifier, used with --name flag." }, + "output": { "type": "string", "description": "Output path relative to repo root." }, + "script": { "type": "string", "description": "Capture script relative to _tools/screenshots/ (see its header for prerequisites)." }, + "reason": { "type": "string", "description": "Why capture.js cannot produce this screenshot." }, + "doc": { "$ref": "#/$defs/docConfig" } + } + }, "screenshotEntry": { "type": "object", "description": "A single screenshot definition.", diff --git a/_tools/screenshots/manifest.json b/_tools/screenshots/manifest.json index d06320f17f..04cd0666f2 100644 --- a/_tools/screenshots/manifest.json +++ b/_tools/screenshots/manifest.json @@ -307,5 +307,17 @@ "alt": "Reader mode toggle appearing in the top navigation. The navbar shows dark mode, reader mode, and search icons. Below the navbar, an 'On this page' collapsed dropdown replaces the usual table of contents." } } + ], + "manual": [ + { + "name": "axe-console", + "output": "docs/output-formats/images/axe-console.png", + "script": "scripts/capture-axe-devtools.mjs", + "reason": "Shows the browser DevTools console, which lives outside the page — Playwright can only screenshot the page itself.", + "doc": { + "file": "docs/output-formats/html-accessibility.qmd", + "alt": "The rendered webpage with the browser DevTools console open, showing the axe-core violation description, selector, and offending element HTML" + } + } ] } diff --git a/_tools/screenshots/scripts/list.js b/_tools/screenshots/scripts/list.js index dee66a55ee..41329ccee0 100644 --- a/_tools/screenshots/scripts/list.js +++ b/_tools/screenshots/scripts/list.js @@ -17,16 +17,18 @@ if (process.argv.includes('--name') && (!namePattern || namePattern.startsWith(' process.exit(1); } -const filtered = namePattern - ? manifest.screenshots.filter(s => { - if (namePattern.includes('*')) { - const escaped = namePattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&'); - const re = new RegExp('^' + escaped.replace(/\*/g, '.*') + '$'); - return re.test(s.name); - } - return s.name === namePattern; - }) - : manifest.screenshots; +function matchName(name) { + if (!namePattern) return true; + if (namePattern.includes('*')) { + const escaped = namePattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&'); + const re = new RegExp('^' + escaped.replace(/\*/g, '.*') + '$'); + return re.test(name); + } + return name === namePattern; +} + +const filtered = manifest.screenshots.filter(s => matchName(s.name)); +const manual = (manifest.manual ?? []).filter(m => matchName(m.name)); console.log(`### ${filtered.length} screenshot(s) in manifest\n`); for (const s of filtered) { @@ -40,3 +42,13 @@ for (const s of filtered) { if (s.capture?.interaction?.length) console.log(` Interactions: ${s.capture.interaction.length} step(s)`); console.log(); } + +if (manual.length) { + console.log(`### ${manual.length} manual capture(s) — not produced by capture.js\n`); + for (const m of manual) { + console.log(`- **${m.name}** → \`${m.output}\``); + console.log(` Script: \`node ${m.script}\` (see its header for prerequisites)`); + console.log(` Why manual: ${m.reason}`); + console.log(); + } +}