Add minimal feeds without TTS audio and interactions link (.min.rss, .min.atom and .min.atom) (#23)

This commit is contained in:
Jan-Lukas Else 2022-08-07 13:11:43 +02:00
parent 38e8ac934f
commit 013bfe84b8
5 changed files with 31 additions and 20 deletions

View File

@ -6,9 +6,9 @@ License: MIT License
[Blog](https://goblog.app/) [Blog](https://goblog.app/)
[Documentation](https://docs.goblog.app) [Documentation](https://docs.goblog.app)
[Main repository](https://git.jlel.se/jlelse/GoBlog) [Main repository](https://github.com/jlelse/GoBlog)
[GitHub mirror](https://github.com/jlelse/GoBlog) [Mirror](https://git.jlel.se/jlelse/GoBlog)
[Codeberg mirror](https://codeberg.org/jlelse/GoBlog) [Mirror on Codeberg](https://codeberg.org/jlelse/GoBlog)
## Features ## Features
@ -33,7 +33,7 @@ Here's an (incomplete) list of features:
- Publish posts to the Fediverse (Mastodon etc.) - Publish posts to the Fediverse (Mastodon etc.)
- ActivityPub-based commenting - ActivityPub-based commenting
- Web feeds - 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 - Feeds on any archive page
- Sitemap - Sitemap
- Automatic HTTPS using Let's Encrypt - Automatic HTTPS using Let's Encrypt

View File

@ -15,10 +15,13 @@ import (
type feedType string type feedType string
const ( const (
noFeed feedType = "" noFeed feedType = ""
rssFeed feedType = "rss" rssFeed feedType = "rss"
atomFeed feedType = "atom" atomFeed feedType = "atom"
jsonFeed feedType = "json" 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) { 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 { for _, p := range posts {
buf := bufferpool.Get() 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{ feed.Add(&feeds.Item{
Title: p.RenderedTitle, Title: p.RenderedTitle,
Link: &feeds.Link{Href: a.fullPostURL(p)}, 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 feedWriteFunc func(w io.Writer) error
var feedMediaType string var feedMediaType string
switch f { switch f {
case rssFeed: case rssFeed, minRssFeed:
feedMediaType = contenttype.RSS feedMediaType = contenttype.RSS
feedWriteFunc = feed.WriteRss feedWriteFunc = feed.WriteRss
case atomFeed: case atomFeed, minAtomFeed:
feedMediaType = contenttype.ATOM feedMediaType = contenttype.ATOM
feedWriteFunc = feed.WriteAtom feedWriteFunc = feed.WriteAtom
case jsonFeed: case jsonFeed, minJsonFeed:
feedMediaType = contenttype.JSONFeed feedMediaType = contenttype.JSONFeed
feedWriteFunc = feed.WriteJSON feedWriteFunc = feed.WriteJSON
default: default:

View File

@ -117,7 +117,7 @@ func (*goBlog) redirectToHttps(w http.ResponseWriter, r *http.Request) {
const ( const (
paginationPath = "/page/{page:[0-9-]+}" 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() { func (a *goBlog) reloadRouter() {

View File

@ -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 = "<!--more-->" const summaryDivider = "<!--more-->"
func (a *goBlog) postSummary(p *post) (summary string) { func (a *goBlog) postSummary(p *post) (summary string) {

8
ui.go
View File

@ -40,13 +40,10 @@ func (a *goBlog) renderBase(hb *htmlBuilder, rd *renderData, title, main func(hb
} else { } else {
a.renderTitleTag(hb, rd.Blog, "") a.renderTitleTag(hb, rd.Blog, "")
} }
// Feeds
renderedBlogTitle := a.renderMdTitle(rd.Blog.Title) 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")) 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")) 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")) hb.writeElementOpen("link", "rel", "alternate", "type", "application/feed+json", "title", fmt.Sprintf("JSON Feed (%s)", renderedBlogTitle), "href", a.getFullAddress(rd.Blog.Path+".json"))
// Webmentions // Webmentions
hb.writeElementOpen("link", "rel", "webmention", "href", a.getFullAddress("/webmention")) hb.writeElementOpen("link", "rel", "webmention", "href", a.getFullAddress("/webmention"))
@ -368,11 +365,8 @@ func (a *goBlog) renderIndex(hb *htmlBuilder, rd *renderData) {
if renderedIndexTitle != "" { if renderedIndexTitle != "" {
feedTitle = " (" + renderedIndexTitle + ")" feedTitle = " (" + renderedIndexTitle + ")"
} }
// RSS
hb.writeElementOpen("link", "rel", "alternate", "type", "application/rss+xml", "title", "RSS"+feedTitle, "href", a.getFullAddress(id.first+".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")) 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")) hb.writeElementOpen("link", "rel", "alternate", "type", "application/feed+json", "title", "JSON Feed"+feedTitle, "href", a.getFullAddress(id.first+".json"))
}, },
func(hb *htmlBuilder) { func(hb *htmlBuilder) {