mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-30 22:39:58 +02:00
@@ -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 -}}
|
||||
|
@@ -1 +1 @@
|
||||
{{ if len .Params | eq 2 }}{{ ref .Page (.Get 0) (.Get 1) }}{{ else }}{{ ref .Page (.Get 0) }}{{ end }}
|
||||
{{ ref .Page .Params }}
|
@@ -1 +1 @@
|
||||
{{ if len .Params | eq 2 }}{{ relref .Page (.Get 0) (.Get 1) }}{{ else }}{{ relref .Page (.Get 0) }}{{ end }}
|
||||
{{ relref .Page .Params }}
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user