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

4.7 KiB
Raw Blame History

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, перезапустить.