feat(xp): physics8 + chem9 + phys9 синхронизируют XP с системной геймификацией

- js/textbook-xp-widget.js: shared модуль (monkey-patch addXp +
  para-pill auto-award для учебников без addXp)
- physics8_thermal/electro/optics: добавлены теги /js/xp.js и
  /js/textbook-xp-widget.js — теперь все 74 addXp-хука пробрасываются
  в глобальный gamification (через self-award endpoint с дебаунсом)
- chemistry_9 + physics_9: те же теги. Каждый первый клик по
  .para-pill даёт +5 XP в систему (без правок 23000 LOC)
- Изначальный XP в учебниках не теряется — localStorage остаётся
  кешем, сервер — источник правды
This commit is contained in:
Maxim Dolgolyov
2026-05-27 16:36:43 +03:00
parent c2ef4f4898
commit 033c941b02
6 changed files with 118 additions and 0 deletions
+2
View File
@@ -8,6 +8,8 @@
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js"
onload="renderMathInElement(document.body,{delimiters:[{left:'$',right:'$',display:false},{left:'\\[',right:'\\]',display:true}],throwOnError:false})"></script>
<script src="/js/xp.js" defer></script>
<script src="/js/textbook-xp-widget.js" defer></script>
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700;800;900&family=Literata:opsz,wght@7..72,400;7..72,500;7..72,600;7..72,700;7..72,800&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<style>