From 2310f6160404914c7245c3178bc8f0f0532b2caf Mon Sep 17 00:00:00 2001 From: Ole Mussmann Date: Thu, 20 Feb 2025 21:00:16 +0100 Subject: make mermaid themes configurable --- static/js/mermaid.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 static/js/mermaid.js (limited to 'static/js/mermaid.js') diff --git a/static/js/mermaid.js b/static/js/mermaid.js new file mode 100644 index 0000000..c348dc6 --- /dev/null +++ b/static/js/mermaid.js @@ -0,0 +1,28 @@ +import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs'; + +const this_js_script = document.getElementById('mermaid_script'); +const light_theme = this_js_script.getAttribute('data-light-theme'); +const dark_theme = this_js_script.getAttribute('data-dark-theme'); + +function runmermaid() { + const theme = (document.body.classList.contains('dark') ? dark_theme : light_theme) + mermaid.initialize({ startOnLoad: false, theme: theme}); + const items = document.querySelectorAll('.mermaid'); + let counter = 0; + for (const item of items) { + const id = counter++; + if(item.originalCode === undefined) { + item.originalCode = item.textContent.trim(); + } + mermaid.render("mermaid"+id, item.originalCode).then((val) => { + item.innerHTML = val.svg + }, (err) => { + console.log(err); + // Workaround: move incorrectly placed error messages into their diagram + item.innerHTML = ""; + item.appendChild(document.getElementById("mermaid" + id)); + }); + } +} +document.addEventListener('DOMContentLoaded', runmermaid); +window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', runmermaid); -- cgit v1.2.3