c33b4ab4f6
- миграция 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>
54 lines
3.7 KiB
JavaScript
54 lines
3.7 KiB
JavaScript
/* 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 и т. п.); собственные звёздные виджеты — заглушки, наполняются в
|
||
* фазах 1–4 (см. 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);
|