1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//! Was von einer Seite wahrnehmbar ist — als Aufnahme, als Projektion, als
//! Differenz zweier Aufnahmen.
//!
//! Dieses Crate berechnet, es erhebt nicht. Es öffnet keine Seite, spricht kein
//! Chrome DevTools Protocol und liest kein DOM. Ein Host übergibt einen
//! Accessibility-Tree samt Fokuszustand; was daraus folgt, steht hier:
//!
//! | Baustein | Frage, die er beantwortet |
//! |---|---|
//! | [`AXTree`], [`AXNode`] | was steht im Baum, und wie finde ich einen Knoten wieder |
//! | [`AXSnapshot`], [`FocusSnapshot`] | wie sah ein bestimmter Zeitpunkt aus |
//! | [`AXTreeDiff`] | was hat eine Handlung wahrnehmbar verändert |
//! | [`linearize`], [`ReadingItem`] | in welcher Reihenfolge fände ein Screenreader das vor |
//! | [`announce`], [`Announcement`] | woraus die Ansage zu einer Leseeinheit besteht |
//!
//! # Grenzen
//!
//! Die Projektion ist eine **Näherung über Browserdaten**. Sie belegt nicht,
//! was ein Screenreader tatsächlich ansagt: dass eine Live-Region Inhalt
//! bekommen hat, heißt, dass der Browser den Anlass zur Ansage hatte — nicht,
//! dass NVDA sie vorgelesen hat.
//!
//! Zwei Aufnahmen tragen außerdem nicht jeden Fall. Flüchtige Änderungen — eine
//! Fehlermeldung, die eingefügt, vorgelesen und wieder entfernt wird — sind
//! zwischen zwei Zeitpunkten unter Umständen nie sichtbar. Dafür braucht ein
//! Host eine Ereignisspur über die Zeit; der Diff allein genügt nicht.
//!
//! Knotenidentität gilt nur **innerhalb eines Dokuments**, über
//! `backend_dom_node_id`. Fehlt sie, wechselt der Frame oder wird navigiert,
//! ist die Identität unklar — und das gehört ausgewiesen, nicht geraten.
//!
//! # Herkunft
//!
//! Der Code lief zuerst in [auditmysite](https://github.com/casoon/auditmysite)
//! und ist an 133 Seiten mit 692 Journey-Instanzen gemessen worden. Die Messung
//! hat drei Dinge erzwungen, die hier eingebaut sind: „hinzugekommen" heißt
//! **wahrnehmbar geworden** (Chrome entfernt verborgene Knoten nicht, sie
//! bleiben als `ignored` mit Grund `notRendered` stehen), Knoten werden über
//! die Backend-ID zugeordnet statt über ihre Position, und eine unklare
//! Identität wird gemeldet statt überspielt.
pub use ;
pub use *;
pub use *;
pub use ;
pub use ;
pub use *;