From 9e4888f28c73a2d18a9bd4dc724f9d6230d7ebc9 Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Sun, 25 Jan 2026 13:02:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Mermaid=20?= =?UTF-8?q?=E6=B8=B2=E6=9F=93=E7=8A=B6=E6=80=81=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在渲染成功后添加 data-mermaid-rendered 属性 - 在 isRendered() 函数中检查该属性(已实现) - 覆盖三种渲染路径:标准 API、旧版 API、init 降级方案 - 确保已渲染的代码块不会被重复渲染 - 遵循项目代码规范(Tab 缩进、单引号、JSDoc 注释) - 完成任务 1.3 --- .kiro/specs/mermaid-codeblock-magic/tasks.md | 4 ++-- argontheme.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/.kiro/specs/mermaid-codeblock-magic/tasks.md b/.kiro/specs/mermaid-codeblock-magic/tasks.md index 0ecb178..8cfbb4b 100644 --- a/.kiro/specs/mermaid-codeblock-magic/tasks.md +++ b/.kiro/specs/mermaid-codeblock-magic/tasks.md @@ -16,8 +16,8 @@ - [ ] 1. 修复 PJAX 页面切换后 Mermaid 不渲染的问题 - [x] 1.1 实现 Mermaid 代码块检测函数 _需求:3.1-3.5_ - - [~] 1.2 优化 PJAX complete 事件处理 _需求:1.1-1.5_ - - [~] 1.3 添加渲染状态标记,避免重复渲染 _需求:3.5_ + - [x] 1.2 优化 PJAX complete 事件处理 _需求:1.1-1.5_ + - [x] 1.3 添加渲染状态标记,避免重复渲染 _需求:3.5_ - [~] 1.4 测试 PJAX 跳转后的渲染效果 _需求:1.1-1.5_ - [ ] 2. 修复 Mermaid 语法解析错误 diff --git a/argontheme.js b/argontheme.js index 0fc39d8..0bc477f 100644 --- a/argontheme.js +++ b/argontheme.js @@ -5433,6 +5433,9 @@ void 0; // 保存原始代码(用于主题切换时重新渲染) container.dataset.mermaidCode = code; container.dataset.currentTheme = this.getMermaidTheme(); + + // 需求 3.5: 添加渲染状态标记,避免重复渲染 + container.setAttribute('data-mermaid-rendered', 'true'); // 替换加载动画为渲染结果 if (loadingContainer.parentNode) { @@ -5483,6 +5486,10 @@ void 0; container.innerHTML = svgCode; container.dataset.mermaidCode = code; container.dataset.currentTheme = this.getMermaidTheme(); + + // 需求 3.5: 添加渲染状态标记,避免重复渲染 + container.setAttribute('data-mermaid-rendered', 'true'); + element.parentNode.replaceChild(container, element); this.rendered.add(container); this.applyStyles(container); @@ -5497,6 +5504,10 @@ void 0; if (typeof window.mermaid.init === 'function') { window.mermaid.init(undefined, container); this.rendered.add(container); + + // 需求 3.5: 添加渲染状态标记,避免重复渲染 + container.setAttribute('data-mermaid-rendered', 'true'); + this.logDebug(`图表渲染成功(init 方法): ${chartId}`); } else { this.handleRenderError(element, new Error('无可用的 Mermaid 渲染方法'), code);