Просмотр: блок «Распознано как» — таблица поле→значение, +сезон/режиссёр
Блок распознавания на /download/{id} переведён из карточки с постером в
единую таблицу kv (поле слева, значение справа) — убирает неоднозначность
трёх одинаковых названий. Поля: название, ориг. название, тип, сезон
(для сериала), год, режиссёр (зарезервировано «—»), база, уверенность.
Мёртвый CSS карточки/постера удалён.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -32,6 +32,7 @@ type downloadDetailView struct {
|
|||||||
IsSeries bool
|
IsSeries bool
|
||||||
RecTitle string
|
RecTitle string
|
||||||
OriginalTitle string
|
OriginalTitle string
|
||||||
|
Season string // сводка сезонов для сериала (пусто для фильма)
|
||||||
Year int
|
Year int
|
||||||
Provider string
|
Provider string
|
||||||
ProviderID string
|
ProviderID string
|
||||||
@@ -110,6 +111,9 @@ func (s *server) handleDownload(w http.ResponseWriter, r *http.Request) {
|
|||||||
view.IsSeries = rd.Plan.Type == "series"
|
view.IsSeries = rd.Plan.Type == "series"
|
||||||
view.RecTitle = rd.Plan.Title
|
view.RecTitle = rd.Plan.Title
|
||||||
view.OriginalTitle = rd.Plan.OriginalTitle
|
view.OriginalTitle = rd.Plan.OriginalTitle
|
||||||
|
if view.IsSeries {
|
||||||
|
view.Season = seasonSummary(rd.Plan)
|
||||||
|
}
|
||||||
view.Year = rd.Plan.Year
|
view.Year = rd.Plan.Year
|
||||||
switch rd.Provider {
|
switch rd.Provider {
|
||||||
case "", "none":
|
case "", "none":
|
||||||
|
|||||||
@@ -434,18 +434,6 @@ table.tbl .size{font-family:var(--mono);color:var(--text-dim);white-space:nowrap
|
|||||||
/* ---------- 17. Страница загрузки ---------- */
|
/* ---------- 17. Страница загрузки ---------- */
|
||||||
.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--sp-4);align-items:start}
|
.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:var(--sp-4);align-items:start}
|
||||||
|
|
||||||
/* распознано как — карточка с постером */
|
|
||||||
.meta-card{display:flex;gap:var(--sp-4);align-items:flex-start}
|
|
||||||
.poster{flex:none;width:104px;height:156px;border-radius:var(--r-md);overflow:hidden;
|
|
||||||
border:1px solid var(--border);
|
|
||||||
background-image:repeating-linear-gradient(135deg,var(--surface-2) 0 9px,var(--surface-3) 9px 18px);
|
|
||||||
display:grid;place-items:center}
|
|
||||||
.poster span{font-family:var(--mono);font-size:10px;color:var(--text-faint);
|
|
||||||
background:var(--surface);padding:2px 6px;border-radius:4px}
|
|
||||||
.meta-body{flex:1;min-width:0}
|
|
||||||
.meta-body .h{font-size:var(--fs-lg);font-weight:700;letter-spacing:-.01em;margin:0 0 2px;line-height:1.2}
|
|
||||||
.meta-body .o{font-family:var(--mono);font-size:var(--fs-sm);color:var(--text-faint);margin:0 0 var(--sp-3)}
|
|
||||||
|
|
||||||
/* key-value список */
|
/* key-value список */
|
||||||
.kv{display:grid;grid-template-columns:auto 1fr;gap:7px var(--sp-4);font-size:var(--fs-sm);margin:0}
|
.kv{display:grid;grid-template-columns:auto 1fr;gap:7px var(--sp-4);font-size:var(--fs-sm);margin:0}
|
||||||
.kv dt{color:var(--text-faint);white-space:nowrap}
|
.kv dt{color:var(--text-faint);white-space:nowrap}
|
||||||
@@ -491,8 +479,6 @@ table.tbl .size{font-family:var(--mono);color:var(--text-dim);white-space:nowrap
|
|||||||
.nav a{padding:6px 9px}
|
.nav a{padding:6px 9px}
|
||||||
.toolbar{flex-direction:column;align-items:stretch}
|
.toolbar{flex-direction:column;align-items:stretch}
|
||||||
.detail-grid{grid-template-columns:1fr}
|
.detail-grid{grid-template-columns:1fr}
|
||||||
.meta-card{flex-direction:column}
|
|
||||||
.poster{width:88px;height:132px}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* доступность фокуса */
|
/* доступность фокуса */
|
||||||
|
|||||||
@@ -41,18 +41,16 @@
|
|||||||
<div class="section">
|
<div class="section">
|
||||||
<div class="section-head"><h2>Распознано как</h2></div>
|
<div class="section-head"><h2>Распознано как</h2></div>
|
||||||
{{if .HasPlan}}
|
{{if .HasPlan}}
|
||||||
<div class="meta-card">
|
|
||||||
<div class="meta-body">
|
|
||||||
<p class="h">{{.RecTitle}}</p>
|
|
||||||
{{if .OriginalTitle}}<p class="o">{{.OriginalTitle}}</p>{{end}}
|
|
||||||
<dl class="kv">
|
<dl class="kv">
|
||||||
|
<dt>Название</dt><dd>{{.RecTitle}}</dd>
|
||||||
|
<dt>Ориг. название</dt><dd class="mono">{{if .OriginalTitle}}{{.OriginalTitle}}{{else}}<span class="faint">—</span>{{end}}</dd>
|
||||||
<dt>Тип</dt><dd>{{if .IsSeries}}сериал{{else if eq .MediaType "movie"}}фильм{{else}}{{.MediaType}}{{end}}</dd>
|
<dt>Тип</dt><dd>{{if .IsSeries}}сериал{{else if eq .MediaType "movie"}}фильм{{else}}{{.MediaType}}{{end}}</dd>
|
||||||
{{if .Year}}<dt>Год</dt><dd>{{.Year}}</dd>{{end}}
|
{{if .IsSeries}}<dt>Сезон</dt><dd>{{if .Season}}{{.Season}}{{else}}<span class="faint">—</span>{{end}}</dd>{{end}}
|
||||||
<dt>База</dt><dd>{{if .Provider}}{{if .MatchURL}}<a class="ext-link" href="{{.MatchURL}}" target="_blank" rel="noopener">{{.Provider}} · {{.ProviderID}} ↗</a>{{else}}{{.Provider}} · <span class="mono">{{.ProviderID}}</span>{{end}}{{else if .NoBase}}без базы{{else}}—{{end}}</dd>
|
<dt>Год</dt><dd>{{if .Year}}{{.Year}}{{else}}<span class="faint">—</span>{{end}}</dd>
|
||||||
{{if .Confidence}}<dt>Уверенность</dt><dd class="mono">{{.Confidence}}</dd>{{end}}
|
<dt>Режиссёр</dt><dd><span class="faint">—</span></dd>
|
||||||
|
<dt>База</dt><dd>{{if .Provider}}{{if .MatchURL}}<a class="ext-link" href="{{.MatchURL}}" target="_blank" rel="noopener">{{.Provider}} · {{.ProviderID}} ↗</a>{{else}}{{.Provider}} · <span class="mono">{{.ProviderID}}</span>{{end}}{{else if .NoBase}}без базы{{else}}<span class="faint">—</span>{{end}}</dd>
|
||||||
|
<dt>Уверенность</dt><dd class="mono">{{if .Confidence}}{{.Confidence}}{{else}}<span class="faint">—</span>{{end}}</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{else}}
|
{{else}}
|
||||||
<p class="muted" style="margin:0">Ещё не распознано.</p>
|
<p class="muted" style="margin:0">Ещё не распознано.</p>
|
||||||
{{end}}
|
{{end}}
|
||||||
|
|||||||
Reference in New Issue
Block a user