aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--README.md6
-rw-r--r--exampleSite/content/entry/welcome.md2
-rw-r--r--exampleSite/hugo.gemini.toml2
-rw-r--r--exampleSite/hugo.toml2
-rw-r--r--layouts/section.atom.xml53
-rw-r--r--layouts/section.gemini_atom.xml52
7 files changed, 113 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8330584..551d2b3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,7 @@
- Add example site with annotated configuration for website and capsule
- Add section templates, which no output format previously had
+- Add Atom feeds for sections, in both output formats
- Add Atom feed autodiscovery links to document head
- Support more than one audio version per entry
diff --git a/README.md b/README.md
index bd20521..4840260 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,7 @@ Every page kind that the site renders must list its output formats, because Hugo
```toml
[outputs]
home = ["HTML", "Atom"]
- section = ["HTML"]
+ section = ["HTML", "Atom"]
taxonomy = ["HTML", "Atom"]
term = ["HTML", "Atom"]
page = ["HTML"]
@@ -73,12 +73,14 @@ And for the capsule:
```toml
[outputs]
home = ["Gemini", "Gemini_Atom"]
- section = ["Gemini"]
+ section = ["Gemini", "Gemini_Atom"]
taxonomy = ["Gemini", "Gemini_Atom"]
term = ["Gemini", "Gemini_Atom"]
page = ["Gemini"]
```
+A feed is rendered for every kind that lists `Atom` or `Gemini_Atom`: the homepage, each section, the taxonomy list and each term. Leave the format out of a kind to omit that feed.
+
### Optional
| Setting | Default | Purpose |
diff --git a/exampleSite/content/entry/welcome.md b/exampleSite/content/entry/welcome.md
index 614a490..08fa557 100644
--- a/exampleSite/content/entry/welcome.md
+++ b/exampleSite/content/entry/welcome.md
@@ -16,7 +16,7 @@ an entry's front matter to render links in place on both instead.
## What The Theme Gives You
* An entry list on the homepage, and one per tag
-* Atom feeds for the homepage, each tag and the tag list
+* Atom feeds for the homepage, each section, each tag and the tag list
* Publication date and reading time on every entry
* Optional audio versions of entries
* No JavaScript and no analytics
diff --git a/exampleSite/hugo.gemini.toml b/exampleSite/hugo.gemini.toml
index 64d3956..afca2d5 100644
--- a/exampleSite/hugo.gemini.toml
+++ b/exampleSite/hugo.gemini.toml
@@ -43,7 +43,7 @@ disableKinds = ["404", "sitemap"]
# into the capsule.
[outputs]
home = ["Gemini", "Gemini_Atom"]
- section = ["Gemini"]
+ section = ["Gemini", "Gemini_Atom"]
taxonomy = ["Gemini", "Gemini_Atom"]
term = ["Gemini", "Gemini_Atom"]
page = ["Gemini"]
diff --git a/exampleSite/hugo.toml b/exampleSite/hugo.toml
index b964499..7a8dd83 100644
--- a/exampleSite/hugo.toml
+++ b/exampleSite/hugo.toml
@@ -43,7 +43,7 @@ enableEmoji = true
# has no template for.
[outputs]
home = ["HTML", "Atom"]
- section = ["HTML"]
+ section = ["HTML", "Atom"]
taxonomy = ["HTML", "Atom"]
term = ["HTML", "Atom"]
page = ["HTML"]
diff --git a/layouts/section.atom.xml b/layouts/section.atom.xml
new file mode 100644
index 0000000..689c70d
--- /dev/null
+++ b/layouts/section.atom.xml
@@ -0,0 +1,53 @@
+{{ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" | safeHTML }}
+{{/* The XML declaration is emitted before anything else, including the
+ variables below, since whitespace may not precede it. */}}
+{{ $authorName := "" }}
+{{ with site.Params.author }}
+ {{ if reflect.IsMap . }}
+ {{ with .name }}
+ {{ $authorName = . }}
+ {{ end }}
+ {{ else }}
+ {{ $authorName = . }}
+ {{ end }}
+{{ end }}
+{{ if not $authorName }}
+ {{ errorf "Missing author" }}
+{{ end }}
+
+{{ $authorEmail := "" }}
+{{ with site.Params.author }}
+ {{ if reflect.IsMap . }}
+ {{ with .email }}
+ {{ $authorEmail = . }}
+ {{ end }}
+ {{ end }}
+{{ end }}
+
+{{ $pages := .Pages.ByPublishDate.Reverse }}
+{{ $limit := .Site.Config.Services.RSS.Limit }}
+{{ if ge $limit 1 }}
+{{ $pages = first $limit $pages }}
+{{ end }}
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <id>{{ .Permalink }}</id>
+ <title>{{ .Site.Title }}</title>
+ <updated>{{ .PublishDate.Format "2006-01-02T15:04:05-0700" | safeHTML }}</updated>
+ <link href="{{ .Permalink }}atom.xml" rel="self" />
+ <link href="{{ .Permalink }}" rel="alternate" />
+ <author>
+ <name>{{ $authorName }}</name>
+ {{ with $authorEmail }}
+ <email>{{ . }}</email>{{ end }}
+ </author>
+ <generator>Hugo -- gohugo.io</generator>
+ <rights type="html">{{ replace .Site.Copyright "{currentYear}" (now.Format "2006") }}</rights>
+ <subtitle>{{ .Site.Params.Description }}</subtitle>{{ range $pages }}
+ <entry>
+ <id>{{ .Permalink }}</id>
+ <title type="html">{{ .Title }}</title>
+ <updated>{{ .PublishDate.Format "2006-01-02T15:04:05-0700" | safeHTML }}</updated>
+ <link href="{{ .Permalink }}" />
+ <content type="html">{{ .Content | html }}</content>
+ </entry>{{ end }}
+</feed>
diff --git a/layouts/section.gemini_atom.xml b/layouts/section.gemini_atom.xml
new file mode 100644
index 0000000..6425e31
--- /dev/null
+++ b/layouts/section.gemini_atom.xml
@@ -0,0 +1,52 @@
+{{ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" | safeHTML }}
+{{/* The XML declaration is emitted before anything else, including the
+ variables below, since whitespace may not precede it. */}}
+{{ $authorName := "" }}
+{{ with site.Params.author }}
+ {{ if reflect.IsMap . }}
+ {{ with .name }}
+ {{ $authorName = . }}
+ {{ end }}
+ {{ else }}
+ {{ $authorName = . }}
+ {{ end }}
+{{ end }}
+{{ if not $authorName }}
+ {{ errorf "Missing author" }}
+{{ end }}
+
+{{ $authorEmail := "" }}
+{{ with site.Params.author }}
+ {{ if reflect.IsMap . }}
+ {{ with .email }}
+ {{ $authorEmail = . }}
+ {{ end }}
+ {{ end }}
+{{ end }}
+
+{{ $pages := .Pages.ByPublishDate.Reverse }}
+{{ $limit := .Site.Config.Services.RSS.Limit }}
+{{ if ge $limit 1 }}
+{{ $pages = first $limit $pages }}
+{{ end }}
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <id>{{ .Permalink | strings.TrimSuffix "index.gmi" }}</id>
+ <title>{{ .Site.Title }}</title>
+ <updated>{{ .PublishDate.Format "2006-01-02T15:04:05-0700" | safeHTML }}</updated>
+ <link href="{{ .Permalink | replaceRE `index.gmi$` "atom.xml" | safeURL }}" rel="self" />
+ <link href="{{ .Permalink | strings.TrimSuffix "index.gmi" | safeURL }}" rel="alternate" />
+ <author>
+ <name>{{ $authorName }}</name>
+ {{ with $authorEmail }}
+ <email>{{ . }}</email>{{ end }}
+ </author>
+ <generator>Hugo -- gohugo.io</generator>
+ <rights type="html">{{ replace .Site.Copyright "{currentYear}" (now.Format "2006") }}</rights>
+ <subtitle>{{ .Site.Params.Description }}</subtitle>{{ range $pages }}
+ <entry>
+ <id>{{ .Permalink | strings.TrimSuffix "index.gmi" }}</id>
+ <title>{{ .Title }}</title>
+ <updated>{{ .PublishDate.Format "2006-01-02T15:04:05-0700" | safeHTML }}</updated>
+ <link href="{{ .Permalink | strings.TrimSuffix "index.gmi" | safeURL }}" rel="alternate" />
+ </entry>{{ end }}
+</feed>