nsarrazin HF Staff commited on
Commit
7fbdda1
·
unverified ·
1 Parent(s): 575fe85

fix: syntax highlighting works in SSR (#1583)

Browse files

fix: syntax highlighting in SSR, simplify CodeBlock component

Files changed (1) hide show
  1. src/lib/components/CodeBlock.svelte +3 -12
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
- class="language-{lang}"
24
- >{@html DOMPurify.sanitize(highlightedCode || code.replaceAll("<", "&lt;"))}
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"