Skip to content

Commit

Permalink
Improve error message when attempting to paginate from a single page …
Browse files Browse the repository at this point in the history
…template

Fixes #11953
  • Loading branch information
bep committed Jan 31, 2024
1 parent 4d98b0e commit 6c3b6ba
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
8 changes: 7 additions & 1 deletion hugolib/page__output.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
package hugolib

import (
"fmt"

"github.com/gohugoio/hugo/identity"
"github.com/gohugoio/hugo/output"
"github.com/gohugoio/hugo/resources/page"
Expand All @@ -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
Expand Down
13 changes: 13 additions & 0 deletions hugolib/paginator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`)
}
12 changes: 12 additions & 0 deletions resources/page/pagination.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 6c3b6ba

Please sign in to comment.