diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-08-09 10:05:22 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-08-10 20:07:42 +0200 |
commit | bd98182dbde893a8a809661c70633741bbf63911 (patch) | |
tree | b6291cffa6c2e573a0976a0d70aa467c7a101012 /hugolib/page__new.go | |
parent | e88d7989907108b656eccd92bccc076be72a5c03 (diff) |
Implement cascading front matter
Fixes #6041
Diffstat (limited to 'hugolib/page__new.go')
-rw-r--r-- | hugolib/page__new.go | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/hugolib/page__new.go b/hugolib/page__new.go index 64c84b0f8..99bf305aa 100644 --- a/hugolib/page__new.go +++ b/hugolib/page__new.go @@ -95,7 +95,7 @@ func newPageBase(metaProvider *pageMeta) (*pageState, error) { } -func newPageFromMeta(metaProvider *pageMeta) (*pageState, error) { +func newPageFromMeta(meta map[string]interface{}, metaProvider *pageMeta) (*pageState, error) { if metaProvider.f == nil { metaProvider.f = page.NewZeroFile(metaProvider.s.DistinctWarningLog) } @@ -105,8 +105,26 @@ func newPageFromMeta(metaProvider *pageMeta) (*pageState, error) { return nil, err } - if err := metaProvider.applyDefaultValues(); err != nil { - return nil, err + initMeta := func(bucket *pagesMapBucket) error { + if meta != nil || bucket != nil { + if err := metaProvider.setMetadata(bucket, ps, meta); err != nil { + return ps.wrapError(err) + } + } + + if err := metaProvider.applyDefaultValues(); err != nil { + return err + } + + return nil + } + + if metaProvider.standalone { + initMeta(nil) + } else { + // Because of possible cascade keywords, we need to delay this + // until we have the complete page graph. + ps.metaInitFn = initMeta } ps.init.Add(func() (interface{}, error) { @@ -152,7 +170,7 @@ func newPageFromMeta(metaProvider *pageMeta) (*pageState, error) { func newPageStandalone(m *pageMeta, f output.Format) (*pageState, error) { m.configuredOutputFormats = output.Formats{f} m.standalone = true - p, err := newPageFromMeta(m) + p, err := newPageFromMeta(nil, m) if err != nil { return nil, err @@ -211,12 +229,16 @@ func newPageWithContent(f *fileInfo, s *Site, bundled bool, content resource.Ope ps.shortcodeState = newShortcodeHandler(ps, ps.s, nil) - if err := ps.mapContent(metaProvider); err != nil { - return nil, ps.wrapError(err) - } + ps.metaInitFn = func(bucket *pagesMapBucket) error { + if err := ps.mapContent(bucket, metaProvider); err != nil { + return ps.wrapError(err) + } - if err := metaProvider.applyDefaultValues(); err != nil { - return nil, err + if err := metaProvider.applyDefaultValues(); err != nil { + return err + } + + return nil } ps.init.Add(func() (interface{}, error) { |