165 lines
6.0 KiB
HTML
165 lines
6.0 KiB
HTML
|
{{- $validFormats := slice "default" "terse" }}
|
||
|
{{- $validAlignments := slice "begin" "center" "end" }}
|
||
|
|
||
|
{{- $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." }}
|
||
|
{{- $msg3 := "The 'align' specified in the map passed to the internal pagination template is invalid. Valid choices are: %s." }}
|
||
|
|
||
|
{{- $page := . }}
|
||
|
{{- $format := "default" }}
|
||
|
{{- $align := "begin" }}
|
||
|
|
||
|
{{- if reflect.IsMap . }}
|
||
|
{{- with .page }}
|
||
|
{{- $page = . }}
|
||
|
{{- else }}
|
||
|
{{- errorf $msg1 }}
|
||
|
{{- end }}
|
||
|
{{- with .format }}
|
||
|
{{- $format = lower . }}
|
||
|
{{- end }}
|
||
|
{{- with .align }}
|
||
|
{{- $align = lower . }}
|
||
|
{{- end }}
|
||
|
{{- end }}
|
||
|
|
||
|
{{- $alignments := (dict "left" "" "center" "justify-content-center" "end" "justify-content-end") }}
|
||
|
|
||
|
{{- if not (in $validFormats $format) }}
|
||
|
{{- errorf $msg2 (delimit $validFormats ", ") }}
|
||
|
{{- else if not (in $validFormats $format) }}
|
||
|
{{- errorf $msg3 (delimit $validAlignments ", ") }}
|
||
|
{{- else }}
|
||
|
{{- if gt $page.Paginator.TotalPages 1 }}
|
||
|
<ul class="pagination {{ index $alignments $align }} pagination-{{ $format }}">
|
||
|
{{- partial (printf "partials/pagination/%s" $format) $page }}
|
||
|
</ul>
|
||
|
{{- end }}
|
||
|
{{- end -}}
|
||
|
|
||
|
{{/* Format: default
|
||
|
{{/* --------------------------------------------------------------------- */}}
|
||
|
{{- define "partials/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">
|
||
|
<a aria-disabled="true" aria-label="First" class="page-link" role="button" tabindex="-1"><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>
|
||
|
{{- else }}
|
||
|
<li class="page-item disabled">
|
||
|
<a aria-disabled="true" aria-label="Previous" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">«</span></a>
|
||
|
</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 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">
|
||
|
<a aria-disabled="true" aria-label="Next" class="page-link" role="button" tabindex="-1"><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>
|
||
|
{{- else }}
|
||
|
<li class="page-item disabled">
|
||
|
<a aria-disabled="true" aria-label="Last" class="page-link" role="button" tabindex="-1"><span aria-hidden="true">»»</span></a>
|
||
|
</li>
|
||
|
{{- end }}
|
||
|
{{- end }}
|
||
|
{{- end }}
|
||
|
{{- end -}}
|
||
|
|
||
|
{{/* Format: terse
|
||
|
{{/* --------------------------------------------------------------------- */}}
|
||
|
{{- define "partials/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 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 -}}
|