diff --git a/backend/internal/web/admin_overview.go b/backend/internal/web/admin_overview.go index 06a4304..1851a17 100644 --- a/backend/internal/web/admin_overview.go +++ b/backend/internal/web/admin_overview.go @@ -98,11 +98,7 @@ func (h *Handler) overviewView() (overviewView, error) { // "hygiene" figure. hygiene := make([]fig, 0, len(seriesFilterOrder)-1) for _, name := range seriesFilterOrder[1:] { - hygiene = append(hygiene, fig{ - Label: seriesFilterLabels[name], - Href: zeroHref(totals[name], seriesListHref(name, "", "", 0)), - Count: totals[name], - }) + hygiene = append(hygiene, door(seriesFilterLabels[name], totals[name], seriesListHref(name, "", "", 0))) } view.Hygiene = hygiene @@ -112,10 +108,10 @@ func (h *Handler) overviewView() (overviewView, error) { novel += sh.Novel } view.Library = []fig{ - {Label: "Series", Href: zeroHref(totals[store.SeriesFilterAll], seriesListHref("", "", "", 0)), Count: totals[store.SeriesFilterAll]}, - {Label: "Manga", Href: zeroHref(manga, seriesListHref("", "", store.KindManga, 0)), Count: manga}, - {Label: "Novels", Href: zeroHref(novel, seriesListHref("", "", store.KindNovel, 0)), Count: novel}, - {Label: "Readers", Href: zeroHref(len(readers), "/admin/readers"), Count: len(readers)}, + door("Series", totals[store.SeriesFilterAll], seriesListHref("", "", "", 0)), + door("Manga", manga, seriesListHref("", "", store.KindManga, 0)), + door("Novels", novel, seriesListHref("", "", store.KindNovel, 0)), + door("Readers", len(readers), "/admin/readers"), } // One row per Site with any Series, from the All shapes; the hygiene @@ -139,10 +135,10 @@ func (h *Handler) overviewView() (overviewView, error) { Site: sh.Site, SiteHref: seriesListHref("", sh.Site, "", 0), Figs: []fig{ - {Count: sh.Total, Href: zeroHref(sh.Total, seriesListHref("", sh.Site, "", 0))}, - {Count: siteCounts[store.SeriesFilterNoCover][sh.Site], Href: zeroHref(siteCounts[store.SeriesFilterNoCover][sh.Site], seriesListHref(store.SeriesFilterNoCover, sh.Site, "", 0))}, - {Count: siteCounts[store.SeriesFilterNeverChecked][sh.Site], Href: zeroHref(siteCounts[store.SeriesFilterNeverChecked][sh.Site], seriesListHref(store.SeriesFilterNeverChecked, sh.Site, "", 0))}, - {Count: siteCounts[store.SeriesFilterStale][sh.Site], Href: zeroHref(siteCounts[store.SeriesFilterStale][sh.Site], seriesListHref(store.SeriesFilterStale, sh.Site, "", 0))}, + door("", sh.Total, seriesListHref("", sh.Site, "", 0)), + door("", siteCounts[store.SeriesFilterNoCover][sh.Site], seriesListHref(store.SeriesFilterNoCover, sh.Site, "", 0)), + door("", siteCounts[store.SeriesFilterNeverChecked][sh.Site], seriesListHref(store.SeriesFilterNeverChecked, sh.Site, "", 0)), + door("", siteCounts[store.SeriesFilterStale][sh.Site], seriesListHref(store.SeriesFilterStale, sh.Site, "", 0)), }, } if p, ok := passBySite[sh.Site]; ok { @@ -155,13 +151,15 @@ func (h *Handler) overviewView() (overviewView, error) { return view, nil } -// zeroHref is the zero rule: a measured zero keeps its figure but loses its -// door, because following the link lands on an empty list. -func zeroHref(count int, href string) string { +// door is one figure with its door: the list that counts it. A measured zero +// is still a real figure, but the door closes — following it would land on an +// empty list. The count is written once so the figure and what it links to +// cannot drift apart. +func door(label string, count int, href string) fig { if count == 0 { - return "" + href = "" } - return href + return fig{Label: label, Href: href, Count: count} } // overviewVerdict decides the landing page's one line from the latest pass diff --git a/backend/internal/web/templates/overview.html b/backend/internal/web/templates/overview.html index 29dadb5..701772d 100644 --- a/backend/internal/web/templates/overview.html +++ b/backend/internal/web/templates/overview.html @@ -4,7 +4,7 @@ figures link, what a Lane's state means — is made in Go; this template only prints. */}} {{define "overview"}} -
{{.Verdict}}{{if .HasCounts}}· {{.Waiting}} series waiting · {{.Unchecked}} unchecked over 12h{{end}}
+{{.Verdict}} {{if .HasCounts}}· {{.Waiting}} series waiting · {{.Unchecked}} unchecked over 12h{{end}}