/* gen_chem8_skeletons.js — генерирует каркасы 7 глав «Химия 8» (Phase 0). * Запуск: node backend/scripts/gen_chem8_skeletons.js * Выход: frontend/textbooks/chemistry_8_intro.html, _ch1.html ... _ch6.html * * Каркас = валидная брендированная страница: header (водяной знак), hero, * оглавление § (read-only), баннер «в разработке», ссылка назад в хаб, тема. * Полный интерактивный SPA-контент каждой главы добавляется в Phase 1–6 * (файлы перезаписываются), пока скелет обеспечивает навигацию и структуру. */ 'use strict'; const fs = require('fs'); const path = require('path'); const OUT = path.join(__dirname, '..', '..', 'frontend', 'textbooks'); const P = (t, n) => ({ t, n }); // параграф const NOTE = (note) => ({ note }); // лаб. опыт / практическая работа const CHAPTERS = [ { file: 'chemistry_8_intro.html', slug: 'chemistry-8-intro', kicker: 'Вводный раздел', title: 'Количественные понятия в химии', range: '§ 1–9', wm: 'mol', color: { p:'#d97706', d:'#b45309', l:'#fbbf24', soft:'#fef3c7', bgd:'#1c1410', cardd:'#271c14', textd:'#fef3c7' }, items: [ P('§ 1', 'Атомы. Химические элементы. Относительная атомная масса'), P('§ 2', 'Молекулы. Простые и сложные вещества. Химические формулы. Относительная молекулярная масса'), P('§ 3', 'Химическое количество вещества'), P('§ 4', 'Моль — единица химического количества вещества. Постоянная Авогадро'), P('§ 5', 'Молярная масса. Молярный объём газов'), P('§ 6', 'Вычисление химического количества вещества по его массе и массы вещества по его химическому количеству'), P('§ 7', 'Вычисление химического количества газа по его объёму и объёма газа по его химическому количеству'), NOTE('Практическая работа 1. Химическое количество вещества'), P('§ 8', 'Химические реакции'), P('§ 9', 'Количественные расчёты по уравнениям химических реакций') ] }, { file: 'chemistry_8_ch1.html', slug: 'chemistry-8-ch1', kicker: 'Глава 1', title: 'Важнейшие классы неорганических соединений', range: '§ 10–23', wm: 'OH', color: { p:'#0d9488', d:'#0f766e', l:'#14b8a6', soft:'#ccfbf1', bgd:'#0c1a18', cardd:'#102825', textd:'#ccfbf1' }, items: [ P('§ 10', 'Оксиды. Состав и классификация оксидов'), P('§ 11', 'Химические свойства оксидов'), P('§ 12', 'Получение и применение оксидов'), P('§ 13', 'Кислоты. Состав и классификация кислот'), P('§ 14', 'Химические свойства кислот'), P('§ 15', 'Получение и применение кислот'), P('§ 16', 'Основания'), P('§ 17', 'Химические свойства оснований'), P('§ 18', 'Получение и применение оснований'), NOTE('Лабораторный опыт 1. Получение нерастворимого основания'), NOTE('Практическая работа 2. Изучение реакции нейтрализации'), P('§ 19', 'Соли. Состав и классификация солей'), P('§ 20', 'Химические свойства солей'), NOTE('Лабораторный опыт 2. Взаимодействие растворов солей с металлами'), P('§ 21', 'Получение и применение солей'), P('§ 22', 'Взаимосвязь между классами основных неорганических веществ'), NOTE('Практическая работа 3. Решение экспериментальных задач'), P('§ 23', 'Решение расчётных задач по теме «Основные классы неорганических соединений»') ] }, { file: 'chemistry_8_ch2.html', slug: 'chemistry-8-ch2', kicker: 'Глава 2', title: 'Периодический закон и периодическая система химических элементов', range: '§ 24–28', wm: '№', color: { p:'#4f46e5', d:'#4338ca', l:'#818cf8', soft:'#e0e7ff', bgd:'#12122b', cardd:'#1b1b3a', textd:'#e0e7ff' }, items: [ P('§ 24', 'Систематизация химических элементов'), P('§ 25', 'Понятие об амфотерности'), NOTE('Лабораторный опыт 3. Получение гидроксида цинка и изучение его амфотерных свойств'), P('§ 26', 'Естественные семейства элементов'), P('§ 27', 'Периодический закон Д. И. Менделеева'), P('§ 28', 'Периодическая система химических элементов') ] }, { file: 'chemistry_8_ch3.html', slug: 'chemistry-8-ch3', kicker: 'Глава 3', title: 'Строение атома и периодичность изменения свойств', range: '§ 29–35', wm: 'e−', color: { p:'#2563eb', d:'#1d4ed8', l:'#60a5fa', soft:'#dbeafe', bgd:'#0a1428', cardd:'#102137', textd:'#dbeafe' }, items: [ P('§ 29', 'Строение атома. Атомный номер химического элемента'), P('§ 30', 'Массовое число атома. Нуклиды'), P('§ 31', 'Изотопы. Явление радиоактивности'), P('§ 32', 'Состояние электронов в атоме. Электронное облако. Атомная орбиталь'), P('§ 33', 'Строение электронных оболочек атомов'), P('§ 34', 'Периодичность изменения свойств атомов химических элементов'), P('§ 35', 'Характеристика химического элемента по его положению в периодической системе') ] }, { file: 'chemistry_8_ch4.html', slug: 'chemistry-8-ch4', kicker: 'Глава 4', title: 'Химическая связь', range: '§ 36–41', wm: 'H₂O', color: { p:'#059669', d:'#047857', l:'#34d399', soft:'#d1fae5', bgd:'#0a1a12', cardd:'#10271c', textd:'#d1fae5' }, items: [ P('§ 36', 'Природа химической связи'), P('§ 37', 'Ковалентная связь'), P('§ 38', 'Неполярная и полярная ковалентная связь. Электроотрицательность'), NOTE('Лабораторный опыт 4. Составление моделей молекул'), P('§ 39', 'Ионная связь'), P('§ 40', 'Металлическая связь. Межмолекулярное взаимодействие'), P('§ 41', 'Кристаллическое состояние вещества') ] }, { file: 'chemistry_8_ch5.html', slug: 'chemistry-8-ch5', kicker: 'Глава 5', title: 'Окислительно-восстановительные реакции', range: '§ 42–45', wm: 'O₂', color: { p:'#ea580c', d:'#c2410c', l:'#fb923c', soft:'#ffedd5', bgd:'#1c1208', cardd:'#2a1c10', textd:'#ffedd5' }, items: [ P('§ 42', 'Степень окисления'), P('§ 43', 'Процессы окисления и восстановления'), P('§ 44', 'Окислительно-восстановительные реакции'), P('§ 45', 'Окислительно-восстановительные реакции вокруг нас') ] }, { file: 'chemistry_8_ch6.html', slug: 'chemistry-8-ch6', kicker: 'Глава 6', title: 'Растворы', range: '§ 46–52', wm: 'aq', color: { p:'#0891b2', d:'#0e7490', l:'#22d3ee', soft:'#cffafe', bgd:'#08191c', cardd:'#10282d', textd:'#cffafe' }, items: [ P('§ 46', 'Смеси веществ'), P('§ 47', 'Растворение веществ в воде'), P('§ 48', 'Характеристики растворимости веществ'), P('§ 49', 'Качественные характеристики состава растворов'), P('§ 50', 'Количественные характеристики растворённых веществ. Массовая доля растворённого вещества'), P('§ 51', 'Молярная концентрация растворённых веществ'), NOTE('Практическая работа 4. Приготовление раствора с заданной массовой долей и молярной концентрацией'), P('§ 52', 'Вода и растворы в жизни и деятельности человека') ] } ]; function esc(s) { return String(s).replace(/[&<>]/g, c => ({ '&':'&', '<':'<', '>':'>' }[c])); } function outlineHtml(items) { return items.map(it => { if (it.note) { return '
  • ' + '' + '' + esc(it.note) + '
  • '; } return '
  • ' + esc(it.t) + '' + esc(it.n) + '
  • '; }).join('\n'); } function pageHtml(ch) { const c = ch.color; const wmHeader = ch.kicker.toUpperCase(); return ` Химия 8 · ${esc(ch.kicker)} · «${esc(ch.title)}»
    К разделам
    ${esc(ch.kicker)} · ${esc(ch.range)}

    ${esc(ch.title)}

    Раздел в разработке

    Интерактивное наглядное наполнение этого раздела (теория, модели, симуляторы, тренажёры и боссы) добавляется поэтапно. Ниже — план параграфов раздела согласно учебнику.

    Содержание раздела
    `; } // --force перезапишет уже существующие файлы; по умолчанию — пропускаем // готовые (наполненные в фазах) страницы, чтобы не затереть контент. const FORCE = process.argv.includes('--force'); let count = 0, skipped = 0; for (const ch of CHAPTERS) { const target = path.join(OUT, ch.file); if (!FORCE && fs.existsSync(target)) { skipped++; console.log('skip ', ch.file, '(уже существует — наполнен в фазе)'); continue; } fs.writeFileSync(target, pageHtml(ch), 'utf8'); count++; console.log('written', ch.file, '(' + ch.items.filter(i => i.t).length + ' §)'); } console.log('done:', count, 'written,', skipped, 'skipped');