feat(math6): stepPlayer — все «Разборы по шагам» стали интерактивными
Math6Anim.stepPlayer (DOM): пошаговый плеер с кнопками Назад/Дальше/Авто и точками прогресса, рендерит KaTeX по шагам. Math6Anim.stepifyExamples сканирует секцию и превращает карточки «Разбор по шагам» (<ol> в теле) в такой плеер. Движок зовёт stepifyExamples в goTo (guarded) → автоматически во ВСЕХ главах и параграфах, включая простые работы с дробями/столбиком. Подключён math6_anim в Гл.2,3 (теперь во всех 6). Тесты math6: 20/20. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -195,6 +195,21 @@ test('анимации: canvas-демо монтируются (headless-safe)',
|
||||
assert.deepEqual(r5.errors, [], 'ch5 без ошибок: ' + r5.errors.join(' | '));
|
||||
});
|
||||
|
||||
test('stepPlayer: «Разбор по шагам» становится интерактивным плеером', async () => {
|
||||
// Глава 5 §1 — есть карточка «Разбор по шагам»
|
||||
const r5 = await loadDom('math_6_ch5.html');
|
||||
r5.doc.defaultView.goTo('p1'); await wait(120);
|
||||
assert.ok(r5.doc.querySelector('#p1-body .m6-step-view'), 'плеер шагов §5.1');
|
||||
assert.ok(r5.doc.querySelectorAll('#p1-body [data-act="next"]').length >= 1, 'кнопка «Дальше» §5.1');
|
||||
assert.ok(r5.doc.querySelectorAll('#p1-body .m6-step-dots span').length >= 3, 'точки шагов §5.1');
|
||||
assert.deepEqual(r5.errors, [], 'ch5 без ошибок: ' + r5.errors.join(' | '));
|
||||
// Глава 2 §1
|
||||
const r2 = await loadDom('math_6_ch2.html');
|
||||
r2.doc.defaultView.goTo('p1'); await wait(120);
|
||||
assert.ok(r2.doc.querySelector('#p1-body .m6-step-view'), 'плеер шагов §2.1');
|
||||
assert.deepEqual(r2.errors, [], 'ch2 без ошибок: ' + r2.errors.join(' | '));
|
||||
});
|
||||
|
||||
test('hub: 6 карточек глав + курсовой финал', async () => {
|
||||
const { doc, errors } = await loadDom('math_6_hub.html');
|
||||
assert.deepEqual(errors, [], 'нет ошибок: ' + errors.join(' | '));
|
||||
|
||||
Reference in New Issue
Block a user