Commit Graph

7 Commits

Author SHA1 Message Date
Maxim Dolgolyov c34fd27c6a feat(phys9 ch): добавлен блок задач параграфа из legacy POOLS
Раньше в монолите physics_9.html на каждый § был блок задач
(navDots, taskArea, fb, sum, progress-bar и chip-ok), но в новых
ch-страницах physics_9_ch{1..5}.html этого не было.

Изменения:

1. В каждой ch1..ch5.html добавлен hook поверх ensureBuilt:
   - Функция _makeTaskBlock(sec) генерирует HTML контейнеров
     legacy-tasks (#taskArea<sec>, #navDots<sec>, #fb<sec>, #sum<sec>,
     #prog<sec>, #ok<sec>, #cur<sec>, #max<sec>, кнопка «Заново»,
     кнопка «Следующая»).
   - _injectTasks(id) добавляет блок в #<id>-body если есть
     window.POOLS[id], и вызывает window.renderTask(id) +
     window.renderNav(id) для рендера первой задачи.
   - ensureBuilt обёрнут так, чтобы вызывать _injectTasks
     после оригинального билда.

2. В phys9_legacy.js добавлен экспорт POOLS и STATE в window
   (раньше они были скрыты внутри IIFE).

Стили блока задач используют CSS-переменные секции (var(--sec-acc, ...))
и работают с любой темой главы.

Теперь по каждому §1-§36 показывается соответствующий пул задач
(TASKS_P1..P36).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:17:38 +03:00
Maxim Dolgolyov 1f17fb40dc fix(textbooks): извлечён общий widget CSS — phys-textbook-widgets.css
Жалоба пользователя по Физике 8 (но проблема общая для Phys 8 и Phys 9):
страницы глав используют классы .wg/.dnd-pool/.dnd-chip/.btn/.score-display/
.feedback/.actions/.sliders/.spoiler/.drop-box в HTML-разметке, но CSS-правила
для них живут только в physics_10_ch1.html. Из-за этого карточки-задания,
chip'ы drag-and-drop, кнопки и feedback-блоки в Phys 8 и Phys 9 рендерились
без стилей (как обычный текст).

- extract_widget_css.cjs: вытягивает CSS-блок (.btn..pre-.col-side) из
  physics_10_ch1.html в frontend/css/phys-textbook-widgets.css (6.4 КБ)
- Подключает <link> в 11 файлов: physics_8_ch1/ch2/ch3/hub/lab,
  physics_9_ch1..ch5, physics_9_hub
- migrate_phys9_content.js теперь инжектит ссылку на widget CSS при будущих
  миграциях (рядом с FA CDN)
2026-05-30 09:16:24 +03:00
Maxim Dolgolyov 932bef237c fix(phys9 ch): подключить phys9_legacy.js во все 5 ch-страниц
Тег <script src="/js/phys9_legacy.js" defer> отсутствовал во всех
physics_9_ch{1..5}.html. Auto-init блок в каждой ch-странице ожидал
window.startAnim1, window.upd2 и т.д. — но без подключения скрипта
эти функции не существовали → ReferenceError: startAnim1 is not defined
при клике на кнопки onclick="startAnim1()".

Тег добавлен после <script src="/js/phys.js"> во всех 5 файлах.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 09:10:36 +03:00
Maxim Dolgolyov 66bd7ac1f4 fix(textbooks): Физика 9 — STATE collision, KaTeX escape, авто-init симуляций
Три бага из жалобы пользователя:

1) phys9_legacy.js упал с 'Identifier STATE has already been declared' —
   const STATE в монолите конфликтовал с const STATE в chapter inline JS.
   Скрипт extract_phys9_legacy.cjs теперь оборачивает извлечённый код в IIFE
   и явно экспортит через window 70 функций (upd*/draw*/init*/start*/lab*/
   check*/toggle*/render*/show*/...) + 7 const-массивов (TASKS_PN, PUZ_PN).

2) В боковой панели формулы рендерились как 'Delta vecr' вместо Δr⃗ —
   мой переход на JSON.stringify в gen_phys9_ch.js добавил лишний слой
   escape backslash. Уменьшил \\ → \ в SIDEBAR_ROWS, TIPS_HTML,
   PARA_SUBS, LR_SUBS (90 строк). Цепочка теперь: source \Delta → string
   \Delta → JSON "\\Delta" → HTML JS \Delta → runtime \Delta →
   KaTeX \Delta ✓.

3) 'не работают симуляции' — функции из legacy.js были доступны, но
   chapter goTo(id) их не вызывал. Добавлен авто-вызов upd<N>(),
   startAnim<N>(), init<N>(), draw<N>() при переключении на параграф,
   и updLab<N>(), drawLab<N>() — для ЛР.
2026-05-30 09:06:20 +03:00
Maxim Dolgolyov dcdcde5b4e fix(textbooks): Физика 9 — escape § в num + phys9_legacy.js + финалы 5 глав
Багфиксы:
- gen_phys9_ch.js: убран двойной escape \u00a7 → литерал §
  (раньше карточка показывала '\u00a7 1' вместо '§ 1')
- phys9_legacy.js (262 КБ): извлечён весь JS монолита для глобальных onclick-
  обработчиков (startAnim1, lab11add/all/reset, checkNum, togglePend36 и пр.).
  Setup-код в конце обёрнут в try/catch — он рассчитан на DOM монолита.
- migrate_phys9_ch4.js + migrate_phys9_content.js: подключают phys9_legacy.js
  во все 5 ch-файлов перед закрытием <head>.

Финалы глав (write_phys9_finals.js):
- ch1: 5 задач (кинематика — поезд, разгон, окружность, лодка/река)
- ch2: 5 задач (динамика — трение, Гук, свободное падение, перегрузка)
- ch3: 5 задач (статика — рычаг, Архимед, блок, КПД накл. плоск., льдина)
- ch4: 5 задач (импульс — неупр. удар, ЗСЭ, мощность крана, пуля, бросок)
- ch5: 5 контрольных по практикуму (среднее, ЛР2, ЛР4, ЛР6, ЛР10)

Все задачи с автопроверкой через checkNum() (теперь работает из legacy.js).
2026-05-30 08:55:00 +03:00
Maxim Dolgolyov 31e03923ca feat(textbooks): миграция контента Физики 9 — §1-36 + ЛР11
- migrate_phys9_ch4.js: первая итерация (§31-36 → ch4)
- migrate_phys9_content.js: обобщённый скрипт для ch1-3 (§1-30) + ch5 (ЛР11 из монолита)

Каждая глава:
- Получает CSS-блок монолита (стили .para-hero, .fcard, .def-box и т.д.)
- Подключает Font Awesome CDN для иконок в section-title
- HTML-тела параграфов вставляются в STUB-builder'ы заменой по regex
- Эмодзи (нарушают правило проекта) и orphaned <i> теги удаляются на этапе clean()

Размеры после миграции:
- ch1 (кинематика, §1-14): 136 КБ
- ch2 (динамика, §15-24): 127 КБ
- ch3 (статика, §25-30): 100 КБ
- ch4 (законы сохранения, §31-36): 133 КБ
- ch5 (лаб. практикум): 90 КБ (только ЛР11 заполнен, ЛР1-10 и ЛР12 — STUB)

Источник physics_9.html сохранён для возможной повторной миграции.
2026-05-29 23:40:30 +03:00
Maxim Dolgolyov 0c0eea7a6b feat(textbooks): скелет Физики 9 — hub + 5 глав + миграция БД
- gen_phys9_hub.js: генератор hub из physics_10_hub.html (blue palette, 5 cards)
- gen_phys9_ch.js: генератор 5 файлов глав со STUB-builder'ами по канве physics_10_ch
- 038_physics_9_hub.sql: переразмечает physics-9 как hub + 5 дочерних (ch1-ch5)
- Глава 5 — Лабораторный практикум, 12 ЛР с поддержкой lr-id вместо §

Источник: Исаченкова, Сокольский, Захаревич "Физика 9" (Народная асвета, 2019).
Контент в Phase 5 — авторский (наш материал).
2026-05-29 23:01:59 +03:00