pagination.html (5679B)
1 {{- $validFormats := slice "default" "terse" }}
2
3 {{- $msg1 := "When passing a map to the internal pagination template, one of the elements must be named 'page', and it must be set to the context of the current page." }}
4 {{- $msg2 := "The 'format' specified in the map passed to the internal pagination template is invalid. Valid choices are: %s." }}
5
6 {{- $page := . }}
7 {{- $format := "default" }}
8
9 {{- if reflect.IsMap . }}
10 {{- with .page }}
11 {{- $page = . }}
12 {{- else }}
13 {{- errorf $msg1 }}
14 {{- end }}
15 {{- with .format }}
16 {{- $format = lower . }}
17 {{- end }}
18 {{- end }}
19
20 {{- if in $validFormats $format }}
21 {{- if gt $page.Paginator.TotalPages 1 }}
22 <ul class="pagination pagination-{{ $format }}">
23 {{- partial (printf "partials/inline/pagination/%s" $format) $page }}
24 </ul>
25 {{- end }}
26 {{- else }}
27 {{- errorf $msg2 (delimit $validFormats ", ") }}
28 {{- end -}}
29
30 {{/* Format: default
31 {{/* --------------------------------------------------------------------- */}}
32 {{- define "partials/inline/pagination/default" }}
33 {{- with .Paginator }}
34 {{- $currentPageNumber := .PageNumber }}
35
36 {{- with .First }}
37 {{- if ne $currentPageNumber .PageNumber }}
38 <li class="page-item">
39 <a href="{{ .URL }}" aria-label="First" class="page-link" role="button"><span aria-hidden="true">««</span></a>
40 </li>
41 {{- else }}
42 <li class="page-item disabled">
43 <a aria-disabled="true" aria-label="First" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">««</span></a>
44 </li>
45 {{- end }}
46 {{- end }}
47
48 {{- with .Prev }}
49 <li class="page-item">
50 <a href="{{ .URL }}" aria-label="Previous" class="page-link" role="button"><span aria-hidden="true">«</span></a>
51 </li>
52 {{- else }}
53 <li class="page-item disabled">
54 <a aria-disabled="true" aria-label="Previous" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">«</span></a>
55 </li>
56 {{- end }}
57
58 {{- $slots := 5 }}
59 {{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
60 {{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
61 {{- if lt (add (sub $end $start) 1) $slots }}
62 {{- $start = math.Max 1 (add (sub $end $slots) 1) }}
63 {{- end }}
64
65 {{- range $k := seq $start $end }}
66 {{- if eq $.Paginator.PageNumber $k }}
67 <li class="page-item active">
68 <a aria-current="page" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
69 </li>
70 {{- else }}
71 <li class="page-item">
72 <a href="{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
73 </li>
74 {{- end }}
75 {{- end }}
76
77 {{- with .Next }}
78 <li class="page-item">
79 <a href="{{ .URL }}" aria-label="Next" class="page-link" role="button"><span aria-hidden="true">»</span></a>
80 </li>
81 {{- else }}
82 <li class="page-item disabled">
83 <a aria-disabled="true" aria-label="Next" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">»</span></a>
84 </li>
85 {{- end }}
86
87 {{- with .Last }}
88 {{- if ne $currentPageNumber .PageNumber }}
89 <li class="page-item">
90 <a href="{{ .URL }}" aria-label="Last" class="page-link" role="button"><span aria-hidden="true">»»</span></a>
91 </li>
92 {{- else }}
93 <li class="page-item disabled">
94 <a aria-disabled="true" aria-label="Last" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">»»</span></a>
95 </li>
96 {{- end }}
97 {{- end }}
98 {{- end }}
99 {{- end -}}
100
101 {{/* Format: terse
102 {{/* --------------------------------------------------------------------- */}}
103 {{- define "partials/inline/pagination/terse" }}
104 {{- with .Paginator }}
105 {{- $currentPageNumber := .PageNumber }}
106
107 {{- with .First }}
108 {{- if ne $currentPageNumber .PageNumber }}
109 <li class="page-item">
110 <a href="{{ .URL }}" aria-label="First" class="page-link" role="button"><span aria-hidden="true">««</span></a>
111 </li>
112 {{- end }}
113 {{- end }}
114
115 {{- with .Prev }}
116 <li class="page-item">
117 <a href="{{ .URL }}" aria-label="Previous" class="page-link" role="button"><span aria-hidden="true">«</span></a>
118 </li>
119 {{- end }}
120
121 {{- $slots := 3 }}
122 {{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
123 {{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
124 {{- if lt (add (sub $end $start) 1) $slots }}
125 {{- $start = math.Max 1 (add (sub $end $slots) 1) }}
126 {{- end }}
127
128 {{- range $k := seq $start $end }}
129 {{- if eq $.Paginator.PageNumber $k }}
130 <li class="page-item active">
131 <a aria-current="page" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
132 </li>
133 {{- else }}
134 <li class="page-item">
135 <a href="{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label="Page {{ $k }}" class="page-link" role="button">{{ $k }}</a>
136 </li>
137 {{- end }}
138 {{- end }}
139
140 {{- with .Next }}
141 <li class="page-item">
142 <a href="{{ .URL }}" aria-label="Next" class="page-link" role="button"><span aria-hidden="true">»</span></a>
143 </li>
144 {{- end }}
145
146 {{- with .Last }}
147 {{- if ne $currentPageNumber .PageNumber }}
148 <li class="page-item">
149 <a href="{{ .URL }}" aria-label="Last" class="page-link" role="button"><span aria-hidden="true">»»</span></a>
150 </li>
151 {{- end }}
152 {{- end }}
153 {{- end }}
154 {{- end -}}