diff --git a/js/api.js b/js/api.js index 09ab2df..261378e 100644 --- a/js/api.js +++ b/js/api.js @@ -887,6 +887,22 @@ try { if (_cachedFeats) _applyFeatureCss(_cachedFeats); } catch { /* нет кэша / приватный режим — просто ждём async */ } +/* Прячет группы сайдбара (.sb-group), у которых не осталось ни одного видимого пункта, + чтобы не висел пустой заголовок-аккордеон (напр. «Практика и игры», когда все + модули отключены). Зовётся после построения сайдбара и после hideDisabledFeatures. */ +function hideEmptySidebarGroups() { + document.querySelectorAll('.sb-group').forEach(g => { + const body = g.querySelector('.sb-group-body'); + if (!body) return; + let anyVisible = false; + body.querySelectorAll('.sb-link').forEach(it => { + const cs = getComputedStyle(it); + if (cs.display !== 'none' && cs.visibility !== 'hidden') anyVisible = true; + }); + g.style.display = anyVisible ? '' : 'none'; + }); +} + /** * Show board sidebar link only for teachers/admins and students in a class. * Call after LS.initPage(). Uses features cache (_no_class flag). @@ -925,6 +941,7 @@ async function hideDisabledFeatures() { document.querySelector('[onclick*="tab-account"]')?.click(); } } + hideEmptySidebarGroups(); // после обновления видимости пунктов — спрятать пустые группы // Exam-prep track links (/exam-prep/): показываем только включённые // (exam_tracks.enabled) и доступные пользователю треки. /api/exam-prep/tracks @@ -1129,6 +1146,7 @@ window.LS = { loadFeatures, clearFeaturesCache, hideDisabledFeatures, + hideEmptySidebarGroups, showBoardIfAllowed, biochemGetElements, biochemGetMolecules, biochemGetMolecule, biochemValidate, biochemAnalyze, biochemGetReactions, biochemGetChallenges, biochemSolveChallenge, diff --git a/js/sidebar.js b/js/sidebar.js index db73073..a8d2154 100644 --- a/js/sidebar.js +++ b/js/sidebar.js @@ -228,6 +228,9 @@ LS.showBoardIfAllowed?.(); LS.hideDisabledFeatures?.(); LS.notif?.init?.(); + // Синхронно по кэш-состоянию (CSS уже инъектнут до сборки) — прячем пустые + // группы сразу, без мигания; hideDisabledFeatures повторит после свежих данных. + LS.hideEmptySidebarGroups?.(); } // Глобальная плавающая кнопка «создать карточку» (на всех страницах с шапкой)