Skip to content

Commit 118a6de

Browse files
committed
mermaid fix
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 80fd07d commit 118a6de

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<!--TODO remove it with new docy release (next after 0.11.0)-->
2+
{{ $version := .Site.Params.mermaid.version | default "latest" -}}
3+
4+
{{ $cdnurl := printf "https://cdn.jsdelivr.net/npm/mermaid@%s/dist/mermaid.esm.min.mjs" $version -}}
5+
{{ with try (resources.GetRemote $cdnurl) -}}
6+
{{ with .Err -}}
7+
{{ errorf "Could not retrieve mermaid script from CDN. Reason: %s." . -}}
8+
{{ end -}}
9+
{{ else -}}
10+
{{ errorf "Invalid Mermaid version %s, could not retrieve this version from CDN." $version -}}
11+
{{ end -}}
12+
13+
<script type="module" async>
14+
import mermaid from "{{ $cdnurl }}";
15+
16+
(function ($) {
17+
if ($('.mermaid').length == 0) {
18+
mermaid.initialize({ startOnLoad: false });
19+
return;
20+
}
21+
22+
var params = {{ with .Site.Params.mermaid }}{{ . | jsonify | safeJS }}{{ else }}{}{{- end }};
23+
24+
// Site params are stored with lowercase keys; lookup correct casing
25+
// from Mermaid default config.
26+
var norm = function (defaultConfig, params) {
27+
var result = {};
28+
for (const key in defaultConfig) {
29+
const keyLower = key.toLowerCase();
30+
if (defaultConfig.hasOwnProperty(key) && params.hasOwnProperty(keyLower)) {
31+
if (typeof defaultConfig[key] === "object") {
32+
result[key] = norm(defaultConfig[key], params[keyLower]);
33+
} else {
34+
result[key] = params[keyLower];
35+
}
36+
}
37+
}
38+
return result;
39+
};
40+
41+
var settings = norm(mermaid.mermaidAPI.defaultConfig, params);
42+
settings.startOnLoad = true;
43+
if ($('html[data-bs-theme="dark"]').length) {
44+
settings.theme = 'dark';
45+
}
46+
mermaid.initialize(settings);
47+
48+
// Handle light/dark mode theme changes
49+
const lightDarkModeThemeChangeHandler = function (mutationsList, observer) {
50+
for (const mutation of mutationsList) {
51+
if (mutation.type === 'attributes' && mutation.attributeName === 'data-bs-theme') {
52+
// Mermaid doesn't currently support reinitialization, see
53+
// https://github.com/mermaid-js/mermaid/issues/1945. Until then,
54+
// just reload the page.
55+
location.reload();
56+
}
57+
}
58+
};
59+
60+
const observer = new MutationObserver(lightDarkModeThemeChangeHandler);
61+
observer.observe(document.documentElement, {
62+
attributes: true,
63+
attributeFilter: ['data-bs-theme']
64+
});
65+
// observer.disconnect();
66+
67+
})(jQuery);
68+
</script>

0 commit comments

Comments
 (0)