ref: ad705aac0649fa3102f7639bc4db65d45e108ee2
parent: 52ac85fbc4d4066b5e13df454593597df0166262
author: Ricardo N Feliciano <[email protected]>
date: Mon Sep 24 14:06:29 EDT 2018
hugolib: Introduce Page.NextPage and Page.PrevPage Introduce new page position variables in order to fix the ordering issue of `.Next` and `.Prev` while also allowing an upgrade path via deprecation. `.NextInSection` becomes `.NextPageInSection`. `.PrevInSection` becomes `.PrevPageInSection`. `.Next` becomes a function returning `.PrevPage`. `.Prev` becomes a function returning `.NextPage`. Fixes #1061
--- a/docs/content/en/variables/page.md
+++ b/docs/content/en/variables/page.md
@@ -96,11 +96,14 @@
.LinkTitle
: access when creating links to the content. If set, Hugo will use the `linktitle` from the front matter before `title`.
-.Next
-: pointer to the following content (based on the `publishdate` field in front matter).
+.Next (deprecated)
+: In older Hugo versions this pointer went the wrong direction. Please use `.PrevPage` instead.
+.NextPage
+: Pointer to the next [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight-date-linktitle-filepath)). Example: `{{if .NextPage}}{{.NextPage.Permalink}}{{end}}`.
+
.NextInSection
-: pointer to the following content within the same section (based on `publishdate` field in front matter).
+: Pointer to the next [regular page](/variables/site/#site-pages) within the same section. Pages are sorted by Hugo's [default sort](/templates/lists#default-weight-date-linktitle-filepath). Example: `{{if .NextInSection}}{{.NextInSection.Permalink}}{{end}}`.
.OutputFormats
: contains all formats, including the current format, for a given page. Can be combined the with [`.Get` function](/functions/get/) to grab a specific format. (See [Output Formats](/templates/output-formats/).)
@@ -118,11 +121,14 @@
.PlainWords
: the Page content stripped of HTML as a `[]string` using Go's [`strings.Fields`](https://golang.org/pkg/strings/#Fields) to split `.Plain` into a slice.
-.Prev
-: Pointer to the previous content (based on `publishdate` in front matter).
+.Prev (deprecated)
+: In older Hugo versions this pointer went the wrong direction. Please use `.NextPage` instead.
+.PrevPage
+: Pointer to the previous [regular page](/variables/site/#site-pages) (sorted by Hugo's [default sort](/templates/lists#default-weight-date-linktitle-filepath)). Example: `{{if .PrevPage}}{{.PrevPage.Permalink}}{{end}}`.
+
.PrevInSection
-: Pointer to the previous content within the same section (based on `publishdate` in front matter). For example, `{{if .PrevInSection}}{{.PrevInSection.Permalink}}{{end}}`.
+: Pointer to the previous [regular page](/variables/site/#site-pages) within the same section. Pages are sorted by Hugo's [default sort](/templates/lists#default-weight-date-linktitle-filepath). Example: `{{if .PrevInSection}}{{.PrevInSection.Permalink}}{{end}}`.
.PublishDate
: the date on which the content was or will be published; `.Publishdate` pulls from the `publishdate` field in a content's front matter. See also `.ExpiryDate`, `.Date`, and `.Lastmod`.
--- a/hugolib/hugo_sites_build_test.go
+++ b/hugolib/hugo_sites_build_test.go
@@ -268,7 +268,7 @@
require.Equal(t, "/superbob", doc3.URL(), "invalid url, was specified on doc3")
b.AssertFileContent("public/superbob/index.html", "doc3|Hello|en")
- require.Equal(t, doc2.Next, doc3, "doc3 should follow doc2, in .Next")
+ require.Equal(t, doc2.PrevPage, doc3, "doc3 should follow doc2, in .PrevPage")
doc1fr := doc1en.Translations()[0]
permalink = doc1fr.Permalink()
@@ -398,16 +398,16 @@
require.Equal(t, template.URL(""), enSite.RegularPages[0].RSSLink())
// Issue #3108
- next := enSite.RegularPages[0].Next
- require.NotNil(t, next)
- require.Equal(t, KindPage, next.Kind)
+ prevPage := enSite.RegularPages[0].PrevPage
+ require.NotNil(t, prevPage)
+ require.Equal(t, KindPage, prevPage.Kind)
for {
- if next == nil {
+ if prevPage == nil {
break
}
- require.Equal(t, KindPage, next.Kind)
- next = next.Next
+ require.Equal(t, KindPage, prevPage.Kind)
+ prevPage = prevPage.PrevPage
}
// Check bundles
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -505,8 +505,8 @@
}
type Position struct {
- Prev *Page
- Next *Page
+ PrevPage *Page
+ NextPage *Page
PrevInSection *Page
NextInSection *Page
}
@@ -2307,4 +2307,16 @@
return p.Path()
}
return p.title
+}
+
+func (p *Page) Next() *Page {
+ // TODO Remove in Hugo 0.52
+ helpers.Deprecated("Page", ".Next", "Use .PrevPage (yes, not .NextPage).", false)
+ return p.PrevPage
+}
+
+func (p *Page) Prev() *Page {
+ // TODO Remove in Hugo 0.52
+ helpers.Deprecated("Page", ".Prev", "Use .NextPage (yes, not .PrevPage).", false)
+ return p.NextPage
}
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -990,12 +990,12 @@
var siteLastChange time.Time
for i, page := range s.RegularPages {
- if i < len(s.RegularPages)-1 {
- page.Next = s.RegularPages[i+1]
+ if i > 0 {
+ page.NextPage = s.RegularPages[i-1]
}
- if i > 0 {
- page.Prev = s.RegularPages[i-1]
+ if i < len(s.RegularPages)-1 {
+ page.PrevPage = s.RegularPages[i+1]
}
// Determine Site.Info.LastChange