Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vis.parseDOTNetwork() doesn't handle default label of \N to mean use the node's name. #2143

Open
donno opened this issue Mar 16, 2024 · 0 comments

Comments

@donno
Copy link

donno commented Mar 16, 2024

The vis.parseDOTNetwork() function does not take into account the default label of "\N" which means use the name/ID of the label instead. See GraphViz documentation for the label attribute for more.

This results in every node ending up with the label that is \N.

This is problematic because if the input DOT network is run through dot before being parsed it ends up with node [label="\N"];

System Details

Operating System
Microsoft Windows 10 Version 22H2 (OS Build 19045.4170)

Browsers

  • Mozilla Firefox 123.0.1 (64-Bit)
  • Micorosoft Edge (Version 122.0.2365.80 (Official build) (64-bit))

Minimal code example

Example on JSBin can be seen here: https://jsbin.com/robupadela/1/edit?html,js,output

The example uses the version from GitHub as per your CodePen examples.

It can be switched to https://cdnjs.cloudflare.com/ajax/libs/vis-network/9.1.9/standalone/umd/vis-network.min.js to be the old version.

HTML

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>Repo</title>
  <script type="text/javascript"
    src="https://visjs.github.io/vis-network/standalone/umd/vis-network.min.js"></script>
</head>
<body>
<p>
  Demonstration of the lack of support for a label with "\N" in DOT language parser.
  This syntax means that the name/ID of the node should be used as the label.
  See <a href="https://graphviz.org/docs/attrs/label/">label documentation</a>.
</p>
<div id="mynetwork"></div>
</body>
</html>

JavaScript

var container = document.getElementById("mynetwork");
var dot =
  "dinetwork {node[label=\"\\N\"]; 1 -> 1 -> 2; 2 -> 3; 2 -- 4; 2 -> 1 }";
var data = vis.parseDOTNetwork(dot);
var network = new vis.Network(container, data);

Work around

            var parsed = vis.parseDOTNetwork(dotString);
            parsed.nodes.forEach(element => {
              // As per https://graphviz.org/docs/attrs/label/ a value of
              // \N is meant to mean use the node's ID or name as the label.
              if (element.label === "\\N")
              {
                element.label = element.id;
              }
            });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant