Files
Learn_System/plans/lab-split/phase-2-extract-glue.md
T
Maxim Dolgolyov 77ebe9e3e4 chore(plan): lab-split 5-phase plan
PLAN.md + 5 subplans + CONTEXT.md

Strategy: Incremental | Mode: Automated | Execution: Direct

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

3.5 KiB
Raw Blame History

Phase 2: Extract inline <script> glue → frontend/js/labs/lab-glue.js

Status: Not Started 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/*.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