|
17 | 17 | </div> |
18 | 18 | </main> |
19 | 19 | <script> |
| 20 | + document.addEventListener("DOMContentLoaded", () => { |
20 | 21 | function decodeHtmlEntities(str) { |
21 | 22 | const txt = document.createElement("textarea"); |
22 | 23 | txt.innerHTML = str; |
23 | 24 | return txt.value; |
24 | 25 | } |
25 | | - document.addEventListener("DOMContentLoaded", () => { |
26 | | - document.querySelectorAll("pre > code.language-mermaid").forEach(code => { |
27 | | - const rawHtml = code.innerHTML; |
28 | | - const decoded = decodeHtmlEntities(rawHtml); |
29 | | - console.log("=== Mermaid block decoded text ==="); |
30 | | - console.log(Array.from(decoded).map(c => c.charCodeAt(0))); |
31 | | - const div = document.createElement("div"); |
32 | | - div.className = "mermaid"; |
33 | | - // Replace <pre><code>…</code></pre> with <div class="mermaid">…</div> |
34 | | - code.parentElement.replaceWith(div); |
| 26 | + document.querySelectorAll("pre > code.language-mermaid").forEach((code, i) => { |
| 27 | + let decoded = decodeHtmlEntities(code.innerHTML); |
| 28 | + // Normalize whitespace |
| 29 | + decoded = decoded.replace(/\t/g, " "); |
| 30 | + decoded = decoded.replace(/^\s*\n/, "").replace(/\n\s*$/, ""); |
| 31 | + const div = document.createElement("div"); |
| 32 | + div.className = "mermaid"; |
| 33 | + div.textContent = decoded; |
| 34 | + code.parentElement.replaceWith(div); |
| 35 | + console.log(`=== Mermaid block ${i} ===`); |
| 36 | + console.log(decoded); |
| 37 | + }); |
| 38 | + // Mermaid v10+ runs asynchronously |
| 39 | + mermaid.run({ querySelector: ".mermaid" }) |
| 40 | + .catch(err => { |
| 41 | + console.error("Mermaid rendering failed:", err); |
35 | 42 | }); |
36 | | - // Now render them |
37 | | - mermaid.run({ querySelector: ".mermaid" }); |
38 | 43 | }); |
39 | 44 | </script> |
40 | 45 | <script>hljs.highlightAll();</script> |
|
0 commit comments