diff options
author | Urm3l <t.fabritz@gmail.com> | 2019-03-29 18:11:25 +0300 |
---|---|---|
committer | Curtis Timson <curt@live.co.uk> | 2019-03-29 18:11:25 +0300 |
commit | 3e897a825d7add7faa799369c40c92e5f165fcab (patch) | |
tree | 2eb257af8ac56e4a7cd40075ab066f721ce60377 /layouts | |
parent | 7bd7a83100cf2c96b3f3dfa0b2433591c6534d69 (diff) |
Fix Pagination Limit curtistimson/hugo-theme-massively#23 (#58)5.1.0
* Fix Pagination Limit curtistimson/hugo-theme-massively#23
* Provide a default value for pages
* Better indentation
* Make first and last optional
* Resolving review issues
* Consistent param names, theme name and dir provided
* Bump min version
* Bump package version
* Full min version
* Bump version to 5.1.0
Diffstat (limited to 'layouts')
-rw-r--r-- | layouts/index.html | 21 | ||||
-rw-r--r-- | layouts/partials/posts/pagination.html | 129 |
2 files changed, 118 insertions, 32 deletions
diff --git a/layouts/index.html b/layouts/index.html index ae90e4d..b8eb2e2 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -35,24 +35,9 @@ {{ end }} {{ partial "posts/list.html" (dict "posts" $postsPaging "siteData" (index .Site.Data .Site.Language.Lang)) }} - <!-- Footer --> - {{ if gt $postsPaging.TotalPages 1 }} - <footer> - <div class="pagination"> - {{ if $postsPaging.HasPrev }} - <a href="{{ $postsPaging.Prev.URL }}" class="previous"></a> - {{ end }} - {{ range $postsPaging.Pagers }} - {{ if lt .PageNumber 10 }} - <a href="{{ .URL }}" class="page{{ if eq .PageNumber $postsPaging.PageNumber }} active{{ end }}">{{ .PageNumber }}</a> - {{ end }} - {{ end }} - {{ if $postsPaging.HasNext }} - <a href="{{ $postsPaging.Next.URL }}" class="next">{{ i18n "NEXT" . }}</a> - {{ end }} - </div> - </footer> - {{ end }} + {{ $paginator := .Paginator }} + {{ $outer := . }} + {{ partial "posts/pagination.html" (dict "paginator" $paginator "outer" $outer)}} </div> diff --git a/layouts/partials/posts/pagination.html b/layouts/partials/posts/pagination.html index e67a900..2f65bde 100644 --- a/layouts/partials/posts/pagination.html +++ b/layouts/partials/posts/pagination.html @@ -1,18 +1,119 @@ -<!-- Footer --> -{{ if gt .paging.TotalPages 1 }} +{{ $paginator := .paginator }} +{{ $outer := .outer}} + +<!-- Thanks to https://glennmccomb.com/articles/how-to-build-custom-hugo-pagination/ --> + +<!-- Show first and last link--> +{{ $show_first_last := $outer.Site.Params.Posts.showFirstLast | default false }} + +<!-- Number of links either side of the current page. --> +{{ $adjacent_links := $outer.Site.Params.Posts.paginationPages | default 2 }} + +<!-- $max_links = ($adjacent_links * 2) + 1 --> +{{ $max_links := (add (mul $adjacent_links 2) 1) }} + +<!-- $lower_limit = $adjacent_links + 1 --> +{{ $lower_limit := (add $adjacent_links 1) }} + +<!-- $upper_limit = $paginator.TotalPages - $adjacent_links --> +{{ $upper_limit := (sub $paginator.TotalPages $adjacent_links) }} + +{{ if gt $paginator.TotalPages 1 }} <footer> <div class="pagination"> - {{ if .paging.HasPrev }} - <a href="{{ .paging.Prev.URL }}" class="previous">{{ i18n "PAGINATION_PREVIOUS" . }}</a> - {{ end }} - {{ range .paging.Pagers }} - {{ if lt .PageNumber 10 }} - <a href="{{ .URL }}" class="page{{ if eq .PageNumber .paging.PageNumber }} active{{ end }}">{{ .PageNumber }}</a> - {{ end }} - {{ end }} - {{ if .paging.HasNext }} - <a href="{{ .paging.Next.URL }}" class="next">{{ i18n "PAGINATION_NEXT" . }}</a> - {{ end }} + <ul class="pagination"> + + <!-- First page. --> + {{ if $show_first_last }} + {{ if ne $paginator.PageNumber 1 }} + <li> + <a href="{{ $paginator.First.URL }}" class="extra first"> + {{ i18n "PAGINATION_FIRST" . }} + </a> + </li> + {{ end }} + {{ end }} + <!-- Previous page. --> + {{ if $paginator.HasPrev }} + <li> + <a href="{{ $paginator.Prev.URL }}" class="previous"> + {{ i18n "PAGINATION_PREVIOUS" . }} + </a> + </li> + {{ end }} + + <!-- Page numbers. --> + {{ range $paginator.Pagers }} + {{ $outer.Scratch.Set "page_number_flag" false }} + + <!-- Advanced page numbers. --> + {{ if gt $paginator.TotalPages $max_links }} + + <!-- Lower limit pages. --> + <!-- If the user is on a page which is in the lower limit. --> + {{ if le $paginator.PageNumber $lower_limit }} + + <!-- If the current loop page is less than max_links. --> + {{ if le .PageNumber $max_links }} + {{ $outer.Scratch.Set "page_number_flag" true }} + {{ end }} + + <!-- Upper limit pages. --> + <!-- If the user is on a page which is in the upper limit. --> + {{ else if ge $paginator.PageNumber $upper_limit }} + + <!-- If the current loop page is greater than total pages minus $max_links --> + {{ if gt .PageNumber (sub $paginator.TotalPages $max_links) }} + {{ $outer.Scratch.Set "page_number_flag" true }} + {{ end }} + + <!-- Middle pages. --> + {{ else }} + + {{ if and ( ge .PageNumber (sub $paginator.PageNumber $adjacent_links) ) ( le .PageNumber (add $paginator.PageNumber $adjacent_links) ) }} + {{ $outer.Scratch.Set "page_number_flag" true }} + {{ end }} + + {{ end }} + + <!-- Simple page numbers. --> + {{ else }} + + {{ $outer.Scratch.Set "page_number_flag" true }} + + {{ end }} + + <!-- Output page numbers. --> + {{ if eq ($outer.Scratch.Get "page_number_flag") true }} + <li> + <a href="{{ .URL }}" class="page{{ if eq . $paginator }} active{{ end }}"> + {{ .PageNumber }} + </a> + </li> + {{ end }} + + {{ end }} + + <!-- Next page. --> + {{ if $paginator.HasNext }} + <li> + <a href="{{ $paginator.Next.URL }}" class="next"> + {{ i18n "PAGINATION_NEXT" . }} + </a> + </li> + {{ end }} + + <!-- Last page. --> + {{ if $show_first_last }} + {{ if ne $paginator.PageNumber $paginator.TotalPages }} + <li> + <a href="{{ $paginator.Last.URL }}" class="extra last"> + {{ i18n "PAGINATION_LAST" . }} + </a> + </li> + {{ end }} + {{ end }} + </ul> </div> </footer> -{{ end }} +{{ end }}
\ No newline at end of file |