Skip to content

Commit b4df699

Browse files
authored
Merge pull request #47 from interledger/chj/update-mermaid-wrapper-component
feat: add download option to MermaidWrapper component
2 parents 9709857 + 32d2d19 commit b4df699

File tree

3 files changed

+37
-11
lines changed

3 files changed

+37
-11
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@interledger/docs-design-system",
3-
"version": "0.7.2",
3+
"version": "0.8.0",
44
"type": "module",
55
"description": "Shared styles and components used across all Interledger Starlight documentation sites",
66
"exports": {

src/components/MermaidWrapper.astro

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
11
---
2-
const { hasBorder = true } = Astro.props;
2+
const { hasBorder = true, diagramName="diagram" } = Astro.props;
33
---
44
<div>
55
{hasBorder ?
66
<div class="not-content border mermaid-wrapper"><slot /></div> :
77
<div class="not-content"><slot /></div>
88
}
9-
<button data-mermaid-button class="button">
9+
<button data-mermaid-view class="button">
1010
<span>View full diagram</span>
1111
</button>
12+
13+
<button data-mermaid-download={diagramName} class="button">
14+
<span>Download diagram</span>
15+
</button>
1216
</div>
1317

1418
<style>
1519
div {
1620
margin-top: var(--space-m);
1721
}
1822

19-
2023
.border :global(svg) {
2124
border-radius: var(--border-radius);
2225
box-shadow: var(--box-shadow);
@@ -29,9 +32,11 @@ button {
2932
border: 0;
3033
padding: 0;
3134
cursor: pointer;
35+
margin-inline-end: var(--space-s);
3236
}
3337

34-
.button[data-mermaid-button].button[data-mermaid-button] {
38+
.button[data-mermaid-view].button[data-mermaid-view],
39+
.button[data-mermaid-download].button[data-mermaid-download] {
3540
margin-top: 0;
3641
}
3742

@@ -47,27 +52,47 @@ button:hover span {
4752
color: var(--sl-color-white);
4853
}
4954

50-
span::after {
55+
[data-mermaid-view] span::after {
5156
content: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 18 18"><path stroke="hsl(221,8%,56%)" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M7 3H3a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-4M11 1h6m0 0v6m0-6L7 11"/></svg>');
5257
height: 0.75em;
5358
width: 0.75em;
5459
}
5560
</style>
5661

5762
<script>
58-
const clickHandler = event => {
63+
const viewClickHandler = event => {
5964
const svg = event.target.parentElement.previousElementSibling.querySelector('svg')
6065
const as_text = new XMLSerializer().serializeToString(svg)
6166
const blob = new Blob([as_text], { type: 'image/svg+xml' })
6267
const url = URL.createObjectURL(blob)
6368
const win = open(url)
6469
if (win) {
65-
win.onload = (evt) => URL.revokeObjectURL(url);
70+
win.onload = (event) => URL.revokeObjectURL(url);
6671
}
6772
}
6873

69-
const buttons = document.querySelectorAll('[data-mermaid-button]');
70-
buttons.forEach((button) => {
71-
button.addEventListener('click', clickHandler);
74+
const downloadClickHandler = (event) => {
75+
const svg = event.target.parentElement.previousElementSibling.previousElementSibling.querySelector('svg')
76+
const as_text = new XMLSerializer().serializeToString(svg)
77+
const blob = new Blob([as_text], { type: 'image/svg+xml' })
78+
const url = URL.createObjectURL(blob)
79+
const diagramName = event.target.parentElement.getAttribute('data-mermaid-download') || 'diagram'
80+
const downloadLink = document.createElement("a")
81+
downloadLink.href = url
82+
downloadLink.download = `${diagramName}.svg`
83+
document.body.appendChild(downloadLink)
84+
downloadLink.click()
85+
document.body.removeChild(downloadLink)
86+
URL.revokeObjectURL(url)
87+
}
88+
89+
const viewButtons = document.querySelectorAll('[data-mermaid-view]');
90+
viewButtons.forEach((viewButton) => {
91+
viewButton.addEventListener('click', viewClickHandler);
92+
});
93+
94+
const downloadButtons = document.querySelectorAll('[data-mermaid-download]');
95+
downloadButtons.forEach((downloadButton) => {
96+
downloadButton.addEventListener('click', downloadClickHandler);
7297
});
7398
</script>

src/styles/ilf-docs.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ img {
329329
.img-outline {
330330
border: 2px solid var(--color-accent-transparent);
331331
box-shadow: var(--box-shadow);
332+
border-radius: var(--border-radius);
332333
}
333334

334335
.mermaid > svg {

0 commit comments

Comments
 (0)