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