summaryrefslogtreecommitdiffstats
path: root/tpl
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-07-17 21:44:08 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-07-18 00:07:20 +0200
commitd741064bebe2f4663a7ba12556dccc3dffe08629 (patch)
tree56d651776e06dac70928af84718d52e1af38cb7b /tpl
parent3eb313fef495a39731dafa6bddbf77760090230d (diff)
Add optional lang as argument to rel/relref
Fixes #4956
Diffstat (limited to 'tpl')
-rw-r--r--tpl/tplimpl/embedded/templates.autogen.go4
-rw-r--r--tpl/tplimpl/embedded/templates/shortcodes/ref.html2
-rw-r--r--tpl/tplimpl/embedded/templates/shortcodes/relref.html2
-rw-r--r--tpl/urls/urls.go58
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) {