From 4c0569afafd8ed0a90ad43213dabfe9027fa905e Mon Sep 17 00:00:00 2001 From: nanhaoluo <3075912108@qq.com> Date: Fri, 23 Jan 2026 23:49:24 +0800 Subject: [PATCH] feat: add WP-Markdown special format support - Detect script tags with document.write() in extractMermaidCode - Extract Mermaid code from document.write() content - Support escape character decoding (backslash-n, quotes, etc) - Add comprehensive test file for WP-Markdown format validation - Requirements: 10.5 --- .kiro/specs/mermaid-support/tasks.md | 4 +- argontheme.js | 17 +- tests/test-wp-markdown-format.html | 333 +++++++++++++++++++++++++++ 3 files changed, 351 insertions(+), 3 deletions(-) create mode 100644 tests/test-wp-markdown-format.html diff --git a/.kiro/specs/mermaid-support/tasks.md b/.kiro/specs/mermaid-support/tasks.md index e29de01..b2b900a 100644 --- a/.kiro/specs/mermaid-support/tasks.md +++ b/.kiro/specs/mermaid-support/tasks.md @@ -150,7 +150,7 @@ - **Validates: Requirements 9.4** - _Requirements: 9.4_ -- [~] 10. 添加性能优化 +- [x] 10. 添加性能优化 - 实现渲染缓存机制(避免重复渲染) - 优化批量渲染逻辑 - 添加渲染状态标记 @@ -161,7 +161,7 @@ - **Validates: Requirements 8.3** - _Requirements: 8.3_ -- [~] 11. 添加特殊格式处理 +- [x] 11. 添加特殊格式处理 - 处理 WP-Markdown 生成的 `` 格式 - 实现转义字符解码(`\n`, `\"`, `\'`) - 添加注释代码块过滤 diff --git a/argontheme.js b/argontheme.js index c09a59e..5373a32 100644 --- a/argontheme.js +++ b/argontheme.js @@ -4470,7 +4470,22 @@ void 0; // 根据不同的元素类型提取代码 if (element.tagName === 'DIV' && element.classList.contains('mermaid')) { - code = element.textContent; + // 检查是否包含 WP-Markdown 生成的 script 标签 + const scriptTag = element.querySelector('script'); + if (scriptTag) { + // 提取 document.write() 中的内容 + const scriptContent = scriptTag.textContent || scriptTag.innerText; + const match = scriptContent.match(/document\.write\s*\(\s*["'](.+?)["']\s*\)/); + if (match && match[1]) { + code = match[1]; + this.logDebug('检测到 WP-Markdown 格式,从 script 标签提取代码'); + } else { + // 如果没有匹配到,使用整个元素的文本内容(排除 script 标签) + code = element.textContent; + } + } else { + code = element.textContent; + } } else if (element.tagName === 'CODE') { code = element.textContent; } else if (element.tagName === 'PRE') { diff --git a/tests/test-wp-markdown-format.html b/tests/test-wp-markdown-format.html new file mode 100644 index 0000000..94c9321 --- /dev/null +++ b/tests/test-wp-markdown-format.html @@ -0,0 +1,333 @@ + + + + + + WP-Markdown 格式测试 - Mermaid 支持 + + + +

WP-Markdown 格式测试

+

测试 Mermaid 对 WP-Markdown 编辑器生成的特殊格式的支持

+ + +
+
测试 1: 标准 WP-Markdown 格式(带 script 标签)
+
+ WP-Markdown 生成的格式包含 <script>document.write()</script> 标签 +
+
+ + flowchart TD Start([开始]) --> Process[处理] Process --> End([结束]) +
+
等待渲染...
+
+ + +
+
测试 2: 带转义字符的复杂格式
+
+ 测试转义字符的正确解码:\n(换行)、\"(引号)、\'(单引号) +
+
+ + sequenceDiagram participant A as "用户" participant B as '服务器' A->>B: 发送请求 B->>A: 返回响应 +
+
等待渲染...
+
+ + +
+
测试 3: 标准格式(无 script 标签)
+
+ 确保标准格式仍然正常工作 +
+
+flowchart LR + A[开始] --> B{判断} + B -->|是| C[处理A] + B -->|否| D[处理B] + C --> E[结束] + D --> E +
+
等待渲染...
+
+ + +
+
测试 4: 复杂流程图(WP-Markdown 格式)
+
+ 测试包含多种节点类型和连接的复杂流程图 +
+
+ + flowchart TD Start([用户提交评论]) --> PreProcess[preprocess_comment 钩子] PreProcess --> CheckEnabled{启用 AI 检测?} CheckEnabled -->|否| SaveComment[保存评论] CheckEnabled -->|是| CheckMode{检测模式} CheckMode -->|实时检测| RealTime[实时 AI 检测] CheckMode -->|批量扫描| BatchScan[批量扫描] RealTime --> IsSpam{是否垃圾?} IsSpam -->|是| MarkSpam[标记为垃圾] IsSpam -->|否| SaveComment BatchScan --> SaveComment +
+
等待渲染...
+
+ + +
+
测试 5: 注释中的代码块(应该被忽略)
+
+ 被 HTML 注释包裹的 Mermaid 代码块应该被忽略 +
+ B") +
+ --> +
+ 如果没有渲染任何图表,说明注释过滤功能正常工作 ✓ +
+ + + + + + + + +