...
document.querySelectorAll('div.mermaid script[type="text/javascript"]').forEach(function(scriptElement) {
let mermaidDiv = scriptElement.parentElement;
// 检查是否已经处理过
if (mermaidDiv.classList.contains('mermaid-processed')) {
return;
}
mermaidDiv.classList.add('mermaid-processed');
// 从 script 标签中提取代码
let scriptContent = scriptElement.textContent;
let match = scriptContent.match(/document\.write\("(.*)"\)/s);
if (match && match[1]) {
// 解码转义字符
let code = match[1]
.replace(/\\n/g, '\n')
.replace(/\\"/g, '"')
.replace(/\\'/g, "'")
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/&/g, '&');
console.log('WP-Markdown Mermaid code found (length: ' + code.length + ')');
console.log('Contains newlines:', code.indexOf('\n') !== -1);
console.log('First 100 chars:', code.substring(0, 100));
// 清空 div 内容并设置新内容
mermaidDiv.innerHTML = '';
mermaidDiv.textContent = code;
// 立即渲染这个图表
try {
mermaid.init(undefined, mermaidDiv);
console.log('Mermaid diagram rendered successfully');
} catch (e) {
console.error('Mermaid rendering error:', e);
console.error('Code that failed:', code.substring(0, 200));
}
}
});
// 递归获取所有文本节点,保留换行符
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 代码块
document.querySelectorAll('pre code.language-mermaid, pre code.mermaid').forEach(function(element) {
// 检查是否已经处理过
if (element.classList.contains('mermaid-processed')) {
return;
}
element.classList.add('mermaid-processed');
let pre = element.parentElement;
// 优先从 data-mermaid-code 属性获取代码
let code = element.getAttribute('data-mermaid-code');
// 如果没有 data 属性,尝试从内容获取
if (!code) {
code = getTextWithLineBreaks(element);
}
// 去除首尾空白
code = code.trim();
// 验证是否为有效的 Mermaid 代码
let validKeywords = ['graph', 'flowchart', 'sequenceDiagram', 'classDiagram', 'stateDiagram', 'erDiagram', 'journey', 'gantt', 'pie', 'gitGraph', 'mindmap', 'timeline', 'quadrantChart'];
let isValid = false;
for (let keyword of validKeywords) {
if (code.toLowerCase().startsWith(keyword.toLowerCase())) {
isValid = true;
break;
}
}
// 如果不是有效的 Mermaid 代码,跳过
if (!isValid) {
console.log('Skipping invalid Mermaid code:', code.substring(0, 50));
return;
}
// 调试:输出代码内容和换行符
console.log('Standard Mermaid code found (length: ' + code.length + ')');
console.log('Contains newlines:', code.indexOf('\n') !== -1);
console.log('First 100 chars:', code.substring(0, 100));
// 创建 Mermaid 容器
let mermaidDiv = document.createElement('div');
mermaidDiv.className = 'mermaid';
mermaidDiv.textContent = code;
// 替换原来的 pre 元素
pre.parentNode.replaceChild(mermaidDiv, pre);
// 立即渲染
try {
mermaid.init(undefined, mermaidDiv);
console.log('Standard Mermaid diagram rendered successfully');
} catch (e) {
console.error('Mermaid rendering error:', e);
console.error('Code that failed:', code.substring(0, 200));
}
});
});