docs(admin-redesign): mark phase 2 done + handoff notes for phase 3+

This commit is contained in:
Maxim Dolgolyov
2026-05-16 22:52:24 +03:00
parent 92030b462c
commit 8a815ca3eb
3 changed files with 133 additions and 45 deletions
+18 -4
View File
@@ -5,7 +5,7 @@
(будет обновляться после каждой фазы)
- ✅ Phase 1 implemented — `window.AdminRouter` обёртывает старый `switchTab` (hash ↔ tab двусторонне). `switchTab` принимает 2-й аргумент `{ fromRouter: true }` для предотвращения рекурсии. Default = `#stats`. Файлы: `frontend/js/admin/router.js` (новый), `frontend/admin.html` (+1 строка), `frontend/js/admin/admin.js` (модификация `switchTab` + IIFE `initAdminRouter`).
- Phase 2 not started — все 13 секций в admin.js монолите
- Phase 2 implemented (commit 92030b4) — admin.js ужат с ~3591L до 701L. Все 13 plan-tabs живут в `frontend/js/admin/sections/*.js` (IIFE pattern) + `frontend/js/admin/_shared.js` (window.AdminCtx). switchTab() диспетчит в `AdminSections[ROUTE_TO_SECTION[name]].init()`. Lazy-load работает (inited флаг внутри каждой IIFE). System tabs (topics/audit/errors/health/classroom/avatars) остались inline в admin.js — Phase 2 их не extract'ил.
- ⬜ Phase 3-6 not started
## Temporary Workarounds
@@ -49,23 +49,37 @@ AdminRouter.navigate('#users/123', { replace: true, silent: true });
- `goAddQuestion(slug)` и подобные cross-tab onclick handlers должны работать
- Старые ссылки `<a href="#stats">` (если есть) тоже
### Конвенции вновь создаваемых модулей
### Конвенции вновь создаваемых модулей (Phase 2 закреплено)
Каждая section (фаза 2):
Каждая section:
```js
// js/admin/sections/<name>.js
(function () {
'use strict';
let inited = false;
async function load() { /* ... */ }
async function load() { /* fetch + render */ }
// Optional onclick handlers used by HTML / dynamic templates:
window.handlerX = handlerX;
window.AdminSections = window.AdminSections || {};
window.AdminSections.<name> = {
init: async () => { if (inited) return; inited = true; await load(); },
reload: load,
// Optional extras for cross-section calls (e.g. questions.openModal):
// openModal: (...) => { ... },
};
})();
```
Shared utilities — на `window.AdminCtx` (см. `_shared.js`):
- `user`, `isTeacher`, `isAdmin` (filled by admin.js)
- `MODES`, `DIFFS`, `DIFF_LABELS`, `TYPE_LABELS`
- `pctClass`, `fmtDate`, `fmtTime`, `fmtDuration`
- `renderMath`, `qTypeBadge`, `qOptsPreview`
- `renderPgnControls`, `ensurePgnStyles`
ROUTE_TO_SECTION map в admin.js — добавлять новые ключи при добавлении секций
(Phase 3 = `overview`, Phase 6 = `user`/`session` deep pages).
Router (фаза 1):
```js
// js/admin/router.js