From 013bfe84b860c0a50600471ce28ac1ced95594ae Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Sun, 7 Aug 2022 13:11:43 +0200 Subject: [PATCH] Add minimal feeds without TTS audio and interactions link (.min.rss, .min.atom and .min.atom) (#23) --- docs/index.md | 8 ++++---- feeds.go | 24 ++++++++++++++++-------- http.go | 2 +- postsFuncs.go | 9 +++++++++ ui.go | 8 +------- 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/docs/index.md b/docs/index.md index f63aabb..56a7cc1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -6,9 +6,9 @@ License: MIT License [Blog](https://goblog.app/) [Documentation](https://docs.goblog.app) -[Main repository](https://git.jlel.se/jlelse/GoBlog) -[GitHub mirror](https://github.com/jlelse/GoBlog) -[Codeberg mirror](https://codeberg.org/jlelse/GoBlog) +[Main repository](https://github.com/jlelse/GoBlog) +[Mirror](https://git.jlel.se/jlelse/GoBlog) +[Mirror on Codeberg](https://codeberg.org/jlelse/GoBlog) ## Features @@ -33,7 +33,7 @@ Here's an (incomplete) list of features: - Publish posts to the Fediverse (Mastodon etc.) - ActivityPub-based commenting - Web feeds - - Multiple feed formats: RSS, Atom, JSON + - Multiple feed formats (.rss, .atom, .json, .min.rss, .min.atom, .min.json) - Feeds on any archive page - Sitemap - Automatic HTTPS using Let's Encrypt diff --git a/feeds.go b/feeds.go index be28171..76a6bb6 100644 --- a/feeds.go +++ b/feeds.go @@ -15,10 +15,13 @@ import ( type feedType string const ( - noFeed feedType = "" - rssFeed feedType = "rss" - atomFeed feedType = "atom" - jsonFeed feedType = "json" + noFeed feedType = "" + rssFeed feedType = "rss" + atomFeed feedType = "atom" + jsonFeed feedType = "json" + minRssFeed feedType = "min.rss" + minAtomFeed feedType = "min.atom" + minJsonFeed feedType = "min.json" ) func (a *goBlog) generateFeed(blog string, f feedType, w http.ResponseWriter, r *http.Request, posts []*post, title, description string) { @@ -40,7 +43,12 @@ func (a *goBlog) generateFeed(blog string, f feedType, w http.ResponseWriter, r } for _, p := range posts { buf := bufferpool.Get() - a.feedHtml(buf, p) + switch f { + case minRssFeed, minAtomFeed, minJsonFeed: + a.minFeedHtml(buf, p) + default: + a.feedHtml(buf, p) + } feed.Add(&feeds.Item{ Title: p.RenderedTitle, Link: &feeds.Link{Href: a.fullPostURL(p)}, @@ -55,13 +63,13 @@ func (a *goBlog) generateFeed(blog string, f feedType, w http.ResponseWriter, r var feedWriteFunc func(w io.Writer) error var feedMediaType string switch f { - case rssFeed: + case rssFeed, minRssFeed: feedMediaType = contenttype.RSS feedWriteFunc = feed.WriteRss - case atomFeed: + case atomFeed, minAtomFeed: feedMediaType = contenttype.ATOM feedWriteFunc = feed.WriteAtom - case jsonFeed: + case jsonFeed, minJsonFeed: feedMediaType = contenttype.JSONFeed feedWriteFunc = feed.WriteJSON default: diff --git a/http.go b/http.go index 54743aa..4bbdaf2 100644 --- a/http.go +++ b/http.go @@ -117,7 +117,7 @@ func (*goBlog) redirectToHttps(w http.ResponseWriter, r *http.Request) { const ( paginationPath = "/page/{page:[0-9-]+}" - feedPath = ".{feed:(rss|json|atom)}" + feedPath = ".{feed:(rss|json|atom|min\\.rss|min\\.json|min\\.atom)}" ) func (a *goBlog) reloadRouter() { diff --git a/postsFuncs.go b/postsFuncs.go index a964046..5196322 100644 --- a/postsFuncs.go +++ b/postsFuncs.go @@ -89,6 +89,15 @@ func (a *goBlog) feedHtml(w io.Writer, p *post) { } } +func (a *goBlog) minFeedHtml(w io.Writer, p *post) { + hb := newHtmlBuilder(w) + // Add IndieWeb context + a.renderPostReplyContext(hb, p, "p") + a.renderPostLikeContext(hb, p, "p") + // Add post HTML + a.postHtmlToWriter(hb, p, true) +} + const summaryDivider = "" func (a *goBlog) postSummary(p *post) (summary string) { diff --git a/ui.go b/ui.go index 9095f4d..4d61a2e 100644 --- a/ui.go +++ b/ui.go @@ -40,13 +40,10 @@ func (a *goBlog) renderBase(hb *htmlBuilder, rd *renderData, title, main func(hb } else { a.renderTitleTag(hb, rd.Blog, "") } - // Feeds renderedBlogTitle := a.renderMdTitle(rd.Blog.Title) - // RSS + // Feeds hb.writeElementOpen("link", "rel", "alternate", "type", "application/rss+xml", "title", fmt.Sprintf("RSS (%s)", renderedBlogTitle), "href", a.getFullAddress(rd.Blog.Path+".rss")) - // ATOM hb.writeElementOpen("link", "rel", "alternate", "type", "application/atom+xml", "title", fmt.Sprintf("ATOM (%s)", renderedBlogTitle), "href", a.getFullAddress(rd.Blog.Path+".atom")) - // JSON Feed hb.writeElementOpen("link", "rel", "alternate", "type", "application/feed+json", "title", fmt.Sprintf("JSON Feed (%s)", renderedBlogTitle), "href", a.getFullAddress(rd.Blog.Path+".json")) // Webmentions hb.writeElementOpen("link", "rel", "webmention", "href", a.getFullAddress("/webmention")) @@ -368,11 +365,8 @@ func (a *goBlog) renderIndex(hb *htmlBuilder, rd *renderData) { if renderedIndexTitle != "" { feedTitle = " (" + renderedIndexTitle + ")" } - // RSS hb.writeElementOpen("link", "rel", "alternate", "type", "application/rss+xml", "title", "RSS"+feedTitle, "href", a.getFullAddress(id.first+".rss")) - // ATOM hb.writeElementOpen("link", "rel", "alternate", "type", "application/atom+xml", "title", "ATOM"+feedTitle, "href", a.getFullAddress(id.first+".atom")) - // JSON Feed hb.writeElementOpen("link", "rel", "alternate", "type", "application/feed+json", "title", "JSON Feed"+feedTitle, "href", a.getFullAddress(id.first+".json")) }, func(hb *htmlBuilder) {