mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-30 16:24:06 -06:00
Obsidian Parser (Checkboxes)
This commit is contained in:
parent
f176486cf2
commit
dd062107c4
@ -29,7 +29,7 @@ export const CustomDefault: QuartzParserPlugin<Partial<Options>> = (userOpts) =>
|
|||||||
}
|
}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
htmlPlugins(_ctx) {
|
htmlPlugins() {
|
||||||
const plug: Pluggable = () => {}
|
const plug: Pluggable = () => {}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
|
|||||||
@ -58,7 +58,7 @@ export const ObsidianArrow: QuartzParserPlugin<Partial<Options>> = (userOpts) =>
|
|||||||
}
|
}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
htmlPlugins(_ctx) {
|
htmlPlugins() {
|
||||||
const plug: Pluggable = () => {}
|
const plug: Pluggable = () => {}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
|
|||||||
@ -187,7 +187,7 @@ export const ObsidianCallouts: QuartzParserPlugin<Partial<Options>> = (userOpts)
|
|||||||
}
|
}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
htmlPlugins(_ctx) {
|
htmlPlugins() {
|
||||||
const plug: Pluggable = () => {}
|
const plug: Pluggable = () => {}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
|
|||||||
@ -0,0 +1,67 @@
|
|||||||
|
import { QuartzParserPlugin } from "../../types"
|
||||||
|
import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace"
|
||||||
|
// @ts-ignore
|
||||||
|
import checkboxScript from "../../components/scripts/checkbox.inline.ts"
|
||||||
|
import { visit } from "unist-util-visit"
|
||||||
|
import { JSResource } from "../../../util/resources"
|
||||||
|
import { Element, Literal, Root as HtmlRoot } from "hast"
|
||||||
|
import { Root } from "mdast"
|
||||||
|
import { Pluggable } from "unified"
|
||||||
|
|
||||||
|
interface Options {
|
||||||
|
enabled: Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultOptions: Options = {
|
||||||
|
enabled: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
export const ObsidianCheckboxes: QuartzParserPlugin<Partial<Options>> = (userOpts) => {
|
||||||
|
const opts: Options = { ...defaultOptions, ...userOpts }
|
||||||
|
return {
|
||||||
|
name: "ObsidianCheckboxes",
|
||||||
|
textTransform(_ctx, src: string | Buffer) {
|
||||||
|
if (src instanceof Buffer) {
|
||||||
|
src = src.toString()
|
||||||
|
}
|
||||||
|
return src
|
||||||
|
},
|
||||||
|
markdownPlugins(_ctx) {
|
||||||
|
const plug: Pluggable = (tree: Root, _file) => {
|
||||||
|
const replacements: [RegExp, string | ReplaceFunction][] = []
|
||||||
|
mdastFindReplace(tree, replacements)
|
||||||
|
}
|
||||||
|
return plug
|
||||||
|
},
|
||||||
|
htmlPlugins() {
|
||||||
|
if (opts.enabled) {
|
||||||
|
const plug: Pluggable = (tree: HtmlRoot, _file) => {
|
||||||
|
visit(tree, "element", (node) => {
|
||||||
|
if (node.tagName === "input" && node.properties.type === "checkbox") {
|
||||||
|
const isChecked = node.properties?.checked ?? false
|
||||||
|
node.properties = {
|
||||||
|
type: "checkbox",
|
||||||
|
disabled: false,
|
||||||
|
checked: isChecked,
|
||||||
|
class: "checkbox-toggle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return plug
|
||||||
|
}
|
||||||
|
return {} as Pluggable
|
||||||
|
},
|
||||||
|
externalResources() {
|
||||||
|
if (opts.enabled) {
|
||||||
|
const js: JSResource = {
|
||||||
|
script: checkboxScript,
|
||||||
|
loadTime: "afterDOMReady",
|
||||||
|
contentType: "inline",
|
||||||
|
}
|
||||||
|
return js
|
||||||
|
}
|
||||||
|
return {} as JSResource
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -45,7 +45,7 @@ export const ObsidianHighlights: QuartzParserPlugin<Partial<Options>> = (userOpt
|
|||||||
}
|
}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
htmlPlugins(_ctx) {
|
htmlPlugins() {
|
||||||
const plug: Pluggable = () => {}
|
const plug: Pluggable = () => {}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
export { ObsidianArrow } from "./arrows"
|
export { ObsidianArrow } from "./arrows"
|
||||||
export { ObsidianCallouts } from "./callouts"
|
export { ObsidianCallouts } from "./callouts"
|
||||||
|
export { ObsidianCheckboxes } from "./checkboxes"
|
||||||
export { ObsidianComments } from "./comments"
|
export { ObsidianComments } from "./comments"
|
||||||
export { ObsidianHighlights } from "./highlights"
|
export { ObsidianHighlights } from "./highlights"
|
||||||
export { ObsidianMermaid } from "./mermaid"
|
export { ObsidianMermaid } from "./mermaid"
|
||||||
|
|||||||
@ -24,7 +24,7 @@ export const ObsidianMermaid: QuartzParserPlugin<Partial<Options>> = (userOpts)
|
|||||||
}
|
}
|
||||||
return src
|
return src
|
||||||
},
|
},
|
||||||
markdownPlugins(_ctx) {
|
markdownPlugins() {
|
||||||
const plug: Pluggable = (tree: Root, _file) => {
|
const plug: Pluggable = (tree: Root, _file) => {
|
||||||
if (opts.enabled) {
|
if (opts.enabled) {
|
||||||
visit(tree, "code", (node: Code) => {
|
visit(tree, "code", (node: Code) => {
|
||||||
|
|||||||
@ -156,7 +156,7 @@ export const ObsidianWikilinks: QuartzParserPlugin<Partial<Options>> = (userOpts
|
|||||||
}
|
}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
htmlPlugins(_ctx) {
|
htmlPlugins() {
|
||||||
const plug: Pluggable = () => {}
|
const plug: Pluggable = () => {}
|
||||||
return plug
|
return plug
|
||||||
},
|
},
|
||||||
|
|||||||
@ -38,6 +38,7 @@ import rehypeAutolinkHeadings from "rehype-autolink-headings"
|
|||||||
import {
|
import {
|
||||||
ObsidianArrow,
|
ObsidianArrow,
|
||||||
ObsidianCallouts,
|
ObsidianCallouts,
|
||||||
|
ObsidianCheckboxes,
|
||||||
ObsidianComments,
|
ObsidianComments,
|
||||||
ObsidianHighlights,
|
ObsidianHighlights,
|
||||||
ObsidianMermaid,
|
ObsidianMermaid,
|
||||||
@ -214,13 +215,16 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<ObsidianO
|
|||||||
htmlPlugins() {
|
htmlPlugins() {
|
||||||
const plugins: PluggableList = [rehypeRaw]
|
const plugins: PluggableList = [rehypeRaw]
|
||||||
|
|
||||||
plugins.push(() => {})
|
plugins.push(ObsidianCheckboxes({ enabled: opts.enableCheckbox }).htmlPlugins())
|
||||||
|
|
||||||
return plugins
|
return plugins
|
||||||
},
|
},
|
||||||
externalResources() {
|
externalResources() {
|
||||||
const js: JSResource[] = []
|
const js: JSResource[] = []
|
||||||
|
|
||||||
|
js.push(
|
||||||
|
ObsidianCheckboxes({ enabled: opts.enableCheckbox }).externalResources() as JSResource,
|
||||||
|
)
|
||||||
js.push(ObsidianCallouts({ enabled: opts.callouts }).externalResources() as JSResource)
|
js.push(ObsidianCallouts({ enabled: opts.callouts }).externalResources() as JSResource)
|
||||||
js.push(ObsidianMermaid({ enabled: opts.mermaid }).externalResources() as JSResource)
|
js.push(ObsidianMermaid({ enabled: opts.mermaid }).externalResources() as JSResource)
|
||||||
|
|
||||||
|
|||||||
@ -54,6 +54,6 @@ export type QuartzParserPluginInstance = {
|
|||||||
name: string
|
name: string
|
||||||
textTransform: (ctx: BuildCtx, src: string | Buffer) => string | Buffer
|
textTransform: (ctx: BuildCtx, src: string | Buffer) => string | Buffer
|
||||||
markdownPlugins: (ctx: BuildCtx) => Pluggable
|
markdownPlugins: (ctx: BuildCtx) => Pluggable
|
||||||
htmlPlugins: (ctx: BuildCtx) => Pluggable
|
htmlPlugins: () => Pluggable
|
||||||
externalResources: () => JSResource | string
|
externalResources: () => JSResource | string
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user