UI/UX списка и карточки загрузки: серверные фильтр/поиск/пагинация, матч-ссылка, имя раздачи (web-ui-list-detail)
- Список: серверные фильтр по группе состояний, поиск и пагинация (GET
f/q/page/all, по 25), сортировка по времени добавления в qBittorrent
(added_on) с фолбеком на created_at и tie-break по id.
- Заголовок загрузки = имя раздачи (display_name) → распознанное название →
усечённый источник; сырой magnet вынесен в блок «Информация о торренте».
- Матч метабазы показан ссылкой на запись (страница загрузки и ревью);
URL берётся у выбранного кандидата либо строится по provider+id и типу.
- Полировка вёрстки; клиентская JS-фильтрация убрана (всё серверное, без JS).
- Миграция 0005 (display_name, source_added_at); воркер однократно
фиксирует source_added_at при поллинге/усыновлении; ER-схема обновлена.
- OpenSpec: дельты влиты в specs/{web-ui,ingest}, change заархивирован.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -261,12 +261,19 @@ details.spoiler{margin-top:var(--sp-3)}
|
||||
.toggle-line{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--text-dim);
|
||||
margin-bottom:var(--sp-4)}
|
||||
.toggle-line label{display:inline-flex;align-items:center;gap:7px;cursor:pointer}
|
||||
.toggle-line a{display:inline-flex;align-items:center;gap:7px;color:var(--text-dim)}
|
||||
.toggle-line a:hover{color:var(--text)}
|
||||
|
||||
/* пагинация */
|
||||
.pager{display:flex;align-items:center;justify-content:center;gap:var(--sp-2);
|
||||
margin-top:var(--sp-5);font-size:var(--fs-sm);color:var(--text-dim)}
|
||||
.pager .btn{min-width:36px}
|
||||
|
||||
/* блок «Информация о торренте» — сырой источник + копирование */
|
||||
.src-block{display:flex;align-items:flex-start;gap:var(--sp-2);margin-top:var(--sp-3)}
|
||||
.src-full{flex:1;font-family:var(--mono);font-size:var(--fs-xs);color:var(--text-dim);
|
||||
word-break:break-all}
|
||||
|
||||
/* ---------- 10. Секция ревью ---------- */
|
||||
.section{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);
|
||||
padding:var(--sp-5);margin-bottom:var(--sp-4);box-shadow:var(--shadow-sm)}
|
||||
@@ -338,9 +345,11 @@ table.tbl tr:last-child td{border-bottom:none}
|
||||
table.tbl tr.ignored td{opacity:.45}
|
||||
table.tbl tr.invalid{background:var(--st-err-bg)}
|
||||
table.tbl .fname{font-family:var(--mono);font-size:var(--fs-xs);word-break:break-all}
|
||||
table.tbl .link-to{display:flex;align-items:baseline;gap:6px;margin-top:5px;
|
||||
font-family:var(--mono);font-size:var(--fs-xs);flex-wrap:wrap}
|
||||
table.tbl .link-to .arr{color:var(--text-faint);flex:none}
|
||||
/* Стрелка приклеена к строке источника — источник и цель идут строго друг под
|
||||
другом (цель не смещена ведущей стрелкой). */
|
||||
table.tbl .fname .arr{color:var(--text-faint)}
|
||||
table.tbl .link-to{margin-top:5px;font-family:var(--mono);font-size:var(--fs-xs);
|
||||
word-break:break-all}
|
||||
table.tbl .link-to .dir{color:var(--text-faint)}
|
||||
table.tbl .link-to .src{color:var(--st-ok)}
|
||||
table.tbl .link-to .no-link{color:var(--text-faint);font-style:italic;font-family:var(--font)}
|
||||
|
||||
Reference in New Issue
Block a user