Files
vesti/openspec/changes/selected-layout-stay/proposal.md
T

68 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# selected-layout-stay: отбор без ухода со страницы + удобный layout отобранных
## Why
Два замечания пользователя по веб-интерфейсу:
1. **«⭐ Отобрать» уводит со страницы кандидатов.** При отметке поста
(single-кнопка или bulk) редирект идёт на `/selected` — поток отбора
разрывается: после каждого отбора нужно возвращаться назад в очередь
кандидатов. Пользователь: «При отметке поста на странице кандидатов не
нужно открывать страницу отобранных — остаёмся на странице кандидатов».
2. **Layout страницы отобранных неудобный:**
- поля «Мой пост» и «Оригинальный пост» высотой всего несколько строчек
(textarea rows=8, оригинал max-height:300px) — не хватает места для
работы с текстом;
- резюме оригинального поста спрятано внизу блока оригинала — должно быть
под блоком кнопок «Обработать моделью»;
- поле комментария и кнопки публикации стоят в середине страницы — должны
быть в самом низу;
- внизу страницы остаётся пустое место (панели `height: 82vh`, контент не
растягивается) — нужно использовать всё окно браузера по высоте.
## What Changes
### 1. Отбор остаётся на кандидатах (`web/app.py`)
- `post_select()` (`POST /posts/{id}/select`): редирект после отбора —
`_cand_back(group_by, direction, own, q, src="candidates")` вместо
`src="selected"` (пост ушёл из очереди, возвращаемся в кандидаты в той же
группировке/фильтрах).
- `candidates_bulk()` `action == "select"`: редирект на `back` (текущая
группировка + фильтры, src=candidates из скрытого поля формы) вместо
перехода в `/selected`.
### 2. Layout отобранных (`web/templates/selected.html`)
Правая панель перестраивается по вертикали (flex-колонка на всю высоту окна):
1. Заголовок поста + бейджи (как сейчас).
2. Блок кнопок «🤖 Обработать моделью / ✍️ Переписать / 🚫 Отклонить».
3. **Резюме** (`selected.summary`) — сразу под кнопками, отдельный блок.
4. Разделитель.
5. «Мой пост» (textarea) + «Оригинальный пост» (текст+медиа) — **растянуты на
всю оставшуюся высоту** (flex-grow-1, min-height:0, оригинал — overflow-auto).
6. **В самом низу**: поле «💬 Мой комментарий» + «✅ Опубликовать» /
«💾 Сохранить комментарий» (border-top поверх).
Высота панелей: `82vh` → `calc(100vh - 160px)` (navbar 4.5rem + заголовок +
форма фильтров) — страница использует всё окно, пустого места внизу нет.
То же для левой панели (`max-height`) и для страницы кандидатов
(`web/templates/candidates.html`), чтобы поведение было консистентным.
## Why Not
- Не менять переход после «✅ Опубликовать» (на опубликованные) — осознанное
поведение, не просили.
- Не добавлять «вернуться к следующему кандидату» автоматом — редирект в
очередь с сохранением фильтров достаточен и предсказуем.
## Impact
- Файлы: `web/app.py` (2 точки редиректа), `web/templates/selected.html`
(правая панель), `web/templates/candidates.html` (высоты панелей).
- Данные: без изменений.
- Сервис: `vesti-web` (:8400) — перезапуск.
- Rollback: откатить коммит/вернуть редиректы на `src="selected"` и высоты
`82vh`, перезапустить.