redesign: style rss feed
This commit is contained in:
parent
4080f8b3b3
commit
df43ac617b
|
|
@ -0,0 +1,108 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<xsl:stylesheet version="1.0"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||||
|
|
||||||
|
<xsl:output method="html" encoding="UTF-8" />
|
||||||
|
|
||||||
|
<xsl:template match="/">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
@font-face {
|
||||||
|
font-family: "DepartureMono";
|
||||||
|
src: url("/fonts/DepartureMono-Regular.woff") format("woff");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "FiraCode";
|
||||||
|
src: url("/fonts/FiraCode-Regular.woff") format("woff");
|
||||||
|
font-weight: 400;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "FiraCode";
|
||||||
|
src: url("/fonts/FiraCode-Bold.woff") format("woff");
|
||||||
|
font-weight: 700;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: "FiraCode", monospace;
|
||||||
|
background: #1a1a1a;
|
||||||
|
color: #ccc;
|
||||||
|
image-rendering: pixelated;
|
||||||
|
max-width: 768px;
|
||||||
|
margin-inline: auto;
|
||||||
|
}
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
h1, h2 {
|
||||||
|
font-family: "DepartureMono", monospace;
|
||||||
|
}
|
||||||
|
#backContainer {
|
||||||
|
margin-block: 1rem;
|
||||||
|
}
|
||||||
|
#backButton {
|
||||||
|
color: #ccc;
|
||||||
|
text-decoration: none;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
background: #555;
|
||||||
|
border-radius: calc(infinity * 1px);;
|
||||||
|
}
|
||||||
|
.item {
|
||||||
|
border: 2px solid #ccc;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.item > h2 > a {
|
||||||
|
color: #ccc;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.item > .pills {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
.item > .pills > * {
|
||||||
|
color: #ccc;
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: capitalize;
|
||||||
|
background: #555;
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border-radius: calc(infinity * 1px);;
|
||||||
|
}
|
||||||
|
h1, h2 {
|
||||||
|
margin: 0 0 1rem 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1><xsl:value-of select="rss/channel/title" /></h1>
|
||||||
|
<div id="backContainer">
|
||||||
|
<a id="backButton" href="/">Back to the main page</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<xsl:for-each select="rss/channel/item">
|
||||||
|
<div class="item">
|
||||||
|
<h2><a href="{link}"><xsl:value-of select="title" /></a></h2>
|
||||||
|
<div class="pills">
|
||||||
|
<a class="type" href="/{entryType}/"><xsl:value-of select="entryType" /></a>
|
||||||
|
<span class="date"><xsl:value-of select="pubDate" /></span>
|
||||||
|
</div>
|
||||||
|
<p><xsl:value-of select="description" /></p>
|
||||||
|
</div>
|
||||||
|
</xsl:for-each>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
||||||
|
|
@ -27,14 +27,17 @@ export async function GET(context: Context) {
|
||||||
);
|
);
|
||||||
|
|
||||||
return rss({
|
return rss({
|
||||||
title: SITE.TITLE,
|
title: `${SITE.TITLE} - ${SITE.AUTHOR}`,
|
||||||
description: SITE.DESCRIPTION,
|
description: SITE.DESCRIPTION,
|
||||||
site: context.site,
|
site: context.site,
|
||||||
|
stylesheet: "/rss-style.xsl",
|
||||||
items: items.map(({ item, pre }) => ({
|
items: items.map(({ item, pre }) => ({
|
||||||
title: item.data.title,
|
title: item.data.title,
|
||||||
description: item.data.summary,
|
description: item.data.summary,
|
||||||
|
author: SITE.AUTHOR,
|
||||||
pubDate: item.data.date,
|
pubDate: item.data.date,
|
||||||
link: `/${pre}/${item.id}/`,
|
link: `/${item.collection}/${item.id}/`,
|
||||||
|
customData: `<entryType>${item.collection}</entryType>`,
|
||||||
})),
|
})),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue