feat: update implementation of RSS feeds

Adds a new filter `convertRelativeLinks` that converts any relative link
to an absolute path
Adds an XML transform to minify the final output for smaller filesizes
Updates some data in meta
Adds a new macro for generating an RSS feed
This commit is contained in:
Devin Haska 2025-04-04 13:15:51 -07:00
parent 46ed7a29be
commit e6cfa88f61
14 changed files with 1508 additions and 271 deletions

View file

@ -1,27 +1,15 @@
---
permalink: /feeds/all.xml
layout: null
filterTag:
- post
- game
- tv
- movie
- book
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>{{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/all.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.all | filterByTags(["page"]) %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{# The first tag is always a type e.g. post, page, etc. #}
{%- for tag in item.data.tags %}{% if not loop.first %}<category term="{{ tag }}" />{% endif %}{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>
---
{% set data = collections.all | filterByTags(["page", "podcast"]) %}
{% from "macros/feed.njk" import feed %}
{{ feed(meta, data, page.date, permalink, title, filterTag) }}

View file

@ -1,26 +1,11 @@
---
permalink: /feeds/books.xml
layout: null
title: Books
filterTag:
- book
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Books • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/books.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.book %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("book") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>
---
{% from "macros/feed.njk" import feed %}
{{ feed(meta, collections.book, page.date, permalink, title, filterTag) }}

View file

@ -1,26 +1,11 @@
---
permalink: /feeds/games.xml
layout: null
title: Games
filterTag:
- game
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Games • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/games.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.game %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("game") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>
---
{% from "macros/feed.njk" import feed %}
{{ feed(meta, collections.game, page.date, permalink, title, filterTag) }}

View file

@ -1,26 +1,11 @@
---
permalink: /feeds/movies.xml
title: Movies
filterTag:
- movie
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Movies • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/movies.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.movie %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("movie") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>
---
{% from "macros/feed.njk" import feed %}
{{ feed(meta, collections.movie, page.date, permalink, title, filterTag) }}

View file

@ -1,26 +1,11 @@
---
permalink: /feeds/posts.xml
title: Posts
filterTag:
- post
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Posts • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/posts.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for post in collections.post %}
<entry>
<id>{{ meta.url }}{{ post.url }}</id>
<title>{{ post.data.title | escape }}</title>
<link href="{{ meta.url }}{{ post.url }}" />
<pubDate>{{ post.date }}</pubDate>
{%- for tag in post.data.tags %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ post.content | escape }}</content>
</entry>
{% endfor %}
</feed>
---
{% from "macros/feed.njk" import feed %}
{{ feed(meta, collections.post, page.date, permalink, title, filterTag) }}

View file

@ -1,26 +1,11 @@
---
permalink: /feeds/shows.xml
title: Shows
filterTag:
- tv
layout: null
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Shows • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/shows.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
{% for item in collections.tv %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter("tv") %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>
---
{% from "macros/feed.njk" import feed %}
{{ feed(meta, collections.tv, page.date, permalink, title, filterTag) }}

View file

@ -1,29 +1,15 @@
---
permalink: /feeds/watching.xml
layout: null
title: Watching
filterTag:
- movie
- tv
eleventyExcludeFromCollections: true
excludeFromSitemap: true
---<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Watching • {{ meta.siteName }}</title>
<subtitle>{{ meta.siteDescription }}</subtitle>
<link href="{{ meta.url }}/feeds/watching.xml" rel="self" />
<link href="{{ meta.url }}/" rel="alternate" type="text/html" />
<id>{{ meta.url }}/</id>
<author>
<name>{{ meta.author }}</name>
</author>
---
{% set movies = collections.movie %}
{% set tv = collections.tv %}
{% set data = movies.concat(tv) %}
{% for item in data %}
<entry>
<id>{{ meta.url }}{{ item.url }}</id>
<title>{{ item.data.title | escape }}</title>
<link href="{{ item.url }}{{ post.url }}" />
<pubDate>{{ item.date }}</pubDate>
{%- for tag in item.data.tags | filter(["tv", "movie"]) %}<category term="{{ tag }}" />{%- endfor %}
<content type="html">{{ item.content | escape }}</content>
</entry>
{% endfor %}
</feed>
{% from "macros/feed.njk" import feed %}
{{ feed(meta, data, page.date, permalink, title, filterTag) }}