Skip to content

Commit 706275b

Browse files
committed
Integrate with mermaid-js
1 parent 7a64a91 commit 706275b

File tree

3 files changed

+67
-2
lines changed

3 files changed

+67
-2
lines changed

_includes/mermaid.html

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<!--
2+
mermaid-js loader
3+
-->
4+
<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
5+
<script>
6+
7+
let initTheme = "default";
8+
9+
if ($("html[mode=dark]").length > 0
10+
|| ($("html[mode]").length == 0
11+
&& window.matchMedia("(prefers-color-scheme: dark)").matches ) ) {
12+
initTheme = "dark";
13+
}
14+
15+
let mermaidConf = {
16+
theme: initTheme /* <default|dark|forest|neutral> */
17+
};
18+
19+
/* Markdown converts to HTML */
20+
$("pre").has("code.language-mermaid").each(function() {
21+
let svgCode = $(this).children().html();
22+
$(this).addClass("unloaded");
23+
$(this).after(`<div class=\"mermaid\">${svgCode}</div>`);
24+
});
25+
26+
mermaid.initialize(mermaidConf);
27+
28+
</script>

_includes/mode-toggle.html

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333

3434
/* always follow the system prefers */
3535
this.sysDarkPrefers.addListener(function() {
36-
if (self.mode != null) {
37-
if (self.mode == ModeToggle.DARK_MODE) {
36+
if (self.hasMode) {
37+
if (self.isDarkMode) {
3838
if (!self.isSysDarkPrefer) {
3939
self.setDark();
4040
}
@@ -47,6 +47,8 @@
4747

4848
self.clearMode();
4949
}
50+
51+
self.updateMermaid();
5052
});
5153

5254
} /* constructor() */
@@ -79,6 +81,33 @@
7981

8082
get mode() { return sessionStorage.getItem(ModeToggle.MODE_KEY); }
8183

84+
/* get the current mode on screen */
85+
get modeStatus() {
86+
if (this.isDarkMode
87+
|| (!this.hasMode && this.isSysDarkPrefer) ) {
88+
return ModeToggle.DARK_MODE;
89+
} else {
90+
return ModeToggle.LIGHT_MODE;
91+
}
92+
}
93+
94+
updateMermaid() {
95+
if (mermaid !== undefined) {
96+
let expectedTheme = (this.modeStatus === ModeToggle.DARK_MODE? "dark" : "default");
97+
let config = { theme: expectedTheme };
98+
99+
/* re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
100+
$(".mermaid").each(function() {
101+
let svgCode = $(this).prev().children().html();
102+
$(this).removeAttr("data-processed");
103+
$(this).html(svgCode);
104+
});
105+
106+
mermaid.initialize(config);
107+
mermaid.init(undefined, ".mermaid");
108+
}
109+
}
110+
82111
flipMode() {
83112
if (this.hasMode) {
84113
if (this.isSysDarkPrefer) {
@@ -104,14 +133,18 @@
104133
}
105134
}
106135

136+
this.updateMermaid();
137+
107138
} /* flipMode() */
108139

109140
} /* ModeToggle */
110141

111142
let toggle = new ModeToggle();
112143

113144
$(".mode-toggle").click(function() {
145+
114146
toggle.flipMode();
147+
115148
});
116149

117150
</script>

_layouts/default.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@
4040

4141
</div> <!-- #main-wrapper -->
4242

43+
{% if page.mermaid %}
44+
{% include mermaid.html %}
45+
{% endif %}
46+
4347
<div id="mask"></div>
4448

4549
<a id="back-to-top" href="#" aria-label="back-to-top" class="btn btn-lg btn-box-shadow" role="button">

0 commit comments

Comments
 (0)