# Mermaid 代码块魔改支持 - 任务列表 ## 概述 实现标准 Markdown 代码块 (` ```mermaid `) 的 Mermaid 图表渲染,通过在代码高亮之前拦截并转换代码块,完全绕过 WordPress 和代码高亮的干扰。 ## 任务列表 ### 1. 核心功能实现 - [ ] 1.1 实现 `convertMermaidCodeblocks()` 函数 - **需求**: 3.1 代码块拦截(核心功能) - **位置**: `argontheme.js` 第 3942 行之前(`highlightJsRender()` 函数开始处) - **功能**: - 使用多个选择器查找 mermaid 代码块 - 支持 `pre > code.language-mermaid`、`pre > code.mermaid`、`code.language-mermaid`、`pre[data-lang="mermaid"]` 格式 - 提取纯文本代码(使用 `textContent`) - 创建 `
` 容器 - 替换原始代码块元素 - 添加 `data-processed="true"` 标记防止重复处理 - **参考**: 设计文档 3.1 节 - [ ] 1.2 集成到 `highlightJsRender()` 函数 - **需求**: 3.1 代码块拦截(核心功能) - **位置**: `argontheme.js` 第 3942 行 - **修改**: 在函数开始处调用 `convertMermaidCodeblocks()` - **执行顺序**: 转换 → 代码高亮 → Mermaid 渲染 - **参考**: 设计文档 3.2 节(集成点 1) ### 2. Mermaid 检测适配 - [ ] 2.1 更新 `detectMermaidBlocks()` 函数 - **需求**: 3.4 渲染检测 - **位置**: `argontheme.js` 第 4430 行 - **修改**: 在 selectors 数组中添加 `'div.mermaid-from-codeblock'` - **优先级**: 放在 `'div.mermaid-shortcode'` 之后,`'div.mermaid'` 之前 - **参考**: 设计文档 3.2 节(集成点 2) - [ ] 2.2 更新 `extractMermaidCode()` 函数 - **需求**: 3.5 代码提取适配 - **位置**: `argontheme.js` 第 4650 行 - **修改**: 添加对 `mermaid-from-codeblock` 类的处理分支 - **提取方式**: 使用 `element.textContent` 直接获取 - **参考**: 设计文档 3.2 节(集成点 3) ### 3. 测试与验证 - [ ] 3.1 创建测试文件 - **需求**: 6.4 测试用例 - **文件**: `tests/test-codeblock-magic.html` - **内容**: - 标准 Markdown 代码块 (`pre > code.language-mermaid`) - 多个代码块(测试批量处理) - 特殊字符代码块(`-->`, `--`, `==` 等) - 空代码块(测试边界情况) - 多行代码块(测试换行符保留) - **参考**: 设计文档 7.4 节 - [ ] 3.2 功能测试 - **需求**: 6.1 单元测试、6.2 集成测试 - **测试项**: - 代码块正确转换为容器 - 代码块不被代码高亮处理 - Mermaid 图表正确渲染 - 特殊字符不被转换(`-->` 保持不变) - 换行符正确保留 - 重复处理防护生效 - **参考**: 设计文档 7.1 节、7.2 节 - [ ] 3.3 PJAX 兼容性测试 - **需求**: 3.6 PJAX 兼容 - **测试项**: - 初始页面加载,代码块正确转换和渲染 - PJAX 切换到新页面,新页面的代码块正确转换和渲染 - 已转换的代码块不被重复处理 - 无 JavaScript 错误 - **参考**: 设计文档 3.3 节 - [ ] 3.4 浏览器兼容性测试 - **需求**: 6.3 浏览器测试 - **测试浏览器**: Chrome、Firefox、Safari、Edge(最新版) - **测试项**: 代码块转换、图表渲染、PJAX 切换、性能表现 - **参考**: 设计文档 7.3 节 ### 4. 文档更新 - [ ] 4.1 更新用户文档 - **需求**: 7.1 用户文档 - **文件**: `docs/mermaid-usage-guide.md` - **内容**: - 添加代码块魔改方式的说明 - 提供使用示例(标准 Markdown 语法) - 说明优缺点(优点:标准语法;缺点:需要主题支持) - 与其他方式的对比 - **参考**: 需求文档 7.1 节 - [ ] 4.2 更新开发者文档 - **需求**: 7.2 开发者文档 - **文件**: `docs/mermaid-developer-guide.md` - **内容**: - 说明实现原理(提前拦截、转换容器) - 提供代码示例(`convertMermaidCodeblocks()` 函数) - 说明扩展方式(如何添加新的选择器) - 执行顺序说明 - **参考**: 需求文档 7.2 节 - [ ] 4.3 更新 FAQ 文档 - **需求**: 7.3 FAQ 文档 - **文件**: `docs/mermaid-faq.md` - **内容**: - 添加常见问题(如何使用标准 Markdown 语法?) - 提供解决方案(启用代码块魔改功能) - 说明注意事项(需要主题版本 >= X.X.X) - 故障排查指南 - **参考**: 需求文档 7.3 节 ### 5. 性能优化(可选) - [ ] 5.1* 添加性能监控 - **需求**: 4.1 性能要求 - **功能**: - 使用 `performance.now()` 记录转换耗时 - 使用 `console.log()` 输出性能数据(仅调试模式) - 记录处理的代码块数量 - **目标**: 单个代码块处理时间 < 10ms - **参考**: 设计文档 5.3 节 - [ ] 5.2* 优化选择器性能 - **需求**: 4.1 性能要求 - **优化**: - 使用更精确的选择器(减少匹配范围) - 批量处理元素(减少 DOM 查询次数) - 提前返回(跳过已处理的元素) - **参考**: 设计文档 5.2 节 ### 6. 错误处理增强(可选) - [ ] 6.1* 添加错误日志 - **需求**: 5.3 错误处理 - **功能**: - 使用 try-catch 包裹关键代码 - 捕获异常后记录日志(`console.error()`) - 不中断其他代码块的处理 - **参考**: 设计文档 3.4 节 - [ ] 6.2* 提供降级方案 - **需求**: 5.3 错误处理 - **功能**: - 如果转换失败,保留原始代码块 - 原始代码块仍可通过降级选择器检测(`pre code.language-mermaid`) - 确保即使转换失败,仍能渲染 - **参考**: 设计文档 3.4 节 ## 任务说明 ### 优先级 - **必须完成**: 1.1 - 2.2(核心功能)、3.1 - 3.3(测试验证)、4.1 - 4.3(文档更新) - **可选任务**: 5.1 - 5.2(性能优化)、6.1 - 6.2(错误处理增强) ### 执行顺序 1. 先完成核心功能(1.1 - 1.2) 2. 再完成 Mermaid 检测适配(2.1 - 2.2) 3. 然后进行测试验证(3.1 - 3.4) 4. 最后更新文档(4.1 - 4.3) 5. 可选任务可在主要功能完成后进行 ### 验收标准 - ✅ 可以使用 ` ```mermaid ` 代码块编写图表 - ✅ 代码块不会被代码高亮处理 - ✅ 图表正确渲染 - ✅ 特殊字符不被转换 - ✅ 换行符正确保留 - ✅ PJAX 切换正常工作 - ✅ 性能无明显影响 - ✅ 兼容所有主流浏览器 ## 注意事项 1. **执行顺序约束**: 必须严格遵守"转换 → 代码高亮 → Mermaid 渲染"的执行顺序 2. **代码风格**: 使用 Tab 缩进、单引号、严格相等(`===`) 3. **安全性**: 使用 `textContent` 而非 `innerHTML`,防止 XSS 4. **兼容性**: 保持与现有功能的兼容,不影响 Shortcode 和容器语法 5. **调试**: 添加详细的调试日志,便于追踪问题 ## 参考文档 - **需求文档**: `.kiro/specs/mermaid-codeblock-magic/requirements.md` - **设计文档**: `.kiro/specs/mermaid-codeblock-magic/design.md` - **代码规范**: `.kiro/steering/code-style.md`