From b5877824500a19c721c93eedc59704db94487a94 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Sat, 17 Jun 2023 20:08:06 +0000
Subject: [PATCH] collapsible callout
---
quartz/plugins/transformers/ofm.ts | 38 ++++++++++++++++++++++++++++----------
1 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts
index aa83953..4ade476 100644
--- a/quartz/plugins/transformers/ofm.ts
+++ b/quartz/plugins/transformers/ofm.ts
@@ -7,6 +7,8 @@
import { visit } from "unist-util-visit"
import path from "path"
import { JSResource } from "../../resources"
+// @ts-ignore
+import calloutScript from "../../components/scripts/callout.inline.ts"
export interface Options {
highlight: boolean
@@ -210,6 +212,10 @@
const defaultState = collapseChar === "-" ? "collapsed" : "expanded"
const title = match.input.slice(calloutDirective.length).trim() || capitalize(calloutType)
+ const toggleIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold">
+ <polyline points="6 9 12 15 18 9"></polyline>
+ </svg>`
+
const titleNode: HTML = {
type: "html",
value: `<div
@@ -217,6 +223,7 @@
>
<div class="callout-icon">${callouts[canonicalizeCallout(calloutType)]}</div>
<div class="callout-title-inner">${title}</div>
+ ${collapse ? toggleIcon : ""}
</div>`
}
@@ -228,7 +235,6 @@
type: 'text',
value: remainingText,
}]
-
})
}
@@ -236,7 +242,6 @@
node.children.splice(0, 1, ...blockquoteContent)
// add properties to base blockquote
- // TODO: add the js to actually support collapsing callout
node.data = {
hProperties: {
...(node.data?.hProperties ?? {}),
@@ -273,18 +278,31 @@
return [rehypeRaw]
},
externalResources() {
- const mermaidScript: JSResource = {
- script: `
+ const js: JSResource[] = []
+
+ if (opts.callouts) {
+ js.push({
+ script: calloutScript,
+ loadTime: 'afterDOMReady',
+ contentType: 'inline'
+ })
+ }
+
+ if (opts.mermaid) {
+ js.push({
+ script: `
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
mermaid.initialize({ startOnLoad: true });
`,
- loadTime: 'afterDOMReady',
- moduleType: 'module',
- contentType: 'inline'
+ loadTime: 'afterDOMReady',
+ moduleType: 'module',
+ contentType: 'inline'
+ })
}
- return {
- js: opts.mermaid ? [mermaidScript] : []
- }
+
+ console.log(js)
+
+ return { js }
}
}
}
--
Gitblit v1.10.0