mermaid loading improved
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { createEffect, createSignal, onMount, lazy } from "solid-js";
|
import { createEffect, createSignal, onMount, lazy, Show } from "solid-js";
|
||||||
import type { HLJSApi } from "highlight.js";
|
import type { HLJSApi } from "highlight.js";
|
||||||
|
|
||||||
const MermaidRenderer = lazy(() => import("./MermaidRenderer"));
|
const MermaidRenderer = lazy(() => import("./MermaidRenderer"));
|
||||||
@@ -6,6 +6,7 @@ const MermaidRenderer = lazy(() => import("./MermaidRenderer"));
|
|||||||
export interface PostBodyClientProps {
|
export interface PostBodyClientProps {
|
||||||
body: string;
|
body: string;
|
||||||
hasCodeBlock: boolean;
|
hasCodeBlock: boolean;
|
||||||
|
hasMermaid: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadHighlightJS(): Promise<HLJSApi> {
|
async function loadHighlightJS(): Promise<HLJSApi> {
|
||||||
@@ -402,7 +403,9 @@ export default function PostBodyClient(props: PostBodyClientProps) {
|
|||||||
class="text-text prose dark:prose-invert max-w-none"
|
class="text-text prose dark:prose-invert max-w-none"
|
||||||
innerHTML={props.body}
|
innerHTML={props.body}
|
||||||
/>
|
/>
|
||||||
|
<Show when={props.hasMermaid}>
|
||||||
<MermaidRenderer />
|
<MermaidRenderer />
|
||||||
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
import { Show, createSignal, createEffect, onCleanup } from "solid-js";
|
import { Show, createSignal, createEffect, onCleanup, lazy } from "solid-js";
|
||||||
import { useNavigate } from "@solidjs/router";
|
import { useNavigate } from "@solidjs/router";
|
||||||
import { api } from "~/lib/api";
|
import { api } from "~/lib/api";
|
||||||
import { debounce } from "es-toolkit";
|
import { debounce } from "es-toolkit";
|
||||||
import Dropzone from "~/components/blog/Dropzone";
|
import Dropzone from "~/components/blog/Dropzone";
|
||||||
import TextEditor from "~/components/blog/TextEditor";
|
const TextEditor = lazy(() => import("~/components/blog/TextEditor"));
|
||||||
import TagMaker from "~/components/blog/TagMaker";
|
import TagMaker from "~/components/blog/TagMaker";
|
||||||
import AddAttachmentSection from "~/components/blog/AddAttachmentSection";
|
import AddAttachmentSection from "~/components/blog/AddAttachmentSection";
|
||||||
import XCircle from "~/components/icons/XCircle";
|
import XCircle from "~/components/icons/XCircle";
|
||||||
|
|||||||
@@ -292,6 +292,10 @@ export default function PostPage() {
|
|||||||
return str.includes("<code") && str.includes("</code>");
|
return str.includes("<code") && str.includes("</code>");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const hasMermaid = (str: string): boolean => {
|
||||||
|
return str.includes('data-type="mermaid"');
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Show
|
<Show
|
||||||
when={data()}
|
when={data()}
|
||||||
@@ -454,6 +458,7 @@ export default function PostPage() {
|
|||||||
<PostBodyClient
|
<PostBodyClient
|
||||||
body={p().body}
|
body={p().body}
|
||||||
hasCodeBlock={hasCodeBlock(p().body)}
|
hasCodeBlock={hasCodeBlock(p().body)}
|
||||||
|
hasMermaid={hasMermaid(p().body)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
|||||||
Reference in New Issue
Block a user