summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorAnton Staaf <github@socialhacker.com>2017-03-05 12:24:14 -0800
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-03-05 21:24:14 +0100
commitc95069990795965c34059b6844fe9fa5125be7c1 (patch)
tree026805cb68b325d3bf045dc86596aba8f415f2dd /hugolib
parent6c5ef71368edfae8ffc77224ff6a9ec240c39626 (diff)
hugolib: Populate the taxonomy term Pages list
Previously this was left empty, but it is very handy to have a list of term pages for a given taxonomy. This list can now be paginated like other page lists. It makes it possible to render summary content from each terms index page for instance. It also makes it possible to sort the term pages in the same way that other page lists can be sorted. An RSS feed is now generated for KindTaxonomyTerm pages as well. This also fixes a bug in HugoSites.createMissingPages. Previously it would only check for existing KindTaxonomyTerm pages if the taxonomy had any terms defined. So for a taxonomy with no terms but a taxonomy terms page it would generate a second empty terms page.
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/node_as_page_test.go10
-rw-r--r--hugolib/page.go11
-rw-r--r--hugolib/site.go2
-rw-r--r--hugolib/site_render.go2
-rw-r--r--hugolib/taxonomy_test.go22
5 files changed, 39 insertions, 8 deletions
diff --git a/hugolib/node_as_page_test.go b/hugolib/node_as_page_test.go
index f063faf9a..57a51f40a 100644
--- a/hugolib/node_as_page_test.go
+++ b/hugolib/node_as_page_test.go
@@ -176,7 +176,10 @@ func doTestNodeAsPage(t *testing.T, ugly, preserveTaxonomyNames bool) {
"Lastmod: 2009-01-15",
)
- // There are no pages to paginate over in the taxonomy terms.
+ // Check taxonomy terms paginator
+ th.assertFileContent(expectedFilePath(ugly, "public", "categories", "page", "2"),
+ "Taxonomy Terms Title: Taxonomy Term Categories",
+ "Pag: Taxonomy Web")
// RSS
th.assertFileContent(filepath.Join("public", "customrss.xml"), "Recent content in Home Sweet Home! on Hugo Rocks", "<rss")
@@ -184,6 +187,7 @@ func doTestNodeAsPage(t *testing.T, ugly, preserveTaxonomyNames bool) {
th.assertFileContent(filepath.Join("public", "sect2", "customrss.xml"), "Recent content in Section2 on Hugo Rocks", "<rss")
th.assertFileContent(filepath.Join("public", "categories", "hugo", "customrss.xml"), "Recent content in Taxonomy Hugo on Hugo Rocks", "<rss")
th.assertFileContent(filepath.Join("public", "categories", "web", "customrss.xml"), "Recent content in Taxonomy Web on Hugo Rocks", "<rss")
+ th.assertFileContent(filepath.Join("public", "categories", "customrss.xml"), "Recent content in Taxonomy Term Categories on Hugo Rocks", "<rss")
}
@@ -792,6 +796,10 @@ Lastmod: {{ .Lastmod.Format "2006-01-02" }}
writeSource(t, fs, filepath.Join("layouts", "_default", "terms.html"), `
Taxonomy Terms Title: {{ .Title }}
Taxonomy Terms Content: {{ .Content }}
+# Pages: {{ len .Data.Pages }}
+{{ range .Paginator.Pages }}
+ Pag: {{ .Title }}
+{{ end }}
{{ range $key, $value := .Data.Terms }}
k/v: {{ $key | lower }} / {{ printf "%s" $value }}
{{ end }}
diff --git a/hugolib/page.go b/hugolib/page.go
index 8e09012e9..3169e123a 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -681,7 +681,8 @@ func (p *Page) rssLayouts() []string {
singular := p.s.taxonomiesPluralSingular[p.sections[0]]
return []string{"taxonomy/" + singular + ".rss.xml", "_default/rss.xml", "rss.xml", "_internal/_default/rss.xml"}
case KindTaxonomyTerm:
- // No RSS for taxonomy terms
+ singular := p.s.taxonomiesPluralSingular[p.sections[0]]
+ return []string{"taxonomy/" + singular + ".terms.rss.xml", "_default/rss.xml", "rss.xml", "_internal/_default/rss.xml"}
case KindPage:
// No RSS for regular pages
}
@@ -1591,6 +1592,7 @@ func (p *Page) prepareData(s *Site) error {
p.Data[singular] = taxonomy
p.Data["Singular"] = singular
p.Data["Plural"] = plural
+ p.Data["Term"] = term
pages = taxonomy.Pages()
case KindTaxonomyTerm:
plural := p.sections[0]
@@ -1602,6 +1604,13 @@ func (p *Page) prepareData(s *Site) error {
// keep the following just for legacy reasons
p.Data["OrderedIndex"] = p.Data["Terms"]
p.Data["Index"] = p.Data["Terms"]
+
+ // A list of all KindTaxonomy pages with matching plural
+ for _, p := range s.findPagesByKind(KindTaxonomy) {
+ if p.sections[0] == plural {
+ pages = append(pages, p)
+ }
+ }
}
p.Data["Pages"] = pages
diff --git a/hugolib/site.go b/hugolib/site.go
index 1512819d5..93e3ee740 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -2037,7 +2037,7 @@ func (s *Site) newHomePage() *Page {
func (s *Site) setPageURLs(p *Page, in string) {
p.URLPath.URL = s.PathSpec.URLizeAndPrep(in)
p.URLPath.Permalink = s.Info.permalink(p.URLPath.URL)
- if p.Kind != KindPage && p.Kind != KindTaxonomyTerm {
+ if p.Kind != KindPage {
p.RSSLink = template.URL(s.Info.permalink(in + ".xml"))
}
}
diff --git a/hugolib/site_render.go b/hugolib/site_render.go
index 81cad525c..37ee21fd4 100644
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -72,7 +72,7 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa
}
// Taxonomy terms have no page set to paginate, so skip that for now.
- if p.IsNode() && p.Kind != KindTaxonomyTerm {
+ if p.IsNode() {
if err := s.renderPaginator(p); err != nil {
results <- err
}
diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go
index 5687cc032..6843838b9 100644
--- a/hugolib/taxonomy_test.go
+++ b/hugolib/taxonomy_test.go
@@ -15,7 +15,6 @@ package hugolib
import (
"fmt"
- "html/template"
"path/filepath"
"reflect"
"testing"
@@ -127,9 +126,24 @@ others:
s := h.Sites[0]
- // Issue #1302
- term := s.getPage(KindTaxonomyTerm, "others")
- require.Equal(t, template.URL(""), term.RSSLink)
+ // Make sure that each KindTaxonomyTerm page has an appropriate number
+ // of KindTaxonomy pages in its Pages slice.
+ taxonomyTermPageCounts := map[string]int{
+ "tags": 2,
+ "categories": 2,
+ "others": 2,
+ "empties": 0,
+ }
+
+ for taxonomy, count := range taxonomyTermPageCounts {
+ term := s.getPage(KindTaxonomyTerm, taxonomy)
+ require.NotNil(t, term)
+ require.Len(t, term.Pages, count)
+
+ for _, page := range term.Pages {
+ require.Equal(t, KindTaxonomy, page.Kind)
+ }
+ }
// Issue #3070 preserveTaxonomyNames
if preserveTaxonomyNames {