_includes/rss.11ty.tsx (32 lines of code) (raw):
import { LayoutContext, LayoutProps } from "../src/models";
import { encode } from "html-entities";
import path from "upath";
export function RssLayout(this: LayoutContext, data: LayoutProps): string {
const { collections, page } = data;
let items = "";
collections.resourceMap.forEach((page) => {
items += `<item>
<title>${encode(page.title, { level: "xml" })}</title>
<link>${path
.join(`https://www.jetbrains.com/guide`, page.url)
.replace("https:/www", "https://www")}</link>
<description>${encode(page.subtitle, { level: "xml" })}</description>
<category>${page.resourceType}</category>
<author>${page.references?.author.title}</author>
<pubDate>${page.date.toUTCString()}</pubDate>
</item>`;
});
const year = new Date().getFullYear();
const copyright = `Copyright © 2000–${year} <a href="https://www.jetbrains.com/">JetBrains</a> s.r.o.`;
return `<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>JetBrains Guide</title>
<link>https://www.jetbrains.com/guide</link>
<lastBuildDate>${page.date.toUTCString()}</lastBuildDate>
<description>Be more productive and write high-quality code faster with a series of tips and tricks.</description>
<copyright>${copyright}</copyright>
<language>en-us</language>
${items}
</channel>
</rss>`;
}
export const render = RssLayout;