docs: закрытие сессии 2026-09-17 (keep-bulk-checkboxes)

This commit is contained in:
kpa39l
2026-09-17 17:33:42 +00:00
parent c8fe5f7c85
commit 745680a3a0
3 changed files with 36 additions and 5 deletions
+23
View File
@@ -598,3 +598,26 @@ sudo systemctl restart vesti-web && systemctl is-active vesti-web # active
В git status на момент ae8af8d остаются НЕЗАКОММИЧЕННЫМИ/НЕЗАПУШЕННЫМИ изменения прошлых сессий (запись «Коммит в git (НЕ закоммичено…)» выше):
- crawler/{crawl_sources,rss_crawler,worker}.py (??), openspec/changes/{crawler-queue,rss-crawler,rewrite-as-author}/ (??), openspec/changes/archive/2026-09-15-sources-admin/, openspec/specs/sources-admin/, web/templates/{crawlers,sources}.html (??), classifier/classify.py, classifier/keywords.py, publisher/card.py, sources/{sources.py,sources.yaml}, config.py, requirements.txt, AGENT.MD, .env.example, WALKTHROUGH.md, TODO.md (M).
- СЛЕДУЮЩЕЙ СЕССИИ: проверить, закоммитить и запушить на gitverse (git add -A, commit, push), НЕ трогая db/ (в .gitignore).
## 2026-09-17 — Сессия: фикс чекбоксов bulk-выбора (change keep-bulk-checkboxes)
### Проблема
При массовом отборе кандидатов пользователь отмечает несколько постов чекбоксами, затем открывает один (ссылка ?selected=N) — страница перезагружается, checked ставится только текущему посту, остальные отметки теряются. Нужно, чтобы отметки сохранялись при навигации.
### Решение (через OpenSpec)
- change `keep-bulk-checkboxes` (proposal/design/tasks/specs/candidates-bulk-selection), валиден с первого раза.
- Механизм: состояние чекбоксов (Set id) хранится в sessionStorage браузера по ключам `vesti_bulk_candidates` (страница /candidates) и `vesti_bulk_selected` (страница /selected); при загрузке страницы скрипт восстанавливает checked и пересчитывает badge `sel-count`; при submit bulk-формы отметки очищаются (чтобы не «протухали»).
- Изменены только web/templates/candidates.html и web/templates/selected.html. Сервер/БД не трогали; рестарт не нужен (Jinja2 перечитывает шаблоны; при сомнении — sudo systemctl restart vesti-web).
### Баг, найденный в процессе (важно!)
- Чекбоксы лежат ВНЕ `<form id="bulk-form">` — связаны атрибутом `form="bulk-form"`. Исходный селектор `#bulk-form input[name="ids"]` возвращал 0 элементов → скрипт не цеплял чекбоксы вовсе (счётчик работал только потому, что чекбокс открытого поста сервер помечал checked атрибутом). Заменено на глобальный `document.querySelectorAll('input[name="ids"]')`.
### Проверка (браузерный E2E, Camofox)
- Логин через curl (ADMIN_PASSWORD из .env) → cookie, подстановка в браузер.
- /candidates: отметил 24 и 52 → sessionStorage `["24","52"]`, badge 3 (12 текущий + 24 + 52). Открыл пост 52 → 24 и 52 остались отмеченными, badge 2.
- /selected: отметил 109 и 110 → sessionStorage `["109","110"]`, badge 3 (85 + 109 + 110). Открыл пост 110 → 109 и 110 отмечены, badge 2.
- Изоляция: ключи candidates/selected независимы (cand `["24","52"]` не влияет на selected).
### Коммит
- `c8fe5f7` — fix(web): keep bulk checkbox selection across post navigation. Запушен в gitverse (8777a0c..c8fe5f7).
- В рабочем дереве остаются чужие незакоммиченные наработки (crawler/*, classifier/*, sources/* и др.) — НЕ трогал.