From 2a7e61ae2a0d0e1a479923f5664635d110e470c3 Mon Sep 17 00:00:00 2001
From: Jacky Zhao <j.zhao2k19@gmail.com>
Date: Sun, 03 Mar 2024 20:31:55 +0000
Subject: [PATCH] feat: support transcluding codeblocks and blockquotes (closes #940)
---
quartz/plugins/transformers/ofm.ts | 36 +++++++++++++++++++++++++++++-------
1 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts
index fab7cf8..237d683 100644
--- a/quartz/plugins/transformers/ofm.ts
+++ b/quartz/plugins/transformers/ofm.ts
@@ -1,5 +1,5 @@
import { QuartzTransformerPlugin } from "../types"
-import { Blockquote, Root, Html, BlockContent, DefinitionContent, Paragraph, Code } from "mdast"
+import { Root, Html, BlockContent, DefinitionContent, Paragraph, Code } from "mdast"
import { Element, Literal, Root as HtmlRoot } from "hast"
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
import { slug as slugAnchor } from "github-slugger"
@@ -17,7 +17,6 @@
import { PhrasingContent } from "mdast-util-find-and-replace/lib"
import { capitalize } from "../../util/lang"
import { PluggableList } from "unified"
-import { ValidCallout, i18n } from "../../i18n"
export interface Options {
comments: boolean
@@ -528,12 +527,35 @@
last.value = last.value.slice(0, -matches[0].length)
const block = matches[0].slice(1)
- if (!Object.keys(file.data.blocks!).includes(block)) {
- node.properties = {
- ...node.properties,
- id: block,
+ if (last.value === "") {
+ // this is an inline block ref but the actual block
+ // is the previous element above it
+ let idx = (index ?? 1) - 1
+ while (idx >= 0) {
+ const element = parent?.children.at(idx)
+ if (!element) break
+ if (element.type !== "element") {
+ idx -= 1
+ } else {
+ if (!Object.keys(file.data.blocks!).includes(block)) {
+ element.properties = {
+ ...element.properties,
+ id: block,
+ }
+ file.data.blocks![block] = element
+ }
+ return
+ }
}
- file.data.blocks![block] = node
+ } else {
+ // normal paragraph transclude
+ if (!Object.keys(file.data.blocks!).includes(block)) {
+ node.properties = {
+ ...node.properties,
+ id: block,
+ }
+ file.data.blocks![block] = node
+ }
}
}
}
--
Gitblit v1.10.0