add preview html code
This commit is contained in:
parent
00be2be24f
commit
3a10f58b28
|
@ -60,21 +60,49 @@ export function Mermaid(props: { code: string }) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function HTMLPreview(props: { code: string }) {
|
||||||
|
const ref = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="no-dark html"
|
||||||
|
style={{
|
||||||
|
cursor: "pointer",
|
||||||
|
overflow: "auto",
|
||||||
|
}}
|
||||||
|
ref={ref}
|
||||||
|
onClick={() => console.log("click")}
|
||||||
|
>
|
||||||
|
<iframe
|
||||||
|
frameBorder={0}
|
||||||
|
sandbox="allow-scripts"
|
||||||
|
style={{ width: "100%", height: 400 }}
|
||||||
|
srcdoc={props.code}
|
||||||
|
></iframe>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export function PreCode(props: { children: any }) {
|
export function PreCode(props: { children: any }) {
|
||||||
const ref = useRef<HTMLPreElement>(null);
|
const ref = useRef<HTMLPreElement>(null);
|
||||||
const refText = ref.current?.innerText;
|
const refText = ref.current?.innerText;
|
||||||
const [mermaidCode, setMermaidCode] = useState("");
|
const [mermaidCode, setMermaidCode] = useState("");
|
||||||
|
const [htmlCode, setHtmlCode] = useState("");
|
||||||
|
|
||||||
const renderMermaid = useDebouncedCallback(() => {
|
const renderArtifacts = useDebouncedCallback(() => {
|
||||||
if (!ref.current) return;
|
if (!ref.current) return;
|
||||||
const mermaidDom = ref.current.querySelector("code.language-mermaid");
|
const mermaidDom = ref.current.querySelector("code.language-mermaid");
|
||||||
if (mermaidDom) {
|
if (mermaidDom) {
|
||||||
setMermaidCode((mermaidDom as HTMLElement).innerText);
|
setMermaidCode((mermaidDom as HTMLElement).innerText);
|
||||||
}
|
}
|
||||||
|
const htmlDom = ref.current.querySelector("code.language-html");
|
||||||
|
if (htmlDom) {
|
||||||
|
setHtmlCode((htmlDom as HTMLElement).innerText);
|
||||||
|
}
|
||||||
}, 600);
|
}, 600);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setTimeout(renderMermaid, 1);
|
setTimeout(renderArtifacts, 1);
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [refText]);
|
}, [refText]);
|
||||||
|
|
||||||
|
@ -83,6 +111,7 @@ export function PreCode(props: { children: any }) {
|
||||||
{mermaidCode.length > 0 && (
|
{mermaidCode.length > 0 && (
|
||||||
<Mermaid code={mermaidCode} key={mermaidCode} />
|
<Mermaid code={mermaidCode} key={mermaidCode} />
|
||||||
)}
|
)}
|
||||||
|
{htmlCode.length > 0 && <HTMLPreview code={htmlCode} key={htmlCode} />}
|
||||||
<pre ref={ref}>
|
<pre ref={ref}>
|
||||||
<span
|
<span
|
||||||
className="copy-code-button"
|
className="copy-code-button"
|
||||||
|
|
Loading…
Reference in New Issue