Render SHA1 links as code blocks (#6546)

This commit is contained in:
silverwind 2019-04-09 05:18:48 +02:00 committed by Lauris BH
parent 61b85990a6
commit 8e949db3b5
3 changed files with 40 additions and 23 deletions

View file

@ -327,22 +327,39 @@ func (ctx *postProcessCtx) textNode(node *html.Node) {
}
func createLink(href, content string) *html.Node {
textNode := &html.Node{
a := &html.Node{
Type: html.ElementNode,
Data: atom.A.String(),
Attr: []html.Attribute{{Key: "href", Val: href}},
}
text := &html.Node{
Type: html.TextNode,
Data: content,
}
linkNode := &html.Node{
FirstChild: textNode,
LastChild: textNode,
Type: html.ElementNode,
Data: "a",
DataAtom: atom.A,
Attr: []html.Attribute{
{Key: "href", Val: href},
},
a.AppendChild(text)
return a
}
func createCodeLink(href, content string) *html.Node {
a := &html.Node{
Type: html.ElementNode,
Data: atom.A.String(),
Attr: []html.Attribute{{Key: "href", Val: href}},
}
textNode.Parent = linkNode
return linkNode
text := &html.Node{
Type: html.TextNode,
Data: content,
}
code := &html.Node{
Type: html.ElementNode,
Data: atom.Code.String(),
}
code.AppendChild(text)
a.AppendChild(code)
return a
}
// replaceContent takes a text node, and in its content it replaces a section of
@ -633,7 +650,7 @@ func fullSha1PatternProcessor(ctx *postProcessCtx, node *html.Node) {
text += " (" + hash + ")"
}
replaceContent(node, start, end, createLink(urlFull, text))
replaceContent(node, start, end, createCodeLink(urlFull, text))
}
// sha1CurrentPatternProcessor renders SHA1 strings to corresponding links that
@ -651,7 +668,7 @@ func sha1CurrentPatternProcessor(ctx *postProcessCtx, node *html.Node) {
// Although unlikely, deadbeef and 1234567 are valid short forms of SHA1 hash
// as used by git and github for linking and thus we have to do similar.
replaceContent(node, m[2], m[3],
createLink(util.URLJoin(ctx.urlPrefix, "commit", hash), base.ShortSha(hash)))
createCodeLink(util.URLJoin(ctx.urlPrefix, "commit", hash), base.ShortSha(hash)))
}
// emailAddressProcessor replaces raw email addresses with a mailto: link.