92b5c39860
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>
3.5 KiB
3.5 KiB
Phase 2: Extract inline <script> glue → frontend/js/labs/lab-glue.js
Status: ✅ Done Parent plan: 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/*.jsengine-модулей И ПЕРЕД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. Возможно нуженDOMContentLoadedwrapper, либоdeferатрибут. window.xxx = ...глобальные exports должны остаться (onclick handlers HTML on них опираются)
Strategy
- Read весь inline блок
- Identify все function/var declarations
- Скопировать как есть в lab-glue.js
- Add at top:
'use strict';если ещё нет - Тестировать пристально
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