feat(theme): pagination navigation

refactored out of the list template into its own partial
features:
- hidden if there's only 1 page
- shows up to 5 page numbers along with links to previous/next and first/last
- hide first/last if within 1 page from end
- ellipses denoting page numbers not shown
pull/3/head
steven 2021-09-16 16:15:35 -04:00
parent 0b977fa65d
commit 0cf3f0aaad
3 changed files with 75 additions and 14 deletions

View File

@ -25,19 +25,7 @@
{{ end }}
</div>
{{ if gt $paginator.TotalPages 1 }}
<div class="row" style="margin-top: 2em">
<nav aria-label="Page navigation">
<ul class="pagination">
{{ range $paginator.Pagers }}
<li class="page-item {{ if eq $paginator.PageNumber .PageNumber }}active{{ end }}">
<a class="page-link" href="{{ .URL }}">{{.PageNumber}}</a>
</li>
{{ end }}
</ul>
</nav>
</div>
{{ end }}
{{- partial "pagination.html" . -}}
<script src="/js/masonry.js"></script>
{{ end }}

View File

@ -0,0 +1,38 @@
{{ $paginator := $.Paginator }}
{{ if ne .Kind "home" }}
{{ $paginator = .Data }}
{{ end }}
{{ if gt $paginator.TotalPages 1 }}
{{ $.Scratch.Set "dot_rendered" false }}
<nav aria-label="page navigation">
<ul class="pagination">
{{ if and (ne $paginator.PageNumber 1) (ne $paginator.PageNumber 2) }}
<li class="page-item"><a href="{{ $paginator.First.URL }}" rel="first" class="page-link">« First</a></li>
{{ end }}
{{ if $paginator.HasPrev }}
<li class="page-item"><a href="{{ $paginator.Prev.URL }}" rel="prev" class="page-link"> Prev</a></li>
{{ end }}
{{ range $paginator.Pagers }}
{{ if eq . $paginator }}
<li class="page-item active"><a href="{{ .URL }}" class="page-link">{{ .PageNumber }}</a></li>
{{ else if and (ge .PageNumber (sub $paginator.PageNumber 2)) (le .PageNumber (add $paginator.PageNumber 2)) }}
{{ $.Scratch.Set "dot_rendered" false }}
<li class="page-item"><a href="{{ .URL }}" class="page-link">{{ .PageNumber }}</a></li>
{{ else if eq ($.Scratch.Get "dot_rendered") false }}
{{ $.Scratch.Set "dot_rendered" true }}
<li class="page-item disabled"><a class="page-link">...</a></li>
{{ end }}
{{ end }}
{{ if $paginator.HasNext }}
<li class="page-item"><a href="{{ $paginator.Next.URL }}" rel="next" class="page-link">Next </a></li>
{{ end }}
{{ if and (ne $paginator.PageNumber $paginator.TotalPages) ((ne $paginator.PageNumber (sub $paginator.TotalPages 1))) }}
<li class="page-item"><a href="{{ $paginator.Last.URL }}" rel="last" class="page-link">Last »</a></li>
{{ end }}
</ul>
</nav>
{{ end }}

View File

@ -1,3 +1,38 @@
/* post styles */
article p img {
width: 100%;
}
/* pagination styles */
.pagination {
display: flex;
list-style: none;
border-radius: .25rem;
margin: 20px 0;
padding: 0;
justify-content: center;
}
.page-item {
position: relative;
display: block;
padding: 0.5em;
margin: 0.25em;
line-height: 1.25;
border: 1px dashed;
background: #fff;
}
.page-item.active {
background: #1EAEDB;
}
.page-item.active .page-link {
color: #fff;
}
.page-item.disabled .page-link {
color: #6c757d;
pointer-events: none;
cursor: auto;
}