// ===================================================== // Eksamenstrener — practice questions with guided answers // ===================================================== let examData = null; let examFilter = 'all'; async function examLoad() { if (examData) return examData; try { const res = await fetch('data/exam.json'); if (!res.ok) throw new Error('Not ready'); examData = await res.json(); } catch (e) { console.warn('Eksamen-data ikke klar ennå:', e.message); examData = []; } return examData; } // Normalize category names — agents sometimes used "samfunnsansvar" function normalizeCat(cat) { if (cat === 'samfunnsansvar') return 'samfunn'; return cat; } function examFilteredQuestions() { if (examFilter === 'all') return examData; return examData.filter(q => normalizeCat(q.category) === examFilter); } function examCategoryLabel(cat) { return { etikk: 'Oppgave I · Etikk', baerekraft: 'Oppgave II · Bærekraft', samfunn: 'Oppgave III · Samfunnsansvar', case: 'Oppgave IV · Case-drøfting' }[normalizeCat(cat)] || cat; } function examCategoryColor(cat) { return { etikk: 'var(--theme-etikk)', baerekraft: 'var(--theme-baerekraft)', samfunn: 'var(--theme-samfunn)', case: 'var(--theme-verktoy)' }[normalizeCat(cat)] || 'var(--accent)'; } function examRender() { const container = document.getElementById('examQuestions'); if (!container) return; // Filter chips at top container.innerHTML = `
`; const list = document.getElementById('examList'); const questions = examFilteredQuestions(); let counter = 0; questions.forEach(q => { counter++; const num = String(counter).padStart(2, '0'); const color = examCategoryColor(q.category); const div = document.createElement('div'); div.className = 'exam-q reveal'; div.innerHTML = `
${num}
${examCategoryLabel(q.category)} ${q.title || ''}

${q.question}

${q.checklist ? `

Hva må svaret inneholde

` : ''} `; list.appendChild(div); }); // Attach toggles list.querySelectorAll('[data-toggle]').forEach(btn => { btn.addEventListener('click', () => { const reveal = btn.nextElementSibling; const isOpen = reveal.style.display !== 'none'; reveal.style.display = isOpen ? 'none' : 'block'; btn.textContent = isOpen ? 'Vis veiledet svar ↓' : 'Skjul veiledet svar ↑'; }); }); // Attach filters document.getElementById('examFilters').addEventListener('click', (e) => { const f = e.target.closest('[data-filter]'); if (f) { examFilter = f.dataset.filter; examRender(); } }); } async function examInit() { await examLoad(); examRender(); } SMF.examInit = examInit;