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>2021-07-09 12:52:03 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2021-07-10 12:13:41 +0300
commit5cb52c23150032b3fdb211a095745c512369b463 (patch)
tree3b0c83c462e15e4e55acdf674b70c6ef140291c0 /resources
parent30eea3915b67f72611a3b2f4547146d4c6a96864 (diff)
Add config.cascade
This commit adds support for using the `cascade` keyword in your configuration file(s), e.g. `config.toml`. Note that * Every feature of `cascade` is available, e.g. `_target` to target specific page sets. * Pages, e.g. the home page, can overwrite the cascade defined in config. Fixes #8741
Diffstat (limited to 'resources')
-rw-r--r--resources/page/page_matcher.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/resources/page/page_matcher.go b/resources/page/page_matcher.go
index 7d3db373b..8e81f810d 100644
--- a/resources/page/page_matcher.go
+++ b/resources/page/page_matcher.go
@@ -19,6 +19,7 @@ import (
"github.com/pkg/errors"
+ "github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/hugofs/glob"
"github.com/mitchellh/mapstructure"
)
@@ -70,6 +71,42 @@ func (m PageMatcher) Matches(p Page) bool {
return true
}
+// DecodeCascade decodes in which could be eiter a map or a slice of maps.
+func DecodeCascade(in interface{}) (map[PageMatcher]maps.Params, error) {
+ m, err := maps.ToSliceStringMap(in)
+ if err != nil {
+ return map[PageMatcher]maps.Params{
+ {}: maps.ToStringMap(in),
+ }, nil
+ }
+
+ cascade := make(map[PageMatcher]maps.Params)
+
+ for _, vv := range m {
+ var m PageMatcher
+ if mv, found := vv["_target"]; found {
+ err := DecodePageMatcher(mv, &m)
+ if err != nil {
+ return nil, err
+ }
+ }
+ c, found := cascade[m]
+ if found {
+ // Merge
+ for k, v := range vv {
+ if _, found := c[k]; !found {
+ c[k] = v
+ }
+ }
+ } else {
+ cascade[m] = vv
+ }
+ }
+
+ return cascade, nil
+
+}
+
// DecodePageMatcher decodes m into v.
func DecodePageMatcher(m interface{}, v *PageMatcher) error {
if err := mapstructure.WeakDecode(m, v); err != nil {