aboutsummaryrefslogtreecommitdiff
path: root/markdown/ast_external.go
diff options
context:
space:
mode:
Diffstat (limited to 'markdown/ast_external.go')
-rw-r--r--markdown/ast_external.go12
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 {