'use strict'; /* admin → subjects (доступные тесты) section */ (function () { 'use strict'; let inited = false; // Старт сессии поддерживает только exam/practice (topic/random убраны — давали 400 на дашборде). const SC_MODES = { exam: 'Экзамен', practice: 'Пробный тест' }; const SC_ICONS = { bio:'dna', chem:'flask-conical', math:'calculator', phys:'zap' }; const SC_COLORS = { bio:'#9B5DE5', chem:'#06D6A0', math:'#06B6D4', phys:'#F59E0B' }; // кэш тестов по предмету для селектора const _scTests = {}; async function loadScTests(slug) { if (_scTests[slug]) return _scTests[slug]; const tests = await LS.getTests(slug); _scTests[slug] = tests; return tests; } function setSrcMode(slug, src) { const rndBtn = document.getElementById(`sc-src-rnd-${slug}`); const fixBtn = document.getElementById(`sc-src-fix-${slug}`); const pick = document.getElementById(`sc-test-pick-${slug}`); const cntWrap = document.getElementById(`sc-count-wrap-${slug}`); rndBtn.classList.toggle('active', src === 'random'); fixBtn.classList.toggle('active', src === 'fixed'); pick.classList.toggle('open', src === 'fixed'); cntWrap.style.display = src === 'random' ? '' : 'none'; if (src === 'fixed') { loadAndRenderTestPick(slug); } else { const dr = document.getElementById(`sc-qdr-${slug}`); if (dr) { dr.style.display = 'none'; } } } async function loadAndRenderTestPick(slug) { const sel = document.getElementById(`sc-test-sel-${slug}`); if (sel.dataset.loaded) return; sel.innerHTML = ''; try { const tests = await loadScTests(slug); const cur = document.getElementById(`sc-card-${slug}`)?.dataset.testId || ''; sel.innerHTML = `` + tests.map(t => ``).join(''); sel.dataset.loaded = '1'; } catch(e) { sel.innerHTML = ''; } } async function load() { const wrap = document.getElementById('subj-config-list'); wrap.innerHTML = LS.skeleton(4); try { const subjects = await LS.getSubjects(); wrap.innerHTML = subjects.map(s => { const hasFix = !!s.default_test_id; const color = SC_COLORS[s.slug] || '#9B5DE5'; const mode = s.default_mode || 'exam'; const count = s.default_count || 25; const srcLabel = hasFix ? 'Фикс. тест' : `${count} вопросов`; return `