Skip to content

Commit 8464a4a

Browse files
committed
Merge branch 'feature/refactor-theme-mode-switch'
2 parents 63db549 + 9d48cd2 commit 8464a4a

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

_includes/mermaid.html

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,34 @@
33
-->
44

55
<script src="https://cdn.jsdelivr.net/npm/mermaid@8/dist/mermaid.min.js"></script>
6+
67
<script>
78
$(function() {
9+
function updateMermaid(event) {
10+
if (event.source === window && event.data &&
11+
event.data.direction === ModeToggle.ID) {
12+
13+
const mode = event.data.message;
14+
15+
if (typeof mermaid === "undefined") {
16+
return;
17+
}
18+
19+
let expectedTheme = (mode === ModeToggle.DARK_MODE? "dark" : "default");
20+
let config = { theme: expectedTheme };
21+
22+
/* Re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
23+
$(".mermaid").each(function() {
24+
let svgCode = $(this).prev().children().html();
25+
$(this).removeAttr("data-processed");
26+
$(this).html(svgCode);
27+
});
28+
29+
mermaid.initialize(config);
30+
mermaid.init(undefined, ".mermaid");
31+
}
32+
}
33+
834
let initTheme = "default";
935

1036
if ($("html[mode=dark]").length > 0
@@ -25,5 +51,7 @@
2551
});
2652

2753
mermaid.initialize(mermaidConf);
54+
55+
window.addEventListener("message", updateMermaid);
2856
});
2957
</script>

_includes/mode-toggle.html

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
static get MODE_KEY() { return "mode"; }
88
static get DARK_MODE() { return "dark"; }
99
static get LIGHT_MODE() { return "light"; }
10+
static get ID() { return "mode-toggle"; }
1011

1112
constructor() {
1213
if (this.hasMode) {
@@ -40,7 +41,8 @@
4041
self.clearMode();
4142
}
4243

43-
self.updateMermaid();
44+
self.notify();
45+
4446
});
4547

4648
} /* constructor() */
@@ -82,21 +84,12 @@
8284
sessionStorage.removeItem(ModeToggle.MODE_KEY);
8385
}
8486

85-
updateMermaid() {
86-
if (typeof mermaid !== "undefined") {
87-
let expectedTheme = (this.modeStatus === ModeToggle.DARK_MODE? "dark" : "default");
88-
let config = { theme: expectedTheme };
89-
90-
/* re-render the SVG › <https://github.com/mermaid-js/mermaid/issues/311#issuecomment-332557344> */
91-
$(".mermaid").each(function() {
92-
let svgCode = $(this).prev().children().html();
93-
$(this).removeAttr("data-processed");
94-
$(this).html(svgCode);
95-
});
96-
97-
mermaid.initialize(config);
98-
mermaid.init(undefined, ".mermaid");
99-
}
87+
/* Notify another plugins that the theme mode has changed */
88+
notify() {
89+
window.postMessage({
90+
direction: ModeToggle.ID,
91+
message: this.modeStatus
92+
}, "*");
10093
}
10194

10295
} /* ModeToggle */
@@ -128,7 +121,7 @@
128121
}
129122
}
130123

131-
toggle.updateMermaid();
124+
toggle.notify();
132125

133126
} /* flipMode() */
134127

0 commit comments

Comments
 (0)