fe2cd12049
The control writes series.force_poll_at (column landed in migration 0014) and never commands the poller: pending is derived as force_poll_at > latest_checked_at and self-clears because the check stamp is written before the fetch. The due query's forced flag overrides the rest cutoff, the Sighting-deferral and finished-only clauses, jumps the queue, and wakes a sleeping browser Lane; it never overrides an empty series_url, the Bookmarks join, the refusal backoff, the sidecar-down skip or the Lane gap. ADRs: 0013-commands-through-the-database.
36 lines
1.6 KiB
HTML
36 lines
1.6 KiB
HTML
{{/* Per-Series page: one address per Series, keyed "<site>:<series_id>" so the
|
|
list row is one hop from it. Everything here is a Series-level fact plus
|
|
the anonymous Reader count. The Check now control lands in its own .dform
|
|
below the (empty) .detail-grid; the pending marker rides the meta line
|
|
with the other marks. */}}
|
|
{{define "series-detail"}}
|
|
<a class="ghost detail-back" href="/admin/series">← Series</a>
|
|
<h1 class="detail-title">{{.Title}}</h1>
|
|
<p class="detail-key">{{.Key}} · {{.Site}} · {{.Kind}}</p>
|
|
{{if .Cover}}<div class="cover"><img src="{{.Cover}}" alt="" loading="lazy"></div>
|
|
{{else}}<div class="cover"></div>{{end}}
|
|
{{template "series-detail-meta" .}}
|
|
<div class="detail-grid"></div>
|
|
{{if .CanPoll}}
|
|
<div class="dform">
|
|
<div class="field"><a class="ghost act" hx-post="/admin/series/{{.Key}}/poll" hx-target="#detail-meta" hx-swap="outerHTML" href="#">Check now</a></div>
|
|
</div>
|
|
{{end}}
|
|
{{end}}
|
|
|
|
{{/* series-detail-meta is the meta line, and the answer a Check now press on
|
|
the detail page swaps into its place: the same marks, re-rendered after
|
|
the stamp so the pending marker shows. */}}
|
|
{{define "series-detail-meta"}}
|
|
<div class="detail-meta" id="detail-meta">
|
|
<span>ch {{.Chapter}}</span>
|
|
<span>checked {{.Checked}}</span>
|
|
<span>{{.Readers}} readers</span>
|
|
{{if .Pending}}<span class="mark">{{.Requested}}</span>{{end}}
|
|
{{if .Unpollable}}<span class="mark">unpollable</span>{{end}}
|
|
{{if .NoCover}}<span class="mark">no cover</span>{{end}}
|
|
{{if .Orphan}}<span class="mark">orphan</span>{{end}}
|
|
{{if .SightingRaised}}<span class="mark">sighting-raised</span>{{end}}
|
|
</div>
|
|
{{end}}
|