(() => { const mermaid = globalThis.mermaid; const vscode = acquireVsCodeApi(); mermaid.initialize({ startOnLoad: false, securityLevel: 'loose', theme: document.body.classList.contains('vscode-dark') ? 'dark' : 'default', flowchart: { htmlLabels: false } }); // 渲染失败保留原始 Mermaid 并显示原因,不把空白图当成成功。 async function render() { let sequence = 0; for (const code of document.querySelectorAll('pre > code.language-mermaid')) { try { const { svg } = await mermaid.render(`dever-flow-${sequence++}`, code.textContent); const container = document.createElement('div'); container.className = 'dever-flow'; container.innerHTML = svg; code.parentElement.replaceWith(container); } catch (error) { const message = document.createElement('p'); message.className = 'dever-flow-error'; message.textContent = `流程图渲染失败:${error.message}`; code.parentElement.before(message); } // Mermaid 的连续 Promise 会占满微任务队列;每张图后让页面处理加载、滚动和点击。 await new Promise(resolve => setTimeout(resolve, 0)); } document.getElementById(document.body.dataset.anchor)?.scrollIntoView(); document.body.dataset.rendered = 'true'; } document.addEventListener('click', event => { const link = event.target.closest('a'); if (!link) return; const href = link.getAttribute('href') || link.getAttribute('xlink:href'); if (!href) return; event.preventDefault(); if (href.startsWith('#')) document.getElementById(decodeURIComponent(href.slice(1)))?.scrollIntoView(); else vscode.postMessage({ type: 'open', href }); }); render(); })();