package collections

import ""

Package collections provides template functions for manipulating collections such as arrays, maps, and slices.


Package Files

append.go apply.go collections.go complement.go index.go init.go merge.go reflect_helpers.go sort.go symdiff.go where.go

type Namespace

type Namespace struct {
    // contains filtered or unexported fields

Namespace provides template functions for the "collections" namespace.

func New

func New(deps *deps.Deps) *Namespace

New returns a new instance of the collections-namespaced template functions.

func (*Namespace) After

func (ns *Namespace) After(index any, seq any) (any, error)

After returns all the items after the first N in a rangeable list.

func (*Namespace) Append

func (ns *Namespace) Append(args ...any) (any, error)

Append appends the arguments up to the last one to the slice in the last argument. This construct allows template constructs like this:

{{ $pages = $pages | append $p2 $p1 }}

Note that with 2 arguments where both are slices of the same type, the first slice will be appended to the second:

{{ $pages = $pages | append .Site.RegularPages }}

func (*Namespace) Apply

func (ns *Namespace) Apply(ctx context.Context, seq any, fname string, args ...any) (any, error)

Apply takes a map, array, or slice and returns a new slice with the function fname applied over it.

func (*Namespace) Complement

func (ns *Namespace) Complement(seqs ...any) (any, error)

Complement gives the elements in the last element of seqs that are not in any of the others. All elements of seqs must be slices or arrays of comparable types.

The reasoning behind this rather clumsy API is so we can do this in the templates:

{{ $c := .Pages | complement $last4 }}

func (*Namespace) Delimit

func (ns *Namespace) Delimit(seq, delimiter any, last ...any) (template.HTML, error)

Delimit takes a given sequence and returns a delimited HTML string. If last is passed to the function, it will be used as the final delimiter.

func (*Namespace) Dictionary

func (ns *Namespace) Dictionary(values ...any) (map[string]any, error)

Dictionary creates a map[string]interface{} from the given parameters by walking the parameters and treating them as key-value pairs. The number of parameters must be even. The keys can be string slices, which will create the needed nested structure.

func (*Namespace) EchoParam

func (ns *Namespace) EchoParam(a, key any) any

EchoParam returns a given value if it is set; otherwise, it returns an empty string.

func (*Namespace) First

func (ns *Namespace) First(limit any, seq any) (any, error)

First returns the first N items in a rangeable list.

func (*Namespace) Group

func (ns *Namespace) Group(key any, items any) (any, error)

Group groups a set of elements by the given key. This is currently only supported for Pages.

func (*Namespace) In

func (ns *Namespace) In(l any, v any) (bool, error)

In returns whether v is in the set l. l may be an array or slice.

func (*Namespace) Index

func (ns *Namespace) Index(item any, args ...any) (any, error)

Index returns the result of indexing its first argument by the following arguments. Thus "index x 1 2 3" is, in Go syntax, x[1][2][3]. Each indexed item must be a map, slice, or array.

Copied from Go stdlib src/text/template/funcs.go.

We deviate from the stdlib due to

TODO(moorereason): merge upstream changes.

func (*Namespace) Intersect

func (ns *Namespace) Intersect(l1, l2 any) (any, error)

Intersect returns the common elements in the given sets, l1 and l2. l1 and l2 must be of the same type and may be either arrays or slices.

func (*Namespace) IsSet

func (ns *Namespace) IsSet(a any, key any) (bool, error)

IsSet returns whether a given array, channel, slice, or map has a key defined.

func (*Namespace) KeyVals

func (ns *Namespace) KeyVals(key any, vals ...any) (types.KeyValues, error)

KeyVals creates a key and values wrapper.

func (*Namespace) Last

func (ns *Namespace) Last(limit any, seq any) (any, error)

Last returns the last N items in a rangeable list.

func (*Namespace) Merge

func (ns *Namespace) Merge(params ...any) (any, error)

Merge creates a copy of the final parameter and merges the preceding parameters into it in reverse order. Currently only maps are supported. Key handling is case insensitive.

func (*Namespace) NewScratch

func (ns *Namespace) NewScratch() *maps.Scratch

NewScratch creates a new Scratch which can be used to store values in a thread safe way.

func (*Namespace) Querify

func (ns *Namespace) Querify(params ...any) (string, error)

Querify encodes the given parameters in URL-encoded form ("bar=baz&foo=quux") sorted by key.

func (*Namespace) Reverse

func (ns *Namespace) Reverse(slice any) (any, error)

Reverse creates a copy of slice and reverses it.

func (*Namespace) Seq

func (ns *Namespace) Seq(args ...any) ([]int, error)

Seq creates a sequence of integers. It's named and used as GNU's seq.


3 => 1, 2, 3
1 2 4 => 1, 3
-3 => -1, -2, -3
1 4 => 1, 2, 3, 4
1 -2 => 1, 0, -1, -2

func (*Namespace) Shuffle

func (ns *Namespace) Shuffle(seq any) (any, error)

Shuffle returns the given rangeable list in a randomised order.

func (*Namespace) Slice

func (ns *Namespace) Slice(args ...any) any

Slice returns a slice of all passed arguments.

func (*Namespace) Sort

func (ns *Namespace) Sort(seq any, args ...any) (any, error)

Sort returns a sorted sequence.

func (*Namespace) SymDiff

func (ns *Namespace) SymDiff(s2, s1 any) (any, error)

SymDiff returns the symmetric difference of s1 and s2. Arguments must be either a slice or an array of comparable types.

func (*Namespace) Union

func (ns *Namespace) Union(l1, l2 any) (any, error)

Union returns the union of the given sets, l1 and l2. l1 and l2 must be of the same type and may be either arrays or slices. If l1 and l2 aren't of the same type then l1 will be returned. If either l1 or l2 is nil then the non-nil list will be returned.

func (*Namespace) Uniq

func (ns *Namespace) Uniq(seq any) (any, error)

Uniq takes in a slice or array and returns a slice with subsequent duplicate elements removed.

func (*Namespace) Where

func (ns *Namespace) Where(seq, key any, args ...any) (any, error)

Where returns a filtered subset of a given data type.

v0.101.0 (latest)
Jun 16, 2022
22 packages (graph)
Last checked
4 hours ago

Tools for package owners.