aboutsummaryrefslogtreecommitdiff
path: root/frontend/utility.go
blob: 6dbef6ad7ff2c6793d1b7631388963ebebe57333 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package frontend

type PaginationRange struct {
	Before  []int
	Current int
	MaxPage int
	After   []int
}

// PaginationFromPage gibt die Seiten vor und nach der gegebenen Seite zurück. pageRange gibt an, wie viele Seiten vor und nach der aktuellen Page angezeigt werden soll.
func PaginationFromPage(pageRange, currentPage, maxPage int) PaginationRange {
	var before []int
	var after []int

	startPage := currentPage - pageRange
	endPage := currentPage + pageRange

	if startPage < 1 {
		endPage += -startPage + 1
		startPage = 1
	}

	if endPage > maxPage {
		startPage -= (endPage - maxPage)
		endPage = maxPage

		if startPage < 1 {
			startPage = 1
		}
	}

	for i := startPage; i < currentPage; i++ {
		if i > maxPage {
			break
		}
		before = append(before, i)
	}

	for i := currentPage + 1; i < endPage+1; i++ {
		after = append(after, i)
	}

	return PaginationRange{
		before,
		currentPage,
		maxPage,
		after,
	}
}