From 0442390142fdfad9cfd97a1a827324c97d44e1e2 Mon Sep 17 00:00:00 2001 From: Jacob Lifshay Date: Wed, 11 Sep 2024 18:18:01 -0700 Subject: [PATCH] add mermaid.js support --- .forgejo/workflows/deploy.yml | 10 +++------- .gitignore | 2 ++ book.toml | 4 ++++ mermaid-init.js | 35 +++++++++++++++++++++++++++++++++++ scripts/install_deps.sh | 12 ++++++++++++ 5 files changed, 56 insertions(+), 7 deletions(-) create mode 100644 mermaid-init.js create mode 100755 scripts/install_deps.sh diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index fd3cdae..c306895 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -15,15 +15,11 @@ jobs: fetch-depth: 0 - name: Install latest mdbook run: | - apt-get update -qq - apt-get install -qq jq - tag="$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name')" - url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" - mkdir mdbook - curl -sSL "$url" | tar -xz --directory=./mdbook - echo "`pwd`"/mdbook >> $GITHUB_PATH + scripts/install_deps.sh + echo "`pwd`"/bin >> $GITHUB_PATH - name: Build Book run: | + mdbook-mermaid install . mdbook build - name: Push to rendered branch run: | diff --git a/.gitignore b/.gitignore index 7585238..ae97d85 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ book +/*.tar.gz +/mermaid.min.js \ No newline at end of file diff --git a/book.toml b/book.toml index edcb5f0..818ef70 100644 --- a/book.toml +++ b/book.toml @@ -11,6 +11,9 @@ edition = "2021" [preprocessor.links] +[preprocessor.mermaid] +command = "mdbook-mermaid" + [output.html] mathjax-support = true no-section-label = true @@ -19,6 +22,7 @@ git-repository-icon = "fa-git" # edit-url-template = "https://git.libre-chip.org/libre-chip/website/FIXME/{path}" input-404 = "404.md" additional-css = ["src/custom.css"] +additional-js = ["mermaid.min.js", "mermaid-init.js"] [output.html.print] enable = false \ No newline at end of file diff --git a/mermaid-init.js b/mermaid-init.js new file mode 100644 index 0000000..15a7f4e --- /dev/null +++ b/mermaid-init.js @@ -0,0 +1,35 @@ +(() => { + const darkThemes = ['ayu', 'navy', 'coal']; + const lightThemes = ['light', 'rust']; + + const classList = document.getElementsByTagName('html')[0].classList; + + let lastThemeWasLight = true; + for (const cssClass of classList) { + if (darkThemes.includes(cssClass)) { + lastThemeWasLight = false; + break; + } + } + + const theme = lastThemeWasLight ? 'default' : 'dark'; + mermaid.initialize({ startOnLoad: true, theme }); + + // Simplest way to make mermaid re-render the diagrams in the new theme is via refreshing the page + + for (const darkTheme of darkThemes) { + document.getElementById(darkTheme).addEventListener('click', () => { + if (lastThemeWasLight) { + window.location.reload(); + } + }); + } + + for (const lightTheme of lightThemes) { + document.getElementById(lightTheme).addEventListener('click', () => { + if (!lastThemeWasLight) { + window.location.reload(); + } + }); + } +})(); diff --git a/scripts/install_deps.sh b/scripts/install_deps.sh new file mode 100755 index 0000000..24d07ed --- /dev/null +++ b/scripts/install_deps.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e +curl -sSL -o mdbook.tar.gz https://github.com/rust-lang/mdBook/releases/download/v0.4.40/mdbook-v0.4.40-x86_64-unknown-linux-gnu.tar.gz +curl -sSL -o mdbook-mermaid.tar.gz https://github.com/badboy/mdbook-mermaid/releases/download/v0.14.0/mdbook-mermaid-v0.14.0-x86_64-unknown-linux-gnu.tar.gz +sha256sum -c < bin/.gitignore +tar -xz --directory=./bin -f mdbook.tar.gz +tar -xz --directory=./bin -f mdbook-mermaid.tar.gz