feat(chemistry7): Phase 1 Волна 1 — Глава 1, §§1–3 + ПР1

§1 Химия — наука о веществах (классификатор тело/вещество),
§2 Чистые вещества и смеси (разделитель смесей: фильтр/выпаривание/
магнит/отстаивание/перегонка), ПР1 разделение смеси соль+песок,
§3 Атомы и химические элементы (каталог элементов + тренажёр символов).
Теория, тренажёры задач (POOLS), глоссарные шпаргалки. chem7_ch1_widgets.js.
Тест: 7/7 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-30 18:22:36 +03:00
parent c33b4ab4f6
commit 185ce2b640
3 changed files with 299 additions and 5 deletions
+16
View File
@@ -23,6 +23,7 @@ function buildPage(file) {
'/js/biochem-core.js': readF('frontend/js/biochem-core.js'),
'/js/chem8_svg.js': readF('frontend/js/chem8_svg.js'),
'/js/chem7_svg.js': readF('frontend/js/chem7_svg.js'),
'/js/chem7_ch1_widgets.js': readF('frontend/js/chem7_ch1_widgets.js'),
'/js/chem8_engine.js': readF('frontend/js/chem8_engine.js')
};
html = html
@@ -67,6 +68,21 @@ for (const ch of CHAPTERS) {
});
}
test('ch1 Волна 1: интерактивы §1–§3 + ПР1 монтируются без ошибок', async () => {
const { doc, errors } = await loadDom('chemistry_7_ch1.html');
// §1 строится при загрузке (первый §) — классификатор «тело/вещество»
assert.ok(doc.querySelector('#p1-cls .c7-chip'), 'классификатор §1');
doc.defaultView.goTo('p2'); await wait(100);
assert.ok(doc.querySelector('#p2-sep .c7-m'), 'разделитель смесей §2');
doc.defaultView.goTo('pr1'); await wait(100);
assert.ok(doc.querySelector('#pr1-sep .c7-m'), 'разделитель смесей ПР1');
doc.defaultView.goTo('p3'); await wait(100);
assert.ok(doc.querySelectorAll('#p3-el .el-cell').length > 10, 'каталог элементов §3');
assert.ok(doc.querySelector('#p3-drill .c7-d'), 'тренажёр символов §3');
assert.ok(doc.querySelectorAll('#navDotsp3 .nav-dot').length >= 4, 'тренажёр задач §3');
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch1: переход к §9 и финалу строит заглушку без ошибок', async () => {
const { doc, errors } = await loadDom('chemistry_7_ch1.html');
doc.defaultView.goTo('p9'); await wait(80);