Commit Graph

363 Commits

Author SHA1 Message Date
df15aafa35 refactor: 移除 settings.php 中重复的 AI 垃圾评论识别部分
- 删除评论设置分类中的旧 AI 垃圾评论识别子分类(第 4619-5204 行)
- 保留 AI 功能部分的评论审核设置(统一管理)
- 减少 586 行重复代码
- 文件行数:7746  7160
2026-01-26 13:47:43 +08:00
04f20d43f8 feat: 更新 AI 设置选项保存逻辑
- 移除旧的 argon_ai_summary_provider 保存逻辑
- 移除旧的多 API 配置保存逻辑(10 个提供商的循环)
- 添加新的 argon_ai_summary_active_api 保存
- 添加新的 argon_ai_spam_active_api 保存
- 更新 argon_ai_summary_exclude_ids 为 argon_ai_summary_exclude_posts
- 简化评论审核相关选项保存
- 移除不再使用的旧选项保存逻辑
2026-01-26 13:43:46 +08:00
3f188b76f4 feat: 完成 AI 设置页面 UI 重构
- 移除旧的按提供商分组的 API 配置界面(约 600 行)
- 添加新的统一 API 管理界面
- 实现完整的 JavaScript 交互功能:
  - 添加/编辑/删除 API
  - 测试 API 连通性
  - 刷新模型列表
  - 场景化 API 选择
- 重新组织 AI 功能结构:
  - API 管理 (h2)
  - 文章摘要 (h2)
  - 评论审核 (h2)
- 所有 API 在一个列表中统一管理
- 不同场景可以使用不同的 API
- 文件行数:7812  7514 (-298 行)
2026-01-26 13:42:44 +08:00
2e6179a5dd feat: 实现场景化 API 配置支持(第一阶段)
- 修改 argon_ai_query() 函数,优先使用场景化的 API 配置
- 支持根据场景(summary/spam)自动选择对应的活动 API
- 保持向后兼容,如果新系统没有配置则回退到旧系统
- 实现分阶段重构方案的第一阶段:后端使用新系统,前端保持旧 UI
2026-01-26 13:28:25 +08:00
2c25caae23 feat: 添加统一 API 系统测试脚本和文档
- 创建 test-unified-api-system.php 测试脚本
- 测试功能包括:函数存在性、数据迁移、API配置、向后兼容等
- 添加阶段性实施计划文档
- 添加新 AI 设置界面草稿
2026-01-26 13:25:49 +08:00
5254ee0d8b feat: 添加统一 API 管理系统
- 添加数据迁移函数 argon_migrate_ai_apis()
- 添加统一 API 管理函数(get_all_apis, add_api, update_api, delete_api等)
- 添加场景化 API 配置(summary 和 spam 可使用不同 API)
- 更新 argon_get_ai_provider_config() 支持新数据结构
- 添加新的 AJAX 处理函数支持统一 API 管理
- 保持向后兼容,自动迁移旧数据
2026-01-26 13:21:51 +08:00
cc88188d34 feat: 优化 AI 查询页面样式和结构
- 移除表格框线,使用 border: none 和 border-collapse: collapse
- 移除 ai-alert 提示框,简化界面
- 将 AI 请求记录和 AI 查询统计独立为 h2 标题
- 统一标题样式:28px 字体,带图标,更清晰的层级结构
2026-01-26 13:11:22 +08:00
454411b5c2 fix: 修复AI查询页面时间显示的类型错误
- 为 generated_time 和 detection_time 添加空值检查
- 避免将空字符串传递给 date() 函数导致 TypeError
- 空值时显示'未知'而不是报错
2026-01-26 13:04:41 +08:00
a9259eaea1 fix: 修复 AI 查询页面时间戳类型错误
- 修复 date() 函数接收字符串而非整数的问题
- 在所有 date() 调用中使用 intval() 转换时间戳
- 修复生成时间、检测时间、记录时间的显示问题
2026-01-26 13:03:43 +08:00
33d2b23408 feat: 在AI查询页面添加统计功能
- 添加AI查询统计卡片,显示总查询次数、成功率、平均响应时间等
- 按场景统计:文章摘要、垃圾评论检测、批量检测、关键词提取
- 按服务商统计:OpenAI、Anthropic、DeepSeek、小米Mimo等
- 使用AJAX动态加载统计数据
- 仅对管理员可见
- 统计数据来自wp_argon_ai_query_log表
2026-01-26 13:00:08 +08:00
31e55648cb feat: 批量检测集成统一接口并添加AI查询统计页面
- 修改 argon_batch_detect_spam_comments() 使用统一的 argon_ai_query() 接口
- 删除旧的 argon_call_ai_api_for_batch_spam_detection() 函数
- 添加 argon_register_ai_query_stats_page() 注册统计页面
- 添加 argon_render_ai_query_stats_page() 渲染统计页面
- 统计页面显示总查询次数、成功率、平均响应时间、失败次数
- 按场景和服务商分别统计查询数据
- 显示最近30天的查询趋势
- 在 settings.php 的 AI 摘要设置中添加查看统计链接

统计页面功能:
- 总览卡片:总查询次数、成功率、平均响应时间、失败次数
- 按场景统计:文章摘要、垃圾评论检测、批量检测等
- 按服务商统计:OpenAI、Claude、DeepSeek 等
- 查询趋势:最近30天每日查询数据
2026-01-26 12:58:41 +08:00
5bfe6a0e70 feat: 实现统一的 AI 查询组件
- 创建 wp_argon_ai_query_log 数据表记录所有 AI 查询
- 实现 argon_ai_query() 统一查询接口
- 实现 argon_log_ai_query() 记录函数
- 实现 argon_get_ai_query_stats() 统计函数
- 添加 argon_ajax_get_ai_query_stats() AJAX 处理函数
- 修改 argon_generate_ai_summary() 使用新的统一接口
- 修改 argon_detect_spam_comment_sync() 使用新的统一接口
- 添加测试脚本 test-ai-query-component.php

记录内容包括:
- 查询时间、服务商、模型、使用场景
- 提示词长度、内容长度、响应长度
- 响应时间(毫秒)
- 状态(成功/失败)、错误信息
- 关联的文章ID、评论ID、用户ID

支持的场景:
- summary - 文章摘要
- spam_detection - 垃圾评论检测
- keyword_extraction - 关键词提取
2026-01-26 12:51:18 +08:00
c37e8da986 feat: 完成统一 AI 查询组件的集成
- 更新 argon_detect_spam_comment_sync() 使用统一接口
- 更新 argon_extract_keywords_from_comment() 使用统一接口
- 删除旧的 argon_call_ai_api_for_spam_detection() 函数
- 删除旧的 argon_call_ai_for_keyword_extraction() 函数
- 所有 AI 查询现在都通过 argon_ai_query() 统一接口
- 所有查询都会记录到 wp_argon_ai_query_log 数据表
- 支持按场景统计(summary/spam_detection/keyword_extraction)
2026-01-26 12:49:49 +08:00
7c4d1b1de7 feat: 实现统一的 AI 查询组件
- 创建 argon_ai_query_log 数据表记录所有 AI 查询
- 实现 argon_ai_query() 统一查询接口
- 记录查询时间、服务商、模型、场景、响应时间等信息
- 支持按场景区分(summary/spam_detection/keyword_extraction)
- 添加 argon_log_ai_query() 记录函数
- 添加 argon_get_ai_query_stats() 统计函数
- 修改 argon_generate_ai_summary() 使用新接口
- 所有 AI 请求统一管理和记录
2026-01-26 12:00:51 +08:00
079ba0a261 feat: 优化多 API 管理和添加连通性测试
- 移除 AI 文章摘要的 h3 标题
- 多 API 管理显示所有提供商的 API 配置(不再只显示选中的)
- 为每个 API 配置添加测试按钮
- 实现 API 连通性测试功能(argon_test_api_connection)
- 测试功能显示响应时间和连接状态
- 优化界面布局,提升用户体验
2026-01-26 11:58:20 +08:00
2eb8ce00f8 feat: 为所有 AI API 调用函数添加详细错误处理
- 为 9 个 API 调用函数添加 post_id 参数(Anthropic, 通义千问, 文心一言, Kimi, 智谱, DeepSeek, 小米 Mimo, 豆包, 硅基流动)
- 使用 argon_log_ai_error() 统一记录错误
- 添加 HTTP 状态码检查
- 添加响应格式验证
- 添加空内容检查
- 记录详细的上下文信息(endpoint, model, error)
- 所有错误信息保存到文章 meta 供后续查看
2026-01-26 11:53:22 +08:00
da90fb9971 feat: 为 AI 摘要功能添加详细的错误报告
- 新增 argon_log_ai_error() 统一错误处理函数
- 记录错误到 WordPress error_log 和文章 meta
- 添加配置完整性检查(API 密钥、端点、模型)
- 添加文章内容长度检查(至少50字)
- 改进 OpenAI API 调用的错误处理
  - 网络错误详细记录
  - HTTP 状态码检查
  - 响应格式验证
  - 空内容检查
- 记录详细的调用信息(文章ID、标题、提供商、模型、内容长度)
- 保存错误信息到文章 meta(_argon_ai_summary_error)
- 保存错误时间到文章 meta(_argon_ai_summary_error_time)
- 成功时清除错误记录
- 所有错误信息包含上下文数据(endpoint、model等)
2026-01-26 11:49:38 +08:00
a025a6bdd8 feat: 完善多 API 管理功能
- 为每个 API 配置添加刷新模型列表按钮
- 支持从 API 端点动态获取可用模型列表
- 添加模型选择界面,支持单选和快速应用
- 优化配置获取函数的错误处理和向后兼容性
- 修复空配置导致的 Fatal Error 问题
- 每个提供商可独立配置多个 API(不同密钥、端点、模型)
- 支持负载均衡、备用切换等使用场景
2026-01-26 11:44:52 +08:00
950d1dcbde fix: 修复多 API 管理配置获取的错误处理
- 在 argon_get_ai_provider_config() 中添加数组和键存在性检查
- 在 argon_get_provider_apis() 中确保始终返回数组类型
- 添加 isset() 检查防止访问不存在的数组键
- 修复可能导致 Fatal Error 的空配置问题
- 改进向后兼容性逻辑的健壮性
2026-01-26 11:39:44 +08:00
f696d2e117 fix: 修复所有 AI API 函数的转义字符错误
- 修复 Kimi API 函数(第 6872 行)
- 修复智谱 AI API 函数(第 6914 行)
- 修复 DeepSeek API 函数(第 7076 行)
- 修复小米 Mimo API 函数(第 7119 行)
- 修复豆包 API 函数(第 7162 行)
- 修复硅基流动 API 函数(第 7205 行)
- 将所有错误的 \\' 转义字符改为正确的单引号 '
2026-01-26 11:28:07 +08:00
50f00c8f64 fix: 修复通义千问 API 函数的语法错误
- 修复第 6783-6784 行错误的转义字符
- 将 \' 改为正确的单引号 '
- 解决致命错误问题
2026-01-26 11:24:56 +08:00
f33b0e4344 fix: 修复多 API 管理功能的删除和保存逻辑
- 删除 API 前检查是否为当前激活的配置,防止误删
- 保存 API 配置时正确保留激活状态
- 添加新 API 时,如果是第一个自动设置为激活
- 优化用户体验,提供明确的错误提示
2026-01-26 11:21:50 +08:00
7dcc89151a feat: 实现单服务商多 API 配置功能
- 在 functions.php 中添加多 API 管理函数:
  * argon_get_provider_apis() - 获取提供商的所有 API 配置
  * argon_add_provider_api() - 添加 API 配置
  * argon_update_provider_api() - 更新 API 配置
  * argon_delete_provider_api() - 删除 API 配置
  * argon_set_active_api() - 设置当前使用的 API
- 修改 argon_get_ai_provider_config() 函数支持多 API
- 添加 AJAX 接口用于管理 API 配置
- 在 settings.php 中重构 AI 配置界面:
  * 显示已配置的 API 列表
  * 支持添加/编辑/删除 API 配置
  * 单选框选择当前使用的 API
  * 添加 JavaScript 交互逻辑
- 修改设置保存逻辑,保存多 API 配置数组
- 向后兼容:自动迁移旧的单 API 配置
- 每个提供商可配置多个 API,方便负载均衡和备用切换
2026-01-26 11:14:35 +08:00
2e2ddc59da feat: 实现多 API 管理系统
- 为每个 AI 提供商添加独立的配置(API 密钥、端点、模型)
- 新增 argon_get_ai_provider_config() 辅助函数获取提供商配置
- 更新设置页,为 10 个提供商分别显示配置表单
- 添加密码显示/隐藏切换按钮
- 每个提供商独立的模型刷新按钮
- 切换服务商时自动显示对应配置
- 更新所有 API 调用函数使用新配置结构
- 更新设置保存逻辑,保存所有提供商配置
- 支持同时配置多个 AI 服务,灵活切换使用
2026-01-26 11:10:07 +08:00
e9bae85802 feat: 添加小米 Mimo AI 模型支持
- 在设置页 AI 服务商列表中添加小米 Mimo 选项
- 实现 argon_call_xiaomi_api() 函数,使用 OpenAI 兼容格式
- 实现 argon_get_xiaomi_models() 模型列表获取函数
- 在 AI 摘要生成中添加 xiaomi 分支支持
- 在垃圾评论检测中添加小米 Mimo 端点配置
- 在关键词提取中添加小米 Mimo 端点配置
- 在批量垃圾评论检测中添加小米 Mimo 端点配置
- 默认模型:MiMo-V2-Flash
- API 端点:https://api.mimo.xiaomi.com/v1/chat/completions
2026-01-26 11:01:51 +08:00
4aaa3b7772 fix: 增强 Mermaid 代码提取的鲁棒性
- 使用 innerText 替代 textContent,更好地保留换行符
- 添加详细的调试日志,记录原始和最终提取的代码
- 添加代码完整性验证,检测过短的代码
- 修复代码被截断的问题
2026-01-25 13:39:29 +08:00
07cd43e2bd docs: 完成任务 2.3 - 添加语法错误处理和友好提示
- 验证错误捕获机制完整(同步和异步)
- 验证友好错误提示已实现
- 验证原始代码查看功能
- 验证错误类型识别和行号提取
- 验证完整的 CSS 样式(日间/夜间模式)
- 创建测试文档和总结文档
- 更新任务状态为已完成
- 满足需求 2.5, 7.1-7.4
2026-01-25 13:18:12 +08:00
577c5c2a3c feat: 优化 Mermaid 初始化配置,支持多种图表类型
- 添加 ER 图配置(需求 2.3)
- 添加状态图配置(需求 2.4)
- 添加类图、饼图、Git 图、用户旅程图配置
- 优化注释,明确标注需求对应关系
- 保持主题自动切换和安全级别配置(需求 2.1)
- 完成任务 2.2
2026-01-25 13:13:00 +08:00
2fa1948501 feat: 实现 Mermaid 库加载等待机制
- 添加 waitForMermaid() 函数,使用 Promise 实现异步等待
- 设置超时机制(默认 5000ms),防止无限等待
- 使用轮询检查库加载状态(每 100ms 检查一次)
- 记录加载时间和状态日志,便于调试
- 将 renderAllCharts() 改为 async 函数,渲染前等待库加载
- 将 init() 函数改为 async 函数,使用 waitForMermaid() 替代原来的 setInterval
- 添加完整的 JSDoc 注释,说明参数和返回值
- 遵循项目代码规范(Tab 缩进、单引号、严格相等)
- 完成任务 2.1
2026-01-25 13:09:42 +08:00
9e4888f28c feat: 添加 Mermaid 渲染状态标记
- 在渲染成功后添加 data-mermaid-rendered 属性
- 在 isRendered() 函数中检查该属性(已实现)
- 覆盖三种渲染路径:标准 API、旧版 API、init 降级方案
- 确保已渲染的代码块不会被重复渲染
- 遵循项目代码规范(Tab 缩进、单引号、JSDoc 注释)
- 完成任务 1.3
2026-01-25 13:02:16 +08:00
8f7165cede feat: 实现 Mermaid 代码块检测函数 - 实现 detectMermaidBlocks 和 isRendered 函数,识别两种格式的 Mermaid 代码块并过滤已渲染的块 2026-01-25 12:54:45 +08:00
96287d87cd docs: 添加文件清理总结文档 2026-01-25 12:40:47 +08:00
f5b1ac44d1 chore: 清理非必要的测试文件和文档 2026-01-25 12:39:32 +08:00
bfaeaa2ca2 docs: 完成 PJAX 和 Lazyload 代码审查和文档
- 创建代码审查总结文档(code-review-summary.md)
  - 评估代码质量,列出优点和需要改进的地方
  - 为所有关键函数提供 JSDoc 文档说明
  - 包含性能优化、安全性和兼容性检查
  - 提供测试建议和改进建议

- 创建 JSDoc 注释模板(jsdoc-templates.md)
  - 为 80+ 个关键函数提供完整的 JSDoc 模板
  - 包含参数类型、返回值和使用示例
  - 涵盖 Cookie、搜索、懒加载、PJAX、评论等所有模块
  - 可直接复制使用,提高开发效率

- 创建代码风格检查清单(code-style-checklist.md)
  - 14 项代码风格检查,总体评分 8.2/10
  - 详细的改进建议和优先级划分
  - 提供 ESLint 和 Prettier 配置建议
  - 包含代码提交前和审查时的检查清单

- 更新任务状态
  - 标记任务 18(文档和代码审查)为已完成

总体评价:
- 代码质量良好,功能完善,性能优化到位
- 主要优点:模块化清晰、错误处理完善、性能优化充分
- 需要改进:JSDoc 注释不完整、代码风格不统一、全局变量较多
2026-01-25 09:47:13 +08:00
9f31bbe372 feat: 实现 Mermaid 导出功能
- 添加导出按钮到工具栏,支持 PNG 和 SVG 格式导出
- 实现导出菜单,点击导出按钮显示格式选项
- PNG 导出:将 SVG 转换为 PNG 图片并下载
- SVG 导出:保存 SVG 代码为文件并下载
- 导出时保持图表当前的缩放级别和样式
- 添加导出错误处理,显示友好的错误提示
- 导出菜单支持点击外部关闭
- 添加导出菜单样式,支持夜间模式
- 移动端导出菜单适配,调整按钮大小和位置
- 错误提示自动消失(3秒后)

需求:15.1, 15.2, 15.3, 15.4, 15.5
2026-01-25 01:59:27 +08:00
1c15e46ad6 feat: 实现 Mermaid 全屏模式
- 在工具栏添加全屏按钮(⛶ 图标)
- 实现全屏模式进入和退出功能
- 全屏模式下保持缩放和拖拽功能可用
- 支持 ESC 键退出全屏
- 退出全屏时恢复图表原始状态(缩放级别和滚动位置)
- 全屏模式下禁用页面滚动
- 添加全屏按钮激活状态样式
- 在清理函数中添加全屏事件监听器清理
- 全屏模式下工具栏始终可见,背景更明显
- 全屏容器占满整个视口,居中显示图表

需求:14.1, 14.2, 14.3, 14.4, 14.5
2026-01-25 01:53:31 +08:00
1ec2ebc279 feat: 优化 Mermaid 响应式设计
- 移动端工具栏适配:按钮放大至 40px,便于触摸操作
- 双指缩放手势:支持双指捏合缩放,以触摸中心为缩放点
- 单指拖拽移动:支持单指拖拽平移图表
- 触摸事件优化:使用 requestAnimationFrame 提升响应速度
- 横屏模式优化:限制图表高度,工具栏更紧凑,隐藏提示文本
- 添加触摸距离和中心点计算辅助函数
- 完善触摸状态管理(touchstart/touchmove/touchend/touchcancel)

需求:16.1, 16.2, 16.3, 16.4, 16.5
2026-01-25 01:45:39 +08:00
6309a2236b feat: 优化 Mermaid 错误提示显示效果
- 增强错误容器视觉设计(渐变背景、阴影效果、悬停动画)
- 添加错误图标脉冲动画,提升视觉吸引力
- 优化错误信息显示(错误类型标签、消息框样式)
- 新增错误行号提取功能,支持多种行号格式
- 改进代码查看区域样式(summary 悬停效果、代码块阴影)
- 完善夜间模式适配(深色渐变背景、优化颜色对比度)
- 删除重复的 CSS 样式定义(第 17050 行)
- 统一使用 .mermaid-error-* 类名规范

需求:19.1, 19.2, 19.3, 19.4, 19.5
2026-01-25 01:38:36 +08:00
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