Resolved answer mapping & formatting: Enhanced quiz-logic to handle text-to-key answer resolution and updated app.js indentation/logic.

This commit is contained in:
2026-04-16 20:00:24 +02:00
parent 34153c3c15
commit 604d23bcdf
2 changed files with 78 additions and 11 deletions
+38 -6
View File
@@ -507,17 +507,49 @@ function SoloQuizPage({ params, navigate }) {
const checkAnswer = () => {
const rawCorrect = (q['Richtige Antwort'] || '').trim();
let correct, ok;
let correctKeysResolved, ok;
if (typ === 'freitext') {
correct = []; setCorrectText(rawCorrect);
correctKeysResolved = [];
setCorrectText(rawCorrect);
ok = normalizeText(selected[0]) === normalizeText(rawCorrect);
} else {
correct = rawCorrect.split(',').map((s) => s.trim().toUpperCase()).filter(Boolean);
const correctSet = new Set(correct);
// Resolve correct answer: could be keys ("A","B") or text ("Wahr","Falsch")
const parts = rawCorrect.split(',').map((s) => s.trim()).filter(Boolean);
const validKeys = new Set(['A', 'B', 'C', 'D']);
const allAreKeys = parts.length > 0 && parts.every((p) => validKeys.has(p.toUpperCase()));
if (allAreKeys) {
correctKeysResolved = parts.map((p) => p.toUpperCase());
} else {
// Match text against answer options
correctKeysResolved = [];
for (const part of parts) {
const partLower = part.toLowerCase().trim();
// Search in all answers (including shuffled ones which keep their original keys)
const allAnswers = [];
['A', 'B', 'C', 'D'].forEach((k) => {
if (q[`Antwort ${k}`]) allAnswers.push({ key: k, text: q[`Antwort ${k}`] });
});
for (const ans of allAnswers) {
if (ans.text.toLowerCase().trim() === partLower) {
correctKeysResolved.push(ans.key);
break;
}
}
}
// Fallback
if (correctKeysResolved.length === 0) {
correctKeysResolved = parts.map((p) => p.toUpperCase());
}
}
const correctSet = new Set(correctKeysResolved);
const selectedSet = new Set(selected.map((s) => s.toUpperCase()));
ok = correct.length === selectedSet.size && correct.every((c) => selectedSet.has(c));
ok = correctKeysResolved.length === selectedSet.size && correctKeysResolved.every((c) => selectedSet.has(c));
}
setCorrectKeys(correct);
setCorrectKeys(correctKeysResolved);
setIsCorrect(ok);
setShowFeedback(true);