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}} »