# 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`）
    - 创建 `<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`
