Commit Graph

3 Commits

Author SHA1 Message Date
Maxim Dolgolyov fff3ddc45e fix(textbooks): KaTeX-рендер в шпаргалке Алгебры 8
Боковая шпаргалка строилась обычным HTML (Unicode-символы √ ≤ ⊂), формулы не оформлялись как настоящие математические.

Фикс:
- Все формулы в SIDEBARS обёрнуты $-делимитерами KaTeX (\sqrt, \mathbb, \cap, \subset, \Leftrightarrow и т.д.)
- После buildSidebar() вызывается renderMathInElement(box) для встроенного рендера
- Учебник теперь показывает корни и множества в правильной типографике
2026-05-27 09:41:20 +03:00
Maxim Dolgolyov 92a0a364ea feat(textbooks): интерактивный учебник «Алгебра 8 · Глава 1» по Арефьевой/Пирютко
algebra_8.html (3226 строк, 192KB) — полная Глава 1 «Квадратные корни и их свойства. Действительные числа»:

§ 1. Квадратный корень. Арифметический корень:
- Hero «Боксёрский ринг 36 м²» с draggable углом
- Калькулятор √ с проверкой r²
- Игра «Таблица квадратов 10-99» (speedrun, рейтинг в LocalStorage)
- Drag «существует/не существует» для √(-25), √121 и т.д.
- Связка x² ↔ √x с слайдером
- Алгоритм извлечения «в столбик»

§ 2. Иррациональные числа / Действительные числа:
- Анимированная иерархия ℕ⊂ℤ⊂ℚ⊂ℝ
- Drag-сортировка чисел в 4 коробки
- Числовая прямая с √2, √3, √5, π
- Конвертер дробь ⇄ периодическая десятичная
- Пошаговое доказательство √2∈I (5 раскрывающихся шагов)
- Игра «Кто рациональнее?»

§ 3. Свойства корней:
- Геометрическое доказательство √(ab)=√a·√b (SVG)
- Слайдер-проверка свойств (a, b → live)
- Match-игра «выражение ↔ ответ»
- Калькулятор |a|=√(a²)
- Тренажёр «Упрости» (12 задач)

§ 4. Применение свойств:
- Drag «упрости √» (9 заданий, ищи точный квадрат)
- Конвертер a√b ⇄ √c (двусторонний)
- Помощник освобождения от иррациональности (пошагово)
- «Кто больше?» с подсказкой через квадрат
- Тренажёр «a√b» (11 заданий)

§ 5. Числовые промежутки:
- 9 типов промежутков в таблице
- Конструктор промежутка (drag границ, переключение скобок)
- Объединение/пересечение визуально (4 слайдера, 4 промежутка)
- «По картинке — неравенство» (4 задачи)
- «По записи — нарисуй» (4 задачи)

§ 6. Системы неравенств:
- Решатель системы с автоматическим пересечением
- Переключатель «Система ∩ / Совокупность ∪»
- Двойное неравенство как система (пошаговое разложение)
- Игра «Найди целые решения»
- Задача про тарифы 1.382 из учебника

Финал главы:
- Итоговая самооценка (10 заданий с авто-проверкой)
- 3 практические задачи (дорожка с розами, цемент, часовые пояса)
- Историческая справка (Рудольф, Бхаскара, Герон, пифагорейцы)
- Олимпиадная расшифровка кода 25-324-441-64-4-1 → ДРУЖБА
- Метод Герона интерактивно (с итерациями)
- Олимпиадная задача про a+√15 и 1/a−√15

Сквозные фичи:
- KaTeX через CDN, шрифт Inter+Manrope
- Розово-голубая палитра учебника Арефьевой
- Dark mode toggle
- LocalStorage прогресс по §§ + достижения
- Sticky шпаргалка справа (мобильно — снизу)
- Поиск по карточкам параграфов
- Адаптив ≤ 980px
2026-05-27 09:32:09 +03:00
Maxim Dolgolyov e8018d85c1 feat: textbooks — модуль учебников + чтение как ДЗ (3 фазы)
Фаза 1 — структура и каталог:
  - frontend/textbooks/chemistry_9.html (Шиманович, 60 §) + physics_9.html (Исаченкова, 38 §)
  - frontend/textbooks.html — каталог в стиле LearnSpace (карточки с обложками)
  - Маршруты: /textbooks (каталог), /textbook/<slug> (полноэкранный учебник)
  - Сайдбар: пункт «Учебники» (book-open-text)
  - Feature flag feature_textbooks_enabled, hideDisabledFeatures map

Фаза 2 — прогресс в localStorage + UI чтения:
  - frontend/js/textbook-tracker.js — инжектится в каждый учебник:
    - «← Учебники» overlay-кнопка (top-left, semi-transparent)
    - «Прочитано» чекбокс рядом с каждым §-заголовком
    - Зелёный dot на pill уже прочитанных параграфов
    - Авто-открытие последнего параграфа при возврате
  - Каталог показывает прогресс-бар «X из Y прочитано» + кнопку «Продолжить»

Фаза 3 — серверный прогресс + назначение чтения как ДЗ:
  - Таблица textbooks (slug, subject, grade, title, author, color, ...)
  - Таблица textbook_progress (user_id, textbook_id, JSON read[], last_para)
  - Колонки assignments.textbook_id + textbook_paragraphs
  - API: GET /api/textbooks (с прогрессом), GET /:slug, POST /:slug/progress,
    GET /:slug/class-progress (учитель)
  - tracker.js синхронизирует прогресс через POST /progress (если залогинен)
  - На каталоге у учителей кнопка «Назначить чтение» — модалка с выбором
    классов + параграфы («1-5» или «1,3,5») + deadline
  - bulkCreateAssignment расширен: принимает textbook_slug, резолвит в id

Миграция 004 идемпотентная; сиды двух учебников включены.
2026-05-16 14:05:19 +03:00