feat(admin): тумблер фичи для «Квантик» (паритет с другими играми)

У Квантика не было фиче-флага — его нельзя было выключить, и он всегда висел
в сайдбаре (даже у учеников без класса). Добавлено по образцу остальных игр:
- adminController.updateFeatures: 'quantik' в whitelist (PATCH принимает флаг).
- games.js: пункт «Квантик: Законы Мира» в GAME_FEATURES и FS_FEATURES
  (тумблер в админке → Игры; пишет feature_quantik_enabled).
- api.js hideDisabledFeatures: quantik -> ['/quantik','/quantik.html'] (скрытие
  из сайдбара при выключении) + '/quantik' в classOnlyHrefs/classOnlyPaths
  (скрыт у учеников без класса, как прочие игры).

Миграция не нужна: флаг «неявно включён», пока админ не выключит (features[key]
!== false => включено). Требует Ctrl+F5 (фронт).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-15 16:00:23 +03:00
parent 56fc15418e
commit 477d47e9e6
3 changed files with 6 additions and 3 deletions
+3 -2
View File
@@ -863,6 +863,7 @@ async function hideDisabledFeatures() {
sim_builder: ['/sim-builder', '/sim-builder.html'],
exam9: ['/exam9', '/exam9.html'],
textbooks: ['/textbooks', '/textbooks.html', '/textbook'],
quantik: ['/quantik', '/quantik.html'],
};
for (const [key, hrefs] of Object.entries(map)) {
if (feats[key] === false) {
@@ -908,7 +909,7 @@ async function hideDisabledFeatures() {
'/board', '/lab', '/hangman', '/crossword', '/pet',
'/collection', '/collection.html', '/knowledge-map',
'/red-book', '/red-book.html', '/red-book-ecosystem.html', '/red-book-biomes.html',
'/flashcards', '/live-quiz',
'/flashcards', '/live-quiz', '/quantik',
];
classOnlyHrefs.forEach(href => {
document.querySelectorAll(`[href="${href}"]`).forEach(el => el.style.display = 'none');
@@ -919,7 +920,7 @@ async function hideDisabledFeatures() {
'/board', '/lab', '/hangman', '/crossword', '/pet',
'/collection', '/collection-rb', '/knowledge-map',
'/red-book', '/red-book-ecosystem', '/red-book-biomes', '/red-book-games',
'/flashcards', '/live-quiz',
'/flashcards', '/live-quiz', '/quantik',
];
if (classOnlyPaths.some(h => cur === h || cur === h + '.html')) {
window.location.href = '/dashboard';