From 1de2aed05de6bc1196b68614a6fbe200c43aa97b Mon Sep 17 00:00:00 2001 From: Maxim Dolgolyov Date: Sat, 30 May 2026 10:14:21 +0300 Subject: [PATCH] =?UTF-8?q?feat(phys8=20ch2):=20Phase=202.1=20=E2=80=94=20?= =?UTF-8?q?=D0=B2=D0=B8=D0=B7=D1=83=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?hero=20+=2020=20IV-6=20stubs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hero: новый p8-hero с electric-pulse градиентом (5s), молнией SVG-watermark (flicker анимация 3.2s), live meter тока в углу (0.5 → 2.0 → 1.2 → 0.8 → 1.5 А, плавная tween). 20 section watermarks: тематические SVG символы по теме § — 2 заряда, проводник, индукция, атом, силовые линии, U-стрелка, батарея, цепь, омега Ω, зигзаг ρl/S, посл/парал соединения, P-мощность, магнит N/S, компас, электромагнит. 20 IV-6 stubs: 'Новый интерактив §N · coming soon' (заглушки для Phase 2. bulk content). Все 20 builders на месте, JS парсится. --- backend/scripts/redesign_p8_ch2.cjs | 140 ++++++++++++ frontend/textbooks/physics_8_ch2.html | 302 +++++++++++++++++++++++--- 2 files changed, 415 insertions(+), 27 deletions(-) create mode 100644 backend/scripts/redesign_p8_ch2.cjs diff --git a/backend/scripts/redesign_p8_ch2.cjs b/backend/scripts/redesign_p8_ch2.cjs new file mode 100644 index 0000000..ddc711c --- /dev/null +++ b/backend/scripts/redesign_p8_ch2.cjs @@ -0,0 +1,140 @@ +// Phase 2.1 — визуальный редизайн ch2 (Электромагнитные явления): +// 1. Hero: новый p8-hero с electric theme, lightning SVG watermark. +// 2. Section watermarks: тематические SVG в каждой
. +// 3. IV-6 stubs для §12-31 (20 параграфов). +'use strict'; +const fs = require('fs'); +const path = require('path'); + +const DST = path.join(__dirname, '..', '..', 'frontend', 'textbooks', 'physics_8_ch2.html'); +let h = fs.readFileSync(DST, 'utf8'); + +// === 1. Replace .hdr block with p8-hero === +const LIGHTNING_WM = ``; + +const NEW_HERO = `
+
${LIGHTNING_WM}
+
0.5 А
+
+
Глава 2 · 20 параграфов
+

Электромагнитные явления

+
Заряд, ток, цепь, магнитное поле. Конструируйте цепи из компонентов, перемещайте заряды, наблюдайте за искрами и полями.
+
+ К физике 8 + + + +
+
+
`; + +const oldHdrRegex = /
[\s\S]*?<\/header>/; +if (h.match(oldHdrRegex)) { + h = h.replace(oldHdrRegex, NEW_HERO); + console.log('Hero replaced'); +} + +// === 2. Live meter скрипт (ток 0.5 → 2 → 1.2 → 0.8 → 1.5 А) === +const METER_SCRIPT = ` + +`; +if (!h.includes('P8 hero meter')) { + h = h.replace('', METER_SCRIPT + '\n'); + console.log('Meter animation added'); +} + +// === 3. Section watermarks === +const SEC_SYMBOLS = { + p12: '', // 2 заряда + p13: '', // проводник + p14: '', // индукция + p15: '', // заряд центр + p16: '', // атом + p17: '', // силовые линии + p18: 'U', // напряжение + p19: '', // батарея + p20: '', // I=q/t + p21: '', // цепь + p22: 'Ω', // Ом + p23: '', // ρl/S зигзаг + p24: '', // последовательно + p25: '', // параллельно + p26: 'P', // мощность + p27: '', // энергия + p28: 'NS', // магнит + p29: '', // силовые линии магн + p30: '', // компас + p31: '' // электромагнит +}; + +let secWmInjected = 0; +for (const pid of Object.keys(SEC_SYMBOLS)) { + const symbol = SEC_SYMBOLS[pid]; + const secOpenRegex = new RegExp(`(]+id="sec-${pid}"[^>]*>)`); + if (h.match(secOpenRegex) && !h.includes(`p8-sec-wm-${pid}`)) { + const wmDiv = ``; + h = h.replace(secOpenRegex, '$1\n ' + wmDiv); + secWmInjected++; + } +} +console.log('Section watermarks injected:', secWmInjected); + +// === 4. IV-6 stubs для §12-31 === +let stubsAdded = 0; +for (let n = 12; n <= 31; n++) { + const pid = 'p' + n; + const stubHtml = ` + /* IV6 — flagship интерактив (заглушка Phase 2, наполнение в Phase 2.${n}) */ + h += '
' + +'
IV-6
Новый интерактив §${n}
' + +'
Готовится: интерактивная визуализация с drag-and-drop для углубления темы. Скоро будет доступна.
' + +'
' + +'' + +'
Phase 2.${n} — coming soon
' + +'
' + +'
'; +`; + const marker = `box.innerHTML = h + secNavFor('${pid}') + readButton('${pid}');`; + if (!h.includes(`Новый интерактив §${n}`) && h.includes(marker)) { + h = h.replace(marker, stubHtml.trim() + '\n\n ' + marker); + stubsAdded++; + } +} +console.log('IV-6 stubs added:', stubsAdded); + +fs.writeFileSync(DST, h); +console.log('ch2 final size:', h.length); + +const scripts = [...h.matchAll(/ + + +