| | |
| | | import { QuartzTransformerPlugin } from "../types" |
| | | import { Root, Html, BlockContent, DefinitionContent, Paragraph, Code } from "mdast" |
| | | import { Root, Html, Image, 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" |
| | | import rehypeRaw from "rehype-raw" |
| | | import { visit } from "unist-util-visit" |
| | | import { SKIP, visit } from "unist-util-visit" |
| | | import path from "path" |
| | | import { JSResource } from "../../util/resources" |
| | | // @ts-ignore |
| | |
| | | parseBlockReferences: boolean |
| | | enableInHtmlEmbed: boolean |
| | | enableYouTubeEmbed: boolean |
| | | enableVideoEmbed: boolean |
| | | } |
| | | |
| | | const defaultOptions: Options = { |
| | |
| | | parseTags: true, |
| | | parseBlockReferences: true, |
| | | enableInHtmlEmbed: false, |
| | | enableYouTubeEmbed: false, |
| | | enableYouTubeEmbed: true, |
| | | enableVideoEmbed: true, |
| | | } |
| | | |
| | | const icons = { |
| | |
| | | const tagRegex = new RegExp(/(?:^| )#((?:[-_\p{L}\p{Emoji}\d])+(?:\/[-_\p{L}\p{Emoji}\d]+)*)/, "gu") |
| | | const blockReferenceRegex = new RegExp(/\^([A-Za-z0-9]+)$/, "g") |
| | | const ytLinkRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ |
| | | const videoExtensionRegex = new RegExp(/\.(mp4|webm|ogg|avi|mov|flv|wmv|mkv|mpg|mpeg|3gp|m4v)$/) |
| | | |
| | | export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options> | undefined> = ( |
| | | userOpts, |
| | |
| | | } |
| | | }) |
| | | } |
| | | |
| | | mdastFindReplace(tree, replacements) |
| | | } |
| | | }) |
| | | |
| | | if (opts.enableVideoEmbed) { |
| | | plugins.push(() => { |
| | | return (tree: Root, _file) => { |
| | | visit(tree, "image", (node, index, parent) => { |
| | | if (parent && index != undefined && videoExtensionRegex.test(node.url)) { |
| | | console.log("replacin") |
| | | const newNode: Html = { |
| | | type: "html", |
| | | value: `<video controls src="${node.url}"></video>`, |
| | | } |
| | | |
| | | parent.children.splice(index, 1, newNode) |
| | | return SKIP |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (opts.callouts) { |
| | | plugins.push(() => { |
| | | return (tree: Root, _file) => { |