Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

💡 Hinweis: Tabellenzellen werden als anklickbar vorgelesen #4191

Closed
deleonio opened this issue Jul 21, 2023 · 14 comments · Fixed by #5594, #5928 or #5933
Closed

💡 Hinweis: Tabellenzellen werden als anklickbar vorgelesen #4191

deleonio opened this issue Jul 21, 2023 · 14 comments · Fixed by #5594, #5928 or #5933

Comments

@deleonio
Copy link
Contributor

Tabellenzellen, deren Inhalt mit der _render-Funktion erzeugt wurde, sind offenbar für Screenreader immer als anklickbar markiert, auch wenn sie keine tatsächlich anklickbaren Komponenten enthalten.

@deleonio
Copy link
Contributor Author

@deleonio deleonio moved this to 📄 Ready in KoliBri Board Nov 10, 2023
@deleonio
Copy link
Contributor Author

Solved: #4999

@sdvg sdvg self-assigned this Nov 15, 2023
@sdvg sdvg moved this from 📄 Ready to 🏗 In progress in KoliBri Board Nov 15, 2023
@sdvg
Copy link
Member

sdvg commented Nov 15, 2023

Erkenntnisse:

  • Es macht bei mir keinen Unterschied, wie die Zelle gerendert wurde (HTML-String oder React)
  • VoiceOver gibt Text-Zellen wie folgt aus: SCR-20231115-iotx
    • Der erste Teil der Ausgabe entspricht dem Label und des aria-label des Buttons in der entsprechenden Header-Spalte.
    • Die Zelle wird also nicht direkt als "anklickbar" ausgegeben, enthält aber die Spaltenbeschriftung einschließlich Button-Label
  • Was auch ein Problem sein könnte: Die Tabelle ist von einem div mit tabindex="0" umgeben. Das ist vermutlich Absicht, ich kann aber den Zweck gerade nicht nachvollziehen. Der tabindex sorgt dafür, dass die Tabelle fokussierbar ist, aber auch für einen Pointer-Cursor auf allen Zellen, auch wenn diese nicht anklickbar sind.

@sdvg sdvg linked a pull request Nov 15, 2023 that will close this issue
@sdvg
Copy link
Member

sdvg commented Nov 15, 2023

Das verlinkte PR ändert die Render-Methode der Datum-Spalte zu React. Zumindest mit VoiceOver macht das aber keinerlei Unterschied.

@sdvg
Copy link
Member

sdvg commented Nov 16, 2023

Die Ausgabe in NVDA ist identisch zu VoiceOver: Die Spalte wird nicht als anklickbar vorgelesen, dafür aber die komplette Spaltenbezeichnung inkl. Button.

@sdvg
Copy link
Member

sdvg commented Nov 24, 2023

Mit diesem Beispiel ist das Problem in NVDA reproduzierbar, aber nicht in VoiceOver: https://stackblitz.com/edit/vitejs-vite-s86r7b?file=package.json,src%2FApp.tsx

@sdvg sdvg moved this from 🕒 Waiting to 🏗 In progress in KoliBri Board Nov 24, 2023
@sdvg
Copy link
Member

sdvg commented Nov 24, 2023

Mögliche Ursache: facebook/react#20895
React fügt einen Click-Eventlistener auf der erzeugten Root-Node hinzu, NVDA interpretierte diese deshalb als "klickbar".

Die dort in einem Kommentar beschriebene Lösung funktioniert bei mir: https://stackblitz.com/edit/vitejs-vite-dofl5r?file=package.json,src%2FApp.tsx
Die entscheidende Änderung ist das domNode.setAttribute('role', 'presentation');

@sdvg sdvg moved this from 🏗 In progress to 🔍Review in KoliBri Board Nov 24, 2023
@github-project-automation github-project-automation bot moved this from 🔍Review to ✅ Done in KoliBri Board Nov 29, 2023
@laske185 laske185 moved this from ✅ Done to 🏗 In progress in KoliBri Board Nov 29, 2023
@laske185
Copy link
Contributor

Bitte noch in V1 umsetzen.

@sdvg
Copy link
Member

sdvg commented Nov 29, 2023

PR für V1: #5662

@sdvg sdvg moved this from 🏗 In progress to 🔍Review in KoliBri Board Nov 29, 2023
@laske185 laske185 added in v1 and v2 and removed v2 labels Nov 30, 2023
@sdvg sdvg moved this from 🔍Review to ✅ Done in KoliBri Board Nov 30, 2023
@laske185
Copy link
Contributor

laske185 commented Jan 9, 2024

Rückmeldung: Problem weiterhin vorhanden

"allerdings wird bei mir der Inhalt der Zelle von NVDA dann ignoriert und stattdessen der Inhalt der Zelle rechts daneben ausgegeben"

@laske185 laske185 reopened this Jan 9, 2024
@github-project-automation github-project-automation bot moved this from ✅ Done to 🏗 In progress in KoliBri Board Jan 9, 2024
@laske185
Copy link
Contributor

laske185 commented Jan 9, 2024

Die Sample-App sollte ein Beispiel mit einem renderer in einer Tabelle haben.

@sdvg
Copy link
Member

sdvg commented Jan 9, 2024

Das Problem mit dem oben beschriebenen Workaround (role=presentation): Die Zellen werden im Tabellen-Navigationsmodus (Ctrl + Alt + Pfeiltaste) ganz übersprungen.

@sdvg sdvg moved this from 🏗 In progress to 📄 Ready in KoliBri Board Jan 9, 2024
@sdvg sdvg moved this from 📄 Ready to 🏗 In progress in KoliBri Board Jan 22, 2024
@sdvg
Copy link
Member

sdvg commented Jan 23, 2024

Ich habe jetzt einen neuen Workaround gefunden, der die Probleme effektiv zu lösen scheint. Ich habe selber mit Voice Over und NVDA getestet.

Für den Workaround wird eine neue div-Node erzeugt, die als React-Root verwendet wird und die das Attribut role="presentation" zugewiesen bekommt. Diese Node wird dann der Zelle hinzugefügt.
(Zum Vergleich: Vorher hat die Zelle selbst, also das <td>, das Attribut bekommen. Das hat im Tabellen-Lesemodus nicht funktioniert.)

Beispiel-Implementierung: https://github.com/public-ui/kolibri/pull/5928/files#diff-80007a9798934b119d062a5814370b01441acbd47de0bd17be24866bb7ba2276R78

Zusätzlich gab es ein Problem mit den Input-Komponenten, welches durch das PR gelöst wird: Die Input-Komponenten registrieren einen click-Event-Listener auf dem <kol-input>-Element, wodurch NVDA die umgebende Zelle ebenfalls als "anklickbar" vorliest. Dieses Problem konnte ebenfalls durch role="presentation" gelöst werden.

@sdvg sdvg moved this from 🏗 In progress to 🔍Review in KoliBri Board Jan 23, 2024
@github-project-automation github-project-automation bot moved this from 🔍Review to ✅ Done in KoliBri Board Jan 24, 2024
@deleonio deleonio moved this from ✅ Done to A11y-Test in KoliBri Board Jan 26, 2024
@AntnSaj
Copy link

AntnSaj commented Feb 2, 2024

Nachgetestet. Fehler wurde behoben.
Neue Gefundene Fehler:
Die folgenden Fehler beziehen sich auf die NVDA/JAWS Ausgabe.
Bei dem initialen fokussieren des Sortierschalters (Formularmodus-Tab) wird nur Schalter vorgelesen und es wird nicht deutlich, was dieser Schalter macht.

Version 1.7.9:
table badge-size:
NVDA: Es wird nicht bei jeder um Sortierung eine Screenreader Ausgabe erzeugt.
JAWS: Der Sortierstatus wird immer ausgegeben. Bei dem unsortierten Status wird "sortiert" angesagt

table column-allignment:
NVDA: Der Sortierstatus wird immer richtig ausgegeben.
JAWS: Der Sortierstatus wird immer ausgegeben. Bei dem unsortierten Status wird "sortiert" angesagt

table render-cell:
NVDA: Status "Nicht sortiert" wird nicht ausgegeben.
JAWS: Der Sortierstatus wird immer ausgegeben. Bei dem unsortierten Status wird "sortiert" angesagt

table sort-data:
NVDA: Es wird nicht bei jeder um Sortierung eine Screenreader Ausgabe erzeugt.
JAWS: Der Sortierstatus wird immer ausgegeben. Bei dem unsortierten Status wird "sortiert" angesagt

Version 2.0.3:
table badge-size:
NVDA: Sortierung wird gar nicht angesagt.
JAWS: Sortierung wird gar nicht angesagt.

table column-allignment:
NVDA: Der Sortierstatus wird immer richtig vorgelesen.
JAWS: Der Sortierstatus wird immer ausgegeben. Bei dem unsortierten Status wird "sortiert" angesagt

table render-cell:
NVDA: Status "Nicht sortiert" wird nur manchmal ausgegeben. "Aufsteigend" und "Absteigend" werden immer ausgegeben.
JAWS: Der Sortierstatus wird immer ausgegeben. Bei dem unsortierten Status wird "sortiert" angesagt

table sort-data:
NVDA: Sortierung wird gar nicht angesagt.
JAWS: Sortierung wird gar nicht angesagt.

@sdvg sdvg moved this from A11y-Test to ✅ Done in KoliBri Board Feb 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment