Spaces:
Sleeping
Sleeping
fix: syntax highlighting works in SSR (#1583)
Browse filesfix: syntax highlighting in SSR, simplify CodeBlock component
src/lib/components/CodeBlock.svelte
CHANGED
@@ -1,27 +1,18 @@
|
|
1 |
<script lang="ts">
|
2 |
-
import { afterUpdate } from "svelte";
|
3 |
import CopyToClipBoardBtn from "./CopyToClipBoardBtn.svelte";
|
4 |
import DOMPurify from "isomorphic-dompurify";
|
|
|
5 |
|
6 |
export let code = "";
|
7 |
export let lang = "";
|
8 |
|
9 |
-
$: highlightedCode =
|
10 |
-
|
11 |
-
afterUpdate(async () => {
|
12 |
-
const { default: hljs } = await import("highlight.js");
|
13 |
-
const language = hljs.getLanguage(lang);
|
14 |
-
|
15 |
-
highlightedCode = hljs.highlightAuto(code, language?.aliases).value;
|
16 |
-
});
|
17 |
</script>
|
18 |
|
19 |
<div class="group relative my-4 rounded-lg">
|
20 |
-
<!-- eslint-disable svelte/no-at-html-tags -->
|
21 |
<pre
|
22 |
class="scrollbar-custom overflow-auto px-5 scrollbar-thumb-gray-500 hover:scrollbar-thumb-gray-400 dark:scrollbar-thumb-white/10 dark:hover:scrollbar-thumb-white/20"><code
|
23 |
-
|
24 |
-
>{@html DOMPurify.sanitize(highlightedCode || code.replaceAll("<", "<"))}
|
25 |
</code></pre>
|
26 |
<CopyToClipBoardBtn
|
27 |
classNames="btn rounded-lg border border-gray-200 px-2 py-2 text-sm shadow-sm transition-all hover:border-gray-300 active:shadow-inner dark:border-gray-700 dark:hover:border-gray-500 absolute top-2 right-2 invisible opacity-0 group-hover:visible group-hover:opacity-100 dark:text-gray-700 text-gray-200"
|
|
|
1 |
<script lang="ts">
|
|
|
2 |
import CopyToClipBoardBtn from "./CopyToClipBoardBtn.svelte";
|
3 |
import DOMPurify from "isomorphic-dompurify";
|
4 |
+
import hljs from "highlight.js";
|
5 |
|
6 |
export let code = "";
|
7 |
export let lang = "";
|
8 |
|
9 |
+
$: highlightedCode = hljs.highlightAuto(code, hljs.getLanguage(lang)?.aliases).value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
</script>
|
11 |
|
12 |
<div class="group relative my-4 rounded-lg">
|
|
|
13 |
<pre
|
14 |
class="scrollbar-custom overflow-auto px-5 scrollbar-thumb-gray-500 hover:scrollbar-thumb-gray-400 dark:scrollbar-thumb-white/10 dark:hover:scrollbar-thumb-white/20"><code
|
15 |
+
><!-- eslint-disable svelte/no-at-html-tags -->{@html DOMPurify.sanitize(highlightedCode)}
|
|
|
16 |
</code></pre>
|
17 |
<CopyToClipBoardBtn
|
18 |
classNames="btn rounded-lg border border-gray-200 px-2 py-2 text-sm shadow-sm transition-all hover:border-gray-300 active:shadow-inner dark:border-gray-700 dark:hover:border-gray-500 absolute top-2 right-2 invisible opacity-0 group-hover:visible group-hover:opacity-100 dark:text-gray-700 text-gray-200"
|