feat: replace ranking pages input with Top 100/300/500/All buttons
Some checks failed
CI / Lint (push) Has been cancelled
CI / Test (push) Has been cancelled
CI / Build (push) Has been cancelled

This commit is contained in:
Admin
2026-03-01 19:48:31 +05:00
parent 26302058d0
commit 03d7cc6234

View File

@@ -268,7 +268,7 @@ const rankingTmpl = `
<p class="text-zinc-400 mt-1">Top novels from novelfire.net</p>
{{if .CachedAt}}<p class="text-xs text-zinc-500 mt-1">Cached {{.CachedAt}}</p>{{end}}
</div>
<div class="flex gap-2 mt-1">
<div class="flex gap-2 mt-1 flex-wrap items-center">
<a href="/ranking/view"
hx-get="/ranking/view"
hx-target="#main-content"
@@ -277,21 +277,18 @@ const rankingTmpl = `
class="text-sm px-3 py-1.5 rounded-lg bg-zinc-700 hover:bg-zinc-600 text-white inline-flex items-center gap-1">
View Markdown
</a>
<form
hx-post="/ranking/refresh"
<span class="text-xs text-zinc-500 ml-1">Refresh:</span>
{{range .RefreshPages}}
<form hx-post="/ranking/refresh"
hx-target="#ranking-refresh-status"
hx-swap="innerHTML"
class="flex items-center gap-2">
<label class="flex items-center gap-1.5">
<span class="text-xs text-zinc-400 whitespace-nowrap">Pages</span>
<input type="number" name="pages" value="1" min="1"
class="w-16 rounded-lg bg-zinc-800 border border-zinc-700 px-2 py-1 text-sm text-zinc-100 text-center focus:outline-none focus:border-amber-500 transition-colors" />
</label>
hx-swap="innerHTML">
<input type="hidden" name="pages" value="{{.Pages}}">
<button type="submit"
class="text-sm px-3 py-1.5 rounded-lg bg-amber-700 hover:bg-amber-600 text-white inline-flex items-center gap-2">
Refresh Rankings
class="text-sm px-3 py-1.5 rounded-lg bg-amber-800 hover:bg-amber-600 text-white transition-colors">
{{.Label}}
</button>
</form>
{{end}}
</div>
</div>
<div id="ranking-refresh-status" class="mt-2"></div>
@@ -391,6 +388,21 @@ func toRankingViewItems(items []writer.RankingItem, localSlugs map[string]bool)
return out
}
// refreshPage is one entry in the ranking refresh pagination bar.
type refreshPage struct {
Label string
Pages int // 0 means "all pages"
}
// rankingRefreshPages defines the ordered set of refresh buttons shown on the
// ranking page. Pages == 0 means "fetch all pages".
var rankingRefreshPages = []refreshPage{
{"Top 100", 1},
{"Top 300", 3},
{"Top 500", 5},
{"All", 0},
}
// handleRanking serves the ranking page from the cached ranking.md file.
// It does NOT trigger a live scrape; use POST /ranking/refresh for that.
func (s *Server) handleRanking(w http.ResponseWriter, r *http.Request) {
@@ -409,7 +421,12 @@ func (s *Server) handleRanking(w http.ResponseWriter, r *http.Request) {
_ = t.Execute(&buf, struct {
Books interface{}
CachedAt string
}{Books: toRankingViewItems(rankingItems, s.writer.LocalSlugs()), CachedAt: cachedAt})
RefreshPages []refreshPage
}{
Books: toRankingViewItems(rankingItems, s.writer.LocalSlugs()),
CachedAt: cachedAt,
RefreshPages: rankingRefreshPages,
})
s.respond(w, r, "Rankings", buf.String())
}