fix: standard pagination with ellipsis (1 … cur±2 … N)
This commit is contained in:
parent
0f4c75fe26
commit
bc085533a1
@ -1958,20 +1958,32 @@ func (u *UI) pageAlarms(w http.ResponseWriter, r *http.Request) {
|
||||
if u.alarmCollector != nil {
|
||||
data.AlarmRecords, data.TotalAlarmCount = u.alarmCollector.GetFiltered(from, to, perPage, (page-1)*perPage)
|
||||
}
|
||||
// Calculate total pages and visible page range (current ± 3)
|
||||
// Calculate total pages and build page list: 1, ..., cur-2, cur-1, cur, cur+1, cur+2, ..., N
|
||||
if data.TotalAlarmCount > 0 {
|
||||
data.TotalAlarmPages = (data.TotalAlarmCount + perPage - 1) / perPage
|
||||
start := page - 3
|
||||
if start < 1 {
|
||||
start = 1
|
||||
tp := data.TotalAlarmPages
|
||||
// Always include first and last; include current ±2; fill gaps with -1 (ellipsis).
|
||||
seen := map[int]bool{}
|
||||
add := func(p int) {
|
||||
if p >= 1 && p <= tp && !seen[p] {
|
||||
seen[p] = true
|
||||
data.PageNumbers = append(data.PageNumbers, p)
|
||||
}
|
||||
}
|
||||
end := page + 3
|
||||
if end > data.TotalAlarmPages {
|
||||
end = data.TotalAlarmPages
|
||||
add(1)
|
||||
for p := page - 2; p <= page+2; p++ {
|
||||
add(p)
|
||||
}
|
||||
for p := start; p <= end; p++ {
|
||||
data.PageNumbers = append(data.PageNumbers, p)
|
||||
add(tp)
|
||||
// Insert -1 for gaps > 1.
|
||||
compact := make([]int, 0, len(data.PageNumbers))
|
||||
for i, p := range data.PageNumbers {
|
||||
if i > 0 && p > data.PageNumbers[i-1]+1 {
|
||||
compact = append(compact, -1)
|
||||
}
|
||||
compact = append(compact, p)
|
||||
}
|
||||
data.PageNumbers = compact
|
||||
}
|
||||
u.render(w, r, "alarms", data)
|
||||
}
|
||||
|
||||
@ -64,8 +64,12 @@
|
||||
<a href="/ui/alarms?from={{$from}}&to={{$to}}&per_page={{$pp}}&page={{sub .CurrentPage 1}}" class="btn ghost" style="font-size:11px;padding:2px 6px">‹</a>
|
||||
{{end}}
|
||||
{{range .PageNumbers}}
|
||||
{{if eq . -1}}
|
||||
<span class="muted small" style="padding:2px 4px">…</span>
|
||||
{{else}}
|
||||
<a href="/ui/alarms?from={{$from}}&to={{$to}}&per_page={{$pp}}&page={{.}}" class="btn {{if eq . $.CurrentPage}}primary{{else}}ghost{{end}}" style="font-size:11px;padding:2px 8px">{{.}}</a>
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{if lt .CurrentPage .TotalAlarmPages}}
|
||||
<a href="/ui/alarms?from={{$from}}&to={{$to}}&per_page={{$pp}}&page={{add .CurrentPage 1}}" class="btn ghost" style="font-size:11px;padding:2px 6px">›</a>
|
||||
<a href="/ui/alarms?from={{$from}}&to={{$to}}&per_page={{$pp}}&page={{.TotalAlarmPages}}" class="btn ghost" style="font-size:11px;padding:2px 6px">»</a>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user