diff options
Diffstat (limited to 'tpl')
-rw-r--r-- | tpl/tplimpl/embedded/templates.autogen.go | 4 | ||||
-rw-r--r-- | tpl/tplimpl/embedded/templates/shortcodes/ref.html | 2 | ||||
-rw-r--r-- | tpl/tplimpl/embedded/templates/shortcodes/relref.html | 2 | ||||
-rw-r--r-- | tpl/urls/urls.go | 58 |
4 files changed, 56 insertions, 10 deletions
diff --git a/tpl/tplimpl/embedded/templates.autogen.go b/tpl/tplimpl/embedded/templates.autogen.go index fc8ce5cc6..35559b8c3 100644 --- a/tpl/tplimpl/embedded/templates.autogen.go +++ b/tpl/tplimpl/embedded/templates.autogen.go @@ -380,8 +380,8 @@ if (!doNotTrack) { </style> {{ end }} {{ end }}`}, - {`shortcodes/ref.html`, `{{ if len .Params | eq 2 }}{{ ref .Page (.Get 0) (.Get 1) }}{{ else }}{{ ref .Page (.Get 0) }}{{ end }}`}, - {`shortcodes/relref.html`, `{{ if len .Params | eq 2 }}{{ relref .Page (.Get 0) (.Get 1) }}{{ else }}{{ relref .Page (.Get 0) }}{{ end }}`}, + {`shortcodes/ref.html`, `{{ ref .Page .Params }}`}, + {`shortcodes/relref.html`, `{{ relref .Page .Params }}`}, {`shortcodes/twitter.html`, `{{- $pc := .Page.Site.Config.Privacy.Twitter -}} {{- if not $pc.Disable -}} {{- if $pc.Simple -}} diff --git a/tpl/tplimpl/embedded/templates/shortcodes/ref.html b/tpl/tplimpl/embedded/templates/shortcodes/ref.html index 84e3e3820..c4d9f1d16 100644 --- a/tpl/tplimpl/embedded/templates/shortcodes/ref.html +++ b/tpl/tplimpl/embedded/templates/shortcodes/ref.html @@ -1 +1 @@ -{{ if len .Params | eq 2 }}{{ ref .Page (.Get 0) (.Get 1) }}{{ else }}{{ ref .Page (.Get 0) }}{{ end }}
\ No newline at end of file +{{ ref .Page .Params }}
\ No newline at end of file diff --git a/tpl/tplimpl/embedded/templates/shortcodes/relref.html b/tpl/tplimpl/embedded/templates/shortcodes/relref.html index c61423bf1..d3a31ea44 100644 --- a/tpl/tplimpl/embedded/templates/shortcodes/relref.html +++ b/tpl/tplimpl/embedded/templates/shortcodes/relref.html @@ -1 +1 @@ -{{ if len .Params | eq 2 }}{{ relref .Page (.Get 0) (.Get 1) }}{{ else }}{{ relref .Page (.Get 0) }}{{ end }}
\ No newline at end of file +{{ relref .Page .Params }}
\ No newline at end of file diff --git a/tpl/urls/urls.go b/tpl/urls/urls.go index b93c7cada..54c94ec17 100644 --- a/tpl/urls/urls.go +++ b/tpl/urls/urls.go @@ -91,30 +91,76 @@ func (ns *Namespace) Anchorize(a interface{}) (string, error) { } type reflinker interface { - Ref(refs ...string) (string, error) - RelRef(refs ...string) (string, error) + Ref(args map[string]interface{}) (string, error) + RelRef(args map[string]interface{}) (string, error) } // Ref returns the absolute URL path to a given content item. -func (ns *Namespace) Ref(in interface{}, refs ...string) (template.HTML, error) { +func (ns *Namespace) Ref(in interface{}, args interface{}) (template.HTML, error) { p, ok := in.(reflinker) if !ok { return "", errors.New("invalid Page received in Ref") } - s, err := p.Ref(refs...) + argsm, err := ns.refArgsToMap(args) + if err != nil { + return "", err + } + s, err := p.Ref(argsm) return template.HTML(s), err } // RelRef returns the relative URL path to a given content item. -func (ns *Namespace) RelRef(in interface{}, refs ...string) (template.HTML, error) { +func (ns *Namespace) RelRef(in interface{}, args interface{}) (template.HTML, error) { p, ok := in.(reflinker) if !ok { return "", errors.New("invalid Page received in RelRef") } - s, err := p.RelRef(refs...) + argsm, err := ns.refArgsToMap(args) + if err != nil { + return "", err + } + + s, err := p.RelRef(argsm) return template.HTML(s), err } +func (ns *Namespace) refArgsToMap(args interface{}) (map[string]interface{}, error) { + var ( + s string + of string + ) + switch v := args.(type) { + case map[string]interface{}: + return v, nil + case map[string]string: + m := make(map[string]interface{}) + for k, v := range v { + m[k] = v + } + return m, nil + case []string: + if len(v) == 0 || len(v) > 2 { + return nil, fmt.Errorf("invalid numer of arguments to ref") + } + // These where the options before we introduced the map type: + s = v[0] + if len(v) == 2 { + of = v[1] + } + default: + var err error + s, err = cast.ToStringE(args) + if err != nil { + return nil, err + } + + } + return map[string]interface{}{ + "path": s, + "outputFormat": of, + }, nil +} + // RelLangURL takes a given string and prepends the relative path according to a // page's position in the project directory structure and the current language. func (ns *Namespace) RelLangURL(a interface{}) (template.HTML, error) { |