mermaid.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. var mmd = (() => {
  2. var loaded = false
  3. var walk = (regex, string, result = [], match = regex.exec(string)) =>
  4. !match ? result : walk(regex, string, result.concat(match[1]))
  5. return {
  6. render: () => {
  7. if (loaded) {
  8. var definitions = walk(/<pre><code class="mermaid">([\s\S]+?)<\/code><\/pre>/gi, state.html)
  9. Array.from(document.querySelectorAll('pre code.mermaid')).forEach((diagram, index) => {
  10. diagram.removeAttribute('data-processed')
  11. diagram.innerHTML = definitions[index]
  12. })
  13. }
  14. var theme =
  15. state._themes[state.theme] === 'dark' ||
  16. (state._themes[state.theme] === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches)
  17. ? 'dark' : 'default'
  18. mermaid.initialize({theme})
  19. mermaid.init({theme}, 'code.mermaid')
  20. loaded = true
  21. var diagrams = Array.from(document.querySelectorAll('code.mermaid'))
  22. var timeout = setInterval(() => {
  23. var svg = Array.from(document.querySelectorAll('pre code.mermaid svg'))
  24. if (diagrams.length === svg.length) {
  25. clearInterval(timeout)
  26. svg.forEach((diagram) => {
  27. var panzoom = Panzoom(diagram, {canvas: true})
  28. diagram.parentElement.parentElement.addEventListener('wheel', (e) => {
  29. if (!e.shiftKey) return
  30. panzoom.zoomWithWheel(e)
  31. })
  32. })
  33. }
  34. }, 50)
  35. }
  36. }
  37. })()