Expand description
WAI-ARIA Accessible Name and Description Computation, generisch über das
Dokumentmodell aus a11y_dom.
Umsetzung von Accessible Name and Description Computation 1.2 und den Namensregeln aus HTML-AAM 1.0. Gegen die Spezifikation geschrieben, nicht gegen eine vorhandene Implementierung — die Schrittnummern im Quelltext entsprechen denen des Normtexts.
§Warum das nicht nebenbei geht
Eine Näherung aus „Teilbaumtext plus aria-label“ liegt in genau den
Fällen falsch, in denen es darauf ankommt: aria-labelledby löst
Verweisketten auf und kann Knoten heranziehen, die sonst versteckt sind;
ein eingebettetes Steuerelement steuert innerhalb einer Rekursion seinen
Wert bei, nicht seine Beschriftung; und für Rollen wie generic oder
paragraph ist ein Name schlicht verboten.
use a11y_dom::{elements, Arena, Document, Node};
use accname::{name, IdIndex};
let doc = Arena::builder()
.open("form")
.open("span").attr("id", "l").text("Vorname").close()
.open("input").attr("id", "v").attr("aria-labelledby", "l").close()
.close()
.build();
let ids = IdIndex::build(doc.root());
let feld = elements(&doc).find(|n| n.local_name() == "input").unwrap();
assert_eq!(name(feld, &ids).as_deref(), Some("Vorname"));§Grenze ohne Rendering
Schritt 2A der Spezifikation schließt versteckte Knoten aus. Ohne
Rendering-Daten sind nur aria-hidden="true" und das hidden-Attribut
erkennbar — display: none und visibility: hidden nicht. Ein Host mit
a11y_dom::Rendering kann hier genauer sein; dieses Crate bleibt
bewusst bei dem, was ohne Layout entscheidbar ist.
Structs§
- IdIndex
- Nachschlagewerk von ID auf Knoten, plus die
label[for]-Zuordnung.
Functions§
- allows_
name_ from_ content - Ob der Name dieser Rolle aus dem Inhalt des Elements gebildet wird.
- description
- Berechnet die Accessible Description.
- implicit
- Die implizite Rolle des HTML-Elements, ohne Rücksicht auf
role. - name
- Berechnet den Accessible Name.
- name_
is_ prohibited - Ob ein Accessible Name für diese Rolle verboten ist.
- role
- Die berechnete Rolle eines Knotens.