fix(web): verdict space per design mock, single door() fig builder (#143)

This commit is contained in:
2026-08-22 00:56:49 +07:00
parent c432a3be30
commit 00fa237151
2 changed files with 17 additions and 19 deletions
+16 -18
View File
@@ -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