tpl/urls: Add JoinPath template function

See https://pkg.go.dev/net/url#JoinPath

Closes #9694
This commit is contained in:
Joe Mooring
2023-04-14 13:27:16 -07:00
committed by Bjørn Erik Pedersen
parent 03cb38e6c6
commit 5b3e165bad
4 changed files with 102 additions and 0 deletions

View File

@@ -185,3 +185,38 @@ func (ns *Namespace) AbsLangURL(s any) (template.HTML, error) {
return template.HTML(ns.deps.PathSpec.AbsURL(ss, !ns.multihost)), nil
}
// JoinPath joins the provided elements into a URL string and cleans the result
// of any ./ or ../ elements.
func (ns *Namespace) JoinPath(elements ...any) (string, error) {
var selements []string
for _, e := range elements {
switch v := e.(type) {
case []string:
for _, e := range v {
selements = append(selements, e)
}
case []any:
for _, e := range v {
se, err := cast.ToStringE(e)
if err != nil {
return "", err
}
selements = append(selements, se)
}
default:
se, err := cast.ToStringE(e)
if err != nil {
return "", err
}
selements = append(selements, se)
}
}
result, err := url.JoinPath(selements[0], selements[1:]...)
if err != nil {
return "", err
}
return result, nil
}