fix(a11y): Dialog-Vorrang in Fokusfalle, eindeutige Dialog-IDs, Bookmark nur Enter

- settings.js: _makeTrap bricht ab, wenn ein .dialog-overlay offen ist, damit
  der Dialog-keydown-Handler Escape/Tab allein behandelt (kein Doppelschluss,
  Fokusfalle bleibt dicht)
- dialog.js: aria-labelledby/-describedby zeigen auf instanz-eindeutige IDs
  (Date.now + Modul-Zaehler) statt feste dialogTitle/dialogBody, damit kurz
  gestapelte Dialoge dem Screenreader nicht den falschen Titel liefern
- boards.js: Bookmark-keydown reagiert bei role=link nur noch auf Enter, Space
  entfernt (Space ist Button-Semantik)
This commit is contained in:
2026-06-13 21:11:49 +02:00
parent eda5fba8f3
commit 55e371f506
3 changed files with 16 additions and 7 deletions
+4 -3
View File
@@ -271,10 +271,11 @@ function bindBoardListEvents(list, board) {
}
});
// Tastatur: Enter oeffnet den Bookmark wie ein Klick. Delete-Button bleibt
// ein echter <button> und feuert seinen eigenen Klick ueber Space/Enter.
// Tastatur: Enter oeffnet den Bookmark wie ein Klick. role="link" erwartet
// nur Enter (Space ist Button-Semantik). Der Delete-Button bleibt ein echter
// <button> und feuert seinen eigenen Klick ueber Space/Enter selbst.
list.addEventListener('keydown', e => {
if (e.key !== 'Enter' && e.key !== ' ') return;
if (e.key !== 'Enter') return;
const bmItem = e.target.closest('.bm-item');
if (!bmItem || e.target !== bmItem) return; // nur wenn der li selbst fokussiert ist
e.preventDefault();