diff options
Diffstat (limited to 'markdown')
| -rw-r--r-- | markdown/ast_external.go | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/markdown/ast_external.go b/markdown/ast_external.go index f37a685..e648ad5 100644 --- a/markdown/ast_external.go +++ b/markdown/ast_external.go @@ -3,8 +3,11 @@ package markdown import ( "fmt" "html/template" + "regexp" ) +var externalLink = regexp.MustCompile(`https?://`) + type astLink struct { content block href block @@ -19,7 +22,14 @@ func (a *astLink) Eval(opt *Option) (template.HTML, *ParseError) { if err != nil { return "", err } - return template.HTML(fmt.Sprintf(`<a href="%s">%s</a>`, href, content)), nil + return RenderLink(string(content), string(href)), nil +} + +func RenderLink(content, href string) template.HTML { + if !externalLink.Match([]byte(href)) { + return template.HTML(fmt.Sprintf(`<a href="%s">%s</a>`, href, content)) + } + return template.HTML(fmt.Sprintf(`<a href="%s" target="_blank" rel="noreferer">%s</a>`, href, content)) } type astImage struct { |
