feat: exam9 — Экзамен 9 класс по математике (80 вариантов)

Новый отдельный модуль /exam9 в стиле LearnSpace:
- 80 вариантов × 10 заданий = 800 задач с разбором (KaTeX + SVG)
- Сайдбар: пункт «Экзамен 9 класс» (clipboard-check)
- Feature flag: feature_exam9_enabled (мигр. 002)
- Видим всем авторизованным; рендер на стороне клиента
- Прогресс в localStorage: подсветка вариантов (done/partial)
- Возобновление последнего варианта при возврате

Структура:
  frontend/exam9.html              — страница (LearnSpace layout)
  frontend/js/exam9/app.js         — рендерер
  frontend/js/exam9/variants/      — 80 файлов с данными
  frontend/img/exam9/              — 22 PNG/JPG фигур заданий

Картинки путей _tmp/ → /img/exam9/ переписаны автоматически.

Все маршруты проверены: 200 OK на /exam9, /js/exam9/*, /img/exam9/*.
This commit is contained in:
Maxim Dolgolyov
2026-05-16 12:53:49 +03:00
parent ae31e4c4e8
commit 6cff327e88
107 changed files with 16507 additions and 0 deletions
+1
View File
@@ -597,6 +597,7 @@ async function hideDisabledFeatures() {
board: ['/board'],
biochem: ['/biochem', '/biochem-library', '/biochem-reactions'],
live_quiz: ['/live-quiz'],
exam9: ['/exam9', '/exam9.html'],
};
for (const [key, hrefs] of Object.entries(map)) {
if (feats[key] === false) {
+1
View File
@@ -62,6 +62,7 @@
${L('/collection', 'layers', 'Коллекция')}
${L('/knowledge-map', 'share-2', 'Карта знаний')}
${L('/red-book', 'leaf', 'Красная книга')}
${L('/exam9', 'clipboard-check', 'Экзамен 9 класс')}
${L('/classroom', 'presentation', 'Онлайн-урок')}
${L('/lesson-history','archive', 'Архив уроков')}
<div class="sb-divider"></div>