Files
argon-theme/.kiro/specs/mermaid-codeblock-magic/tasks.md
nanhaoluo 29bfd284e0 feat: 实现 Mermaid 代码块魔改支持
- 添加 convertMermaidCodeblocks() 函数,在代码高亮前拦截 mermaid 代码块
- 支持标准 Markdown 代码块 (\\\mermaid) 渲染
- 更新 detectMermaidBlocks() 添加 mermaid-from-codeblock 选择器
- 更新 extractMermaidCode() 支持新容器类型
- 创建测试文件 test-codeblock-magic.html
- 更新用户文档、开发者文档和 FAQ
- 完全绕过代码高亮和 WordPress 格式化
- 支持 PJAX 页面切换
- 特殊字符和换行符正确保留
2026-01-24 21:35:12 +08:00

6.9 KiB
Raw Blame History

Mermaid 代码块魔改支持 - 任务列表

概述

实现标准 Markdown 代码块 (```mermaid) 的 Mermaid 图表渲染,通过在代码高亮之前拦截并转换代码块,完全绕过 WordPress 和代码高亮的干扰。

任务列表

1. 核心功能实现

  • 1.1 实现 convertMermaidCodeblocks() 函数

    • 需求: 3.1 代码块拦截(核心功能)
    • 位置: argontheme.js 第 3942 行之前(highlightJsRender() 函数开始处)
    • 功能:
      • 使用多个选择器查找 mermaid 代码块
      • 支持 pre > code.language-mermaidpre > code.mermaidcode.language-mermaidpre[data-lang="mermaid"] 格式
      • 提取纯文本代码(使用 textContent
      • 创建 <div class="mermaid-from-codeblock"> 容器
      • 替换原始代码块元素
      • 添加 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