fix: 使用递归文本节点提取保留换行符 - 添加 getTextWithLineBreaks 函数递归提取文本节点 - 处理 BR 标签为换行符 - 添加换行符检测日志 - 添加错误捕获避免渲染失败
This commit is contained in:
56
footer.php
56
footer.php
@@ -187,6 +187,38 @@
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 递归获取所有文本节点,保留换行符
|
||||||
|
|
||||||
|
function getTextWithLineBreaks(element) {
|
||||||
|
|
||||||
|
let text = '';
|
||||||
|
|
||||||
|
for (let node of element.childNodes) {
|
||||||
|
|
||||||
|
if (node.nodeType === Node.TEXT_NODE) {
|
||||||
|
|
||||||
|
text += node.textContent;
|
||||||
|
|
||||||
|
} else if (node.nodeType === Node.ELEMENT_NODE) {
|
||||||
|
|
||||||
|
if (node.tagName === 'BR') {
|
||||||
|
|
||||||
|
text += '\n';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
text += getTextWithLineBreaks(node);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return text;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// 自动渲染所有 mermaid 代码块
|
// 自动渲染所有 mermaid 代码块
|
||||||
|
|
||||||
document.querySelectorAll('pre code.language-mermaid, pre code.mermaid').forEach(function(element) {
|
document.querySelectorAll('pre code.language-mermaid, pre code.mermaid').forEach(function(element) {
|
||||||
@@ -203,15 +235,15 @@
|
|||||||
|
|
||||||
let pre = element.parentElement;
|
let pre = element.parentElement;
|
||||||
|
|
||||||
// 获取代码内容
|
// 获取代码内容,保留换行符
|
||||||
|
|
||||||
let code = element.textContent || element.innerText;
|
let code = getTextWithLineBreaks(element);
|
||||||
|
|
||||||
// 去除首尾空白
|
// 去除首尾空白
|
||||||
|
|
||||||
code = code.trim();
|
code = code.trim();
|
||||||
|
|
||||||
// 验证是否为有效的 Mermaid 代码(必须以 graph/flowchart/sequenceDiagram 等关键字开头)
|
// 验证是否为有效的 Mermaid 代码
|
||||||
|
|
||||||
let validKeywords = ['graph', 'flowchart', 'sequenceDiagram', 'classDiagram', 'stateDiagram', 'erDiagram', 'journey', 'gantt', 'pie', 'gitGraph', 'mindmap', 'timeline', 'quadrantChart'];
|
let validKeywords = ['graph', 'flowchart', 'sequenceDiagram', 'classDiagram', 'stateDiagram', 'erDiagram', 'journey', 'gantt', 'pie', 'gitGraph', 'mindmap', 'timeline', 'quadrantChart'];
|
||||||
|
|
||||||
@@ -233,10 +265,18 @@
|
|||||||
|
|
||||||
if (!isValid) {
|
if (!isValid) {
|
||||||
|
|
||||||
|
console.log('Skipping invalid Mermaid code:', code.substring(0, 50));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 调试:输出代码内容和换行符
|
||||||
|
|
||||||
|
console.log('Mermaid code found (length: ' + code.length + '):', code);
|
||||||
|
|
||||||
|
console.log('Contains newlines:', code.indexOf('\n') !== -1);
|
||||||
|
|
||||||
// 创建 Mermaid 容器
|
// 创建 Mermaid 容器
|
||||||
|
|
||||||
let mermaidDiv = document.createElement('div');
|
let mermaidDiv = document.createElement('div');
|
||||||
@@ -259,14 +299,24 @@
|
|||||||
|
|
||||||
if (mermaidElements.length > 0) {
|
if (mermaidElements.length > 0) {
|
||||||
|
|
||||||
|
console.log('Rendering', mermaidElements.length, 'Mermaid diagrams');
|
||||||
|
|
||||||
mermaidElements.forEach(function(el) {
|
mermaidElements.forEach(function(el) {
|
||||||
|
|
||||||
el.classList.add('mermaid-rendered');
|
el.classList.add('mermaid-rendered');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
mermaid.init(undefined, mermaidElements);
|
mermaid.init(undefined, mermaidElements);
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
|
||||||
|
console.error('Mermaid rendering error:', e);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|||||||
Reference in New Issue
Block a user