Workers P2: Auswahl aus der Liste holt die Karte ins Bild und setzt den Fokus (Handy und Tablet)
Endprüfung P2. Unter 1100 px steht die Karte über der Liste mit 19 Einträgen, aus der man wählt (die Liste ist dort die Alternative zur Leinwand). Ein Klick in der Liste änderte nichts Sichtbares: die Karte öffnete sich oberhalb des Fensters, Screenreader hörten nichts, und „Karte schließen“ ließ den Fokus ins Leere fallen. Bei neuer Auswahl nimmt jetzt der Name in der Karte den Fokus (tabIndex -1), und liegt der Kartenanfang außerhalb des Fensters, wird die Karte an den oberen Rand geholt (scroll-margin-top: unter der festen Leiste der Handy-Ansicht 64 px). „Karte schließen“ gibt den Fokus an den Listeneintrag des Workers zurück. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9ebc562c83
commit
84fb37a98e
5 files changed
+63
-5
No files matched your search
@@ -65,3 +65,20 @@ test('WorkersBoard: Zustände und Rechte (Review Focus 1)', () => {
|
||||
// PF-08: jeder Knopf ein type="button" (WOMS-Button hat keinen Standard-type)
|
||||
assert.equal((s.match(/<Button\b/g) || []).length, (s.match(/<Button\b[^>]*type="button"/g) || []).length)
|
||||
})
|
||||
test('Karte und Board: Auswahl setzt den Fokus auf den Namen und holt die Karte ins Bild, Schließen gibt den Fokus zurück (Endprüfung P2, Handy/Tablet)', () => {
|
||||
const card = read('WorkerCard.jsx')
|
||||
// Namen fokussierbar machen (tabIndex -1), Fokus ohne eigenes Springen, danach gezielt an den oberen Rand holen, wenn der Kartenanfang nicht im Fenster liegt
|
||||
assert.match(card, /<h2 className="wk-name" ref=\{headingRef\} tabIndex=\{-1\}>/)
|
||||
assert.match(card, /ref=\{sectionRef\}/)
|
||||
assert.match(card, /heading\.focus\(\{ preventScroll: true \}\)/)
|
||||
assert.match(card, /section\.scrollIntoView\(\{ block: 'start' \}\)/)
|
||||
assert.match(card, /scrollMarginTop/)
|
||||
assert.match(card, /\}, \[workerId\]\)/)
|
||||
// Hooks stehen vor der frühen Rückgabe ohne Auswahl (Regeln der Hooks)
|
||||
assert.ok(card.indexOf('useEffect(() => {\n if (!workerId) return') > 0)
|
||||
assert.ok(card.indexOf('useEffect(() => {\n if (!workerId) return') < card.indexOf(' if (!workerId) {\n return ('))
|
||||
const board = read('WorkersBoard.jsx')
|
||||
assert.match(board, /const sideRef = useRef\(null\)/); assert.match(board, /<div className="wk-side" ref=\{sideRef\}>/)
|
||||
assert.match(board, /onClose=\{closeCard\}/); assert.match(board, /data-wk-worker/); assert.match(board, /button\.focus\(\)/)
|
||||
assert.doesNotMatch(board, /onClose=\{\(\) => setSelectedId\(null\)\}/)
|
||||
})
|
||||
Reference in new issue
Block a user