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
This commit is contained in:
2026-01-25 00:41:35 +08:00
parent 1781e3bd79
commit 6a45d0ab06

View File

@@ -3035,10 +3035,15 @@ $.pjax.defaults.fragment = ['#primary', '#leftbar_part1_menu', '#leftbar_part2_i
/*
* PJAX 事件处理优化说明:
* 1. pjax:beforeReplace - 统一清理资源LazyLoad Observer、Zoomify、Tippy
* 2. pjax:complete - 单次初始化所有功能模块,添加错误处理
* 1. pjax:beforeReplace - 统一清理资源LazyLoad Observer、Zoomify、Tippy、Mermaid
* 2. pjax:complete - 单次初始化所有功能模块,添加错误处理,包含 Mermaid 渲染
* 3. pjax:end - 只处理特定任务移动端目录重置、GT4 验证码重置)
* 4. 移除了重复的初始化调用,避免资源泄漏和性能问题
*
* 需求映射:
* - pjax:beforeReplace: 需求 1.1-1.4 (资源清理)
* - pjax:complete: 需求 1.5, 1.6 (模块初始化和错误隔离)
* - pjax:end: 需求 1.7 (特定任务处理)
*/
$(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):not([download]):not(.reference-link):not(.reference-list-backlink)")
.on('pjax:click', function(e, f, g){
@@ -3059,7 +3064,9 @@ $(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):no
}).on('pjax:send', function() {
NProgress.set(0.618);
}).on('pjax:beforeReplace', function(e, dom) {
// 清理旧页面的资源
// ========== 需求 1.1-1.4: 清理旧页面的所有资源 ==========
// 调用统一的资源清理管理器
// 清理内容Lazyload Observer、Zoomify、Tippy、Mermaid 实例、动态标签
cleanupPjaxResources();
// 更新 UI 状态
@@ -3076,8 +3083,11 @@ $(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):no
}
}
}).on('pjax:complete', function() {
// ========== 需求 1.5, 1.6: 重新初始化所有功能模块 ==========
pjaxLoading = false;
NProgress.inc();
// MathJax 数学公式渲染
try{
if (MathJax != undefined){
if (MathJax.Hub != undefined){
@@ -3087,6 +3097,8 @@ $(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):no
}
}
}catch (err){}
// KaTeX 数学公式渲染
try{
if (renderMathInElement != undefined){
renderMathInElement(document.body,{
@@ -3112,6 +3124,16 @@ $(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):no
try { calcHumanTimesOnPage(); } catch (err) { ArgonDebug.error('calcHumanTimesOnPage failed:', err); }
try { foldLongComments(); } catch (err) { ArgonDebug.error('foldLongComments failed:', err); }
try { foldLongShuoshuo(); } catch (err) { ArgonDebug.error('foldLongShuoshuo failed:', err); }
// Mermaid 图表渲染(需求 3.6: 页面切换时重新渲染)
try {
if (typeof MermaidRenderer !== 'undefined' && MermaidRenderer.renderAllCharts) {
MermaidRenderer.renderAllCharts();
}
} catch (err) {
ArgonDebug.error('MermaidRenderer.renderAllCharts failed:', err);
}
$("html").trigger("resize");
// 恢复滚动位置
@@ -3120,6 +3142,7 @@ $(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):no
pjaxScrollTop = 0;
}
// 调用用户自定义的 PJAX 加载完成回调
if (typeof(window.pjaxLoaded) == "function"){
try{
window.pjaxLoaded();
@@ -3130,6 +3153,8 @@ $(document).pjax("a[href]:not([no-pjax]):not(.no-pjax):not([target='_blank']):no
NProgress.done();
}).on('pjax:end', function() {
// ========== 需求 1.7: 执行特定任务 ==========
// 重置移动端目录状态
if (typeof window.resetMobileCatalog === 'function') {
try {