fix: 完善本地与网络图片渲染

This commit is contained in:
SkyJourney
2026-07-27 22:12:16 +08:00
parent 06b30d084e
commit 32a37293d0
31 changed files with 1204 additions and 71 deletions
@@ -1,5 +1,6 @@
import { describe, expect, it } from "vitest";
import {
extractMarkdownImageSources,
MarkdownDocumentParseError,
renderMarkdown
} from "../src/render-markdown.js";
@@ -210,6 +211,55 @@ option:
expect(result.bodyHtml).toContain("<script>");
});
it("提取图片引用并使用受控资源地址替换", () => {
const source =
"![本地](./文档.assets/a%20b.png)\n\n![远程](https://example.com/a.png)";
expect(extractMarkdownImageSources(source)).toEqual([
"./%E6%96%87%E6%A1%A3.assets/a%20b.png",
"https://example.com/a.png"
]);
const result = renderMarkdown(source, {
imageSourceMap: new Map([
[
"./%E6%96%87%E6%A1%A3.assets/a%20b.png",
"data:image/png;base64,iVBORw0KGgo="
]
]),
warnings: ["远程图片下载失败"]
});
expect(result.bodyHtml).toContain(
'class="md-document-image"'
);
expect(result.bodyHtml).toContain(
'<figure class="md-document-image-block">'
);
expect(result.bodyHtml).toContain(
'<figcaption class="md-document-image-caption">本地</figcaption>'
);
expect(result.bodyHtml).toContain(
'src="data:image/png;base64,iVBORw0KGgo="'
);
expect(result.warnings).toContain("远程图片下载失败");
});
it("只为独立图片块生成可见标题,行内图片保持段落语义", () => {
const result = renderMarkdown(
"文字 ![行内图](inline.png) 继续\n\n![独立标题](block.png)"
);
expect(result.bodyHtml).toContain(
'<p>文字 <img src="inline.png" alt="行内图" class="md-document-image" /> 继续</p>'
);
expect(result.bodyHtml).not.toContain(
"md-document-image-caption\">行内图"
);
expect(result.bodyHtml).toContain(
'<figcaption class="md-document-image-caption">独立标题</figcaption>'
);
});
it("为重复中文标题生成唯一锚点", () => {
const result = renderMarkdown(`
# 章节