a11y-rules
Accessibility-Regeln, generisch über das Dokumentmodell aus
a11y-dom. Teil von
a11y-core.
Ein Regelbestand, mehrere Oberflächen: Build-Zeit, CI/Crawl und die laufende Seite — mit identischen Regelkennungen und identischem JSON.
Nicht gelaufen ist nicht bestanden
run läuft mit dem, was der Host liefert, und hält für jede Regel fest, ob sie
laufen konnte. Eine Tier-2-Regel auf einem Host ohne Semantics erzeugt keinen
stillen Nicht-Befund, sondern einen Vermerk mit NotRun::CapabilityMissing.
use Arena;
use run;
let doc = builder
.open.open
.open.attr.close
.close.close
.build;
let report = run;
assert!;
// Nicht beurteilt: die Tier-2- und Tier-3-Regeln, weil dieser Host weder
// Semantik noch Darstellung liefert.
assert_eq!;
Mit einem Host, der Semantics erfüllt, laufen die über run_with_semantics
mit; ein Host mit Semantics und Rendering nimmt run_full. Die Trennung
ist keine Formalie: Regeln, die einen echten Accessible Name brauchen — Links,
Buttons, SVG —, dürfen ohne ihn nicht raten, und Kontrast lässt sich aus
statischem Markup überhaupt nicht bestimmen.
| Host liefert | Einstieg |
|---|---|
| nur Struktur | run |
| + Semantik | run_with_semantics |
| + Darstellung | run_with_rendering |
| beides | run_full |
Eine Namensmenge für Befunde und Vermerke
Meta::ids deklariert alle Befund-Kennungen, die eine Regel erzeugen kann,
und RuleRun wird je Kennung geführt. Damit benutzen rule_runs und findings
dieselbe Namensmenge und lassen sich über rule_id verbinden.
In 0.1.0 war das getrennt: Vermerke trugen eine übergeordnete Regelkennung
(images/alt), Befunde die spezifische (images/alt-missing). Ein Join lieferte
stillschweigend nichts. Zwei Tests sichern die Zusicherung jetzt ab — jede
erzeugte Kennung muss deklariert sein, und jeder Befund muss einen passenden
Vermerk haben.
Regeln
Tier 1 (Struktur), 25 Kennungen: document/lang-missing,
document/lang-invalid, document/title-missing, document/title-empty,
zoom/viewport-locked, zoom/viewport-scale-limited, headings/empty,
headings/skip-level, headings/h1-missing, images/alt-missing,
images/alt-suspicious, forms/label-missing, forms/placeholder-as-label,
aria/role-invalid, aria/role-abstract, aria/reference-missing,
ids/duplicate, keyboard/positive-tabindex, keyboard/hidden-focusable,
lists/invalid-structure, lists/empty, lists/term-without-definition,
lists/item-outside-list,
tables/header-missing, tables/name-missing,
tables/presentational-with-headers.
Tier 2 (Semantik), 4 Kennungen: links/name-missing,
buttons/name-missing, svg/name-missing, links/ambiguous-name.
Tier 3 (Darstellung), 2 Kennungen: contrast/text-insufficient,
contrast/text-undetermined.
Zu Tier 3 gehört eine Auflage an den Host: ComputedStyle::background_color ist
die effektive Hintergrundfarbe, über die Vorfahren aufgelöst. Kann der Host
sie nicht bestimmen — Hintergrundbild, Verlauf, background-blend-mode —,
liefert er None, und die Regel meldet contrast/text-undetermined mit
UNTESTED. Eine Prüfung gegen geratenes Weiß wäre schlimmer als keine Aussage:
Sie erzeugt ein PASS, auf das sich jemand verlässt.
Lizenz
MIT.