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