diff --git a/scripts/create.mjs b/scripts/create.mjs index d965c14..5e819ad 100644 --- a/scripts/create.mjs +++ b/scripts/create.mjs @@ -53,12 +53,12 @@ export function create(str = '', options = {}) { }); // 放在 rehypeDocument 前面 dt.unshift(rehypeRaw); + dt.unshift(rehypePreviewHTML); return dt; } return plugins; }, rewrite: (node, index, parent) => { - rehypePreviewHTML(node, parent); rehypeTitle(node, options.filename); homeCardIcons(node, parent, options.isHome); tooltips(node, index, parent); diff --git a/scripts/utils/rehypePreviewHTML.mjs b/scripts/utils/rehypePreviewHTML.mjs index ce5b5f4..3e1dcdf 100644 --- a/scripts/utils/rehypePreviewHTML.mjs +++ b/scripts/utils/rehypePreviewHTML.mjs @@ -1,13 +1,22 @@ +import { visit } from 'unist-util-visit'; import { getCodeString } from 'rehype-rewrite'; import { getVNode } from './getSVGNode.mjs'; -export function rehypePreviewHTML(node, parent) { - if (node.type === 'element' && node.tagName === 'pre' && node.properties?.className?.includes('language-html')) { - const child = node.children[0]; - if (child?.tagName === 'code' && child.data?.meta === 'preview') { - const code = getCodeString(node.children); - const vnode = getVNode(code || ''); - node.children = vnode; - } - } +export function rehypePreviewHTML() { + return (tree) => { + visit(tree, (node, index, parent) => { + if (node.type === 'element' && node.tagName === 'pre') { + const child = node.children[0]; + if ( + child.properties?.className?.includes('language-html') && + child?.tagName === 'code' && + child.data?.meta === 'preview' + ) { + const code = getCodeString(child.children); + const vnode = getVNode(code || ''); + node.children = vnode; + } + } + }); + }; }