Backport noopener links (from commit 670777b536
)
parent
a925a152c1
commit
41eb1fe8a7
7
html.go
7
html.go
|
@ -32,6 +32,7 @@ const (
|
||||||
HTML_SAFELINK // only link to trusted protocols
|
HTML_SAFELINK // only link to trusted protocols
|
||||||
HTML_NOFOLLOW_LINKS // only link with rel="nofollow"
|
HTML_NOFOLLOW_LINKS // only link with rel="nofollow"
|
||||||
HTML_NOREFERRER_LINKS // only link with rel="noreferrer"
|
HTML_NOREFERRER_LINKS // only link with rel="noreferrer"
|
||||||
|
HTML_NOOPENER_LINKS // only link with rel="noopener"
|
||||||
HTML_HREF_TARGET_BLANK // add a blank target
|
HTML_HREF_TARGET_BLANK // add a blank target
|
||||||
HTML_TOC // generate a table of contents
|
HTML_TOC // generate a table of contents
|
||||||
HTML_OMIT_CONTENTS // skip the main contents (for a standalone table of contents)
|
HTML_OMIT_CONTENTS // skip the main contents (for a standalone table of contents)
|
||||||
|
@ -445,6 +446,9 @@ func (options *Html) AutoLink(out *bytes.Buffer, link []byte, kind int) {
|
||||||
if options.flags&HTML_NOREFERRER_LINKS != 0 && !isRelativeLink(link) {
|
if options.flags&HTML_NOREFERRER_LINKS != 0 && !isRelativeLink(link) {
|
||||||
relAttrs = append(relAttrs, "noreferrer")
|
relAttrs = append(relAttrs, "noreferrer")
|
||||||
}
|
}
|
||||||
|
if options.flags&HTML_NOOPENER_LINKS != 0 && !isRelativeLink(link) {
|
||||||
|
relAttrs = append(relAttrs, "noopener")
|
||||||
|
}
|
||||||
if len(relAttrs) > 0 {
|
if len(relAttrs) > 0 {
|
||||||
out.WriteString(fmt.Sprintf("\" rel=\"%s", strings.Join(relAttrs, " ")))
|
out.WriteString(fmt.Sprintf("\" rel=\"%s", strings.Join(relAttrs, " ")))
|
||||||
}
|
}
|
||||||
|
@ -559,6 +563,9 @@ func (options *Html) Link(out *bytes.Buffer, link []byte, title []byte, content
|
||||||
if options.flags&HTML_NOREFERRER_LINKS != 0 && !isRelativeLink(link) {
|
if options.flags&HTML_NOREFERRER_LINKS != 0 && !isRelativeLink(link) {
|
||||||
relAttrs = append(relAttrs, "noreferrer")
|
relAttrs = append(relAttrs, "noreferrer")
|
||||||
}
|
}
|
||||||
|
if options.flags&HTML_NOOPENER_LINKS != 0 && !isRelativeLink(link) {
|
||||||
|
relAttrs = append(relAttrs, "noopener")
|
||||||
|
}
|
||||||
if len(relAttrs) > 0 {
|
if len(relAttrs) > 0 {
|
||||||
out.WriteString(fmt.Sprintf("\" rel=\"%s", strings.Join(relAttrs, " ")))
|
out.WriteString(fmt.Sprintf("\" rel=\"%s", strings.Join(relAttrs, " ")))
|
||||||
}
|
}
|
||||||
|
|
|
@ -624,6 +624,25 @@ func TestRelAttrLink(t *testing.T) {
|
||||||
}
|
}
|
||||||
doTestsInlineParam(t, nofollownoreferrerTests, Options{}, HTML_SAFELINK|HTML_NOFOLLOW_LINKS|HTML_NOREFERRER_LINKS,
|
doTestsInlineParam(t, nofollownoreferrerTests, Options{}, HTML_SAFELINK|HTML_NOFOLLOW_LINKS|HTML_NOREFERRER_LINKS,
|
||||||
HtmlRendererParameters{})
|
HtmlRendererParameters{})
|
||||||
|
|
||||||
|
var noopenerTests = []string{
|
||||||
|
"[foo](http://bar.com/foo/)\n",
|
||||||
|
"<p><a href=\"http://bar.com/foo/\" rel=\"noopener\">foo</a></p>\n",
|
||||||
|
|
||||||
|
"[foo](/bar/)\n",
|
||||||
|
"<p><a href=\"/bar/\">foo</a></p>\n",
|
||||||
|
}
|
||||||
|
doTestsInlineParam(t, noopenerTests, Options{}, HTML_SAFELINK|HTML_NOOPENER_LINKS, HtmlRendererParameters{})
|
||||||
|
|
||||||
|
var nofollownoreferrernoopenerTests = []string{
|
||||||
|
"[foo](http://bar.com/foo/)\n",
|
||||||
|
"<p><a href=\"http://bar.com/foo/\" rel=\"nofollow noreferrer noopener\">foo</a></p>\n",
|
||||||
|
|
||||||
|
"[foo](/bar/)\n",
|
||||||
|
"<p><a href=\"/bar/\">foo</a></p>\n",
|
||||||
|
}
|
||||||
|
doTestsInlineParam(t, nofollownoreferrernoopenerTests, Options{},
|
||||||
|
HTML_SAFELINK|HTML_NOOPENER_LINKS|HTML_NOFOLLOW_LINKS|HTML_NOREFERRER_LINKS, HtmlRendererParameters{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHrefTargetBlank(t *testing.T) {
|
func TestHrefTargetBlank(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue