default:
}
+ var typeCurrentSection string
+ var typeRootSection string
+ curr := p.CurrentSection()
+ // Make sure we use the contentType only. This is the value from front matter.
+ if curr != nil {
+ typeCurrentSection = curr.contentType
+ }
+ first := p.FirstSection()
+ if first != nil {
+ typeRootSection = first.contentType
+ }
+
return output.LayoutDescriptor{
- Kind: p.Kind,
- Type: p.Type(),
- Lang: p.Lang(),
- Layout: p.Layout,
- Section: section,
+ Kind: p.Kind,
+ Type: p.Type(),
+ Lang: p.Lang(),
+ Layout: p.Layout,
+ Section: section,
+ TypeCurrentSection: typeCurrentSection,
+ TypeFirstSection: typeRootSection,
}
}
return v.parent
}
+// FirstSection returns the section on level 1 below home, e.g. "/docs".
+// For the home page, this will return itself.
+func (p *Page) FirstSection() *Page {
+ v := p
+ if v.origOnCopy != nil {
+ v = v.origOnCopy
+ }
+
+ if v.parent == nil || v.parent.IsHome() {
+ return v
+ }
+
+ parent := v.parent
+ for {
+ current := parent
+ parent = parent.parent
+ if parent == nil || parent.IsHome() {
+ return current
+ }
+ }
+
+}
+
// InSection returns whether the given page is in the current section.
// Note that this will always return false for pages that are
// not either regular, home or section pages.
active, err := home.InSection(home)
assert.NoError(err)
assert.True(active)
+ assert.Equal(p, p.FirstSection())
+
}},
{"l1", func(p *Page) {
assert.Equal("L1s", p.title)
assert.NoError(err)
assert.False(isAncestor)
+ assert.Equal(l1, p.FirstSection())
+
}},
{"perm a,link", func(p *Page) {
assert.Equal("T9_-1", p.title)
Kind string
Lang string
Layout string
+
+ // Any potential type set in the page's current section and the root section
+ // it lives in.
+ TypeFirstSection string
+ TypeCurrentSection string
+
// LayoutOverride indicates what we should only look for the above layout.
LayoutOverride bool
}
b.addTypeVariations(d.Type)
}
+ if d.TypeCurrentSection != "" {
+ b.addTypeVariations(d.TypeCurrentSection)
+ }
+
+ if d.TypeFirstSection != "" {
+ b.addTypeVariations(d.TypeFirstSection)
+ }
+
switch d.Kind {
case "page":
b.addLayoutVariations("single")
[]string{"_default/mylayout.amp.html", "_default/single.amp.html", "_default/mylayout.html", "_default/single.html"}, 4},
{"Page with layout and type", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype"}, "", ampType,
[]string{"myttype/mylayout.amp.html", "myttype/single.amp.html", "myttype/mylayout.html"}, 8},
- {"Page with layout and type with subtype", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype/mysubtype"}, "", ampType,
- []string{"myttype/mysubtype/mylayout.amp.html", "myttype/mysubtype/single.amp.html", "myttype/mysubtype/mylayout.html"}, 8},
+ {"Page with layout and type with subtype", LayoutDescriptor{Kind: "page", Layout: "mylayout", Type: "myttype/mysubtype", TypeCurrentSection: "cst"}, "", ampType,
+ []string{"myttype/mysubtype/mylayout.amp.html", "myttype/mysubtype/single.amp.html", "myttype/mysubtype/mylayout.html"}, 12},
+ {"Page with type in section", LayoutDescriptor{Kind: "page", TypeCurrentSection: "cst"}, "", ampType,
+ []string{"cst/single.amp.html", "cst/single.html", "_default/single.amp.html", "_default/single.html"}, 4},
+ {"Page with type in root section", LayoutDescriptor{Kind: "page", TypeFirstSection: "cst"}, "", ampType,
+ []string{"cst/single.amp.html", "cst/single.html", "_default/single.amp.html", "_default/single.html"}, 4},
+
// RSS
{"RSS Home", LayoutDescriptor{Kind: "home"}, "", RSSFormat,
[]string{"index.rss.xml", "home.rss.xml", "rss.xml"}, 15},