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