From 5cbd6d06b1432773865219a623165ba0c03c5206 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 9 Apr 2026 17:49:50 +0200 Subject: [PATCH] feat(bisaya-course): refine exercises and instructions for improved learning experience - Updated exercise titles and instructions to enhance clarity and focus on specific learning objectives. - Modified question data and answer options to better align with the lesson's vocabulary and context. - Improved explanations to provide clearer guidance on language usage and learning goals, fostering better comprehension for learners. --- .../scripts/create-bisaya-course-content.js | 25 +++++++++++-------- frontend/src/views/social/VocabLessonView.vue | 18 +++++++++++++ 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/backend/scripts/create-bisaya-course-content.js b/backend/scripts/create-bisaya-course-content.js index 55065e9..6060cd4 100644 --- a/backend/scripts/create-bisaya-course-content.js +++ b/backend/scripts/create-bisaya-course-content.js @@ -1290,20 +1290,20 @@ const BISAYA_EXERCISES = { }, { exerciseTypeId: 4, - title: 'Haus mit zwei Zimmern', - instruction: 'Übersetze den Satz ins Bisaya.', + title: 'Unser Haus benennen', + instruction: 'Übersetze den kurzen Satz ins Bisaya (nur Wortschatz und Muster aus dieser Lektion).', questionData: { type: 'transformation', - text: 'Unser Haus hat zwei Zimmer', + text: 'Unser Haus.', sourceLanguage: 'Deutsch', targetLanguage: 'Bisaya' }, answerData: { type: 'transformation', - correct: 'Ang among balay kay naay duha ka kwarto', - alternatives: ['Among balay naay duha ka kwarto', 'Ang among balay adunay duha ka kwarto'] + correct: 'Ang among balay', + alternatives: ['Among balay.', 'Ang among balay.'] }, - explanation: '„Among balay“ = unser Haus; „duha ka kwarto“ = zwei Zimmer.' + explanation: '„Ang among balay.“ = unser Haus; „among“ (inklusiv) und „balay“ sind die Lernziele dieser Einheit.' }, { exerciseTypeId: 4, @@ -1324,17 +1324,22 @@ const BISAYA_EXERCISES = { }, withTypeName('dialog_completion', { title: 'Nach der Küche fragen', - instruction: 'Ergänze die passende Antwort.', + instruction: 'Ergänze die passende Antwort (Ortsangaben wie didto/luyo kommen in der nächsten Lektion).', questionData: { type: 'dialog_completion', question: 'Welche Antwort passt?', dialog: ['A: Asa ang kusina?', 'B: ...'] }, answerData: { - modelAnswer: 'Didto sa luyo.', - correct: ['Didto sa luyo.', 'Naa didto.', 'Tua didto sa kusina.', 'Naa siya sa kusina.'] + modelAnswer: 'Naa sila sa kusina.', + correct: [ + 'Naa sila sa kusina.', + 'Naa siya sa kusina.', + 'Naa ko sa kusina.', + 'Sa kusina.' + ] }, - explanation: 'Kurze Wegzeiger wie „Didto sa luyo.“ (dort hinten) oder direkt „Naa siya sa kusina.“' + explanation: 'Mit „Naa … sa kusina“ kannst du sagen, wo sich jemand befindet – dasselbe Muster wie „Naa sila sa kusina.“ in der Lektion.' }), withTypeName('situational_response', { title: 'Zu Hause kurz beschreiben', diff --git a/frontend/src/views/social/VocabLessonView.vue b/frontend/src/views/social/VocabLessonView.vue index 523577d..6a4f44e 100644 --- a/frontend/src/views/social/VocabLessonView.vue +++ b/frontend/src/views/social/VocabLessonView.vue @@ -1868,6 +1868,8 @@ export default { this.activeTab = 'learn'; } + this.syncExerciseSequentialIndexToFirstUnanswered(); + this.lessonStatePersistenceReady = true; if (this.vocabTrainerActive && this.vocabTrainerPool.length > 0) { this.$nextTick(() => { @@ -1936,6 +1938,21 @@ export default { this.exerciseSequentialIndex = next; this.persistLessonState(); }, + /** + * Kapitel-Prüfung (eine Frage pro Schritt): Wenn gespeicherte Antworten existieren, aber der + * Index noch auf einer schon beantworteten Frage steht, zur ersten noch offenen Frage springen. + */ + syncExerciseSequentialIndexToFirstUnanswered() { + const list = this.scrambledChapterExamExercises; + if (!list.length || !this.sequentialPanelActive) { + return; + } + const firstUnanswered = list.findIndex((exercise) => !this.exerciseResults[exercise.id]); + if (firstUnanswered === -1) { + return; + } + this.exerciseSequentialIndex = firstUnanswered; + }, confirmExerciseReinforcement() { this.showExerciseReinforcementDialog = false; if (this.exerciseReinforcementPrepMode) { @@ -2042,6 +2059,7 @@ export default { } this.activeTab = 'exercises'; this.$nextTick(() => { + this.syncExerciseSequentialIndexToFirstUnanswered(); const scrollEl = document.querySelector('.app-content__scroll.contentscroll'); if (scrollEl) { scrollEl.scrollTop = 0;