commit ba381a0d8736414280ff50d3f5bdee45ba5d5e97
parent 0df5a795894a1355d2ec4d026c07a952b01d33c9
Author: David Eisinger <[email protected]>
Date: Mon, 13 Oct 2025 00:13:46 -0400
Add pagination stats
Diffstat:
4 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/internal/api.go b/internal/api.go
@@ -542,7 +542,7 @@ func NewHandlerWithConfig(db *DB, cfg HandlerConfig) (http.Handler, error) {
if totalPages < 1 {
totalPages = 1
}
- pageObj := map[string]any{"page": page, "size": size, "total": totalPages, "username": u.Username, "owner": isOwnerAuthorized(r, u, db)}
+ pageObj := map[string]any{"page": page, "size": size, "total": totalPages, "count": total, "username": u.Username, "owner": isOwnerAuthorized(r, u, db)}
if query != "" {
pageObj["query"] = query
pageObj["queryEncoded"] = url.QueryEscape(query)
diff --git a/internal/web/index.html b/internal/web/index.html
@@ -84,6 +84,9 @@
<input name="q" type="search" placeholder="Search…" :value="pager && pager.query ? pager.query : ''" />
<button>Search</button>
</form>
+ <p v-if="pager" class="muted results-summary">
+ Displaying {{ (pager.count||0) === 0 ? 0 : ((pager.page-1)*pager.size + 1) }}-{{ (pager.count||0) === 0 ? 0 : ((pager.page-1)*pager.size + results.length) }} of {{ pager.count || 0 }} bookmarks
+ </p>
<div class="results">
<article v-for="b in results" :key="b.id" :class="['card', { private: !b.public }]">
<h3>
diff --git a/internal/web/styles.css b/internal/web/styles.css
@@ -13,6 +13,8 @@ header { border-bottom: 1px solid #ddd3; }
.container h1 a { color: inherit; text-decoration: none; }
.container h1 a:hover { text-decoration: underline; }
.muted { color: #666; margin: 0 0 8px 0; font-size: 13px; }
+/* Ensure the results summary has balanced vertical spacing */
+.results-summary { margin-top: 8px; }
.top-links { font-size: 13px; color: #555; display: flex; flex-direction: column; align-items: flex-end; text-align: right; gap: 10px; }
.top-links .user-line { white-space: nowrap; }
.top-links a { color: inherit; }
diff --git a/internal/web/user.html b/internal/web/user.html
@@ -46,6 +46,9 @@
<input name="q" type="search" placeholder="Search…" :value="pager && pager.query ? pager.query : ''" />
<button>Search</button>
</form>
+ <p v-if="pager" class="muted results-summary">
+ Displaying {{ (pager.count||0) === 0 ? 0 : ((pager.page-1)*pager.size + 1) }}-{{ (pager.count||0) === 0 ? 0 : ((pager.page-1)*pager.size + results.length) }} of {{ pager.count || 0 }} bookmarks
+ </p>
<div class="results">
<article v-for="b in results" :key="b.id" :class="['card', { private: !b.public }]">
<h3><a :href="b.url" target="_blank" rel="noopener noreferrer">{{ b.title || b.url }}</a></h3>
@@ -122,6 +125,9 @@
<a :href="`/u:${viewUser}.rss`" title="User RSS feed">RSS</a>
</span>
</h2>
+ <p v-if="pager" class="muted results-summary">
+ Displaying {{ (pager.count||0) === 0 ? 0 : ((pager.page-1)*pager.size + 1) }}-{{ (pager.count||0) === 0 ? 0 : ((pager.page-1)*pager.size + results.length) }} of {{ pager.count || 0 }} bookmarks
+ </p>
<div class="results">
<article v-for="b in results" :key="b.id" class="card">
<h3><a :href="b.url" target="_blank" rel="noopener noreferrer">{{ b.title || b.url }}</a></h3>