/** * Mermaid-js loader */ const MERMAID = 'mermaid'; const themeMap = Theme.newThemeMap('default', 'dark'); function refreshTheme(event) { if ( event.source === window && event.data && event.data.id === Theme.eventId ) { // Re-render the SVG › const mermaidList = document.getElementsByClassName(MERMAID); [...mermaidList].forEach((elem) => { const svgCode = elem.previousSibling.children.item(0).textContent; elem.textContent = svgCode; elem.removeAttribute('data-processed'); }); const newTheme = themeMap[Theme.resolvedTheme]; mermaid.initialize({ theme: newTheme }); mermaid.init(null, `.${MERMAID}`); } } function setNode(elem) { const svgCode = elem.textContent; const backup = elem.parentElement; backup.classList.add('d-none'); // Create mermaid node const mermaid = document.createElement('pre'); mermaid.classList.add(MERMAID); const text = document.createTextNode(svgCode); mermaid.appendChild(text); backup.after(mermaid); } export function loadMermaid() { if ( typeof mermaid === 'undefined' || typeof mermaid.initialize !== 'function' ) { return; } const initTheme = themeMap[Theme.resolvedTheme]; let mermaidConf = { theme: initTheme }; const basicList = document.getElementsByClassName('language-mermaid'); [...basicList].forEach(setNode); mermaid.initialize(mermaidConf); if (Theme.isToggleable) { window.addEventListener('message', refreshTheme); } }