feat(catalog): авто-mark-as-read + Физика 8 как полноценный хаб

A. textbook-tracker.js: первый клик по .para-pill теперь автоматически
   помечает параграф как прочитанный. «Прочитано» = «открыто». Сразу
   даёт осмысленный счётчик для chemistry-9 и physics-9 в каталоге.
   Slug fallback: physics8_* → physics-8-* (корректный слаг).

B. Физика 8 — миграция 015:
   - 3 children: physics-8-thermal / electro / optics с parent_slug
   - parent физики-8 обновлён: para_count=40, описание трёх разделов
   - sub-файлы получили textbook-tracker.js + правильный слаг
   - physics_8.html переписана в стиле algebra_8_hub: 3 цветные
     карточки, агрегированный прогресс, ачивка «Эксперт физики 8»

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-27 17:00:36 +03:00
parent c806a5137a
commit 1a347650f4
6 changed files with 207 additions and 168 deletions
+8 -1
View File
@@ -12,7 +12,9 @@
if (m) return m[1];
// Fallback for direct file access during dev
const fname = location.pathname.split('/').pop().replace(/\.html$/, '');
return fname.replace(/_/g, '-');
// Normalise physics8_* → physics-8-* (e.g. physics8_thermal → physics-8-thermal)
const norm = fname.replace(/^physics8_/, 'physics-8-');
return norm.replace(/_/g, '-');
})();
const lsKey = 'textbook_progress_' + slug;
@@ -196,6 +198,11 @@
if (!pill) return;
const key = pill.dataset.para;
setLastPara(key);
// Auto-mark-as-read: первый клик по пилюле = открыл параграф = считается прочитанным
// (мягкая семантика — соответствует реальному поведению учеников)
if (!localState.read.includes(key)) {
markRead(key);
}
});
}