Commit 2bd9e213c1

2bd9e213c1cd2bce150ea6e924463f164dad3f73

parent: 0222de67ab

Verified · cmc

cmc <hello@cleberg.net> · 2026-03-06 06:04 UTC

add RSS stylesheet

Layout: unified · split

theme/static/feed.xsl added +99
@@ -0,0 +1,99 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3 xmlns:atom="http://www.w3.org/2005/Atom"
4 xmlns:dc="http://purl.org/dc/elements/1.1/"
5 exclude-result-prefixes="atom dc">
6 <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
7 <xsl:template match="/">
8 <html lang="en">
9 <head>
10 <meta charset="UTF-8"/>
11 <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
12 <title><xsl:value-of select="/rss/channel/title"/> — RSS Feed</title>
13 <style>
14 :root {
15 color-scheme: light dark;
16 --bg: #F6F4F0;
17 --bg-soft: #EDEAE4;
18 --fg: #111111;
19 --fg-soft: #555550;
20 --accent: #c0392b;
21 --border: #111111;
22 --meta: #555550;
23 --code-bg: #E8E4DE;
24 --max-width: 800px;
25 }
26 @media (prefers-color-scheme: dark) {
27 :root {
28 --bg: #161412;
29 --bg-soft: #1F1C1A;
30 --fg: #F0EDE8;
31 --fg-soft: #888580;
32 --accent: #ee6f5c;
33 --border: #2C2825;
34 --meta: #888580;
35 --code-bg: #0F0D0C;
36 }
37 }
38 * { box-sizing: border-box; }
39 body {
40 background: var(--bg);
41 color: var(--fg);
42 font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, monospace;
43 line-height: 1.6;
44 max-width: var(--max-width);
45 margin: 0 auto;
46 padding: 2rem 1rem;
47 }
48 nav ul { list-style: none; padding: 0; display: flex; gap: 1rem; border-bottom: 4px solid var(--fg); padding-bottom: 0.5rem; margin-bottom: 2rem; }
49 nav a { text-transform: uppercase; font-weight: 900; text-decoration: none; color: var(--fg); }
50 nav a:hover { background: var(--fg); color: var(--bg); }
51 h1 { font-size: 2.2rem; font-weight: 900; text-transform: uppercase; line-height: 1.1; margin-bottom: 0.5rem; }
52 h2 { border-left: 10px solid var(--accent); padding-left: 0.75rem; font-weight: 900; text-transform: uppercase; line-height: 1.1; margin-top: 0; margin-bottom: 0.25rem; font-size: 1rem; }
53 h2 a { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
54 h2 a:hover { background: var(--accent); color: var(--bg); text-decoration: none; }
55 .description { color: var(--fg-soft); font-size: 0.85rem; margin-bottom: 2rem; }
56 .notice {
57 background: var(--bg-soft);
58 border: 1px solid var(--border);
59 padding: 0.75rem 1rem;
60 font-size: 0.85rem;
61 margin-bottom: 2rem;
62 }
63 .notice code {
64 background: var(--code-bg);
65 padding: 0.1rem 0.3rem;
66 font-size: 0.85rem;
67 }
68 .post { border-bottom: 1px dashed var(--border); padding: 1rem 0; }
69 .post:last-child { border-bottom: none; }
70 time { font-size: 0.8rem; color: var(--meta); display: block; margin-bottom: 0.25rem; }
71 footer { margin-top: 4rem; border-top: 1px solid var(--border); padding-top: 1rem; font-size: 0.8rem; text-transform: uppercase; color: var(--meta); }
72 </style>
73 </head>
74 <body>
75 <nav>
76 <ul>
77 <li><a href="/">Home</a></li>
78 <li><a href="/blog">Blog</a></li>
79 <li><a href="/garden">Garden</a></li>
80 </ul>
81 </nav>
82 <h1><xsl:value-of select="/rss/channel/title"/></h1>
83 <p class="description"><xsl:value-of select="/rss/channel/description"/></p>
84 <div class="notice">
85 This is an RSS feed. Copy <code><xsl:value-of select="/rss/channel/atom:link/@href"/></code> into your feed reader to subscribe.
86 </div>
87 <xsl:for-each select="/rss/channel/item">
88 <div class="post">
89 <time><xsl:value-of select="pubDate"/></time>
90 <h2><a><xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute><xsl:value-of select="title"/></a></h2>
91 </div>
92 </xsl:for-each>
93 <footer>
94 <xsl:value-of select="/rss/channel/title"/> &#x2014; RSS 2.0
95 </footer>
96 </body>
97 </html>
98 </xsl:template>
99</xsl:stylesheet>
theme/templates/feed.xml +1
@@ -1,4 +1,5 @@
11<?xml version="1.0" encoding="UTF-8" ?>
2<?xml-stylesheet href="/feed.xsl" type="text/xsl"?>
23<rss version="2.0"
34 xmlns:content="http://purl.org/rss/1.0/modules/content/"
45 xmlns:wfw="http://wellformedweb.org/CommentAPI/"