This commit is contained in:
team3
2026-06-18 11:46:09 +02:00
parent 993552efe5
commit 59d108a13a

View File

@@ -348,21 +348,32 @@ function onWindowKey(e) {
onMounted(() => { onMounted(() => {
if (props.mode !== 'full') return // Trigger-Modus (Liste): nur Tab-Leiste, keine Prüfungs-/Text-Logik if (props.mode !== 'full') return // Trigger-Modus (Liste): nur Tab-Leiste, keine Prüfungs-/Text-Logik
window.addEventListener('keydown', onWindowKey) window.addEventListener('keydown', onWindowKey)
window.addEventListener('keydown', onPruefKey)
// Direkt im Fokus geöffneter Vertiefung-/Amateur-Tab: Text laden (sonst nur via toggle). // Direkt im Fokus geöffneter Vertiefung-/Amateur-Tab: Text laden (sonst nur via toggle).
if (activeTab.value === 'vertiefung' || activeTab.value === 'deepdive') openText(activeTab.value) if (activeTab.value === 'vertiefung' || activeTab.value === 'deepdive') openText(activeTab.value)
}) })
onUnmounted(() => window.removeEventListener('keydown', onWindowKey)) onUnmounted(() => {
window.removeEventListener('keydown', onWindowKey)
window.removeEventListener('keydown', onPruefKey)
})
// ALT+1 Nachfragen/Nachhaken · ALT+2 primär (Antwort abgeben / Nächste Frage) // ALT+1 Nachfragen/Nachhaken · ALT+2 primärer Button je Phase (idle: Frage anfordern,
// ALT+3 Verlauf bewerten (frage_offen, nach Diskussion) bzw. Gründlich prüfen (bewertet). // frage_offen: Antwort abgeben, bewertet: Nächste Frage) · ALT+3 Verlauf bewerten / Gründlich.
// window-Listener (nicht div), damit es auch ohne Fokus im Feld greift + den Browser-Default
// (Tab-Wechsel) unterdrückt. Nur im Prüfungs-Tab.
function onPruefKey(e) { function onPruefKey(e) {
if (!e.altKey || e.repeat) return if (!e.altKey || e.repeat) return
if (e.key === '1') { e.preventDefault(); nachfragen() } if (props.mode !== 'full' || activeTab.value !== 'pruefung') return
else if (e.key === '2') { if (!['1', '2', '3'].includes(e.key)) return
e.preventDefault() e.preventDefault()
pruefPhase.value === 'frage_offen' ? antwortAbgeben() : naechsteFrageZeigen() if (pruefLoading.value) return
if (e.key === '1') {
if (pruefPhase.value !== 'idle' && pruefInput.value.trim()) nachfragen()
} else if (e.key === '2') {
if (pruefPhase.value === 'idle') frageAnfordern()
else if (pruefPhase.value === 'frage_offen') { if (pruefInput.value.trim()) antwortAbgeben() }
else naechsteFrageZeigen()
} else if (e.key === '3') { } else if (e.key === '3') {
e.preventDefault()
if (pruefPhase.value === 'bewertet') gruendlichPruefen() if (pruefPhase.value === 'bewertet') gruendlichPruefen()
else if (pruefPhase.value === 'frage_offen' && hatDiskussion.value) verlaufBewerten() else if (pruefPhase.value === 'frage_offen' && hatDiskussion.value) verlaufBewerten()
} }
@@ -434,7 +445,7 @@ function onPruefKey(e) {
</div> </div>
<!-- Prüfung: gesteuerter Dialog --> <!-- Prüfung: gesteuerter Dialog -->
<div v-else @keydown="onPruefKey"> <div v-else>
<p class="bp-hint"> <p class="bp-hint">
<template v-if="st.gemeistert"> Gemeistert ({{ MEISTERN }}/{{ MEISTERN }}) Max. Du kannst dich weiter prüfen, ohne Punkte.</template> <template v-if="st.gemeistert"> Gemeistert ({{ MEISTERN }}/{{ MEISTERN }}) Max. Du kannst dich weiter prüfen, ohne Punkte.</template>
<template v-else-if="st.verstanden && tier3">Meisterpfad: {{ st.gute_antworten }}/{{ MEISTERN }}. Richtig = +1, falsch = 2 (nicht unter {{ MAX }}). Bei {{ MEISTERN }} gemeistert.</template> <template v-else-if="st.verstanden && tier3">Meisterpfad: {{ st.gute_antworten }}/{{ MEISTERN }}. Richtig = +1, falsch = 2 (nicht unter {{ MAX }}). Bei {{ MEISTERN }} gemeistert.</template>