'use strict'; /* admin → sims (simulations) section */ (function () { 'use strict'; let inited = false; // Full list of available (non-null id) sims mirrored from /lab const ADMIN_SIMS = [ { id: 'graph', cat: 'Математика', title: 'График функции' }, { id: 'graphtransform', cat: 'Математика', title: 'Трансформации графиков' }, { id: 'geometry', cat: 'Математика', title: 'Планиметрия' }, { id: 'triangle', cat: 'Математика', title: 'Геометрия треугольника' }, { id: 'quadratic', cat: 'Математика', title: 'Корни квадратного уравнения' }, { id: 'stereo', cat: 'Математика', title: 'Стереометрия 3D' }, { id: 'probability', cat: 'Математика', title: 'Теория вероятностей' }, { id: 'trigcircle', cat: 'Математика', title: 'Тригонометрическая окружность' }, { id: 'normaldist', cat: 'Математика', title: 'Нормальное распределение' }, { id: 'projectile', cat: 'Физика', title: 'Бросок тела' }, { id: 'pendulum', cat: 'Физика', title: 'Маятник' }, { id: 'collision', cat: 'Физика', title: 'Столкновение шаров' }, { id: 'magnetic', cat: 'Физика', title: 'Магнитное поле токов' }, { id: 'circuit', cat: 'Физика', title: 'Электрические цепи' }, { id: 'coulomb', cat: 'Физика', title: 'Закон Кулона' }, { id: 'hydrostatics', cat: 'Физика', title: 'Гидростатика' }, { id: 'dynamics', cat: 'Физика', title: 'Динамика' }, { id: 'thinlens', cat: 'Физика', title: 'Тонкая линза' }, { id: 'refraction', cat: 'Физика', title: 'Преломление света' }, { id: 'mirrors', cat: 'Физика', title: 'Зеркала' }, { id: 'isoprocess', cat: 'Физика', title: 'Изопроцессы' }, { id: 'waves', cat: 'Физика', title: 'Волны и звук' }, { id: 'molphys', cat: 'Химия', title: 'Молекулярная физика' }, { id: 'chemistry', cat: 'Химия', title: 'Химические реакции' }, { id: 'equilibrium', cat: 'Химия', title: 'Химическое равновесие' }, { id: 'electrolysis', cat: 'Химия', title: 'Электролиз' }, { id: 'bohratom', cat: 'Химия', title: 'Атом Бора' }, { id: 'orbitals', cat: 'Химия', title: 'Молекулярные орбитали' }, { id: 'titration', cat: 'Химия', title: 'pH и кривая титрования' }, { id: 'chemsandbox', cat: 'Химия', title: 'Химическая песочница' }, { id: 'crystal', cat: 'Химия', title: 'Кристаллическая решётка' }, { id: 'celldivision', cat: 'Биология', title: 'Деление клетки' }, { id: 'photosynthesis', cat: 'Биология', title: 'Фотосинтез и дыхание' }, { id: 'angrybirds', cat: 'Игры', title: 'Angry Birds Physics' }, ]; let _simsSettings = { module_disabled: false, disabled_ids: [] }; async function load() { try { const data = await LS.api('/api/settings/sims'); _simsSettings = data; _render(); } catch(e) { LS.toast('Ошибка загрузки настроек: ' + e.message, 'error'); } } function _render() { // master toggle const masterChk = document.getElementById('sims-master-chk'); if (masterChk) masterChk.checked = !_simsSettings.module_disabled; // per-sim cards const grid = document.getElementById('sims-grid'); const dis = new Set(_simsSettings.disabled_ids || []); // group by category const byCat = {}; ADMIN_SIMS.forEach(s => { (byCat[s.cat] = byCat[s.cat] || []).push(s); }); let html = ''; Object.entries(byCat).forEach(([cat, sims]) => { html += `