Commit Graph

375 Commits

Author SHA1 Message Date
66df8348be feat: 优化 Mermaid 拖拽功能
- 7.1 改进拖拽响应:使用 requestAnimationFrame 优化性能,避免频繁的 DOM 操作
- 7.2 优化拖拽视觉反馈:增强光标样式,添加跨浏览器的文本选择禁用
- 7.3 智能启用拖拽:检测图表是否需要拖拽,未缩放且完全可见时自动禁用

需求:13.1, 13.2, 13.3, 13.4, 13.5
2026-01-25 01:30:21 +08:00
39d340fb49 feat: 增强 Mermaid 缩放功能
- 6.1 实现以鼠标为中心的缩放:滚轮缩放时自动调整滚动位置,保持鼠标指向的内容不变
- 6.2 优化缩放动画:按钮点击使用平滑过渡,滚轮缩放禁用过渡以获得更流畅的体验
- 6.3 实现智能缩放:双击图表时,默认大小放大到 2 倍,其他情况重置到 1 倍
- 6.4 优化缩放按钮状态:达到最大/最小缩放级别时自动禁用对应按钮

需求:12.1, 12.2, 12.3, 12.4, 12.5, 20.3
2026-01-25 01:25:13 +08:00
927e9c29d1 feat: 优化 Mermaid 渲染性能
- 12.1 实现批量渲染:使用 requestAnimationFrame 分批渲染,避免阻塞主线程
- 12.2 添加加载动画:显示加载状态和旋转动画,提供视觉反馈
- 12.3 实现延迟渲染:优先渲染视口内图表,延迟渲染视口外图表
- 12.4 优化错误处理:单个图表渲染失败不影响其他图表

需求:18.1, 18.2, 18.3, 18.4, 18.5
2026-01-25 01:13:16 +08:00
8ba6a15a8a feat: 实现 Mermaid 主题自动同步功能
- 在 setDarkmode() 中触发 argon:theme-switched 事件
- 优化 reRenderCharts() 函数,保持图表缩放级别和滚动位置
- 添加淡入淡出过渡动画,提升视觉体验
- 只替换 SVG 内容,保留容器结构和控制按钮
- 主题切换失败时保持原样,不影响用户体验

需求:17.1, 17.2, 17.3, 17.4, 17.5
2026-01-25 01:03:38 +08:00
621341500f feat: 优化 Mermaid 工具栏显示效果
- 实现工具栏自动隐藏:鼠标移出时自动隐藏,移入时显示
- 优化工具栏样式:使用半透明背景和毛玻璃效果
- 添加平滑的显示/隐藏动画过渡
- 为按钮添加自定义 tooltip 提示
- 支持夜间模式下的样式适配

需求:11.1, 11.2, 11.3-11.5, 20.2
2026-01-25 00:57:11 +08:00
0616150dae feat: 实现 PJAX 内联脚本执行器
- 添加 executeScript() 函数:
  - 创建新的 script 元素并复制内容
  - 复制所有属性(包括 async、defer)
  - 添加错误捕获和日志记录
  - 满足需求 4.4, 4.5
- 添加 executeInlineScripts() 函数:
  - 提取新页面中的所有 script 标签
  - 区分内联脚本和外部脚本
  - 按 DOM 顺序执行脚本
  - 错误隔离机制(单个脚本失败不影响其他脚本)
  - 返回执行结果统计
  - 满足需求 4.1-4.4
- 在 pjax:complete 事件中调用:
  - 在其他模块初始化之前执行
  - 添加错误处理
  - 满足需求 4.1-4.5

满足需求:4.1-4.5(内联脚本执行)
2026-01-25 00:47:28 +08:00
6a45d0ab06 feat: 重构 PJAX 事件处理器,添加 Mermaid 渲染支持
- 优化 pjax:beforeReplace 事件:
  - 添加详细的需求映射注释(需求 1.1-1.4)
  - 明确说明清理内容包含 Mermaid 实例
- 优化 pjax:complete 事件:
  - 添加 Mermaid 图表渲染调用(需求 3.6)
  - 添加 MathJax 和 KaTeX 渲染注释
  - 添加用户自定义回调注释
  - 满足需求 1.5, 1.6(模块初始化和错误隔离)
- 优化 pjax:end 事件:
  - 添加需求映射注释(需求 1.7)
  - 保持现有功能不变
- 更新顶部注释说明:
  - 明确包含 Mermaid 渲染
  - 添加完整的需求映射说明

满足需求:1.1-1.7, 3.6
2026-01-25 00:41:35 +08:00
1781e3bd79 feat: 优化 Lazyload 生命周期管理
- 添加全局 lazyloadScrollHandler 变量,用于降级方案的清理
- 优化 lazyloadInit() 函数:
  - 增强 Observer 存在性检查,添加 try-catch 错误处理
  - 清理旧的滚动监听器(降级方案)
  - 添加详细的调试日志
  - IntersectionObserver 初始化失败时自动降级
- 优化 loadImageOptimized() 函数:
  - 使用 requestAnimationFrame 优化 DOM 操作
  - 图片加载失败时取消 Observer 监听
  - 没有 data-src 时取消 Observer 监听
- 优化 lazyloadFallback() 降级方案:
  - 保存 handler 引用到全局变量
  - 所有图片加载完成后自动清理监听器
- 优化 cleanupLazyloadObserver() 函数:
  - 同时清理 Observer 和滚动监听器
  - 添加完善的错误处理
- 移除 cleanupEventListeners() 中的重复清理代码

满足需求:2.1, 2.2, 2.4, 2.5, 3.1-3.3, 8.2
2026-01-25 00:31:33 +08:00
8180a87b89 feat: 实现统一的资源清理管理器
- 封装 cleanupPjaxResources() 函数,统一管理所有资源清理
- 添加 cleanupLazyloadObserver() - 清理 Lazyload Observer
- 添加 cleanupZoomifyInstances() - 清理 Zoomify 实例
- 添加 cleanupTippyInstances() - 清理 Tippy 实例
- 添加 cleanupMermaidInstances() - 清理 Mermaid 实例和事件监听器
- 添加 cleanupDynamicStyles() - 清理动态 style 标签
- 添加 cleanupDynamicScripts() - 清理动态 script 标签
- 添加 cleanupEventListeners() - 清理事件监听器
- 每个清理函数都包含错误处理和调试日志
- 满足需求 1.1-1.4, 2.3, 6.1
2026-01-25 00:20:33 +08:00
dde868021e feat: 添加 Mermaid 图表拖拽和提示功能
- 添加鼠标左键拖拽移动图表
- 拖拽时显示 grabbing 光标,平时显示 grab 光标
- 添加底部提示文本:按住 Ctrl+滚轮缩放 | 拖拽移动
- 提示文本鼠标悬停时显示,支持夜间模式
- 防止拖拽时选中文本
2026-01-24 23:41:02 +08:00
a163e7a2a0 feat: 添加 Mermaid 图表缩放功能
- 图表容器宽度占满,只留文章边距(margin: 20px -20px)
- 添加缩放控制按钮:放大、缩小、重置
- 支持 Ctrl+滚轮缩放
- 缩放范围:50%-300%,步进 25%
- 响应式适配:移动端自动调整边距和按钮大小
- 夜间模式适配缩放控制按钮样式
2026-01-24 23:36:12 +08:00
d59c5ba07d fix: Mermaid 图表改为宽度固定、高度自适应
- SVG 宽度固定为 100%,适应容器宽度
- SVG 高度自动计算,根据内容自由伸展
- 移除所有高度限制,让图表完整显示
2026-01-24 23:33:24 +08:00
ce48c7827e feat: 添加 Mermaid v11 本地缓存文件
- 下载 Mermaid v11 库到本地

- 文件大小: 2.75 MB

- 解决本地文件不存在导致回退到 CDN 的问题

- 确保本地缓存优先级生效
2026-01-24 23:18:08 +08:00
b0557d9a2a fix: 修复 AI 垃圾评论检测架构文档中的 Mermaid 语法错误
- 移除 subgraph 标签中的引号,避免解析错误

- 将体育场形状节点 ([]) 改为普通方形节点 []

- 确保所有 Mermaid 图表语法兼容 v11 版本
2026-01-24 23:08:31 +08:00
d0ae1dbed7 feat: 优化 Mermaid 图表尺寸显示
- 添加 SVG 最大高度限制(桌面端 600px)
- 使用 Flexbox 实现图表在容器中居中显示
- 添加响应式适配(平板 500px,手机 400px)
- 设置容器最小高度 100px,避免空白过小
- 使用 width: auto !important 保持图表原始宽高比
- 创建尺寸优化测试文件和文档

解决问题:
- 低内容图表(2-3 节点)不再显示过大
- 图表尺寸更加合理,视觉协调
- 复杂图表高度限制,出现滚动条
- 移动端体验优化
2026-01-24 22:58:28 +08:00
28f0a1265e feat: 更新 Mermaid 到 v11 并优化错误处理
- 更新 Mermaid 库版本从 v10 升级到 v11.12.2
- 优化错误处理逻辑,避免重复嵌套错误容器
- 修复查看源代码时可能出现的嵌套报错问题
- 改进渲染前检查,跳过已处理的错误容器和已渲染的图表
- 优化重新渲染逻辑,只处理成功渲染的图表,排除错误容器
- 增强代码提取逻辑,优先使用传入的代码参数
- 添加主题切换时的智能判断,避免不必要的重新渲染
- 更新 functions.php 中的 CDN 地址到 v11
- 更新 settings.php 中的预览功能 CDN 地址到 v11
- 改进错误容器的 DOM 结构,使用独立元素而非 innerHTML
2026-01-24 22:46:00 +08:00
679015dece feat: AI 垃圾评论检测系统优化
- 实现多级 Prompt 系统(极简/标准/增强/自定义模式)
- 添加智能置信度评分系统(0-1 范围)
- 实现智能处理建议(auto/review/approve)
- 添加上下文增强功能(文章信息、用户历史、隐私脱敏)
- 实现学习机制(记录管理员审核决策,分析误判率)
- 添加 API 错误处理和自动禁用机制
- 优化设置界面(推荐配置、统计信息、错误日志)
- 创建反馈数据库表用于学习优化
- 实现批量扫描功能(使用新的检测引擎)
- 添加隐私保护级别配置(标准/严格模式)

核心类:
- Argon_Spam_Prompt_Engine: Prompt 管理和生成
- Argon_Spam_Context_Builder: 上下文信息构建
- Argon_Spam_Threshold_Manager: 阈值管理
- Argon_Spam_AI_Detector: 主控制器
- Argon_Spam_Learning_Module: 学习和统计
- Argon_Spam_API_Error_Handler: 错误处理
2026-01-24 22:37:41 +08:00
4200ea118c debug: 添加详细的代码提取调试日志
- 在 convertMermaidCodeblocks 中添加代码长度和内容日志
- 在 extractMermaidCode 中添加详细的提取信息
- 输出元素 HTML 以便排查问题
2026-01-24 21:57:23 +08:00
4fc62692be docs: 添加 Mermaid 故障排查指南
- 常见错误及解决方案
- 调试工具和方法
- FAQ 常见问题
- 详细的排查步骤
2026-01-24 21:51:05 +08:00
094a55b80a fix: 修复 Mermaid 代码块缩进和 API 兼容性问题
- 添加智能缩进清理:移除统一缩进但保持相对缩进
- 添加 Mermaid API 版本检测和兼容性处理
- 支持 Mermaid 10.x (render Promise API)
- 支持 Mermaid 8.x (mermaidAPI.render 回调 API)
- 添加降级方案 (mermaid.init 方法)
- 增强错误处理和调试日志
- 修复代码提取时的空格问题
2026-01-24 21:49:50 +08:00
a7af3877b8 fix: 修复测试页面的 Mermaid 渲染错误处理 2026-01-24 21:43:42 +08:00
e138848eac docs: 添加 Mermaid 代码块魔改实施总结 2026-01-24 21:36:58 +08:00
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
e5e8a245be docs: 添加 Mermaid 支持方案对比文档 2026-01-24 21:04:04 +08:00
32c2a72d2b feat: 添加 Mermaid Shortcode 支持(推荐方式)
- 新增 [mermaid]...[/mermaid] shortcode
- 支持 theme、width、height、align 参数
- 不依赖 WP-Markdown 的处理方式
- 不会被 WordPress 自动格式化破坏
- 在原生编辑器中清晰可见
- 添加完整的使用指南和示例
2026-01-24 21:02:47 +08:00
bf8f973e91 fix: 修复 Mermaid 容器语法的换行符和特殊字符问题
## 问题描述

用户报告 Mermaid 图表仍然渲染失败:
1. `flowchart TDStart` - `TD` 和 `Start` 之间没有换行符(有两个空格)
2. 箭头符号变成全角 `–>` 而不是 `-->`

## 根本原因分析

### 问题 1: 换行符丢失

WP-Markdown 可能将整个容器语法内容放在**一个** `<p>` 元素中:
```html
<p>::: mermaid<br>flowchart TD<br>Start --> End<br>:::</p>
```

而不是多个独立的 `<p>` 元素。之前的代码只处理了多元素的情况。

### 问题 2: 特殊字符转换

WordPress 的自动格式化功能会将某些字符转换为排版字符:
- `--` → `–` (U+2013 EN DASH)
- `---` → `—` (U+2014 EM DASH)
- `->` → `→` (U+2192 RIGHTWARDS ARROW)

这些字符在 Mermaid 语法中有特殊含义,必须保持原样。

## 修复方案

### 1. 支持单元素容器语法

在 `extractContainerContent()` 函数中添加检测逻辑:

```javascript
// 检查是否整个内容都在一个元素中
if (startText.includes(':::') && startText.lastIndexOf(':::') > 10) {
	// 整个容器语法在一个元素中
	let fullText = this.htmlToText(startHTML);
	// 移除开始和结束标记
	fullText = fullText.replace(/^:::\s*mermaid\s*/i, '').trim();
	fullText = fullText.replace(/:::\s*$/, '').trim();
	// 创建容器并返回
}
```

### 2. 增强 htmlToText() 函数

添加更多字符转换规则:

```javascript
// HTML 实体
.replace(/&#8211;/g, '-')  // EN DASH
.replace(/&#8212;/g, '--') // EM DASH
.replace(/&#8594;/g, '->') // RIGHTWARDS ARROW
.replace(/&ndash;/g, '-')  // EN DASH (named entity)
.replace(/&mdash;/g, '--') // EM DASH (named entity)
.replace(/&rarr;/g, '->'); // RIGHTWARDS ARROW (named entity)

// Unicode 字符
.replace(/–/g, '-')   // U+2013 EN DASH
.replace(/—/g, '--')  // U+2014 EM DASH
.replace(/→/g, '->'); // U+2192 RIGHTWARDS ARROW
```

### 3. 添加详细调试日志

```javascript
this.logDebug('检查元素,textContent: ' + startText.substring(0, 50));
this.logDebug('innerHTML: ' + startHTML.substring(0, 100));
this.logDebug('检测到单元素容器语法');
this.logDebug('转换后的完整文本: ' + fullText.substring(0, 200));
this.logDebug('移除标记后的代码: ' + fullText.substring(0, 200));
```

## 处理流程

### 单元素容器语法

```
1. 检测到 ::: mermaid 开始标记
2. 检查 textContent 中是否包含结束标记 :::
3. 如果包含,说明整个内容在一个元素中
4. 提取 innerHTML
   原始: "::: mermaid<br>flowchart TD<br>Start –> End<br>:::"
5. 使用 htmlToText() 转换
   - <br> → \n
   - – → -
   - → → ->
   结果: "::: mermaid\nflowchart TD\nStart --> End\n:::"
6. 移除开始和结束标记
   结果: "flowchart TD\nStart --> End"
7. 创建容器元素存储代码
```

### 多元素容器语法(保持原有逻辑)

```
1. 检测到 ::: mermaid 开始标记
2. 遍历后续兄弟元素
3. 收集所有内容直到 ::: 结束标记
4. 使用 \n 连接所有行
5. 创建容器元素存储代码
```

## 测试验证

### 测试用例 1: 单元素容器语法
```html
<p>::: mermaid<br>
flowchart TD<br>
    A[开始] –> B[处理]<br>
    B –> C[结束]<br>
:::</p>
```

预期结果:
```
flowchart TD
    A[开始] --> B[处理]
    B --> C[结束]
```

### 测试用例 2: 多元素容器语法
```html
<p>::: mermaid</p>
<p>flowchart TD</p>
<p>A --> B</p>
<p>:::</p>
```

预期结果:
```
flowchart TD
A --> B
```

### 测试用例 3: 复杂流程图(AI 评论审核)
- 100+ 个节点
- 多行文本(`<br/>` 标签)
- 箭头符号(`-->`, `-->`)
- 样式定义(`style` 语句)

## 影响范围

- 仅影响 Markdown 容器语法(`::: mermaid ... :::`)
- 不影响其他格式(`<div class="mermaid">`, `<pre><code>` 等)
- 向后兼容,支持单元素和多元素两种情况

## 相关文件

- `argontheme.js` - 修改 `extractContainerContent()` 和 `htmlToText()`
- `tests/test-ai-comment-flow.md` - 测试文档

## 技术细节

### WordPress 自动格式化

WordPress 的 `wptexturize()` 函数会自动转换以下字符:
- `--` → `–` (EN DASH)
- `---` → `—` (EM DASH)
- `->` → `→` (RIGHTWARDS ARROW)
- `(c)` → `©` (COPYRIGHT SIGN)
- `(r)` → `®` (REGISTERED SIGN)
- `(tm)` → `™` (TRADE MARK SIGN)

这些转换对于普通文本是有益的,但对于代码块(如 Mermaid)是有害的。

### 解决方案

1. **禁用自动格式化**(不推荐)
   - 会影响整个网站的排版
   - 需要修改 WordPress 核心代码

2. **在提取时反转换**(推荐)
   - 只影响 Mermaid 代码块
   - 不影响其他内容
   - 易于维护

### 字符映射表

| 原始字符 | HTML 实体 | Unicode | 显示 |
|---------|----------|---------|------|
| `-` | `&#45;` | U+002D | - |
| `--` | `&#8211;` / `&ndash;` | U+2013 | – |
| `---` | `&#8212;` / `&mdash;` | U+2014 | — |
| `->` | `&#8594;` / `&rarr;` | U+2192 | → |

## 注意事项

1. **性能影响**:增加了字符串替换操作,但性能影响可忽略
2. **安全性**:只处理 Mermaid 代码块,不执行任何脚本
3. **兼容性**:支持所有现代浏览器
4. **调试**:添加详细日志,便于排查问题

## 后续优化

1. 考虑使用 DOMParser 解析 HTML,更可靠
2. 添加更多特殊字符的转换规则
3. 支持自定义字符映射表
4. 添加单元测试

## 参考资料

- [WordPress wptexturize() 函数](https://developer.wordpress.org/reference/functions/wptexturize/)
- [Unicode 字符表](https://unicode-table.com/)
- [Mermaid 语法文档](https://mermaid.js.org/intro/syntax-reference.html)
2026-01-24 20:56:43 +08:00
20f2483257 docs: 添加 Mermaid 修复总结文档 2026-01-24 20:52:20 +08:00
759804dee7 docs: 更新 Mermaid 使用指南和添加换行符测试页面 2026-01-24 20:51:17 +08:00
b4ba37a6c5 fix: 修复 Mermaid 容器语法换行符丢失问题
## 问题描述

用户提供的 AI 评论审核流程 Mermaid 图表渲染失败,错误信息显示:
- `flowchart TDStart` - `TD` 和 `Start` 之间缺少换行符
- 箭头符号被转换成全角 `–>` 而不是 `-->`

## 根本原因

WP-Markdown 插件将容器语法 `::: mermaid ... :::` 转换为 HTML 时:
1. 每一行代码都被包裹在 `<p>` 标签中
2. 行内的换行使用 `<br>` 标签表示
3. 使用 `textContent` 或 `innerText` 提取时,`<br>` 标签被忽略或转换为空格
4. 导致多行代码被合并成一行,Mermaid 语法解析失败

## 修复方案

### 1. 新增 `htmlToText()` 辅助函数

```javascript
htmlToText(html) {
	// 将 <br> 和 <br/> 转换为换行符
	let text = html.replace(/<br\s*\/?>/gi, '\n');
	// 移除其他 HTML 标签
	text = text.replace(/<[^>]+>/g, '');
	// 解码 HTML 实体
	text = text
		.replace(/&nbsp;/g, ' ')
		.replace(/&lt;/g, '<')
		.replace(/&gt;/g, '>')
		.replace(/&amp;/g, '&')
		.replace(/&quot;/g, '"')
		.replace(/&#039;/g, "'");
	return text;
}
```

### 2. 改进 `extractContainerContent()` 函数

- 使用 `innerHTML` 而不是 `textContent` 或 `innerText`
- 调用 `htmlToText()` 将 `<br>` 标签转换为换行符
- 保留所有换行符和空行
- 添加详细的调试日志

### 3. 处理流程

```
1. 检测到 ::: mermaid 开始标记
2. 提取 innerHTML(包含 <br> 标签)
3. 使用 htmlToText() 转换:
   - <br> → \n
   - 移除其他 HTML 标签
   - 解码 HTML 实体
4. 收集所有行内容
5. 使用 \n 连接所有行
6. 创建容器元素存储完整代码
```

## 测试验证

### 测试用例 1:简单流程图
```markdown
::: mermaid
flowchart TD
    A[开始] --> B[处理]
    B --> C[结束]
:::
```

### 测试用例 2:复杂流程图(AI 评论审核)
- 包含 100+ 个节点
- 包含多行文本(`<br/>` 标签)
- 包含箭头符号(`-->`, `-->`)
- 包含样式定义(`style` 语句)

### 预期结果
-  所有换行符正确保留
-  箭头符号不被转换
-  多行文本正确显示
-  样式定义正确应用

## 影响范围

- 仅影响 Markdown 容器语法(`::: mermaid ... :::`)
- 不影响其他格式(`<div class="mermaid">`, `<pre><code>` 等)
- 向后兼容,不影响现有功能

## 相关文件

- `argontheme.js` - 修改 `extractContainerContent()` 和新增 `htmlToText()`
- `tests/test-ai-comment-flow.md` - 测试文档
- `docs/mermaid-usage-guide.md` - 使用指南

## 技术细节

### HTML 结构示例

WP-Markdown 生成的 HTML:
```html
<p>::: mermaid<br>
flowchart TD<br>
    Start([用户提交评论]) --> PreProcess[预处理]<br>
:::</p>
```

### 提取过程

1. **原始 HTML**: `::: mermaid<br>flowchart TD<br>Start --> End<br>:::`
2. **htmlToText()**: `::: mermaid\nflowchart TD\nStart --> End\n:::`
3. **移除标记**: `flowchart TD\nStart --> End`
4. **最终代码**:
   ```
   flowchart TD
   Start --> End
   ```

## 注意事项

1. **性能影响**:使用 `innerHTML` 和正则替换,性能影响可忽略
2. **安全性**:只处理 Mermaid 代码块,不执行任何脚本
3. **兼容性**:支持所有现代浏览器
4. **调试**:添加详细日志,便于排查问题

## 后续优化

1. 考虑支持更多 Markdown 容器语法(如 `::: warning`, `::: tip` 等)
2. 优化正则表达式性能
3. 添加单元测试
2026-01-24 20:49:32 +08:00
b6d9f8c47e fix: 修复容器语法和 WP-Markdown 的两个关键问题
- 修复 WP-Markdown document.write 重复输出问题
- 改进容器语法检测,支持跨多个元素收集内容
- 解决空行导致内容被分割成多个元素的问题
2026-01-24 20:41:08 +08:00
0ac57949ae fix: 修复代码高亮和容器语法的两个关键问题
- 代码高亮排除 mermaid 代码块,避免干扰渲染
- 容器语法正确处理空行,不再截断内容
- 添加测试页面验证修复效果
2026-01-24 20:14:48 +08:00
4c0569afaf 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
2026-01-23 23:49:24 +08:00
f36a96d3b6 feat: 实现 Mermaid 插件兼容层
- 添加插件检测函数(WP Githuber MD、Markdown Block、Code Syntax Block)
- 实现 Mermaid 库加载状态检测
- 添加重复加载防护逻辑,避免与插件冲突
- 在设置页显示插件兼容性状态
- 修改库加载逻辑,当检测到插件时跳过加载
- 在 JavaScript 端添加库加载状态标记
- Requirements: 9.1, 9.2, 9.3, 9.4, 9.5
2026-01-23 23:36:12 +08:00
4a59640998 feat: add Mermaid chart styles 2026-01-23 23:27:06 +08:00
1d5899ce7e feat: 实现 Mermaid 库加载失败的降级处理机制
- 添加多 CDN 备选方案(jsdelivr、unpkg、本地镜像)
- 实现递归加载逻辑,主 CDN 失败时自动尝试备用 CDN
- 添加 onerror 事件处理,捕获库加载失败
- 所有 CDN 失败时显示友好的错误提示
- 在错误提示中保留原始代码供用户查看
- 添加详细的控制台日志输出
- 创建 PHP 和 HTML 测试文件验证功能
- 暴露 MermaidRenderer 到全局作用域供降级处理使用

Requirements: 1.4, 2.3, 7.1, 7.2, 7.3, 7.4, 7.5
2026-01-23 23:12:05 +08:00
43b695bd66 feat: 实现 Mermaid JavaScript 渲染引擎
- 在 argontheme.js 中添加完整的 Mermaid 渲染引擎模块
- 实现 Mermaid 配置初始化函数(支持主题自动切换)
- 实现主题获取函数(根据页面 darkmode 类返回对应主题)
- 实现代码块检测器(支持 div.mermaid、pre code.language-mermaid、pre[data-lang]、code.mermaid 四种格式)
- 实现批量渲染函数(一次 DOM 遍历,批量渲染所有图表)
- 实现错误处理机制(显示友好错误提示,保留原始代码)
- 实现样式增强(淡入动画、响应式 SVG)
- 实现主题切换监听器(监听 argon:theme-switched 事件和 darkmode class 变化)
- 实现图表重新渲染功能(主题切换时自动重新渲染)
- 实现渲染缓存机制(避免重复渲染)
- 添加调试日志系统(支持 debugMode 配置)
- 在 DOMContentLoaded 事件中自动初始化
- 暴露 ArgonMermaidRenderer 到全局(用于 PJAX 等场景)
- Requirements: 2.1, 2.5, 10.1, 10.2, 10.3
2026-01-23 23:02:25 +08:00
f9485b50a8 feat: 实现 Mermaid 库加载器
- 添加 argon_has_mermaid_content() 函数检测页面是否包含 Mermaid 代码块
- 支持多种格式:div.mermaid、code.language-mermaid、pre[data-lang=mermaid]、code.mermaid
- 添加 argon_get_mermaid_library_url() 函数根据配置返回 CDN 或本地路径
- 支持 jsdelivr、unpkg、自定义 CDN 和本地镜像
- 添加 argon_get_mermaid_fallback_urls() 函数提供备用 CDN 列表
- 添加 argon_enqueue_mermaid_scripts() 函数按需加载 Mermaid 库
- 检测文章内容和评论内容中的 Mermaid 代码块
- 实现异步加载(async 属性)
- 通过 wp_localize_script 传递配置到前端
- 添加单元测试文件 test-mermaid-loader.php
- Requirements: 1.1, 1.2, 1.3, 1.5, 8.2
2026-01-23 22:54:44 +08:00
8ed0ec1717 feat: 在设置页添加 Mermaid 配置选项
- 新增第 15 个一级分类:Mermaid 图表
- 包含 3 个子分类:基本设置、外观设置、高级选项
- 添加 6 个配置项:
  * 启用 Mermaid 支持开关
  * CDN 来源选择(jsDelivr/unpkg/自定义/本地)
  * 自定义 CDN 地址输入框
  * 图表主题选择(auto/default/dark/forest/neutral)
  * 使用本地镜像开关
  * 调试模式开关
- 在 argon_update_themeoptions() 函数中添加选项保存逻辑
- 更新后续分类编号(高级设置 1516,评论设置 1617,验证码设置 1718,反馈与安全 1819)
- Requirements: 5.1, 5.2, 5.3, 5.4
2026-01-23 22:49:00 +08:00
c7ef81842a feat: 添加 Mermaid 配置管理系统
- 在 functions.php 中添加 9 个核心配置管理函数
- argon_get_mermaid_option: 获取配置选项(支持简短名称和完整名称)
- argon_update_mermaid_option: 保存配置选项
- argon_validate_mermaid_cdn_url: 验证 CDN URL 格式(必须是有效 URL 且以 .js 结尾)
- argon_get_mermaid_theme: 获取当前主题对应的 Mermaid 主题
- argon_get_mermaid_default_config: 获取默认配置
- argon_validate_mermaid_settings: 验证配置选项(CDN 来源、主题名称、布尔值)
- argon_init_mermaid_config: 初始化默认配置(不覆盖已有配置)
- argon_get_all_mermaid_options: 获取所有配置选项
- argon_update_mermaid_settings: 批量更新配置(包含验证)
- 创建单元测试文件验证配置管理功能
- 满足 Requirements 5.1, 5.2, 5.3, 5.4, 5.5
2026-01-23 22:41:59 +08:00
54cbb400b9 feat: 移除 Mermaid 支持并创建需求文档
- 从 settings.php 移除 Mermaid 设置项和选项保存逻辑
- 从 functions.php 移除 Mermaid 代码块预处理函数
- 从 footer.php 移除 Mermaid 加载和渲染代码
- 从 style.css 移除 Mermaid 图表样式
- 删除本地镜像文件 assets/vendor/external/mermaid/
- 创建 mermaid-support-requirements.md 需求文档

原因:WP-Markdown 编辑器保存的 Markdown 源文件中 Mermaid 代码是一整行,
没有真正的换行符,导致 Mermaid 解析器持续报错。所有尝试的解决方案均失败。
需求文档中详细说明了问题原因和推荐的替代方案。
2026-01-23 22:11:09 +08:00
5704531a4d fix: correct condition check in argon_format_mermaid_code 2026-01-23 22:00:21 +08:00
ccd3cfa877 feat: add PHP preprocessing for Mermaid code blocks
- Add argon_format_mermaid_code filter in functions.php
- Decode WP-Markdown escape characters in PHP
- Auto-add newlines for single-line mermaid code
- Simplify JavaScript rendering logic
- Use data-mermaid-code attribute for preprocessed code
- Remove debug console.log statements
2026-01-23 21:56:30 +08:00
b6dc205f90 fix: simplify newline insertion - split and rejoin 2026-01-23 21:51:32 +08:00
0f698213b7 fix: improve newline insertion logic for mermaid 2026-01-23 21:48:48 +08:00
27a3afbf94 fix: auto add newlines for single-line mermaid code 2026-01-23 21:47:30 +08:00
715d6b81a9 debug: verify code before mermaid render 2026-01-23 21:43:44 +08:00
facbf1eae7 fix: use mermaid.render instead of init for WP-Markdown format 2026-01-23 21:37:11 +08:00
2383c9f09d debug: add char code inspection 2026-01-23 21:32:53 +08:00
d11336dd35 debug: add detailed logging for WP-Markdown format 2026-01-23 21:29:46 +08:00
a5a8225ff2 fix: 修复页面底部显示 JavaScript 代码的问题
- 将注释中的 <script> 标签改为字符串拼接形式,避免浏览器提前关闭 script 标签
- 这是导致页面底部出现一坨 JavaScript 代码文本的根本原因
2026-01-23 21:24:24 +08:00