mirror of https://github.com/jlelse/GoBlog
Add minimal feeds without TTS audio and interactions link (.min.rss, .min.atom and .min.atom) (#23)
This commit is contained in:
parent
38e8ac934f
commit
013bfe84b8
|
@ -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
|
||||||
|
|
24
feeds.go
24
feeds.go
|
@ -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:
|
||||||
|
|
2
http.go
2
http.go
|
@ -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() {
|
||||||
|
|
|
@ -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
8
ui.go
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue