Add atom feed

This commit is contained in:
arne 2022-04-16 08:38:54 +02:00
commit 4d880b836d
5 changed files with 149 additions and 3 deletions

View file

@ -1,7 +1,11 @@
const pluginRss = require('@11ty/eleventy-plugin-rss')
const { DateTime } = require('luxon')
const header = require('./src/_includes/filters/header')
module.exports = function (config) {
config.addPlugin(pluginRss)
config.setBrowserSyncConfig({
files: './_site/assets/*.css'
})

View file

@ -22,5 +22,8 @@
"lodash": "^4.17.21",
"luxon": "^2.3.0",
"seedrandom": "^3.0.5"
},
"dependencies": {
"@11ty/eleventy-plugin-rss": "^1.1.2"
}
}

106
pnpm-lock.yaml generated
View file

@ -2,11 +2,15 @@ lockfileVersion: 5.3
specifiers:
'@11ty/eleventy': ^1.0.0
'@11ty/eleventy-plugin-rss': ^1.1.2
'@thi.ng/hiccup': 3.6.22
lodash: ^4.17.21
luxon: ^2.3.0
seedrandom: ^3.0.5
dependencies:
'@11ty/eleventy-plugin-rss': 1.1.2
devDependencies:
'@11ty/eleventy': 1.0.0
'@thi.ng/hiccup': 3.6.22
@ -20,6 +24,16 @@ packages:
resolution: {integrity: sha512-tYrGX3Tvccufy2jaYDkYpjBmVP1LeQq6b/d0r4GYThTXL4f3ZR7yMAl/0r8h9xvnsP+gkO53wfnV7s8cXcCtEg==}
dev: true
/@11ty/eleventy-plugin-rss/1.1.2:
resolution: {integrity: sha512-QdXMl29MzMtyMj9Y1lYijPX4vGMnBDo4Peyi4GCJznCO4+eryAZiyVYciLBCek893EXL3RLOuVSshYo+jvjZ0w==}
dependencies:
debug: 4.3.3
posthtml: 0.15.2
posthtml-urls: 1.0.0
transitivePeerDependencies:
- supports-color
dev: false
/@11ty/eleventy/1.0.0:
resolution: {integrity: sha512-UMZghkMFwovu3Vh6DzjJ9GbcBnlE3nydGmLAti2AB1d6etQE+jXgfuHNxOyV1em33ywsBgGUCtLmLHaaTSU+Nw==}
engines: {node: '>=12'}
@ -204,6 +218,10 @@ packages:
color-convert: 2.0.1
dev: true
/any-promise/0.1.0:
resolution: {integrity: sha1-gwtoCqflbzNFHUsEnzvYBESY7ic=}
dev: false
/anymatch/3.1.2:
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
engines: {node: '>= 8'}
@ -626,7 +644,6 @@ packages:
optional: true
dependencies:
ms: 2.1.2
dev: true
/decamelize/1.2.0:
resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=}
@ -661,6 +678,33 @@ packages:
resolution: {integrity: sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=}
dev: true
/dom-serializer/1.4.1:
resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==}
dependencies:
domelementtype: 2.3.0
domhandler: 4.3.1
entities: 2.1.0
dev: false
/domelementtype/2.3.0:
resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
dev: false
/domhandler/4.3.1:
resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==}
engines: {node: '>= 4'}
dependencies:
domelementtype: 2.3.0
dev: false
/domutils/2.8.0:
resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==}
dependencies:
dom-serializer: 1.4.1
domelementtype: 2.3.0
domhandler: 4.3.1
dev: false
/easy-extender/2.3.4:
resolution: {integrity: sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==}
engines: {node: '>= 4.0.0'}
@ -752,7 +796,6 @@ packages:
/entities/2.1.0:
resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
dev: true
/errno/0.1.8:
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
@ -1002,6 +1045,20 @@ packages:
function-bind: 1.1.1
dev: true
/htmlparser2/6.1.0:
resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==}
dependencies:
domelementtype: 2.3.0
domhandler: 4.3.1
domutils: 2.8.0
entities: 2.1.0
dev: false
/http-equiv-refresh/1.0.0:
resolution: {integrity: sha1-jsU4hmBCvl8/evpzfRmNlL6xsHs=}
engines: {node: '>= 0.10'}
dev: false
/http-errors/1.6.3:
resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=}
engines: {node: '>= 0.6'}
@ -1236,6 +1293,10 @@ packages:
hasBin: true
dev: true
/list-to-array/1.1.0:
resolution: {integrity: sha1-yn3/ZAYGQzysdcvoRGrNhksVv28=}
dev: false
/localtunnel/2.0.2:
resolution: {integrity: sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==}
engines: {node: '>=8.3.0'}
@ -1373,7 +1434,6 @@ packages:
/ms/2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
dev: true
/ms/2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@ -1481,6 +1541,10 @@ packages:
engines: {node: '>=6'}
dev: true
/parse-srcset/1.0.2:
resolution: {integrity: sha1-8r0iH2zJcKk42IVWq8WJyqqiveE=}
dev: false
/parseqs/0.0.6:
resolution: {integrity: sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==}
dev: true
@ -1536,6 +1600,36 @@ packages:
is-number-like: 1.0.8
dev: true
/posthtml-parser/0.7.2:
resolution: {integrity: sha512-LjEEG/3fNcWZtBfsOE3Gbyg1Li4CmsZRkH1UmbMR7nKdMXVMYI3B4/ZMiCpaq8aI1Aym4FRMMW9SAOLSwOnNsQ==}
engines: {node: '>=10'}
dependencies:
htmlparser2: 6.1.0
dev: false
/posthtml-render/1.4.0:
resolution: {integrity: sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==}
engines: {node: '>=10'}
dev: false
/posthtml-urls/1.0.0:
resolution: {integrity: sha512-CMJ0L009sGQVUuYM/g6WJdscsq6ooAwhUuF6CDlYPMLxKp2rmCYVebEU+wZGxnQstGJhZPMvXsRhtqekILd5/w==}
engines: {node: '>= 4'}
dependencies:
http-equiv-refresh: 1.0.0
list-to-array: 1.1.0
parse-srcset: 1.0.2
promise-each: 2.2.0
dev: false
/posthtml/0.15.2:
resolution: {integrity: sha512-YugEJ5ze/0DLRIVBjCpDwANWL4pPj1kHJ/2llY8xuInr0nbkon3qTiMPe5LQa+cCwNjxS7nAZZTp+1M+6mT4Zg==}
engines: {node: '>=10.0.0'}
dependencies:
posthtml-parser: 0.7.2
posthtml-render: 1.4.0
dev: false
/pretty/2.0.0:
resolution: {integrity: sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=}
engines: {node: '>=0.10.0'}
@ -1545,6 +1639,12 @@ packages:
js-beautify: 1.14.0
dev: true
/promise-each/2.2.0:
resolution: {integrity: sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=}
dependencies:
any-promise: 0.1.0
dev: false
/promise/7.3.1:
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
dependencies:

View file

@ -6,6 +6,7 @@
<title>{% if title %}{{ title }} | {% endif %}{{ page.title }}</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🌌</text></svg>">
<link rel="stylesheet" href="{{ '/assets/style.css' | url }}" />
<link rel="alternate" type="application/atom+xml" href="{{ 'feed.xml' | url }}" />
</head>
<body>
<main class="{{ page.url | pageClasses }}">

38
src/feed.njk Normal file
View file

@ -0,0 +1,38 @@
---json
{
"permalink": "feed.xml",
"eleventyExcludeFromCollections": true,
"metadata": {
"subtitle": "I am by no means an expert in any of this.",
"author": {
"name": "arne",
"email": "feed at arnes.space"
}
}
}
---
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>{{ page.title }}</title>
<subtitle>{{ metadata.subtitle }}</subtitle>
<link href="{{ '/feed.xml' | url | absoluteUrl(page.baseUrl) }}" rel="self"/>
<link href="{{ page.baseUrl }}"/>
<updated>{{ collections.posts | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
<id>{{ '/feed.xml' | url | absoluteUrl(page.baseUrl) }}</id>
<author>
<name>{{ metadata.author.name }}</name>
<email>{{ metadata.author.email }}</email>
</author>
{%- for post in collections.posts %}
{%- if not post.data.draft %}
{% set absolutePostUrl %}{{ post.url | url | absoluteUrl(page.baseUrl) }}{% endset %}
<entry>
<title>{{ post.data.title }}</title>
<link href="{{ absolutePostUrl }}"/>
<updated>{{ post.date | dateToRfc3339 }}</updated>
<id>{{ absolutePostUrl }}</id>
<content type="html">{{ post.templateContent | htmlToAbsoluteUrls(absolutePostUrl) }}</content>
</entry>
{%- endif %}
{%- endfor %}
</feed>