diff --git a/tpl/urls/init.go b/tpl/urls/init.go index c48fe8ca1..debaaabf9 100644 --- a/tpl/urls/init.go +++ b/tpl/urls/init.go @@ -59,6 +59,13 @@ func init() { [][2]string{}, ) + ns.AddMethodMapping(ctx.Anchorize, + []string{"anchorize"}, + [][2]string{ + {`{{ "This is a title" | anchorize }}`, `this-is-a-title`}, + }, + ) + return ns } diff --git a/tpl/urls/urls.go b/tpl/urls/urls.go index a9f8f4f76..b93c7cada 100644 --- a/tpl/urls/urls.go +++ b/tpl/urls/urls.go @@ -16,6 +16,9 @@ package urls import ( "errors" "fmt" + + "github.com/russross/blackfriday" + "html/template" "net/url" @@ -78,6 +81,15 @@ func (ns *Namespace) URLize(a interface{}) (string, error) { return ns.deps.PathSpec.URLize(s), nil } +// Anchorize creates sanitized anchor names that are compatible with Blackfriday. +func (ns *Namespace) Anchorize(a interface{}) (string, error) { + s, err := cast.ToStringE(a) + if err != nil { + return "", nil + } + return blackfriday.SanitizedAnchorName(s), nil +} + type reflinker interface { Ref(refs ...string) (string, error) RelRef(refs ...string) (string, error)