feat(phys7 ch1): Phase 1 Wave 1 — §1, §2 + интеграция widgets
GEN: gen_phys7_ch.js теперь подключает <script src=phys7_chN_widgets.js> и
вызывает PHYS7_CHN_WIDGETS[id] в ensureBuilt, удаляя placeholder. Все 5 chN
регенерированы под этот hook.
WIDGETS (frontend/js/phys7_ch1_widgets.js, 402 строки, экспорт p1+p2):
- §1 «Физика — наука о природе»:
* 3 теор. карточки (что изучает / связь с науками / 6 примеров явлений)
* IV-1 СИМ: галерея 8 областей физики с hover-эффектом
* IV-2 КВИЗ: 3 вопроса о предмете физики и слове «фюзис»
* IV-3 DnD: 8 карточек → 4 науки (астро/химия/био/физика)
* IV-4 ТРН: 5 вопросов тренажёр
- §2 «Физическое тело, явление, величина»:
* 3 теор. карточки (4-понятийная таблица / как отличать / стакан-пример)
* IV-1 СИМ (главный): DnD 12 карточек → 4 корзины (тело/вещество/явление/величина),
в т.ч. KaTeX-величины (=5$ кг, =-10$ °C, =30$ км/ч)
* IV-2 КВИЗ: «найди величину/явление/вещество» (3 вопроса)
* IV-3 ТЕСТ: 5 быстрых вопросов на классификацию
* IV-4 ТРН: 4 расчётных + концептуальных вопроса
- Кнопка «Я прочитал §» (+10 XP), localStorage-фиксация, серая «Прочитано»
после первого нажатия.
ИНФРАСТРУКТУРА:
- Общие хелперы внутри файла: makeCard (theory/rule/example), wgWrap, dndPool,
wireDnd, quizQuestion, wireQuiz, readButton, wireReadBtn, renderMath с правильными
delimiters $..$ и $$..$$.
- XP: DnD +15, квиз +10, тренажёр +15, прочитал +10. Прогресс параграфа +30 при
«прочитал», +10 базово при открытии. Цвета §1+§2 единые с темой главы 1 (indigo).
- Parse-check, KaTeX-аудит ($$ только двойной backslash), smoke-test пройдены.
This commit is contained in:
@@ -134,6 +134,7 @@ function makeHTML(C) {
|
||||
<script src="/js/api.js" defer></script>
|
||||
<script src="/js/xp.js" defer></script>
|
||||
<script src="/js/phys.js?v=${VER}" defer></script>
|
||||
<script src="/js/phys7_ch${C.n}_widgets.js?v=${VER}" defer></script>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Manrope:wght@600;700;800;900&family=Unbounded:wght@700;800;900&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root{
|
||||
@@ -344,6 +345,15 @@ function buildParaSelector(){
|
||||
function ensureBuilt(id){
|
||||
if(STATE._built.has(id)) return;
|
||||
STATE._built.add(id);
|
||||
const W = window['PHYS7_CH${C.n}_WIDGETS'];
|
||||
if(W && typeof W[id] === 'function'){
|
||||
const body = document.getElementById(id + '-body');
|
||||
if(body){
|
||||
const ph = body.querySelector('.placeholder');
|
||||
if(ph) ph.remove();
|
||||
}
|
||||
try{ W[id](); }catch(e){ console.warn('phys7 widget ' + id + ':', e.message); }
|
||||
}
|
||||
}
|
||||
|
||||
function goTo(id){
|
||||
|
||||
Reference in New Issue
Block a user