diff --git a/activitystreams.go b/activitystreams.go index 23c31f2..f187484 100644 --- a/activitystreams.go +++ b/activitystreams.go @@ -68,12 +68,7 @@ func servePostActivityStreams(w http.ResponseWriter, r *http.Request) { as.Type = "Note" } // Content - if rendered, err := renderMarkdown(p.Content); err == nil { - as.Content = string(rendered) - } else { - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } + as.Content = string(p.html()) // Attachments if images := p.Parameters[appConfig.Blogs[p.Blog].ActivityStreams.ImagesParameter]; len(images) > 0 { for _, image := range images { diff --git a/feeds.go b/feeds.go index 15fc06d..b51deeb 100644 --- a/feeds.go +++ b/feeds.go @@ -32,13 +32,12 @@ func generateFeed(blog string, f feedType, w http.ResponseWriter, r *http.Reques Created: now, } for _, p := range posts { - htmlContent, _ := renderMarkdown(p.Content) feed.Add(&feeds.Item{ Title: p.title(), Link: &feeds.Link{Href: appConfig.Server.PublicAddress + p.Path}, Description: p.summary(), Id: p.Path, - Content: string(htmlContent), + Content: string(p.html()), }) } var feedStr string diff --git a/posts.go b/posts.go index 13180e6..2e563f0 100644 --- a/posts.go +++ b/posts.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "html/template" "net/http" "reflect" "strconv" @@ -24,7 +25,8 @@ type post struct { Blog string `json:"blog"` Section string `json:"section"` // Not persisted - Slug string `json:"slug"` + Slug string `json:"slug"` + rendered template.HTML } func servePost(w http.ResponseWriter, r *http.Request) { diff --git a/postsFuncs.go b/postsFuncs.go index 2ae6ca1..abf3268 100644 --- a/postsFuncs.go +++ b/postsFuncs.go @@ -2,6 +2,8 @@ package main import ( "context" + "html/template" + "log" "strings" "github.com/PuerkitoBio/goquery" @@ -18,20 +20,34 @@ func (p *post) title() string { return p.firstParameter("title") } +func (p *post) html() template.HTML { + if p.rendered != "" { + return p.rendered + } + htmlContent, err := renderMarkdown(p.Content) + if err != nil { + log.Fatal(err) + return "" + } + p.rendered = template.HTML(htmlContent) + return p.rendered +} + +const summaryDivider = "" + func (p *post) summary() (summary string) { summary = p.firstParameter("summary") if summary != "" { return } - summaryDivider := "" - rendered, _ := renderMarkdown(p.Content) - if strings.Contains(string(rendered), summaryDivider) { - doc, _ := goquery.NewDocumentFromReader(strings.NewReader(strings.Split(string(rendered), summaryDivider)[0])) + html := string(p.html()) + if splitted := strings.Split(html, summaryDivider); len(splitted) > 1 { + doc, _ := goquery.NewDocumentFromReader(strings.NewReader(splitted[0])) summary = doc.Text() - return + } else { + doc, _ := goquery.NewDocumentFromReader(strings.NewReader(html)) + summary = doc.Find("p").First().Text() } - doc, _ := goquery.NewDocumentFromReader(strings.NewReader(string(rendered))) - summary = firstSentences(doc.Text(), 3) return } diff --git a/render.go b/render.go index 575ad63..718acaa 100644 --- a/render.go +++ b/render.go @@ -47,11 +47,10 @@ func initRendering() error { } return template.HTML(htmlContent) }, - // First parameter value + // Post specific "p": func(p *post, parameter string) string { return p.firstParameter(parameter) }, - // Post specific "ps": func(p *post, parameter string) []string { return p.Parameters[parameter] }, @@ -61,6 +60,9 @@ func initRendering() error { "title": func(p *post) string { return p.title() }, + "content": func(p *post) template.HTML { + return p.html() + }, "summary": func(p *post) string { return p.summary() }, diff --git a/templates/post.gohtml b/templates/post.gohtml index c9fe58e..38b2658 100644 --- a/templates/post.gohtml +++ b/templates/post.gohtml @@ -10,8 +10,8 @@
{{ string .Blog.Lang "publishedon" }} {{ longDate .Data.Published .Blog.Lang }}
{{ end }} {{ if .Data.Updated }}{{ string .Blog.Lang "updatedon" }} {{ longDate .Data.Updated .Blog.Lang }}
{{ end }} - {{ with .Data.Content }} -