summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authorFrancesco Tomaselli <tomaselli.fr@gmail.com>2025-02-21 09:48:40 +0100
committerGitHub <noreply@github.com>2025-02-21 09:48:40 +0100
commit4ed992287f8a3e26fd8b198816e89253d97b4cdd (patch)
treef6ad65b43a2f2c39325b212b308ce1fa7188fc66 /static
parent497f3d51c30de5a449846fca9c989044f37a0df5 (diff)
parent2310f6160404914c7245c3178bc8f0f0532b2caf (diff)
Merge pull request #86 from OleMussmann/configure-mermaid-theme
Configure mermaid theme
Diffstat (limited to 'static')
-rw-r--r--static/js/mermaid.js28
-rw-r--r--static/js/theme-switch.js28
2 files changed, 56 insertions, 0 deletions
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);
diff --git a/static/js/theme-switch.js b/static/js/theme-switch.js
new file mode 100644
index 0000000..a617fda
--- /dev/null
+++ b/static/js/theme-switch.js
@@ -0,0 +1,28 @@
+function isAuto() {
+ return document.body.classList.contains("auto");
+}
+
+function setTheme() {
+ if (!isAuto()) {
+ return
+ }
+
+ document.body.classList.remove("auto");
+ let cls = "light";
+ if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
+ cls = "dark";
+ }
+
+ document.body.classList.add(cls);
+}
+
+function invertBody() {
+ document.body.classList.toggle("dark");
+ document.body.classList.toggle("light");
+}
+
+if (isAuto()) {
+ window.matchMedia('(prefers-color-scheme: dark)').addListener(invertBody);
+}
+
+setTheme();