summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2024-01-31 16:19:52 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2024-01-31 16:54:34 +0100
commit6c3b6ba3e6ccc220cbca9cc83fab78db0a78604e (patch)
tree0df9f01f7c36809da4e0e2274f32df6cdd4a7223
parent4d98b0ed6a8aa4219fcc089228446cc480b31862 (diff)
Improve error message when attempting to paginate from a single page template
Fixes #11953
-rw-r--r--hugolib/page__output.go8
-rw-r--r--hugolib/paginator_test.go13
-rw-r--r--resources/page/pagination.go12
3 files changed, 32 insertions, 1 deletions
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 {