Files
Learn_System/plans/lab-split/phase-2-extract-glue.md
T
Maxim Dolgolyov 92b5c39860 refactor(lab): phase 2 — extract inline glue script to /js/labs/lab-glue.js
lab.html 4324L → 3499L (-825L). 824 lines of glue code moved.

Position preserved: lab-glue.js loads after lab-init.js, before

newton.js / forcesandbox.js / etc. — same execution order as inline.

node --check passes. /lab returns 200. /js/labs/lab-glue.js returns 200.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 22:36:26 +03:00

69 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 2: Extract inline `<script>` glue → `frontend/js/labs/lab-glue.js`
**Status:** ✅ Done
**Parent plan:** [PLAN.md](./PLAN.md)
**Domain:** frontend
## Objective
Вынести 825L inline `<script>` блока (lines 4327-5152) из lab.html в отдельный `frontend/js/labs/lab-glue.js`. Этот блок содержит glue-код (sim-switcher logic, init helpers, event wiring). lab-init.js остаётся orchestrator'ом.
## Tasks
- [ ] Определить точные границы inline `<script>` блока (line 4327 start, find matching `</script>`)
- [ ] Создать `frontend/js/labs/lab-glue.js`
- [ ] Скопировать содержимое в lab-glue.js
- [ ] **Сохранить порядок загрузки**: lab-glue.js должен подгружаться ПОСЛЕ всех `labs/*.js` engine-модулей И ПЕРЕД `labs/lab-init.js` (или после — зависит от dependencies, проверить!)
- [ ] Удалить inline блок из lab.html
- [ ] Добавить `<script src="/js/labs/lab-glue.js"></script>` в правильное место
- [ ] Verify: page loads, `console.log` ошибок нет, sim-switcher работает
- [ ] Smoke: переключить 3-4 разных sim, проверить что render запускается
## Files to Modify/Create
- `frontend/js/labs/lab-glue.js` — NEW (~825L)
- `frontend/lab.html` — удалить inline `<script>` блок, добавить `<script src>` тег (net 823L)
## Acceptance Criteria
- lab.html без большого inline `<script>` блока на lines 4327-5152
- `/lab` отвечает 200
- No `ReferenceError` / `is not defined` в console (load-order правильный)
- Sim-switcher переключает sims корректно
- 5 любых симуляций инициализируются и рендерятся
## Notes
### Load-order анализ
Перед extract — проверить какие globals использует inline glue:
- Если использует `CollisionSim` (из engine-modules) → нужно загружаться ПОСЛЕ engine-modules
- Если использует `Lucide` (CDN) → после Lucide
- Если других inline-vars нет — безопасно вынести
### Watch for
- Inline `<script>` без `defer` атрибута выполняется sync — после переноса в external может выполниться раньше DOM ready. Возможно нужен `DOMContentLoaded` wrapper, либо `defer` атрибут.
- `window.xxx = ...` глобальные exports должны остаться (onclick handlers HTML on них опираются)
### Strategy
1. Read весь inline блок
2. Identify все function/var declarations
3. Скопировать как есть в lab-glue.js
4. Add at top: `'use strict';` если ещё нет
5. Тестировать пристально
## Review Checklist
- [ ] lab-glue.js загружается в правильном порядке (после engine modules)
- [ ] No console errors на /lab
- [ ] Sim-switcher работает (тест: переключить projectile → newton → chemsandbox)
- [ ] Все onclick handlers HTML работают
- [ ] No emoji в коде
- [ ] Pre-commit hook passes
## Handoff to Next Phase
<!-- Implementer фиксирует: где находится hash-router-точка-расширения (Phase 4 будет добавлять hashchange handler сюда). -->