mirror of
				https://github.com/ZetaKebab/quartz.git
				synced 2025-11-04 06:49:49 +00:00 
			
		
		
		
	feat: rss limit (closes #459)
This commit is contained in:
		@@ -18,12 +18,14 @@ export type ContentDetails = {
 | 
			
		||||
interface Options {
 | 
			
		||||
  enableSiteMap: boolean
 | 
			
		||||
  enableRSS: boolean
 | 
			
		||||
  rssLimit?: number
 | 
			
		||||
  includeEmptyFiles: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const defaultOptions: Options = {
 | 
			
		||||
  enableSiteMap: true,
 | 
			
		||||
  enableRSS: true,
 | 
			
		||||
  rssLimit: 10,
 | 
			
		||||
  includeEmptyFiles: true,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -39,7 +41,7 @@ function generateSiteMap(cfg: GlobalConfiguration, idx: ContentIndex): string {
 | 
			
		||||
  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}`
 | 
			
		||||
 | 
			
		||||
@@ -53,13 +55,17 @@ function generateRSSFeed(cfg: GlobalConfiguration, idx: ContentIndex): string {
 | 
			
		||||
 | 
			
		||||
  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>
 | 
			
		||||
@@ -102,7 +108,7 @@ export const ContentIndex: QuartzEmitterPlugin<Partial<Options>> = (opts) => {
 | 
			
		||||
      if (opts?.enableRSS) {
 | 
			
		||||
        emitted.push(
 | 
			
		||||
          await emit({
 | 
			
		||||
            content: generateRSSFeed(cfg, linkIndex),
 | 
			
		||||
            content: generateRSSFeed(cfg, linkIndex, opts.rssLimit),
 | 
			
		||||
            slug: "index" as FullSlug,
 | 
			
		||||
            ext: ".xml",
 | 
			
		||||
          }),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user