diff --git a/internal/web/ui.go b/internal/web/ui.go
index d14e1d1..5f11732 100644
--- a/internal/web/ui.go
+++ b/internal/web/ui.go
@@ -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)
}
diff --git a/internal/web/ui/templates/alarms.html b/internal/web/ui/templates/alarms.html
index 73a50de..5be1ffb 100644
--- a/internal/web/ui/templates/alarms.html
+++ b/internal/web/ui/templates/alarms.html
@@ -64,8 +64,12 @@
‹
{{end}}
{{range .PageNumbers}}
+ {{if eq . -1}}
+ …
+ {{else}}
{{.}}
{{end}}
+ {{end}}
{{if lt .CurrentPage .TotalAlarmPages}}
›
»