From 6e0c28260e4ae2cccdf6a5e9785be9dc2f85efb9 Mon Sep 17 00:00:00 2001 From: liyunze <50455574+liyunze-coding@users.noreply.github.com> Date: Fri, 4 Sep 2026 09:50:45 +0800 Subject: [PATCH] updated codeblocks --- package-lock.json | 10 ++ package.json | 1 + src/lib/components/CommentNode.svelte | 7 +- src/lib/components/Markdown.svelte | 43 ++++++- src/lib/components/MarkdownEditor.svelte | 12 +- src/lib/markdown.spec.ts | 20 +++ src/lib/markdown.ts | 26 ++++ src/routes/layout.css | 153 +++++++++++++++++++++-- 8 files changed, 253 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d6e9fe..455e421 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "dsec-notebook", "version": "1.0.0", "dependencies": { + "highlight.js": "^11.12.0", "katex": "^0.18.5", "markdown-it": "^15.0.1", "markdown-it-texmath": "^1.0.0", @@ -5875,6 +5876,15 @@ "node": ">= 0.4" } }, + "node_modules/highlight.js": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.12.0.tgz", + "integrity": "sha512-nbfWpyRMcMrPMmDwJB+dhX/eiaPKtc2RB+0QZskqJ3WjRA/FDS0e9hZrx8EC/lbEv8gXy98FcDbNa/dspAaJMg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/ico-endec": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz", diff --git a/package.json b/package.json index add4e04..392c469 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "lint:fix": "oxlint --fix" }, "dependencies": { + "highlight.js": "^11.12.0", "katex": "^0.18.5", "markdown-it": "^15.0.1", "markdown-it-texmath": "^1.0.0", diff --git a/src/lib/components/CommentNode.svelte b/src/lib/components/CommentNode.svelte index a543cae..51035ad 100644 --- a/src/lib/components/CommentNode.svelte +++ b/src/lib/components/CommentNode.svelte @@ -5,6 +5,7 @@ import { timeAgo } from "$lib/time"; import CommentNode from "./CommentNode.svelte"; import Avatar from "./Avatar.svelte"; + import Markdown from "./Markdown.svelte"; import type { CommentDoc } from "$lib/types"; interface CommentTreeNode { @@ -165,9 +166,9 @@ {editError} {:else} -
- {comment.content} -
+- Markdown supported: **bold**, _italic_, `code`, [links](url), lists, quotes and code - blocks. LaTeX equations use $inline$ or $$display$$ notation. Paste or insert images to - embed them. + Markdown supported: **bold**, _italic_, `code`, [links](url), lists, quotes and fenced + code blocks (```ts). LaTeX equations use $inline$ or $$display$$ notation. Paste or + insert images to embed them.
{#if uploading}Uploading image...
diff --git a/src/lib/markdown.spec.ts b/src/lib/markdown.spec.ts index bea2258..a1ce06c 100644 --- a/src/lib/markdown.spec.ts +++ b/src/lib/markdown.spec.ts @@ -14,6 +14,26 @@ describe("renderMarkdown", () => { it("renders invalid LaTeX as an error instead of throwing", () => { expect(() => renderMarkdown("$\\notacommand{$")).not.toThrow(); }); + + it("syntax-highlights fenced code blocks", () => { + const rendered = renderMarkdown("```ts\nconst value: number = 1;\n```"); + + expect(rendered).toContain('class="code-block"'); + expect(rendered).toContain('class="code-copy"'); + expect(rendered).toContain('data-lang="ts"'); + expect(rendered).toContain("hljs"); + expect(rendered).toContain("hljs-keyword"); + expect(rendered).not.toContain("code-lang"); + expect(rendered).not.toContain("