fix(lab): значок «связанной симуляции» на карточках учебников не скрывался при выключенной лаборатории
В каталоге учебников (textbooks.html) у карточек есть кнопка .tb-lab-btn «открыть связанную симуляцию» (openLabSim → /lab?sim=…). Это <button onclick>, а не <a href="/lab">, поэтому kill-switch `[href="/lab"]` её не ловил, и значок-колба оставался при отключённой «Лаборатории». Фикс: добавил `.tb-lab-btn` в FEATURE_WIDGETS.lab → api.js скрывает её через инъекцию при lab=false (работает и без ls.css). Плюс страховка в openLabSim: при lab=false не открываем (тост «Лаборатория отключена»); админ — всегда (admin-override). Verified vm-смоук на реальном api.js 4/4 (lab off → .tb-lab-btn скрыта; lab on → нет; admin → ничего). node --check api.js + инлайн textbooks.html. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -479,6 +479,15 @@
|
|||||||
/* Фаза 5: открыть связанную симуляцию из карточки учебника (не уходя в учебник). */
|
/* Фаза 5: открыть связанную симуляцию из карточки учебника (не уходя в учебник). */
|
||||||
function openLabSim(simId, ev) {
|
function openLabSim(simId, ev) {
|
||||||
if (ev) ev.stopPropagation();
|
if (ev) ev.stopPropagation();
|
||||||
|
// Страховка: если «Лаборатория» отключена — не открываем (кнопка и так скрыта
|
||||||
|
// kill-switch'ем). Админ имеет доступ всегда (admin-override).
|
||||||
|
try {
|
||||||
|
const u = LS.getUser && LS.getUser();
|
||||||
|
if (!(u && u.role === 'admin')) {
|
||||||
|
const f = JSON.parse(localStorage.getItem('ls_feat_cache') || 'null');
|
||||||
|
if (f && f.lab === false) { if (LS.toast) LS.toast('Лаборатория отключена', 'warn'); return; }
|
||||||
|
}
|
||||||
|
} catch (e) { /* нет кэша — открываем как раньше */ }
|
||||||
location.href = '/lab?sim=' + encodeURIComponent(simId);
|
location.href = '/lab?sim=' + encodeURIComponent(simId);
|
||||||
}
|
}
|
||||||
window.openLabSim = openLabSim;
|
window.openLabSim = openLabSim;
|
||||||
|
|||||||
@@ -866,7 +866,10 @@ const FEATURE_HREFS = {
|
|||||||
матчит, поэтому прячем по СТАБИЛЬНОМУ id #hc-lab (аналогично pet/чтение). */
|
матчит, поэтому прячем по СТАБИЛЬНОМУ id #hc-lab (аналогично pet/чтение). */
|
||||||
const FEATURE_WIDGETS = {
|
const FEATURE_WIDGETS = {
|
||||||
flashcards: ['#w-flashcard'],
|
flashcards: ['#w-flashcard'],
|
||||||
lab: ['#hc-lab'],
|
// #hc-lab — hero-карточка дашборда; .tb-lab-btn — кнопка «открыть связанную
|
||||||
|
// симуляцию» на карточках каталога учебников (openLabSim → /lab?sim=…). Это
|
||||||
|
// <button onclick>, а не <a href="/lab">, поэтому [href="/lab"] её не ловит.
|
||||||
|
lab: ['#hc-lab', '.tb-lab-btn'],
|
||||||
pet: ['#hc-pet'],
|
pet: ['#hc-pet'],
|
||||||
textbooks: ['#hc-read'],
|
textbooks: ['#hc-read'],
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user