Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-08-09 11:05:22 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-08-10 21:07:42 +0300
commitbd98182dbde893a8a809661c70633741bbf63911 (patch)
treeb6291cffa6c2e573a0976a0d70aa467c7a101012 /hugolib/page__meta.go
parente88d7989907108b656eccd92bccc076be72a5c03 (diff)
Implement cascading front matter
Fixes #6041
Diffstat (limited to 'hugolib/page__meta.go')
-rw-r--r--hugolib/page__meta.go48
1 files changed, 40 insertions, 8 deletions
diff --git a/hugolib/page__meta.go b/hugolib/page__meta.go
index 551f47977..e8ef13bfd 100644
--- a/hugolib/page__meta.go
+++ b/hugolib/page__meta.go
@@ -306,19 +306,51 @@ func (p *pageMeta) Weight() int {
return p.weight
}
-func (pm *pageMeta) setMetadata(p *pageState, frontmatter map[string]interface{}) error {
- if frontmatter == nil {
+func (pm *pageMeta) setMetadata(bucket *pagesMapBucket, p *pageState, frontmatter map[string]interface{}) error {
+ if frontmatter == nil && bucket.cascade == nil {
return errors.New("missing frontmatter data")
}
pm.params = make(map[string]interface{})
- // Needed for case insensitive fetching of params values
- maps.ToLower(frontmatter)
+ if frontmatter != nil {
+ // Needed for case insensitive fetching of params values
+ maps.ToLower(frontmatter)
+ if p.IsNode() {
+ // Check for any cascade define on itself.
+ if cv, found := frontmatter["cascade"]; found {
+ cvm := cast.ToStringMap(cv)
+ if bucket.cascade == nil {
+ bucket.cascade = cvm
+ } else {
+ for k, v := range cvm {
+ bucket.cascade[k] = v
+ }
+ }
+ }
+ }
+
+ if bucket != nil && bucket.cascade != nil {
+ for k, v := range bucket.cascade {
+ if _, found := frontmatter[k]; !found {
+ frontmatter[k] = v
+ }
+ }
+ }
+ } else {
+ frontmatter = make(map[string]interface{})
+ for k, v := range bucket.cascade {
+ frontmatter[k] = v
+ }
+ }
var mtime time.Time
- if p.File().FileInfo() != nil {
- mtime = p.File().FileInfo().ModTime()
+ var contentBaseName string
+ if !p.File().IsZero() {
+ contentBaseName = p.File().ContentBaseName()
+ if p.File().FileInfo() != nil {
+ mtime = p.File().FileInfo().ModTime()
+ }
}
var gitAuthorDate time.Time
@@ -331,7 +363,7 @@ func (pm *pageMeta) setMetadata(p *pageState, frontmatter map[string]interface{}
Params: pm.params,
Dates: &pm.Dates,
PageURLs: &pm.urlPaths,
- BaseFilename: p.File().ContentBaseName(),
+ BaseFilename: contentBaseName,
ModTime: mtime,
GitAuthorDate: gitAuthorDate,
}
@@ -546,7 +578,7 @@ func (pm *pageMeta) setMetadata(p *pageState, frontmatter map[string]interface{}
if isCJKLanguage != nil {
pm.isCJKLanguage = *isCJKLanguage
- } else if p.s.siteCfg.hasCJKLanguage {
+ } else if p.s.siteCfg.hasCJKLanguage && p.source.parsed != nil {
if cjkRe.Match(p.source.parsed.Input()) {
pm.isCJKLanguage = true
} else {