javascript 如何在美人鱼节点描述中添加链接?

w46czmvw  于 2023-04-28  发布在  Java
关注(0)|答案(4)|浏览(146)

我想,下面的图表,

<link href="https://cdnjs.cloudflare.com/ajax/libs/mermaid/7.0.0/mermaid.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/7.0.0/mermaid.js"></script>
<div class="mermaid">
  graph TD; 
  A[hello] 
  B[an <b>important</b> link] 
  A-->B
</div>

link下添加指向http://google.com的实际链接。
我尝试修改相关节点以

B[an <b>important</b> <a href="http://google.com">link</a>]

但这打破了(崩溃了)图表。具体来说,我注意到不被接受的是href元素。

是否可以在美人鱼节点描述中添加链接?

  • 编辑:我在美人鱼上打开了一个bug report。js repository。截至2017年6月尚未确定。*
eni9jsuy

eni9jsuy1#

我知道很晚了,但是:我在寻找类似的东西,发现了这个。您的问题是href定义的"破坏了美人鱼语法。
我可以通过使用

B[an <b>important</b> <a href='http://google.com'>link</a>]

因此将href定义的双引号"替换为单引号'
请参见此处的示例。

一年后更新

在较新版本的mermaid中,不再直接支持开箱即用**(ಠ_ಠ)**
更多关于版本82.0更改日志
现在,您还需要允许不安全内容通过

mermaidAPI.initialize({
    securityLevel: 'loose'
});
blmhpbnm

blmhpbnm2#

当然,可以在Mermaid节点中添加链接,如下图所示:

mermaid.initialize({
  startOnLoad: true
});
<script src="https://cdn.rawgit.com/knsv/mermaid/6.0.0/dist/mermaid.min.js"></script>
<link href="https://cdn.rawgit.com/knsv/mermaid/6.0.0/dist/mermaid.css" rel="stylesheet" />

<div class='mermaid'>
  graph TD; 
  A(Start)-->B(Do some stuff); 
  B(Take some rest)-->C(do more);
  click B "http://www.github.com" "This is a link"
  
</div>

您还可以使用此脚本执行回调

<script>
    var callback = function(){
        alert('A callback was triggered');
    }
<script>

然后把它插入HTML节点A--〉B的下面

click A callback "Hi I'm a callback, whats up"
gzjq41n4

gzjq41n43#

一些图表具有交互支持:

  • 流程图
  • flowDB.js
  • 其他用途
  • classDiagram
  • classDB.js
  • 甘特
  • ganttDB.js

使用securityLevel='strict'时,此功能禁用
使用securityLevel='loose'启用

示例

<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/8.14.0/mermaid.min.js"></script>
<h2>FlowChart</h2>
<div class="mermaid">
  graph LR
  A -- text --> B --> Stackoverflow -- msg --> myLabel2
  click Stackoverflow "https://stackoverflow.com/" "some desc when mouse hover" _blank
  click myLabel2 "https://stackoverflow.com/" "some desc when mouse hover"
</div>

<h2>classDiagram</h2>
<div class="mermaid">
  %% https://github.com/mermaid-js/mermaid/blob/cbe3a9159db4d5e67d270fe701cd63de1510f6ee/docs/directives.md?plain=1#L10-L48
  %%{init: {'theme': 'forest'}}%%
  classDiagram
    class myCls {
      attr type
      method()
    }
    %% ↓ must set: securityLevel=loose %% default para: clsID
    click myCls call myFunc() "desc."

    class myCls2
    click myCls2 call myFunc('hello world') "desc."

    class myClsUseLink {
      +field1
    }

    link myClsUseLink "https://www.github.com" "This is a link"
</div>

<h2>Gantt</h2>
<div class="mermaid">
  gantt
  dateFormat HH:mm
  axisFormat %H:%M
  try to click me : gotoSO, 19:00, 5min
  %% click : debug, after gotoSO,  5min  --> error, click is "keyword"
  clickMe : debug, after gotoSO,  5min
  endNode : milestone, m, 20:00, 0min
  click gotoSO href "https://stackoverflow.com/"
  click debug call myFunc()
  %% NOTE: not working on github
</div>

<script>
  mermaid.initialize({
    securityLevel: 'loose', // strict, loose, antiscript, sandbox // // https://github.com/mermaid-js/mermaid/blob/b141f24068e9c5f6979706383a29db6380ffdf31/docs/usage.md?plain=1#L114-L117
  });

  function myFunc(arg) {
    console.log(arg)
  }
</script>
wixjitnu

wixjitnu4#

这里是如何破解它到ERD图,这是有点新,所以目前缺乏任何类型的点击支持。首先创建这个JavaScript对象,其中节点名称引用您想要的链接目的地:

var links = {
  Customer: "/customers/index",
  Employee: "/employees/index",
  Shipper: "/shippers/index",
  OrderDetail: "/order_details/index",
  Site: "/sites/index",
  User: "/users/index"
};

然后在Mermaid初始化器中,单击事件可以通过以下技巧连接到SVG中的相关图形对象:

mermaid.initialize({
  startOnLoad: true,
  securityLevel: "loose",
  er: { useMaxWidth: false },
  mermaid: {callback: function(objId) {
    var svg = document.getElementById(objId);
    var nodeName;
    for(nodeName in links) {
      var gErd = svg.getElementById(nodeName);
      gErd.addEventListener("click",
        function (evt) {
          location.href = links[this.id];
        }
      );
    }
  }}
});

如果单击节点内的任意位置,则它将进行导航。
我把所有这些放在一起,用于**The Brick gem**,这是一个与数据相关的Ruby on Rails插件。

相关问题