From 01d7d8e55448abe0a929d8730c735bed5d929048 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Thu, 20 Jul 2023 06:03:59 +0000
Subject: [PATCH] fix tag pages to emit to tag/index.html to override content and folder pages

---
 quartz/build.ts                        |    6 +++++-
 quartz/plugins/emitters/tagPage.tsx    |    8 ++++----
 quartz/plugins/emitters/folderPage.tsx |    5 +----
 quartz/bootstrap-cli.mjs               |   20 ++++++++++----------
 4 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/quartz/bootstrap-cli.mjs b/quartz/bootstrap-cli.mjs
index f6f5543..db53ccf 100755
--- a/quartz/bootstrap-cli.mjs
+++ b/quartz/bootstrap-cli.mjs
@@ -128,16 +128,6 @@
       ]
     }))
 
-    // TODO
-    const linkResolutionStrategy = exitIfCancel(await select({
-      message: `Choose how Quartz should resolve links in your content. You can change this later in \`quartz.config.ts\`.`,
-      options: [
-        { value: 'absolute', label: "Treat links as absolute path", hint: "for content made for Quartz 3 and Hugo" },
-        { value: 'shortest', label: "Treat links as shortest path", hint: "for most Obsidian vaults" },
-        { value: 'relative', label: "Treat links as relative paths", hint: "for just normal Markdown files" },
-      ]
-    }))
-
     async function rmContentFolder() {
       const contentStat = await fs.promises.lstat(contentFolder)
       if (contentStat) {
@@ -182,6 +172,16 @@
 `
       )
     }
+    
+    // get a prefered link resolution strategy
+    const linkResolutionStrategy = exitIfCancel(await select({
+      message: `Choose how Quartz should resolve links in your content. You can change this later in \`quartz.config.ts\`.`,
+      options: [
+        { value: 'absolute', label: "Treat links as absolute path", hint: "for content made for Quartz 3 and Hugo" },
+        { value: 'shortest', label: "Treat links as shortest path", hint: "for most Obsidian vaults" },
+        { value: 'relative', label: "Treat links as relative paths", hint: "for just normal Markdown files" },
+      ]
+    }))
 
     // now, do config changes
     const configFilePath = path.join(cwd, "quartz.config.ts")
diff --git a/quartz/build.ts b/quartz/build.ts
index 6926d68..de3f547 100644
--- a/quartz/build.ts
+++ b/quartz/build.ts
@@ -61,7 +61,11 @@
         directoryListing: false,
       })
       const status = res.statusCode
-      const statusString = status === 200 ? chalk.green(`[${status}]`) : chalk.red(`[${status}]`)
+      const statusString = (status >= 200 && status < 300) ?
+        chalk.green(`[${status}]`) : 
+        (status >= 300 && status < 400) ?
+        chalk.yellow(`[${status}]`) :
+        chalk.red(`[${status}]`) 
       console.log(statusString + chalk.grey(` ${req.url}`))
     })
     server.listen(argv.port)
diff --git a/quartz/plugins/emitters/folderPage.tsx b/quartz/plugins/emitters/folderPage.tsx
index 7ac6d81..2f6bcbf 100644
--- a/quartz/plugins/emitters/folderPage.tsx
+++ b/quartz/plugins/emitters/folderPage.tsx
@@ -29,15 +29,12 @@
       const folders: Set<CanonicalSlug> = new Set(allFiles.flatMap(data => {
         const slug = data.slug
         const folderName = path.dirname(slug ?? "") as CanonicalSlug
-        if (slug && folderName !== ".") {
+        if (slug && folderName !== "." && folderName !== "tags") {
           return [folderName]
         }
         return []
       }))
 
-      // remove special prefixes
-      folders.delete("tags" as CanonicalSlug)
-
       const folderDescriptions: Record<string, ProcessedContent> = Object.fromEntries([...folders].map(folder => ([
         folder, defaultProcessedContent({ slug: joinSegments(folder, "index") as ServerSlug, frontmatter: { title: `Folder: ${folder}`, tags: [] } })
       ])))
diff --git a/quartz/plugins/emitters/tagPage.tsx b/quartz/plugins/emitters/tagPage.tsx
index 30717fa..62bfe11 100644
--- a/quartz/plugins/emitters/tagPage.tsx
+++ b/quartz/plugins/emitters/tagPage.tsx
@@ -5,7 +5,7 @@
 import { pageResources, renderPage } from "../../components/renderPage"
 import { ProcessedContent, defaultProcessedContent } from "../vfile"
 import { FullPageLayout } from "../../cfg"
-import { CanonicalSlug, FilePath, ServerSlug } from "../../path"
+import { CanonicalSlug, FilePath, ServerSlug, joinSegments } from "../../path"
 
 export const TagPage: QuartzEmitterPlugin<FullPageLayout> = (opts) => {
   if (!opts) {
@@ -27,13 +27,13 @@
 
       const tags: Set<string> = new Set(allFiles.flatMap(data => data.frontmatter?.tags ?? []))
       const tagDescriptions: Record<string, ProcessedContent> = Object.fromEntries([...tags].map(tag => ([
-        tag, defaultProcessedContent({ slug: `tags/${tag}` as ServerSlug, frontmatter: { title: `Tag: ${tag}`, tags: [] } })
+        tag, defaultProcessedContent({ slug: `tags/${tag}/index` as ServerSlug, frontmatter: { title: `Tag: ${tag}`, tags: [] } })
       ])))
 
       for (const [tree, file] of content) {
         const slug = file.data.slug!
         if (slug.startsWith("tags/")) {
-          const tag = slug.slice("tags/".length)
+          const tag = joinSegments(slug.slice("tags/".length), "index")
           if (tags.has(tag)) {
             tagDescriptions[tag] = [tree, file]
           }
@@ -41,7 +41,7 @@
       }
 
       for (const tag of tags) {
-        const slug = `tags/${tag}` as CanonicalSlug
+        const slug = `tags/${tag}/index` as CanonicalSlug
         const externalResources = pageResources(slug, resources)
         const [tree, file] = tagDescriptions[tag]
         const componentData: QuartzComponentProps = {

--
Gitblit v1.10.0