... 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)); } }); });