mirror of
https://github.com/nunocoracao/blowfish.git
synced 2026-01-30 15:31:52 +00:00
Merge pull request #2533 from ZhenShuo2021/feat/mermaid-dark
✨ Feat(mermaid): support dark mode
This commit is contained in:
@@ -22,6 +22,34 @@ if (document.documentElement.getAttribute("data-auto-appearance") === "true") {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mermaid dark mode support
|
||||||
|
var updateMermaidTheme = () => {
|
||||||
|
if (typeof mermaid !== 'undefined') {
|
||||||
|
const isDark = document.documentElement.classList.contains("dark");
|
||||||
|
|
||||||
|
const mermaids = document.querySelectorAll('pre.mermaid');
|
||||||
|
mermaids.forEach(e => {
|
||||||
|
if (e.getAttribute('data-processed')) {
|
||||||
|
// Already rendered, clean the processed attributes
|
||||||
|
e.removeAttribute('data-processed');
|
||||||
|
// Replace the rendered HTML with the stored text
|
||||||
|
e.innerHTML = e.getAttribute('data-graph');
|
||||||
|
} else {
|
||||||
|
// First time, store the text
|
||||||
|
e.setAttribute('data-graph', e.textContent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (isDark) {
|
||||||
|
initMermaidDark();
|
||||||
|
mermaid.run();
|
||||||
|
} else {
|
||||||
|
initMermaidLight();
|
||||||
|
mermaid.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
window.addEventListener("DOMContentLoaded", (event) => {
|
window.addEventListener("DOMContentLoaded", (event) => {
|
||||||
const switcher = document.getElementById("appearance-switcher");
|
const switcher = document.getElementById("appearance-switcher");
|
||||||
const switcherMobile = document.getElementById("appearance-switcher-mobile");
|
const switcherMobile = document.getElementById("appearance-switcher-mobile");
|
||||||
@@ -29,6 +57,9 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
|||||||
updateMeta();
|
updateMeta();
|
||||||
this.updateLogo?.(getTargetAppearance());
|
this.updateLogo?.(getTargetAppearance());
|
||||||
|
|
||||||
|
// Initialize mermaid theme on page load
|
||||||
|
updateMermaidTheme();
|
||||||
|
|
||||||
if (switcher) {
|
if (switcher) {
|
||||||
switcher.addEventListener("click", () => {
|
switcher.addEventListener("click", () => {
|
||||||
document.documentElement.classList.toggle("dark");
|
document.documentElement.classList.toggle("dark");
|
||||||
@@ -38,6 +69,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
|||||||
targetAppearance
|
targetAppearance
|
||||||
);
|
);
|
||||||
updateMeta();
|
updateMeta();
|
||||||
|
updateMermaidTheme();
|
||||||
this.updateLogo?.(targetAppearance);
|
this.updateLogo?.(targetAppearance);
|
||||||
});
|
});
|
||||||
switcher.addEventListener("contextmenu", (event) => {
|
switcher.addEventListener("contextmenu", (event) => {
|
||||||
@@ -54,6 +86,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
|
|||||||
targetAppearance
|
targetAppearance
|
||||||
);
|
);
|
||||||
updateMeta();
|
updateMeta();
|
||||||
|
updateMermaidTheme();
|
||||||
this.updateLogo?.(targetAppearance);
|
this.updateLogo?.(targetAppearance);
|
||||||
});
|
});
|
||||||
switcherMobile.addEventListener("contextmenu", (event) => {
|
switcherMobile.addEventListener("contextmenu", (event) => {
|
||||||
|
|||||||
+28
-26
@@ -2,30 +2,32 @@ function css(name) {
|
|||||||
return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")";
|
return "rgb(" + getComputedStyle(document.documentElement).getPropertyValue(name) + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", () => {
|
function initMermaidLight() {
|
||||||
const mermaidDivs = document.querySelectorAll("div.mermaid");
|
mermaid.initialize({
|
||||||
|
theme: "base",
|
||||||
|
themeVariables: {
|
||||||
|
background: css("--color-neutral"),
|
||||||
|
primaryColor: css("--color-primary-200"),
|
||||||
|
secondaryColor: css("--color-secondary-200"),
|
||||||
|
tertiaryColor: css("--color-neutral-100"),
|
||||||
|
primaryBorderColor: css("--color-primary-400"),
|
||||||
|
secondaryBorderColor: css("--color-secondary-400"),
|
||||||
|
tertiaryBorderColor: css("--color-neutral-400"),
|
||||||
|
lineColor: css("--color-neutral-600"),
|
||||||
|
fontFamily:
|
||||||
|
"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
|
||||||
|
fontSize: "16px",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
for (const div of mermaidDivs) {
|
function initMermaidDark() {
|
||||||
const preElement = div.querySelector("pre");
|
mermaid.initialize({
|
||||||
if (preElement) {
|
theme: "dark",
|
||||||
div.textContent = preElement.textContent;
|
themeVariables: {
|
||||||
}
|
fontFamily:
|
||||||
}
|
"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
|
||||||
});
|
fontSize: "16px",
|
||||||
|
},
|
||||||
mermaid.initialize({
|
});
|
||||||
theme: "base",
|
}
|
||||||
themeVariables: {
|
|
||||||
background: css("--color-neutral"),
|
|
||||||
primaryColor: css("--color-primary-200"),
|
|
||||||
secondaryColor: css("--color-secondary-200"),
|
|
||||||
tertiaryColor: css("--color-neutral-100"),
|
|
||||||
primaryBorderColor: css("--color-primary-400"),
|
|
||||||
secondaryBorderColor: css("--color-secondary-400"),
|
|
||||||
tertiaryBorderColor: css("--color-neutral-400"),
|
|
||||||
lineColor: css("--color-neutral-600"),
|
|
||||||
fontFamily:
|
|
||||||
"ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif",
|
|
||||||
fontSize: "16px",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ The examples below are a small selection taken from the [official Mermaid docs](
|
|||||||
|
|
||||||
## Flowchart
|
## Flowchart
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
graph TD
|
graph TD
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
@@ -32,11 +31,9 @@ F
|
|||||||
G
|
G
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## Sequence diagram
|
## Sequence diagram
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
@@ -54,11 +51,9 @@ loop Every minute
|
|||||||
John-->Alice: Great!
|
John-->Alice: Great!
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## Class diagram
|
## Class diagram
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
classDiagram
|
classDiagram
|
||||||
Animal "1" <|-- Duck
|
Animal "1" <|-- Duck
|
||||||
@@ -82,11 +77,9 @@ class Zebra{
|
|||||||
+run()
|
+run()
|
||||||
}
|
}
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## Entity relationship diagram
|
## Entity relationship diagram
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
erDiagram
|
erDiagram
|
||||||
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
||||||
@@ -98,5 +91,3 @@ ORDER ||--|{ ORDER-ITEM : includes
|
|||||||
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
||||||
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ Mermaid 図は `mermaid` ショートコードを使うことで Blowfish でサ
|
|||||||
|
|
||||||
## フローチャート
|
## フローチャート
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
graph TD
|
graph TD
|
||||||
A[クリスマス] -->|収入| B(買い物にいく)
|
A[クリスマス] -->|収入| B(買い物にいく)
|
||||||
@@ -32,11 +31,9 @@ F
|
|||||||
G
|
G
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## 順序図
|
## 順序図
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
@@ -54,11 +51,9 @@ loop 毎分
|
|||||||
ジョン-->アリス: すばらしい!
|
ジョン-->アリス: すばらしい!
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## クラス図
|
## クラス図
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
classDiagram
|
classDiagram
|
||||||
Animal "1" <|-- Duck
|
Animal "1" <|-- Duck
|
||||||
@@ -82,11 +77,9 @@ class Zebra{
|
|||||||
+run()
|
+run()
|
||||||
}
|
}
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## 主従関係図
|
## 主従関係図
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
erDiagram
|
erDiagram
|
||||||
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
||||||
@@ -98,5 +91,3 @@ ORDER ||--|{ ORDER-ITEM : includes
|
|||||||
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
||||||
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ The examples below are a small selection taken from the [official Mermaid docs](
|
|||||||
|
|
||||||
## Flowchart
|
## Flowchart
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
graph TD
|
graph TD
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
@@ -32,11 +31,9 @@ F
|
|||||||
G
|
G
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## Sequence diagram
|
## Sequence diagram
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
@@ -54,11 +51,9 @@ loop Every minute
|
|||||||
John-->Alice: Great!
|
John-->Alice: Great!
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## Class diagram
|
## Class diagram
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
classDiagram
|
classDiagram
|
||||||
Animal "1" <|-- Duck
|
Animal "1" <|-- Duck
|
||||||
@@ -82,11 +77,9 @@ class Zebra{
|
|||||||
+run()
|
+run()
|
||||||
}
|
}
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## Entity relationship diagram
|
## Entity relationship diagram
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
erDiagram
|
erDiagram
|
||||||
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
||||||
@@ -98,5 +91,3 @@ ORDER ||--|{ ORDER-ITEM : includes
|
|||||||
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
||||||
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ Blowfish 使用 `mermaid` 简码可以调用。Blowfish 会根据配置的 `colo
|
|||||||
|
|
||||||
## 流程图
|
## 流程图
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
graph TD
|
graph TD
|
||||||
A[Christmas] -->|Get money| B(Go shopping)
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
@@ -32,11 +31,9 @@ F
|
|||||||
G
|
G
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## 时序图
|
## 时序图
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
autonumber
|
autonumber
|
||||||
@@ -54,11 +51,9 @@ loop Every minute
|
|||||||
John-->Alice: Great!
|
John-->Alice: Great!
|
||||||
end
|
end
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## 类图
|
## 类图
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
classDiagram
|
classDiagram
|
||||||
Animal "1" <|-- Duck
|
Animal "1" <|-- Duck
|
||||||
@@ -82,11 +77,9 @@ class Zebra{
|
|||||||
+run()
|
+run()
|
||||||
}
|
}
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
## 实体关系图
|
## 实体关系图
|
||||||
|
|
||||||
<div style="background-color:white; padding: 20px">
|
|
||||||
{{< mermaid >}}
|
{{< mermaid >}}
|
||||||
erDiagram
|
erDiagram
|
||||||
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : has
|
||||||
@@ -98,5 +91,3 @@ ORDER ||--|{ ORDER-ITEM : includes
|
|||||||
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
PRODUCT-CATEGORY ||--|{ PRODUCT : contains
|
||||||
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
||||||
{{< /mermaid >}}
|
{{< /mermaid >}}
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1 @@
|
|||||||
<div class="mermaid" align="center">
|
<pre class="not-prose mermaid">{{ .Inner | safeHTML }}</pre>
|
||||||
<pre>{{ .Inner | safeHTML }}</pre>
|
|
||||||
</div>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user