2021-06-08 04:41:21 -04:00
{{- $validFormats := slice "default" "terse" }}
{{- $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." }}
{{- $msg2 := "The 'format' specified in the map passed to the internal pagination template is invalid. Valid choices are: %s." }}
{{- $page := . }}
{{- $format := "default" }}
{{- if reflect.IsMap . }}
{{- with .page }}
{{- $page = . }}
{{- else }}
{{- errorf $msg1 }}
2020-04-21 18:49:30 -04:00
{{- end }}
2021-06-08 04:41:21 -04:00
{{- with .format }}
{{- $format = lower . }}
2020-04-21 18:49:30 -04:00
{{- end }}
2021-06-08 04:41:21 -04:00
{{- end }}
{{- if in $validFormats $format }}
{{- if gt $page.Paginator.TotalPages 1 }}
< ul class = "pagination pagination-{{ $format }}" >
{{- partial (printf "partials/inline/pagination/%s" $format) $page }}
< / ul >
{{- end }}
{{- else }}
{{- errorf $msg2 (delimit $validFormats ", ") }}
{{- end -}}
{{/* Format: default
{{/* --------------------------------------------------------------------- */}}
{{- define "partials/inline/pagination/default" }}
{{- with .Paginator }}
{{- $currentPageNumber := .PageNumber }}
{{- with .First }}
{{- if ne $currentPageNumber .PageNumber }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "First" class = "page-link" role = "button" > < span aria-hidden = "true" > « « < / span > < / a >
< / li >
{{- else }}
< li class = "page-item disabled" >
2021-06-29 21:34:45 -04:00
< a href = "#" aria-disabled = "true" aria-label = "First" class = "page-link" role = "button" tabindex = "-1" > < span aria-hidden = "true" > « « < / span > < / a >
2021-06-08 04:41:21 -04:00
< / li >
{{- end }}
{{- end }}
{{- with .Prev }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "Previous" class = "page-link" role = "button" > < span aria-hidden = "true" > « < / span > < / a >
< / li >
{{- else }}
< li class = "page-item disabled" >
2021-06-29 21:34:45 -04:00
< a href = "#" aria-disabled = "true" aria-label = "Previous" class = "page-link" role = "button" tabindex = "-1" > < span aria-hidden = "true" > « < / span > < / a >
2021-06-08 04:41:21 -04:00
< / li >
{{- end }}
{{- $slots := 5 }}
{{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
{{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
{{- if lt (add (sub $end $start) 1) $slots }}
{{- $start = math.Max 1 (add (sub $end $slots) 1) }}
{{- end }}
{{- range $k := seq $start $end }}
{{- if eq $.Paginator.PageNumber $k }}
< li class = "page-item active" >
< a href = "#" aria-current = "page" aria-label = "Page {{ $k }}" class = "page-link" role = "button" > {{ $k }}< / a >
< / li >
{{- else }}
< li class = "page-item" >
< a href = "{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label = "Page {{ $k }}" class = "page-link" role = "button" > {{ $k }}< / a >
< / li >
{{- end }}
{{- end }}
{{- with .Next }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "Next" class = "page-link" role = "button" > < span aria-hidden = "true" > » < / span > < / a >
< / li >
{{- else }}
< li class = "page-item disabled" >
2021-06-29 21:34:45 -04:00
< a href = "#" aria-disabled = "true" aria-label = "Next" class = "page-link" role = "button" tabindex = "-1" > < span aria-hidden = "true" > » < / span > < / a >
2021-06-08 04:41:21 -04:00
< / li >
{{- end }}
{{- with .Last }}
{{- if ne $currentPageNumber .PageNumber }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "Last" class = "page-link" role = "button" > < span aria-hidden = "true" > » » < / span > < / a >
< / li >
{{- else }}
< li class = "page-item disabled" >
2021-06-29 21:34:45 -04:00
< a href = "#" aria-disabled = "true" aria-label = "Last" class = "page-link" role = "button" tabindex = "-1" > < span aria-hidden = "true" > » » < / span > < / a >
2021-06-08 04:41:21 -04:00
< / li >
{{- end }}
{{- end }}
{{- end }}
{{- end -}}
{{/* Format: terse
{{/* --------------------------------------------------------------------- */}}
{{- define "partials/inline/pagination/terse" }}
{{- with .Paginator }}
{{- $currentPageNumber := .PageNumber }}
{{- with .First }}
{{- if ne $currentPageNumber .PageNumber }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "First" class = "page-link" role = "button" > < span aria-hidden = "true" > « « < / span > < / a >
< / li >
{{- end }}
{{- end }}
{{- with .Prev }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "Previous" class = "page-link" role = "button" > < span aria-hidden = "true" > « < / span > < / a >
< / li >
{{- end }}
{{- $slots := 3 }}
{{- $start := math.Max 1 (sub .PageNumber (math.Floor (div $slots 2))) }}
{{- $end := math.Min .TotalPages (sub (add $start $slots) 1) }}
{{- if lt (add (sub $end $start) 1) $slots }}
{{- $start = math.Max 1 (add (sub $end $slots) 1) }}
{{- end }}
{{- range $k := seq $start $end }}
{{- if eq $.Paginator.PageNumber $k }}
< li class = "page-item active" >
< a href = "#" aria-current = "page" aria-label = "Page {{ $k }}" class = "page-link" role = "button" > {{ $k }}< / a >
< / li >
{{- else }}
< li class = "page-item" >
< a href = "{{ (index $.Paginator.Pagers (sub $k 1)).URL }}" aria-label = "Page {{ $k }}" class = "page-link" role = "button" > {{ $k }}< / a >
< / li >
{{- end }}
{{- end }}
{{- with .Next }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "Next" class = "page-link" role = "button" > < span aria-hidden = "true" > » < / span > < / a >
< / li >
{{- end }}
{{- with .Last }}
{{- if ne $currentPageNumber .PageNumber }}
< li class = "page-item" >
< a href = "{{ .URL }}" aria-label = "Last" class = "page-link" role = "button" > < span aria-hidden = "true" > » » < / span > < / a >
< / li >
{{- end }}
{{- end }}
{{- end }}
{{- end -}}