feat(chemistry7): Phase 3 Волна 1 — Глава 3, §18 + §19 + §20 + ЛО3

§18 Водород — элемент и простое вещество (паспорт + модель H2),
§19 Химические свойства водорода (горение → вода, восстановление CuO → Cu),
§20 Понятие о кислотах (индикаторы лакмус/метилоранж + таблица кислот),
ЛО3 Действие кислот на индикаторы. chem7_ch3_widgets.js. Тест: 13/13 pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-30 18:57:28 +03:00
parent 2c80a52d6f
commit 0af08bcc55
3 changed files with 301 additions and 5 deletions
+14
View File
@@ -25,6 +25,7 @@ function buildPage(file) {
'/js/chem7_svg.js': readF('frontend/js/chem7_svg.js'),
'/js/chem7_ch1_widgets.js': readF('frontend/js/chem7_ch1_widgets.js'),
'/js/chem7_ch2_widgets.js': readF('frontend/js/chem7_ch2_widgets.js'),
'/js/chem7_ch3_widgets.js': readF('frontend/js/chem7_ch3_widgets.js'),
'/js/chem8_engine.js': readF('frontend/js/chem8_engine.js')
};
html = html
@@ -162,6 +163,19 @@ test('ch2 Волна 2: §16 + §17 + ПР2 + финал главы монтир
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
test('ch3 Волна 1: §18 + §19 + §20 + ЛО3 монтируются', async () => {
const { doc, errors } = await loadDom('chemistry_7_ch3.html');
assert.ok(doc.querySelector('#p18-card svg'), 'паспорт водорода §18');
doc.defaultView.goTo('p19'); await wait(100);
assert.ok(doc.querySelector('#p19-rx #p19-pick'), 'реакции водорода §19');
doc.defaultView.goTo('p20'); await wait(100);
assert.ok(doc.querySelector('#p20-ind #p20-ind-ind'), 'индикаторы §20');
assert.ok(doc.querySelector('#p20-acids table'), 'таблица кислот §20');
doc.defaultView.goTo('lo3'); await wait(100);
assert.ok(doc.querySelector('#lo3-ind #lo3-ind-ind'), 'индикаторы ЛО3');
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
});
/* ── Хаб: каталог глав + финал курса ── */
function buildHub() {
let html = readF('frontend/textbooks/chemistry_7_hub.html');