diff --git a/frontend/src/views/social/VocabLessonView.vue b/frontend/src/views/social/VocabLessonView.vue index 825ee24..8254864 100644 --- a/frontend/src/views/social/VocabLessonView.vue +++ b/frontend/src/views/social/VocabLessonView.vue @@ -3212,10 +3212,38 @@ export default { }, formatGapFill(exercise) { const qData = this.getQuestionData(exercise); - if (!qData || !qData.text) return ''; - - // Ersetze {gap} mit Platzhaltern - return qData.text.replace(/\{gap\}/g, '_____'); + const aData = this.getAnswerData(exercise); + + // Bevorzugt: expliziter Lückentext + if (qData && qData.text) { + return qData.text.replace(/\{gap\}/g, '_____'); + } + + // Fallbacks: Frage-Text, Erklärung oder Titel anzeigen + let base = (qData && qData.question) ? String(qData.question) : ''; + if (!base && exercise && exercise.explanation) base = String(exercise.explanation); + if (!base && exercise && exercise.title) base = String(exercise.title || ''); + + // Wenn noch nichts, aber answerData enthält Antworten, zeige Platzhalter für die Lücken + if (!base && aData) { + const answers = aData.answers || aData.correct || []; + const arr = Array.isArray(answers) ? answers : [answers]; + if (arr.length > 0) { + // Zeige die erwarteten Wörter kurz im Kontext-Placeholder + return arr.map(() => '_____').join(' '); + } + } + + // Wenn base vorhanden ist, versuche vorhandene {gap}-Marker zu ersetzen, sonst anhängen + if (base) { + if (base.includes('{gap}')) { + return base.replace(/\{gap\}/g, '_____'); + } + // Keine Marker: füge eine Lücke am Ende an + return `${base} _____`; + } + + return ''; }, getGapCount(exercise) { const qData = this.getQuestionData(exercise);