summaryrefslogtreecommitdiffstats
path: root/hugolib/page.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-04-09 10:33:04 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-06-08 11:21:34 +0200
commitb39689393ccb8434d9a57658a64b77568c718e99 (patch)
tree944d679ac8e908444eb00d0d405ec3c131f31bab /hugolib/page.go
parentbef5048580b38b0c29edef4eb8c67915033120e9 (diff)
hugolib: Enable nested sections
Fixes #465
Diffstat (limited to 'hugolib/page.go')
-rw-r--r--hugolib/page.go123
1 files changed, 66 insertions, 57 deletions
diff --git a/hugolib/page.go b/hugolib/page.go
index d331f6e5d..cb9a28f24 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -175,6 +175,16 @@ type Page struct {
// isn't accomanied by one.
sections []string
+ // Will only be set for sections and regular pages.
+ parent *Page
+
+ // When we create paginator pages, we create a copy of the original,
+ // but keep track of it here.
+ origOnCopy *Page
+
+ // Will only be set for section pages and the home page.
+ subSections Pages
+
s *Site
// Pulled over from old Node. TODO(bep) reorg and group (embed)
@@ -228,6 +238,9 @@ func (p *Page) createLayoutDescriptor() output.LayoutDescriptor {
switch p.Kind {
case KindSection:
+ // In Hugo 0.22 we introduce nested sections, but we still only
+ // use the first level to pick the correct template. This may change in
+ // the future.
section = p.sections[0]
case KindTaxonomy, KindTaxonomyTerm:
section = p.s.taxonomiesPluralSingular[p.sections[0]]
@@ -265,6 +278,11 @@ func (p *Page) IsHome() bool {
return p.Kind == KindHome
}
+// IsSection returns whether this is a section page.
+func (p *Page) IsSection() bool {
+ return p.Kind == KindSection
+}
+
// IsPage returns whether this is a regular content page.
func (p *Page) IsPage() bool {
return p.Kind == KindPage
@@ -667,6 +685,9 @@ func (p *Page) Type() string {
return "page"
}
+// Section returns the first path element below the content root. Note that
+// since Hugo 0.22 we support nested sections, but this will always be the first
+// element of any nested path.
func (p *Page) Section() string {
if p.Kind == KindSection {
return p.sections[0]
@@ -1100,10 +1121,6 @@ func (p *Page) HasMenuCurrent(menuID string, me *MenuEntry) bool {
if sectionPagesMenu != "" {
section := p.Section()
- if !p.s.Info.preserveTaxonomyNames {
- section = p.s.PathSpec.MakePathSanitized(section)
- }
-
if section != "" && sectionPagesMenu == menuID && section == me.Identifier {
return true
}
@@ -1415,59 +1432,54 @@ func (p *Page) prepareLayouts() error {
}
func (p *Page) prepareData(s *Site) error {
-
- var pages Pages
-
- p.Data = make(map[string]interface{})
- switch p.Kind {
- case KindPage:
- case KindHome:
- pages = s.RegularPages
- case KindSection:
- sectionData, ok := s.Sections[p.Section()]
- if !ok {
- return fmt.Errorf("Data for section %s not found", p.Section())
- }
- pages = sectionData.Pages()
- case KindTaxonomy:
- plural := p.sections[0]
- term := p.sections[1]
-
- if s.Info.preserveTaxonomyNames {
- if v, ok := s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, term)]; ok {
- term = v
+ if p.Kind != KindSection {
+ var pages Pages
+ p.Data = make(map[string]interface{})
+
+ switch p.Kind {
+ case KindPage:
+ case KindHome:
+ pages = s.RegularPages
+ case KindTaxonomy:
+ plural := p.sections[0]
+ term := p.sections[1]
+
+ if s.Info.preserveTaxonomyNames {
+ if v, ok := s.taxonomiesOrigKey[fmt.Sprintf("%s-%s", plural, term)]; ok {
+ term = v
+ }
}
- }
- singular := s.taxonomiesPluralSingular[plural]
- taxonomy := s.Taxonomies[plural].Get(term)
-
- 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]
- singular := s.taxonomiesPluralSingular[plural]
-
- p.Data["Singular"] = singular
- p.Data["Plural"] = plural
- p.Data["Terms"] = s.Taxonomies[plural]
- // 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)
+ singular := s.taxonomiesPluralSingular[plural]
+ taxonomy := s.Taxonomies[plural].Get(term)
+
+ 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]
+ singular := s.taxonomiesPluralSingular[plural]
+
+ p.Data["Singular"] = singular
+ p.Data["Plural"] = plural
+ p.Data["Terms"] = s.Taxonomies[plural]
+ // 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
- p.Pages = pages
+ p.Data["Pages"] = pages
+ p.Pages = pages
+ }
// Now we know enough to set missing dates on home page etc.
p.updatePageDates()
@@ -1736,11 +1748,8 @@ func (p *Page) setValuesForKind(s *Site) {
switch p.Kind {
case KindHome:
p.URLPath.URL = "/"
- case KindSection:
- p.URLPath.URL = "/" + p.sections[0] + "/"
- case KindTaxonomy:
- p.URLPath.URL = "/" + path.Join(p.sections...) + "/"
- case KindTaxonomyTerm:
+ case KindPage:
+ default:
p.URLPath.URL = "/" + path.Join(p.sections...) + "/"
}
}