Skip to content

Commit 7d61932

Browse files
committed
Add Atom feed
1 parent ec29a75 commit 7d61932

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

src/rss.njk

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
---
2+
permalink: feed.xml
3+
metadata:
4+
title: DepCtrl Recent Updates
5+
subtitle: List of recently updated DependencyControl Macros.
6+
language: en
7+
url: https://typesettingtools.github.io/depctrl-browser/
8+
author:
9+
name: DepCtrl Browser
10+
---
11+
<?xml version="1.0" encoding="utf-8"?>
12+
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="{{ metadata.url }}">
13+
<title>{{ metadata.title }}</title>
14+
<subtitle>{{ metadata.subtitle }}</subtitle>
15+
<link href="{{ permalink }}" rel="self"/>
16+
<link href="{{ metadata.url }}"/>
17+
<updated>{{ updates | getLatestUpdateDate | dateToRfc3339 }}</updated>
18+
<id>{{ metadata.url }}</id>
19+
<author>
20+
<name>{{ metadata.author.name }}</name>
21+
</author>
22+
{%- for update in updates | updateListSort %}
23+
<entry>
24+
<title>{{ update.name }} - {{ update.version }}</title>
25+
<link href="{{ ["/macros/" , update.namespace, "/"] | join | url }}"/>
26+
<updated>{{ update.releaseDate | dateToRfc3339 }}</updated>
27+
<id>{{ metadata.url }}{{ ["macros/" , update.namespace, "/"] | join | url }}#{{ update.version }}</id>
28+
<content xml:lang="{{ metadata.language }}" type="html">
29+
{% for changelogLine in update.changelog %}
30+
&lt;li&gt;{{ changelogLine | markdownify }}&lt;/li&gt;
31+
{% endfor %}
32+
</content>
33+
</entry>
34+
{%- endfor %}
35+
</feed>

utils/filters.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,35 @@ module.exports = {
4747
},
4848

4949
toFeedIdentifier: (url) => crypto.createHash("sha1").update(url).digest("hex").slice(0, 7),
50+
51+
getLatestUpdateDate: (updates) => {
52+
let latestDate = null;
53+
for (let update of updates) {
54+
let updateDate = Date.parse(update['releaseDate']) || 0;
55+
if (latestDate === null || updateDate > latestDate) {
56+
latestDate = updateDate;
57+
}
58+
}
59+
return latestDate;
60+
},
61+
62+
dateToRfc3339: (date) => {
63+
let timestamp
64+
if (typeof date === "string") {
65+
timestamp = Date.parse(date);
66+
} else {
67+
timestamp = date
68+
}
69+
let parsedDate = new Date(0);
70+
if (!isNaN(timestamp)) {
71+
parsedDate = new Date(timestamp);
72+
}
73+
let s = parsedDate.toISOString();
74+
75+
// remove milliseconds
76+
let split = s.split(".");
77+
split.pop();
78+
79+
return split.join("") + "Z";
80+
},
5081
}

0 commit comments

Comments
 (0)