guqing / halo-theme-higan

halo主题名彼岸,生死为此岸,涅槃为彼岸;有苦无乐为此岸,无苦无乐为彼岸...它代表着对一切美好的精神追求,也代表着生生不息的轮回亦如本主题分黑白两色,阴极阳至,向死而生。
https://guqing.io
MIT License
117 stars 23 forks source link

关于 Mermaid 语法支持的提议 #70

Closed SevenWate closed 6 months ago

SevenWate commented 9 months ago

Mermaid 语法目前已经非常成熟,虽然可以通过代码注入实现,但也许主题支持 or 新插件也许会更好。

如下实现方法有些笨拙,仅供参考。

<script type="module">
  import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
  window.addEventListener('load', function() {
    if (typeof mermaid === 'undefined') {
      console.error('Mermaid library is not loaded!');
    } else {
      mermaid.initialize({startOnLoad:false,});
      const elements = document.querySelectorAll('.language-mermaid');
      if (elements.length) {
        elements.forEach(function(element) {
          // 创建一个新的div元素,用来插入渲染后的Mermaid图表
          var insert = document.createElement('div');
          insert.innerHTML = element.textContent;

          // 往上找两层,到达外层的<figure class="highlight">
          var outerFigure = element.parentElement.parentElement;
          if(outerFigure && outerFigure.tagName.toLowerCase() === 'figure') {
            // 用新的div替换外层的<figure>
            outerFigure.parentNode.replaceChild(insert, outerFigure);
            try {
              // 初始化Mermaid图表
              mermaid.init(undefined, insert);
            } catch (error) {
              console.error('Mermaid could not render the diagram', error);
            }
          }
        });
      }
    }
  });
</script>
HowieHz commented 6 months ago

现在有插件实现,编辑器也有自带注入的(vditor) 挺好用