diff --git a/quartz/plugins/parsers/obsidian/callouts.ts b/quartz/plugins/parsers/obsidian/callouts.ts index d2eb513d3..6a9f337b5 100644 --- a/quartz/plugins/parsers/obsidian/callouts.ts +++ b/quartz/plugins/parsers/obsidian/callouts.ts @@ -13,12 +13,10 @@ import { mdastToHtml } from "../../transformers/markdown" interface Options { enabled: Boolean - inHtml: Boolean } const defaultOptions: Options = { enabled: true, - inHtml: false, } // from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts diff --git a/quartz/plugins/parsers/obsidian/index.ts b/quartz/plugins/parsers/obsidian/index.ts index 4f1555b84..b1115200f 100644 --- a/quartz/plugins/parsers/obsidian/index.ts +++ b/quartz/plugins/parsers/obsidian/index.ts @@ -6,3 +6,4 @@ export { ObsidianHighlights } from "./highlights" export { ObsidianMermaid } from "./mermaid" export { ObsidianTags } from "./tags" export { ObsidianWikilinks } from "./wikilinks" +export { ObsidianVideo } from "./video" diff --git a/quartz/plugins/parsers/obsidian/mermaid.ts b/quartz/plugins/parsers/obsidian/mermaid.ts index 8b64686bc..c868b8b7b 100644 --- a/quartz/plugins/parsers/obsidian/mermaid.ts +++ b/quartz/plugins/parsers/obsidian/mermaid.ts @@ -6,12 +6,10 @@ import { Pluggable } from "unified" interface Options { enabled: Boolean - inHtml: Boolean } const defaultOptions: Options = { enabled: true, - inHtml: false, } export const ObsidianMermaid: QuartzParser> = (userOpts) => { diff --git a/quartz/plugins/parsers/obsidian/video.ts b/quartz/plugins/parsers/obsidian/video.ts new file mode 100644 index 000000000..bb806b1b5 --- /dev/null +++ b/quartz/plugins/parsers/obsidian/video.ts @@ -0,0 +1,54 @@ +import { QuartzParser } from "../../types" +import { JSResource } from "../../../util/resources" +import { Root, Html } from "mdast" +import { Pluggable } from "unified" +import { SKIP, visit } from "unist-util-visit" + +interface Options { + enabled: Boolean +} + +const defaultOptions: Options = { + enabled: true, +} + +const videoExtensionRegex = new RegExp(/\.(mp4|webm|ogg|avi|mov|flv|wmv|mkv|mpg|mpeg|3gp|m4v)$/) + +export const ObsidianVideo: QuartzParser> = (userOpts) => { + const opts: Options = { ...defaultOptions, ...userOpts } + return { + name: "ObsidianVideo", + textTransform(_ctx, src: string | Buffer) { + if (src instanceof Buffer) { + src = src.toString() + } + return src + }, + markdownPlugins(_ctx) { + const plug: Pluggable = (tree: Root, _file) => { + if (opts.enabled) { + visit(tree, "image", (node, index, parent) => { + if (parent && index != undefined && videoExtensionRegex.test(node.url)) { + const newNode: Html = { + type: "html", + value: ``, + } + + parent.children.splice(index, 1, newNode) + return SKIP + } + }) + } + } + return plug + }, + htmlPlugins() { + const plug: Pluggable = () => {} + return plug + }, + externalResources() { + const js = {} as JSResource + return js + }, + } +} diff --git a/quartz/plugins/transformers/markdown.ts b/quartz/plugins/transformers/markdown.ts index 6ac0fab0c..f1d6d758e 100644 --- a/quartz/plugins/transformers/markdown.ts +++ b/quartz/plugins/transformers/markdown.ts @@ -45,6 +45,7 @@ import { ObsidianHighlights, ObsidianMermaid, ObsidianTags, + ObsidianVideo, ObsidianWikilinks, } from "../parsers/obsidian" @@ -312,10 +313,9 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin