Files
Maxim Dolgolyov c33b4ab4f6 feat(chemistry7): Phase 0 — фундамент учебника «Химия 7» (hub + 4 главы)
- миграция 046_chemistry7_hub.sql: родитель chemistry-7 (26§) + 4 ребёнка
- chemistry_7_hub.html: emerald-палитра, 4 главы, финал курса (8 боссов,
  ачивка «Химик 7 класса»)
- chemistry_7_ch1..ch4.html: каркасы глав на общем движке chem8_engine.js
  + chem8-textbook.css; PARAS по реальной программе, заглушки-builder'ы
- chem7_svg.js: неймспейс Chem7 (надстройка над Chem8), стабы виджетов
- chemistry7-page.test.js: jsdom-каркас (6 тестов, все проходят)

Содержание § наполняется в фазах 1–4. См. plans/textbooks-7/PLAN_CHEMISTRY_7.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 18:13:37 +03:00

54 lines
3.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* chem7_svg.js — наглядные химические примитивы для учебника «Химия 7».
*
* Неймспейс: window.Chem7.*
* Это ТОНКАЯ надстройка над window.Chem8 (chem8_svg.js): рендер формул и уравнений,
* ионы переиспользуются из Chem8; здесь добавляется только то, что специфично для
* первого курса химии 7 класса (валентность, разделение смесей, признаки реакций,
* весы сохранения массы, горение, конструктор оксида/соли/основания, состав воздуха,
* разложение воды, массовая доля элемента).
*
* Молекулярные модели (структурные / 2D / 3D) — НЕ здесь, а через biochem-core.js.
*
* Phase 0: переэкспортированы примитивы Chem8 (formula, ionLabel, chemEq, molarMass,
* equationBalancer и т. п.); собственные звёздные виджеты — заглушки, наполняются в
* фазах 14 (см. plans/textbooks-7/PLAN_CHEMISTRY_7.md, разд. B).
*
* Правила (CLAUDE.md / план):
* - без эмоджи, только inline SVG .ic;
* - в KaTeX-шаблонах двойной backslash (\\to, \\uparrow, \\downarrow);
* - drag/слайдеры: window-listeners + state ВЫШЕ redraw(), без setPointerCapture.
*/
(function (global) {
'use strict';
var C8 = global.Chem8 || {};
function noop() { /* заглушка фазы 0 — реализуется в фазах 1–4 */ }
var Chem7 = {
/* ── переиспользуем примитивы Chem8 (рендер формул/уравнений/ионов, M_r) ── */
formula: C8.formula || function (s) { return s; },
ionLabel: C8.ionLabel || function (s) { return s; },
chemEq: C8.chemEq || function (s) { return s; },
molarMass: C8.molarMass || function () { return NaN; },
elementCounts: C8.elementCounts || function () { return null; },
arOf: C8.arOf || function () { return ''; },
fmt: C8.fmt || function (x) { return String(x).replace('.', ','); },
equationBalancer: C8.equationBalancer || noop,
/* ── собственные звёздные виджеты Химии 7 (Phase 0: заглушки) ── */
valenceBuilder: noop, // §9 — конструктор формулы по валентности (НОК индексов)
elementSymbolDrill: noop, // §3 — тренажёр символ ↔ название
atomBalance: noop, // §4 — «весы атомов», во сколько раз тяжелее
mixtureSeparator: noop, // §2 — разделитель смесей (фильтр/выпаривание/магнит/дистилляция)
reactionSigns: noop, // §10 — детектор признаков реакции
massConservation: noop, // §11 — «весы сохранения массы»
combustionSim: noop, // §15 — симулятор горения (вещество + O₂ → оксид)
compoundBuilder: noop, // §16,22,24 — конструктор оксида/соли/основания
airComposition: noop, // §13 — диаграмма состава воздуха
waterDecomp: noop, // §23 — разложение воды (H₂:O₂ = 2:1)
massFraction: noop // Прил.3/§8 — калькулятор массовой доли элемента
};
global.Chem7 = Chem7;
})(window);