From 315fb575cbbfd3da0cebececd10c24435dca8440 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Wed, 23 Dec 2020 14:36:27 +0100 Subject: [PATCH] Don't render absolute links on HTML post pages, but in feeds and activitystreams --- activityStreams.go | 2 +- feeds.go | 2 +- markdown.go | 32 +++++++++++++++++++++----------- posts.go | 5 +++-- postsFuncs.go | 15 ++++++++++++++- render.go | 2 +- 6 files changed, 41 insertions(+), 17 deletions(-) diff --git a/activityStreams.go b/activityStreams.go index 3ce33b7..50a02ef 100644 --- a/activityStreams.go +++ b/activityStreams.go @@ -90,7 +90,7 @@ func (p *post) toASNote() *asNote { as.Type = "Note" } // Content - as.Content = string(p.html()) + as.Content = string(p.absoluteHTML()) // Attachments if images := p.Parameters[appConfig.Micropub.PhotoParam]; len(images) > 0 { for _, image := range images { diff --git a/feeds.go b/feeds.go index 39228f5..bfdc807 100644 --- a/feeds.go +++ b/feeds.go @@ -58,7 +58,7 @@ func generateFeed(blog string, f feedType, w http.ResponseWriter, r *http.Reques Link: &feeds.Link{Href: p.fullURL()}, Description: p.summary(), Id: p.Path, - Content: string(p.html()), + Content: string(p.absoluteHTML()), Created: created, Updated: updated, Enclosure: enc, diff --git a/markdown.go b/markdown.go index 43988c1..d79ddd7 100644 --- a/markdown.go +++ b/markdown.go @@ -18,10 +18,10 @@ import ( var emojilib definition.Emojis -var markdown goldmark.Markdown +var defaultMarkdown, absoluteMarkdown goldmark.Markdown func initMarkdown() { - markdown = goldmark.New( + defaultGoldmarkOptions := []goldmark.Option{ goldmark.WithRendererOptions( html.WithUnsafe(), ), @@ -38,15 +38,19 @@ func initMarkdown() { emoji.New( emoji.WithEmojis(emojiGoLib()), ), - // Custom - &customExtension{}, ), - ) + } + defaultMarkdown = goldmark.New(append(defaultGoldmarkOptions, goldmark.WithExtensions(&customExtension{absoluteLinks: false}))...) + absoluteMarkdown = goldmark.New(append(defaultGoldmarkOptions, goldmark.WithExtensions(&customExtension{absoluteLinks: true}))...) } -func renderMarkdown(source string) ([]byte, error) { +func renderMarkdown(source string, absoluteLinks bool) (rendered []byte, err error) { var buffer bytes.Buffer - err := markdown.Convert([]byte(source), &buffer) + if absoluteLinks { + err = absoluteMarkdown.Convert([]byte(source), &buffer) + } else { + err = defaultMarkdown.Convert([]byte(source), &buffer) + } return buffer.Bytes(), err } @@ -65,15 +69,21 @@ func emojiGoLib() definition.Emojis { } // Links -type customExtension struct{} +type customExtension struct { + absoluteLinks bool +} func (l *customExtension) Extend(m goldmark.Markdown) { m.Renderer().AddOptions(renderer.WithNodeRenderers( - util.Prioritized(&customRenderer{}, 500), + util.Prioritized(&customRenderer{ + absoluteLinks: l.absoluteLinks, + }, 500), )) } -type customRenderer struct{} +type customRenderer struct { + absoluteLinks bool +} func (c *customRenderer) RegisterFuncs(r renderer.NodeRendererFuncRegisterer) { r.Register(ast.KindLink, c.renderLink) @@ -86,7 +96,7 @@ func (c *customRenderer) renderLink(w util.BufWriter, _ []byte, node ast.Node, e _, _ = w.WriteString("