Spaces:
Paused
Paused
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"
|