'use strict'; const { user, isTeacher, isAdmin } = LS.initPage(); window._simQuizAllowed = true; // default; overridden after permission fetch for students LS.showBoardIfAllowed(); /* ════════════════════════════════ SIM CATALOGUE (defined after P_* consts below) ════════════════════════════════ */ let _catFilter = 'all'; var _disabledSimIds = new Set(); let _simModuleDisabled = false; function filterSims(cat, btn) { _catFilter = cat; document.querySelectorAll('.lab-filter').forEach(b => b.classList.remove('active')); btn.classList.add('active'); renderSims(); } function renderSims() { // Контент-движок: мёрж код-реестра поверх legacy SIMS. // Порядок берём из SIMS; для мигрированных id используем манифест реестра; // registry-only записи добавляем в конец. const _reg = (window.LabRegistry ? window.LabRegistry.all() : []); const _regById = {}; _reg.forEach(m => { _regById[m.id] = m; }); const _seen = {}; const _merged = []; SIMS.forEach(s => { _merged.push(s.id && _regById[s.id] ? _regById[s.id] : s); if (s.id) _seen[s.id] = 1; }); _reg.forEach(m => { if (!_seen[m.id]) _merged.push(m); }); const base = _catFilter === 'all' ? _merged : _merged.filter(s => s.cat === _catFilter); const list = base.filter(s => !s.id || !_disabledSimIds.has(s.id)); document.getElementById('sim-grid').innerHTML = list.map(s => `