diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-11-21 21:59:38 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-11-22 18:41:50 +0100 |
commit | a3fe5e5e35f311f22b6b4fc38abfcf64cd2c7d6f (patch) | |
tree | 06cf1f647ae026b4fb3053c85370c2b203c7a089 /common/maps/maps.go | |
parent | cd07e6d57b158a76f812e8c4c9567dbc84f57939 (diff) |
Fix Params case handling in the index, sort and where func
This means that you can now do:
```
{{ range where .Site.Pages "Params.MYPARAM" "foo" }}
```
Diffstat (limited to 'common/maps/maps.go')
-rw-r--r-- | common/maps/maps.go | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/common/maps/maps.go b/common/maps/maps.go index e0d4f964d..8b42ca764 100644 --- a/common/maps/maps.go +++ b/common/maps/maps.go @@ -25,26 +25,45 @@ import ( // recursively. // Notes: // * This will modify the map given. -// * Any nested map[interface{}]interface{} will be converted to map[string]interface{}. -func ToLower(m map[string]interface{}) { +// * Any nested map[interface{}]interface{} will be converted to Params. +func ToLower(m Params) { for k, v := range m { + var retyped bool switch v.(type) { case map[interface{}]interface{}: - v = cast.ToStringMap(v) - ToLower(v.(map[string]interface{})) + var p Params = cast.ToStringMap(v) + v = p + ToLower(p) + retyped = true case map[string]interface{}: - ToLower(v.(map[string]interface{})) + var p Params = v.(map[string]interface{}) + v = p + ToLower(p) + retyped = true } lKey := strings.ToLower(k) - if k != lKey { + if retyped || k != lKey { delete(m, k) m[lKey] = v } + } +} +func ToStringMapE(in interface{}) (map[string]interface{}, error) { + switch in.(type) { + case Params: + return in.(Params), nil + default: + return cast.ToStringMapE(in) } } +func ToStringMap(in interface{}) map[string]interface{} { + m, _ := ToStringMapE(in) + return m +} + type keyRename struct { pattern glob.Glob newKey string |