commit 7ad721fd78b473ae7d9b05418bb029c51d1d9251
parent 5714531f34469234035323bc9e1cc9de33a8f839
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Fri, 7 Apr 2017 13:03:34 +0200
hugolib: Add .Site.Params.mainSections
Fixes #3206
Diffstat:
2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/hugolib/site.go b/hugolib/site.go
@@ -1698,6 +1698,36 @@ func (s *Site) assembleSections() {
wp.Page.PrevInSection = s.Sections[k][i+1].Page
}
}
+
+ }
+
+ var (
+ sectionsParamId = "mainSections"
+ sectionsParamIdLower = strings.ToLower(sectionsParamId)
+ mainSections interface{}
+ found bool
+ )
+
+ if mainSections, found = s.Info.Params[sectionsParamIdLower]; !found {
+ // Pick the section with most regular pages
+ var (
+ chosenSection string
+ pageCount int
+ )
+
+ for sect, pages := range s.Sections {
+ if pages.Count() >= pageCount {
+ chosenSection = sect
+ pageCount = pages.Count()
+ }
+ }
+ mainSections = []string{chosenSection}
+
+ // Try to make this as backwards compatible as possible.
+ s.Info.Params[sectionsParamId] = mainSections
+ s.Info.Params[sectionsParamIdLower] = mainSections
+ } else {
+ s.Info.Params[sectionsParamId] = mainSections
}
}
diff --git a/hugolib/site_test.go b/hugolib/site_test.go
@@ -400,6 +400,8 @@ func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) {
sources := []source.ByteSource{
{Name: filepath.FromSlash("sect/doc1.html"), Content: []byte("doc1")},
+ // Add one more page to sect to make sure sect is picked in mainSections
+ {Name: filepath.FromSlash("sect/sect.html"), Content: []byte("sect")},
{Name: filepath.FromSlash("Fish and Chips/doc2.html"), Content: []byte("doc2")},
{Name: filepath.FromSlash("ラーメン/doc3.html"), Content: []byte("doc3")},
}
@@ -419,6 +421,11 @@ func doTestSectionNaming(t *testing.T, canonify, uglify, pluralize bool) {
writeSource(t, fs, filepath.Join("layouts", "_default/list.html"), "{{.Title}}")
s := buildSingleSite(t, deps.DepsCfg{Fs: fs, Cfg: cfg}, BuildCfg{})
+
+ mainSections, err := s.Info.Param("mainSections")
+ require.NoError(t, err)
+ require.Equal(t, mainSections, []string{"sect"})
+
th := testHelper{s.Cfg, s.Fs, t}
tests := []struct {
doc string