From cb704eed8815aee729aa88bcb4e02b56ff30bc14 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sun, 30 Oct 2022 02:14:38 +0800 Subject: [PATCH] fix: fix preview html meta issue. --- scripts/create.mjs | 2 +- scripts/utils/rehypePreviewHTML.mjs | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) 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; + } + } + }); + }; }