docs(admin-redesign): mark phase 2 done + handoff notes for phase 3+
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user