mirror of
https://github.com/gohugoio/hugo.git
synced 2025-02-17 06:22:22 +00:00
Make each generated page’s footnotes unique.
If content pages are fully rendered in a list page, footnotes that use the same reference (`[^fn]`) will have duplicated anchors. This change builds on #526 to put the page filename (`Page.File.Name`) as part of the anchor for a footnote. This would fix discussion [116](http://discuss.gohugo.io/t/footnote-references-are-duplicated-on-list-pages/116).
This commit is contained in:
parent
e68e7ef96f
commit
603b24a163
2 changed files with 21 additions and 19 deletions
|
@ -119,30 +119,30 @@ func bytesToHTML(b []byte) template.HTML {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Page) renderBytes(content []byte) []byte {
|
func (p *Page) renderBytes(content []byte) []byte {
|
||||||
return renderBytes(content, p.guessMarkupType())
|
return renderBytes(content, p.guessMarkupType(), p.File.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Page) renderContent(content []byte) []byte {
|
func (p *Page) renderContent(content []byte) []byte {
|
||||||
return renderBytesWithTOC(content, p.guessMarkupType())
|
return renderBytesWithTOC(content, p.guessMarkupType(), p.File.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderBytesWithTOC(content []byte, pagefmt string) []byte {
|
func renderBytesWithTOC(content []byte, pagefmt string, footnoteref string) []byte {
|
||||||
switch pagefmt {
|
switch pagefmt {
|
||||||
default:
|
default:
|
||||||
return markdownRenderWithTOC(content)
|
return markdownRenderWithTOC(content, footnoteref)
|
||||||
case "markdown":
|
case "markdown":
|
||||||
return markdownRenderWithTOC(content)
|
return markdownRenderWithTOC(content, footnoteref)
|
||||||
case "rst":
|
case "rst":
|
||||||
return []byte(getRstContent(content))
|
return []byte(getRstContent(content))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func renderBytes(content []byte, pagefmt string) []byte {
|
func renderBytes(content []byte, pagefmt string, footnoteref string) []byte {
|
||||||
switch pagefmt {
|
switch pagefmt {
|
||||||
default:
|
default:
|
||||||
return markdownRender(content)
|
return markdownRender(content, footnoteref)
|
||||||
case "markdown":
|
case "markdown":
|
||||||
return markdownRender(content)
|
return markdownRender(content, footnoteref)
|
||||||
case "rst":
|
case "rst":
|
||||||
return []byte(getRstContent(content))
|
return []byte(getRstContent(content))
|
||||||
}
|
}
|
||||||
|
@ -671,23 +671,24 @@ func (page *Page) Convert() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getHtmlRenderer(withTOC bool) blackfriday.Renderer {
|
func getHtmlRenderer(defaultFlags int, footnoteref string) blackfriday.Renderer {
|
||||||
renderParameters := blackfriday.HtmlRendererParameters{
|
renderParameters := blackfriday.HtmlRendererParameters{
|
||||||
FootnoteAnchorPrefix: viper.GetString("FootnoteAnchorPrefix"),
|
FootnoteAnchorPrefix: viper.GetString("FootnoteAnchorPrefix"),
|
||||||
FootnoteReturnLinkContents: viper.GetString("FootnoteReturnLinkContents"),
|
FootnoteReturnLinkContents: viper.GetString("FootnoteReturnLinkContents"),
|
||||||
}
|
}
|
||||||
|
|
||||||
htmlFlags := 0
|
if len(footnoteref) != 0 {
|
||||||
|
renderParameters.FootnoteAnchorPrefix = footnoteref + ":" +
|
||||||
|
renderParameters.FootnoteAnchorPrefix
|
||||||
|
}
|
||||||
|
|
||||||
|
htmlFlags := defaultFlags
|
||||||
htmlFlags |= blackfriday.HTML_USE_XHTML
|
htmlFlags |= blackfriday.HTML_USE_XHTML
|
||||||
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
|
htmlFlags |= blackfriday.HTML_USE_SMARTYPANTS
|
||||||
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
|
htmlFlags |= blackfriday.HTML_SMARTYPANTS_FRACTIONS
|
||||||
htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
|
htmlFlags |= blackfriday.HTML_SMARTYPANTS_LATEX_DASHES
|
||||||
htmlFlags |= blackfriday.HTML_FOOTNOTE_RETURN_LINKS
|
htmlFlags |= blackfriday.HTML_FOOTNOTE_RETURN_LINKS
|
||||||
|
|
||||||
if withTOC {
|
|
||||||
htmlFlags |= blackfriday.HTML_TOC
|
|
||||||
}
|
|
||||||
|
|
||||||
return blackfriday.HtmlRendererWithParameters(htmlFlags, "", "", renderParameters)
|
return blackfriday.HtmlRendererWithParameters(htmlFlags, "", "", renderParameters)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -699,13 +700,14 @@ func getMarkdownExtensions() int {
|
||||||
blackfriday.EXTENSION_HEADER_IDS
|
blackfriday.EXTENSION_HEADER_IDS
|
||||||
}
|
}
|
||||||
|
|
||||||
func markdownRender(content []byte) []byte {
|
func markdownRender(content []byte, footnoteref string) []byte {
|
||||||
return blackfriday.Markdown(content, getHtmlRenderer(false),
|
return blackfriday.Markdown(content, getHtmlRenderer(0, footnoteref),
|
||||||
getMarkdownExtensions())
|
getMarkdownExtensions())
|
||||||
}
|
}
|
||||||
|
|
||||||
func markdownRenderWithTOC(content []byte) []byte {
|
func markdownRenderWithTOC(content []byte, footnoteref string) []byte {
|
||||||
return blackfriday.Markdown(content, getHtmlRenderer(true),
|
return blackfriday.Markdown(content,
|
||||||
|
getHtmlRenderer(blackfriday.HTML_TOC, footnoteref),
|
||||||
getMarkdownExtensions())
|
getMarkdownExtensions())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ func ShortcodesHandle(stringToParse string, p *Page, t Template) string {
|
||||||
var data = &ShortcodeWithPage{Params: params, Page: p}
|
var data = &ShortcodeWithPage{Params: params, Page: p}
|
||||||
if endStart > 0 {
|
if endStart > 0 {
|
||||||
s := stringToParse[leadEnd+3 : leadEnd+endStart]
|
s := stringToParse[leadEnd+3 : leadEnd+endStart]
|
||||||
data.Inner = template.HTML(renderBytes([]byte(CleanP(ShortcodesHandle(s, p, t))), p.guessMarkupType()))
|
data.Inner = template.HTML(renderBytes([]byte(CleanP(ShortcodesHandle(s, p, t))), p.guessMarkupType(), p.File.Name))
|
||||||
remainder := CleanP(stringToParse[leadEnd+endEnd:])
|
remainder := CleanP(stringToParse[leadEnd+endEnd:])
|
||||||
|
|
||||||
return CleanP(stringToParse[:leadStart]) +
|
return CleanP(stringToParse[:leadStart]) +
|
||||||
|
|
Loading…
Reference in a new issue