|
|
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title>JS Bin</title>
- <script type="text/javascript" src="../dist/vis.js"></script> <!-- network handling framework -->
- <link href="../dist/vis.css" rel="stylesheet" type="text/css"/>
- <style type="text/css">
- #network{
- width: 1900px;
- height: 800px;
- border: 1px solid lightgray;
- }
- </style>
- </head>
- <body>
- <h1>Network Test</h1>
- <div id="network"></div>
-
- <script type="text/javascript">
- var allNodes;
- var allEdges;
- var pathActive = false;
-
- var nodes = [{
- id: 1,
- label: 'test1'
- }, {
- id: 2,
- label: 'test2'
- }, {
- id: 3,
- label: 'test3'
- }, {
- id: 4,
- label: 'test4'
- }, {
- id: 5,
- label: 'test5'
- }];
- var edges = [{
- from: 1,
- to: 3
- }, {
- from: 1,
- to: 2
- }, {
- from: 3,
- to: 4
- }, {
- from: 2,
- to: 4
- }, {
- from: 4,
- to: 5
- }]
-
- var nodesDataset = new vis.DataSet(nodes);
- var edgesDataset = new vis.DataSet(edges);
-
- var container = document.getElementById('mynetwork');
-
- var data = {
- nodes: nodesDataset,
- edges: edgesDataset
- };
-
- var options = {
- autoResize: true,
- height: '100%',
- width: '100%',
- nodes: {
- shape: 'box'
- },
- edges: {
- smooth: {
- enabled: true,
- type: "dynamic"
- },
- },
- layout: {
- hierarchical: {
- levelSeparation: 220,
- nodeSpacing: 120,
- treeSpacing: 100,
- direction: 'LR',
- blockShifting: true,
- sortMethod: 'directed',
- edgeMinimization: false
- }
- },
- physics: {
- hierarchicalRepulsion: {
- centralGravity: 0.5,
- springLength: 300,
- springConstant: 0.1,
- nodeDistance: 150,
- damping: 0.09
- },
- }
- };
-
- var network = new vis.Network(container, data, options);
-
- allNodes = nodesDataset.get({
- returnType: "Object"
- });
- allEdges = edgesDataset.get({
- returnType: "Object"
- });
-
- showPath();
- showPath();
-
- function getNodeId(nodeLabels) {
- var resultArray = [];
- var unmatchedNodesLabel = [];
-
- for (var i = 0; i < nodeLabels.length; i++) {
- for (var nodeId in allNodes) {
- var matchflag = false;
-
- if (nodeLabels[i].toUpperCase() === allNodes[nodeId].label.toUpperCase()) {
- resultArray.push(allNodes[nodeId].id);
- matchflag = true;
- break;
- }
- }
-
- if (!matchflag) {
- console.log('An unmatched nodeLabel exists!' + nodeLabels[i]);
- }
- }
-
- return resultArray;
- }
-
- function getLinkedEdge(fromNodeId, toNodeId) {
- var result;
-
- if (fromNodeId) {
- var allLinkedEdges = network.getConnectedEdges(fromNodeId);
-
- for (var i = 0; i < allLinkedEdges.length; i++) {
- var linkedNodes = network.getConnectedNodes(allLinkedEdges[i]);
-
- for (var j = 0; j < linkedNodes.length; j++) {
- if (toNodeId === linkedNodes[j]) {
- result = allLinkedEdges[i];
- if (j == 0) {
- if (allEdges[allLinkedEdges[i]].arrows === undefined) {
- allEdges[allLinkedEdges[i]].arrows = 'from';
- } else {
- allEdges[allLinkedEdges[i]].arrows = 'to;from';
- }
- } else {
- if (allEdges[allLinkedEdges[i]].arrows === undefined) {
- allEdges[allLinkedEdges[i]].arrows = 'to';
- } else {
- allEdges[allLinkedEdges[i]].arrows = 'to;from';
- }
- }
- break;
- }
- }
- }
- }
-
- return result;
- }
-
- function updateNodesEdges() {
- // update nodes and edges
- var updateNodes = [];
- var updateEdges = [];
-
- for (var nodeId in allNodes) {
- if (allNodes.hasOwnProperty(nodeId)) {
- updateNodes.push(allNodes[nodeId]);
- }
- }
-
- for (var edgeId in allEdges) {
- if (allEdges.hasOwnProperty(edgeId)) {
- updateEdges.push(allEdges[edgeId]);
- }
- }
-
- nodesDataset.update(updateNodes);
- edgesDataset.update(updateEdges);
- }
-
- function showPath() {
- // Test values
- var pathData = 'test1,test3,test4,test5';
- var nodesOrder = pathData.split(',');
-
- var orderedNodeId = getNodeId(nodesOrder);
-
- if (orderedNodeId.length > 0) {
- pathActive = true;
-
- // mark all nodes as hard to read
- for (var nodeId in allNodes) {
- allNodes[nodeId].color = 'rgba(200,200,200,0.5)';
- }
-
- // mark all edges as hard to read
- for (var edgeId in allEdges) {
- allEdges[edgeId].color = 'rgba(200,200,200,0.5)';
- }
-
- // the selected nodes and edges get its own color and its label back.
- for (var i = 0; i < orderedNodeId.length; i++) {
- allNodes[orderedNodeId[i]].color = undefined;
-
- // linked edge
- if (i < orderedNodeId.length) {
- var linkedEdge = getLinkedEdge(orderedNodeId[i], orderedNodeId[i + 1]);
-
- if (linkedEdge) {
- allEdges[linkedEdge].color = undefined;
- }
- }
- }
-
- updateNodesEdges();
- }
-
- // reset all nodes
- for (var nodeId in allNodes) {
- allNodes[nodeId].color = undefined;
- }
-
- // reset all edges <--- it does NOT work! although edge's color undfined!
- for (var edgeId in allEdges) {
- allEdges[edgeId].color = null;
- allEdges[edgeId].arrows = null;
- }
-
- updateNodesEdges();
- }
-
- </script>
- </body>
- </html>
|