mirror of
https://github.com/tomfran/typo.git
synced 2025-04-25 21:19:55 +03:00
Merge pull request #86 from OleMussmann/configure-mermaid-theme
Configure mermaid theme
This commit is contained in:
commit
24dc86184b
5 changed files with 73 additions and 39 deletions
|
@ -34,38 +34,6 @@
|
|||
|
||||
</body>
|
||||
|
||||
<script>
|
||||
|
||||
function isAuto() {
|
||||
return document.body.classList.contains("auto");
|
||||
}
|
||||
|
||||
function setTheme() {
|
||||
if (!isAuto()) {
|
||||
return
|
||||
}
|
||||
|
||||
document.body.classList.remove("auto");
|
||||
let cls = "light";
|
||||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
cls = "dark";
|
||||
}
|
||||
|
||||
document.body.classList.add(cls);
|
||||
}
|
||||
|
||||
function invertBody() {
|
||||
document.body.classList.toggle("dark");
|
||||
document.body.classList.toggle("light");
|
||||
}
|
||||
|
||||
if (isAuto()) {
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addListener(invertBody);
|
||||
}
|
||||
|
||||
setTheme();
|
||||
|
||||
</script>
|
||||
|
||||
<script src="{{ "js/theme-switch.js" | relURL }}"></script>
|
||||
<script defer src="{{ "js/copy-code.js" | relURL }}"></script>
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -73,13 +73,17 @@
|
|||
</div>
|
||||
|
||||
{{ if .Store.Get "hasMermaid" }}
|
||||
<script type="module">
|
||||
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
|
||||
mermaid.initialize({ startOnLoad: true });
|
||||
{{ $mermaidDarkTheme := default "dark" (or .Params.mermaidDarkTheme .Site.Params.mermaidDarkTheme) }}
|
||||
{{ $mermaidTheme := default "default" (or .Params.mermaidTheme .Site.Params.mermaidTheme) }}
|
||||
<script defer
|
||||
type="module"
|
||||
id="mermaid_script"
|
||||
data-light-theme="{{ $mermaidTheme }}"
|
||||
data-dark-theme="{{ $mermaidDarkTheme }}"
|
||||
src='{{ "js/mermaid.js" | relURL }}'>
|
||||
</script>
|
||||
{{ end }}
|
||||
|
||||
|
||||
{{/* Next prev controls */}}
|
||||
|
||||
{{ if not (.Param "hidePagination") }}
|
||||
|
|
28
static/js/mermaid.js
Normal file
28
static/js/mermaid.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
|
||||
|
||||
const this_js_script = document.getElementById('mermaid_script');
|
||||
const light_theme = this_js_script.getAttribute('data-light-theme');
|
||||
const dark_theme = this_js_script.getAttribute('data-dark-theme');
|
||||
|
||||
function runmermaid() {
|
||||
const theme = (document.body.classList.contains('dark') ? dark_theme : light_theme)
|
||||
mermaid.initialize({ startOnLoad: false, theme: theme});
|
||||
const items = document.querySelectorAll('.mermaid');
|
||||
let counter = 0;
|
||||
for (const item of items) {
|
||||
const id = counter++;
|
||||
if(item.originalCode === undefined) {
|
||||
item.originalCode = item.textContent.trim();
|
||||
}
|
||||
mermaid.render("mermaid"+id, item.originalCode).then((val) => {
|
||||
item.innerHTML = val.svg
|
||||
}, (err) => {
|
||||
console.log(err);
|
||||
// Workaround: move incorrectly placed error messages into their diagram
|
||||
item.innerHTML = "";
|
||||
item.appendChild(document.getElementById("mermaid" + id));
|
||||
});
|
||||
}
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', runmermaid);
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', runmermaid);
|
28
static/js/theme-switch.js
Normal file
28
static/js/theme-switch.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
function isAuto() {
|
||||
return document.body.classList.contains("auto");
|
||||
}
|
||||
|
||||
function setTheme() {
|
||||
if (!isAuto()) {
|
||||
return
|
||||
}
|
||||
|
||||
document.body.classList.remove("auto");
|
||||
let cls = "light";
|
||||
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
cls = "dark";
|
||||
}
|
||||
|
||||
document.body.classList.add(cls);
|
||||
}
|
||||
|
||||
function invertBody() {
|
||||
document.body.classList.toggle("dark");
|
||||
document.body.classList.toggle("light");
|
||||
}
|
||||
|
||||
if (isAuto()) {
|
||||
window.matchMedia('(prefers-color-scheme: dark)').addListener(invertBody);
|
||||
}
|
||||
|
||||
setTheme();
|
|
@ -89,4 +89,10 @@ You can easily generate favicons using [this website](https://realfavicongenerat
|
|||
|
||||
## Mermaid Diagrams
|
||||
|
||||
Mermaid diagrams are supported by theme, just follow [this reference](https://gohugo.io/content-management/diagrams/#mermaid-diagrams) to use them.
|
||||
Mermaid diagrams are supported, just follow [this reference](https://gohugo.io/content-management/diagrams/#mermaid-diagrams) to use them. You can set Mermaid's light- and dark themes in your config; they switch with your blog's light/dark state. These are the defaults:
|
||||
|
||||
```toml
|
||||
[params]
|
||||
mermaidTheme = "default"
|
||||
mermaidDarkTheme = "dark"
|
||||
```
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue