From 4dba6ce15ae9b5208b1e2d68c96d7b1dce0a07ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 15 Apr 2018 23:17:50 +0200 Subject: [PATCH] tpl/urls: Add anchorize template func --- tpl/urls/init.go | 7 +++++++ tpl/urls/urls.go | 12 ++++++++++++ 2 files changed, 19 insertions(+) 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)