| | |
| | | interface Options { |
| | | enableSiteMap: boolean |
| | | enableRSS: boolean |
| | | rssLimit?: number |
| | | includeEmptyFiles: boolean |
| | | } |
| | | |
| | | const defaultOptions: Options = { |
| | | enableSiteMap: true, |
| | | enableRSS: true, |
| | | rssLimit: 10, |
| | | includeEmptyFiles: true, |
| | | } |
| | | |
| | |
| | | return `<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">${urls}</urlset>` |
| | | } |
| | | |
| | | function generateRSSFeed(cfg: GlobalConfiguration, idx: ContentIndex): string { |
| | | function generateRSSFeed(cfg: GlobalConfiguration, idx: ContentIndex, limit?: number): string { |
| | | const base = cfg.baseUrl ?? "" |
| | | const root = `https://${base}` |
| | | |
| | |
| | | |
| | | const items = Array.from(idx) |
| | | .map(([slug, content]) => createURLEntry(simplifySlug(slug), content)) |
| | | .slice(0, limit ?? idx.size) |
| | | .join("") |
| | | |
| | | return `<?xml version="1.0" encoding="UTF-8" ?> |
| | | <rss version="2.0"> |
| | | <channel> |
| | | <title>${escapeHTML(cfg.pageTitle)}</title> |
| | | <link>${root}</link> |
| | | <description>Recent content on ${cfg.pageTitle}</description> |
| | | <description>${!!limit ? `Last ${limit} notes` : "Recent notes"} on ${ |
| | | cfg.pageTitle |
| | | }</description> |
| | | <generator>Quartz -- quartz.jzhao.xyz</generator> |
| | | ${items} |
| | | </channel> |
| | |
| | | if (opts?.enableRSS) { |
| | | emitted.push( |
| | | await emit({ |
| | | content: generateRSSFeed(cfg, linkIndex), |
| | | content: generateRSSFeed(cfg, linkIndex, opts.rssLimit), |
| | | slug: "index" as FullSlug, |
| | | ext: ".xml", |
| | | }), |