diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-09-10 09:48:10 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-09-14 10:12:08 +0200 |
commit | e27fd4c1b80b7acb43290ac50e9f140d690cf042 (patch) | |
tree | 34b0f36bde4598781f9b331b5956fae3b4b33866 /tpl/path | |
parent | b7ca3e1b3a83ef27bef841c319edb5b377cc4102 (diff) |
tpl/collections: Add collections.Append
Before this commit you would typically use `.Scratch.Add` to manually create slices in a loop.
With variable overwrite in Go 1.11, we can do better. This commit adds the `append` template func.
A made-up example:
```bash
{{ $p1 := index .Site.RegularPages 0 }}{{ $p2 := index .Site.RegularPages 1 }}
{{ $pages := slice }}
{{ if true }}
{{ $pages = $pages | append $p2 $p1 }}
{{ end }}
```
Note that with 2 slices as arguments, the two examples below will give the same result:
```bash
{{ $s1 := slice "a" "b" | append (slice "c" "d") }}
{{ $s2 := slice "a" "b" | append "c" "d" }}
```
Both of the above will give `[]string{a, b, c, d}`.
This commit also improves the type handling in the `slice` template function. Now `slice "a" "b"` will give a `[]string` slice. The old behaviour was to return a `[]interface{}`.
Fixes #5190
Diffstat (limited to 'tpl/path')
-rw-r--r-- | tpl/path/path.go | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/tpl/path/path.go b/tpl/path/path.go index fabf15018..f975726cc 100644 --- a/tpl/path/path.go +++ b/tpl/path/path.go @@ -121,6 +121,10 @@ func (ns *Namespace) Join(elements ...interface{}) (string, error) { var pathElements []string for _, elem := range elements { switch v := elem.(type) { + case []string: + for _, e := range v { + pathElements = append(pathElements, filepath.ToSlash(e)) + } case []interface{}: for _, e := range v { elemStr, err := cast.ToStringE(e) |