From 6c3b6ba3e6ccc220cbca9cc83fab78db0a78604e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Wed, 31 Jan 2024 16:19:52 +0100 Subject: Improve error message when attempting to paginate from a single page template Fixes #11953 --- hugolib/page__output.go | 8 +++++++- hugolib/paginator_test.go | 13 +++++++++++++ resources/page/pagination.go | 12 ++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/hugolib/page__output.go b/hugolib/page__output.go index 6fae10740..02956e87c 100644 --- a/hugolib/page__output.go +++ b/hugolib/page__output.go @@ -14,6 +14,8 @@ package hugolib import ( + "fmt" + "github.com/gohugoio/hugo/identity" "github.com/gohugoio/hugo/output" "github.com/gohugoio/hugo/resources/page" @@ -37,12 +39,16 @@ func newPageOutput( targetPathsProvider = ft linksProvider = ft - var paginatorProvider page.PaginatorProvider = page.NopPage + var paginatorProvider page.PaginatorProvider var pag *pagePaginator if render && ps.IsNode() { pag = newPagePaginator(ps) paginatorProvider = pag + } else { + paginatorProvider = page.PaginatorNotSupportedFunc(func() error { + return fmt.Errorf("pagination not supported for pages of kind %q", ps.Kind()) + }) } var dependencyManager identity.Manager = identity.NopManager diff --git a/hugolib/paginator_test.go b/hugolib/paginator_test.go index 98b67bca5..919f532ca 100644 --- a/hugolib/paginator_test.go +++ b/hugolib/paginator_test.go @@ -157,3 +157,16 @@ Len Pag: {{ len $pag.Pages }} b.AssertFileContent("public/index.html", "Len: 0", "Len Pag: 0") } + +func TestPaginatorNodePagesOnly(t *testing.T) { + files := ` +-- hugo.toml -- +paginate = 1 +-- content/p1.md -- +-- layouts/_default/single.html -- +Paginator: {{ .Paginator }} +` + b, err := TestE(t, files) + b.Assert(err, qt.IsNotNil) + b.Assert(err.Error(), qt.Contains, `error calling Paginator: pagination not supported for pages of kind "page"`) +} diff --git a/resources/page/pagination.go b/resources/page/pagination.go index 9113b6062..4beb96e50 100644 --- a/resources/page/pagination.go +++ b/resources/page/pagination.go @@ -32,6 +32,18 @@ type PaginatorProvider interface { Paginate(pages any, options ...any) (*Pager, error) } +var _ PaginatorProvider = (*PaginatorNotSupportedFunc)(nil) + +type PaginatorNotSupportedFunc func() error + +func (f PaginatorNotSupportedFunc) Paginate(pages any, options ...any) (*Pager, error) { + return nil, f() +} + +func (f PaginatorNotSupportedFunc) Paginator(options ...any) (*Pager, error) { + return nil, f() +} + // Pager represents one of the elements in a paginator. // The number, starting on 1, represents its place. type Pager struct { -- cgit v1.2.3