diff --git a/backend/tests/chemistry7-page.test.js b/backend/tests/chemistry7-page.test.js index f2b1d23..41f91ea 100644 --- a/backend/tests/chemistry7-page.test.js +++ b/backend/tests/chemistry7-page.test.js @@ -176,6 +176,21 @@ test('ch3 Волна 1: §18 + §19 + §20 + ЛО3 монтируются', asyn assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | ')); }); +test('ch3 Волна 2: §21 + ЛО4 + §22 + ПР3 + финал главы монтируются', async () => { + const { doc, errors } = await loadDom('chemistry_7_ch3.html'); + doc.defaultView.goTo('p21'); await wait(100); + assert.ok(doc.querySelector('#p21-act .act-cell'), 'ряд активности §21'); + doc.defaultView.goTo('lo4'); await wait(100); + assert.ok(doc.querySelector('#lo4-rx #lo4-go'), 'опыт металл+кислота ЛО4'); + doc.defaultView.goTo('p22'); await wait(100); + assert.ok(doc.querySelector('#p22-salt #p22-m'), 'конструктор солей §22'); + doc.defaultView.goTo('pr3'); await wait(100); + assert.ok(doc.querySelector('#pr3-test #pr3-mix'), 'проверка чистоты H2 ПР3'); + doc.defaultView.goTo('final3'); await wait(120); + assert.ok(doc.querySelectorAll('#navDotsfinal3 .nav-dot').length >= 6, 'боссы финала главы 3'); + assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | ')); +}); + /* ── Хаб: каталог глав + финал курса ── */ function buildHub() { let html = readF('frontend/textbooks/chemistry_7_hub.html'); diff --git a/frontend/textbooks/chemistry_7_ch3.html b/frontend/textbooks/chemistry_7_ch3.html index 3a7b08f..349f0c1 100644 --- a/frontend/textbooks/chemistry_7_ch3.html +++ b/frontend/textbooks/chemistry_7_ch3.html @@ -92,18 +92,30 @@ window.PARAS = [ ]; window.ACH_LABELS = { start:'Начало главы 3!', p18_done:'§18 изучен!', p19_done:'§19 изучен!', - p20_done:'§20 изучен!', lo3_done:'Лабораторный опыт 3 выполнен!', final3_tasks:'Глава 3 пройдена!' }; + p20_done:'§20 изучен!', lo3_done:'Лабораторный опыт 3 выполнен!', + p21_done:'§21 изучен!', lo4_done:'Лабораторный опыт 4 выполнен!', p22_done:'§22 изучен!', pr3_done:'Практическая работа 3 выполнена!', + final3_tasks:'Глава 3 пройдена! Вы — Знаток водорода!' }; window.SIDEBARS = { p18:{ title:'Шпаргалка §18', rows:[['$H$','элемент, $Z=1$'],['$H_2$','самый лёгкий газ'],['Вселенная','самый частый элемент']] }, p19:{ title:'Шпаргалка §19', rows:[['Горение','$+O_2 \\to H_2O$'],['Гремучий газ','$H_2$ + воздух'],['Восстановитель','отнимает O у оксида']] }, p20:{ title:'Шпаргалка §20', rows:[['Кислота','H + остаток'],['Примеры','$HCl$, $H_2SO_4$'],['Лакмус','в кислоте красный']] }, - lo3:{ title:'Лаб. опыт 3', rows:[['Лакмус','красный'],['Метилоранж','розово-красный']] } + lo3:{ title:'Лаб. опыт 3', rows:[['Лакмус','красный'],['Метилоранж','розово-красный']] }, + p21:{ title:'Шпаргалка §21', rows:[['Me + кислота','соль + $H_2\\uparrow$'],['Ряд активности','до $H_2$ — вытесняют'],['Cu, Ag','не реагируют']] }, + lo4:{ title:'Лаб. опыт 4', rows:[['Zn, Fe, Mg','пузырьки $H_2$'],['Cu','реакции нет']] }, + p22:{ title:'Шпаргалка §22', rows:[['Соль','металл + остаток'],['Замещение','H на металл'],['Названия','хлорид, сульфат…']] }, + pr3:{ title:'Практическая 3', rows:[['$Zn+HCl$','$\\to H_2\\uparrow$'],['Чистота','гремучий газ']] }, + final3:{ title:'Финал главы 3', rows:[['§§18–22','водород'],['Награда','ачивка + XP']] } }; window.TIPS = [ { sec:'p18', html:'$H$ — самый лёгкий элемент ($A_r=1$). Простое вещество $H_2$ — самый лёгкий газ, легче воздуха. Во Вселенной водород — самый распространённый элемент.' }, { sec:'p19', html:'Водород горит в кислороде, образуя воду. С оксидами он ведёт себя как восстановитель: $H_2 + CuO = Cu + H_2O$.' }, { sec:'p20', html:'Кислота = атомы водорода + кислотный остаток. Индикаторы меняют цвет: лакмус в кислоте — красный, метилоранж — розово-красный.' }, - { sec:'lo3', html:'В кислоте лакмус становится красным, а метилоранж — розово-красным. Так обнаруживают кислоту.' } + { sec:'lo3', html:'В кислоте лакмус становится красным, а метилоранж — розово-красным. Так обнаруживают кислоту.' }, + { sec:'p21', html:'Металл + кислота → соль + водород. Реагируют только металлы, стоящие в ряду активности левее $H_2$ (Zn, Fe, Mg). Медь и серебро водород из кислот не вытесняют.' }, + { sec:'lo4', html:'Цинк, железо, магний с соляной и серной кислотами дают пузырьки водорода; медь — нет (стоит правее $H_2$).' }, + { sec:'p22', html:'Соль = металл + кислотный остаток. Она образуется, когда металл замещает водород в кислоте: $Zn + 2HCl = ZnCl_2 + H_2$.' }, + { sec:'pr3', html:'Водород получают реакцией $Zn + HCl$; чистоту проверяют поджиганием (хлопок — нечисто, спокойное горение — чисто).' }, + { sec:'final3', html:'Собери всё: водород и его свойства, кислоты и индикаторы, ряд активности, соли как продукты замещения.' } ]; window.POOLS = { @@ -124,6 +136,26 @@ window.POOLS = { {q:'Какого цвета становится лакмус в кислоте?',opts:['Синего','Красного','Зелёного','Жёлтого'],a:1,ex:'Лакмус в кислоте — красный.'}, {q:'Какова формула серной кислоты?',opts:['HCl','H₂SO₄','HNO₃','H₂CO₃'],a:1,ex:'Серная кислота — $H_2SO_4$.'}, {q:'Индикатор — это вещество, которое…',opts:['Ускоряет реакцию','Меняет цвет в кислоте или щёлочи','Растворяет металлы','Выделяет газ'],a:1,ex:'Индикаторы обнаруживают кислоты и щёлочи по изменению цвета.'} + ], + p21:[ + {q:'Какой газ выделяется при реакции активного металла с кислотой?',opts:['Кислород','Водород','Углекислый газ','Азот'],a:1,ex:'Металл вытесняет водород: соль + $H_2\\uparrow$.'}, + {q:'Какой металл НЕ вытесняет водород из соляной кислоты?',opts:['Цинк','Магний','Медь','Железо'],a:2,ex:'Медь стоит правее $H_2$ — не реагирует.'}, + {q:'Продукты реакции $\\text{Zn}+2\\text{HCl}$ — это…',opts:['$ZnCl_2$ и $H_2$','$ZnO$ и вода','$Zn$ и $Cl_2$','только соль'],a:0,ex:'$Zn+2HCl=ZnCl_2+H_2\\uparrow$.'}, + {q:'Сколько веществ образуется в реакции $\\text{Zn}+\\text{H}_2\\text{SO}_4=\\text{ZnSO}_4+\\text{H}_2$?',hint:'соль и газ',unit:'',a:2,ex:'Соль и водород — 2 вещества.'} + ], + p22:[ + {q:'Из чего состоит соль?',opts:['Из водорода и остатка','Из металла и кислотного остатка','Из двух металлов','Из воды и кислоты'],a:1,ex:'Соль = металл + кислотный остаток.'}, + {q:'Соль $\\text{NaCl}$ — продукт замещения водорода в кислоте…',opts:['$H_2SO_4$','$HCl$','$HNO_3$','$H_2CO_3$'],a:1,ex:'В $HCl$ водород заместился натрием → $NaCl$.'}, + {q:'Какова формула сульфата натрия?',opts:['NaSO4','Na₂SO₄','Na₂SO₃','NaS'],a:1,ex:'Na(I), $SO_4$(II) → $Na_2SO_4$.'}, + {q:'Реакция $\\text{Zn}+2\\text{HCl}=\\text{ZnCl}_2+\\text{H}_2$ — это реакция…',opts:['Соединения','Разложения','Замещения','Обмена'],a:2,ex:'Металл замещает водород — реакция замещения.'} + ], + final3:[ + {q:'$A_r(\\text{H})=?$',hint:'из таблицы',unit:'',a:1,ex:'1.'}, + {q:'Продукт горения водорода в кислороде — это…',opts:['Вода','Углекислый газ','Оксид меди','Соль'],a:0,ex:'$2H_2+O_2=2H_2O$.'}, + {q:'Цвет лакмуса в кислоте?',opts:['Синий','Красный','Зелёный','Жёлтый'],a:1,ex:'Красный.'}, + {q:'Сколько из металлов Mg, Cu, Zn вытесняют водород из кислоты?',hint:'Cu — правее $H_2$',unit:'',a:2,ex:'Mg и Zn → 2.'}, + {q:'Соль — это…',opts:['Металл + кислород','Металл + кислотный остаток','Водород + остаток','Два неметалла'],a:1,ex:'Металл + кислотный остаток.'}, + {q:'Формула серной кислоты?',opts:['HCl','H₂SO₄','HNO₃','H₂CO₃'],a:1,ex:'$H_2SO_4$.'} ] }; @@ -198,6 +230,74 @@ function build_lo3(){ wireReadBtn('lo3'); } +function build_p21(){ + document.getElementById('p21-body').innerHTML = + '
§ 21 · Химия 7

Взаимодействие кислот с металлами

' + +'
Me $+$ кислота $\\to$ соль $+ \\text{H}_2\\uparrow$
' + +'
Почему одни металлы вытесняют водород из кислот, а другие нет.
' + +'
ряд активности$H_2\\uparrow$
' + +makeCard('theory','Реакция металлов с кислотами','§21','

Многие металлы реагируют с кислотами, вытесняя водород: образуются соль и газообразный водород. Например: $\\text{Zn}+\\text{H}_2\\text{SO}_4=\\text{ZnSO}_4+\\text{H}_2\\uparrow$, $\\text{Mg}+2\\text{HCl}=\\text{MgCl}_2+\\text{H}_2\\uparrow$.

') + +makeCard('rule','Ряд активности металлов','§21','
Металлы расположены в ряд активности. Металлы, стоящие левее водорода, вытесняют его из соляной и серной кислот; стоящие правее (медь, серебро) — не вытесняют.
' + +'

Очень активные металлы (натрий, калий) реагируют с кислотами слишком бурно — для получения водорода берут цинк или железо.

') + +wgt('Интерактивный ряд активности','
') + +rememberBox(['Металл + кислота → соль + водород.','Вытесняют водород только металлы левее $H_2$.','Медь и серебро с этими кислотами не реагируют.']) + +qList(['Что образуется при реакции металла с кислотой?','Почему медь не реагирует с соляной кислотой?','Запиши уравнение реакции цинка с серной кислотой.']) + +secNav('p20','lo4')+readButton('p21'); + wireReadBtn('p21'); +} + +function build_lo4(){ + document.getElementById('lo4-body').innerHTML = + '
Лабораторный опыт 4

Взаимодействие серной и соляной кислот с металлами

' + +'
Проверить, какие металлы вытесняют водород из кислот.
' + +makeCard('lab','Ход работы',null,'
  1. В пробирки с соляной и серной кислотами помести кусочки цинка, железа, магния — наблюдай выделение пузырьков газа (водорода).
  2. В пробирку с кислотой помести медь — изменений нет.
  3. Объясни результаты, пользуясь рядом активности металлов.
' + +'
Кислоты едкие; не наклоняйся над пробиркой, в которой идёт реакция.
') + +wgt('Опыт: металл + кислота','
') + +secNav('p21','p22')+readButton('lo4'); + wireReadBtn('lo4'); +} + +function build_p22(){ + document.getElementById('p22-body').innerHTML = + '
§ 22 · Химия 7

Соли — продукты замещения атомов водорода в кислотах на металлы

' + +'
Что такое соли и как составляют их формулы.
' + +'
сользамещение
' + +makeCard('theory','Что такое соли','§22','
Соли — сложные вещества, состоящие из атомов металла и кислотного остатка.
' + +'

Соли образуются, когда металл замещает водород в кислоте — это реакция замещения: $\\text{Zn}+2\\text{HCl}=\\text{ZnCl}_2+\\text{H}_2$. Названия солей: хлориды ($\\text{NaCl}$), сульфаты ($\\text{Na}_2\\text{SO}_4$), нитраты ($\\text{KNO}_3$), карбонаты ($\\text{CaCO}_3$).

') + +makeCard('example','Составление формулы соли',null,'

Кальций (II) и кислотный остаток $\\text{Cl}$ (I): НОК(2,1)=2 → $\\text{CaCl}_2$. Алюминий (III) и $\\text{SO}_4$ (II): НОК(3,2)=6 → $\\text{Al}_2(\\text{SO}_4)_3$.

') + +wgt('Конструктор солей','
') + +rememberBox(['Соль = металл + кислотный остаток.','Соль образуется при замещении водорода металлом.','Формулу соли составляют по валентности (НОК).']) + +qList(['Дай определение соли.','Составь формулу хлорида магния.','Какая реакция называется реакцией замещения?']) + +secNav('lo4','pr3')+readButton('p22'); + wireReadBtn('p22'); +} + +function build_pr3(){ + document.getElementById('pr3-body').innerHTML = + '
Практическая работа 3

Получение водорода и изучение его свойств

' + +'
Получить водород, собрать его и проверить на чистоту.
' + +makeCard('lab','Ход работы',null,'
  1. В пробирку с кусочками цинка прилей соляную кислоту — наблюдай выделение водорода: $\\text{Zn}+2\\text{HCl}=\\text{ZnCl}_2+\\text{H}_2\\uparrow$.
  2. Собери водород (он легче воздуха — держи сосуд отверстием вниз, или собирай вытеснением воды).
  3. Проверь чистоту: поднеси к отверстию пламя. Резкий хлопок — водород смешан с воздухом (нечисто); спокойное горение — чистый.
  4. Сделай вывод о свойствах водорода.
' + +'
Поджигай водород только после проверки чистоты; «гремучий газ» взрывоопасен.
') + +wgt('Проверка чистоты водорода','
') + +secNav('p22','final3')+readButton('pr3'); + wireReadBtn('pr3'); +} + +function build_final3(){ + document.getElementById('final3-body').innerHTML = + '
Финал главы 3

Босс: водород

' + +'
$H_2$ · кислоты · ряд активности · соли
' + +'
Шесть задач на всю главу. Реши все — получи звание «Знаток водорода».
' + +makeCard('rule','Шпаргалка главы 3',null,'') + +'

Реши задачи ниже — за каждую +5 XP, за полный разгром босса — звание и бонус.

' + +secNav('pr3',null); +} + /* заглушки для ещё не наполненных § (следующая волна) */ (function(){ var P = window.PARAS, B = {}; @@ -224,6 +324,11 @@ window.BUILDERS.p18 = build_p18; window.BUILDERS.p19 = build_p19; window.BUILDERS.p20 = build_p20; window.BUILDERS.lo3 = build_lo3; +window.BUILDERS.p21 = build_p21; +window.BUILDERS.lo4 = build_lo4; +window.BUILDERS.p22 = build_p22; +window.BUILDERS.pr3 = build_pr3; +window.BUILDERS.final3 = build_final3;