| @ -1,89 +1,661 @@ | |||
| <!doctype html> | |||
| <!DOCTYPE HTML> | |||
| <html> | |||
| <head> | |||
| <title>Vis Popup Example</title> | |||
| <script src="../dist/vis.js"></script> | |||
| <link href="http://visjs.org/dist/vis.css" rel="stylesheet" type="text/css" /> | |||
| <style type="text/css"> | |||
| body { | |||
| font: 10pt sans; | |||
| .graph { | |||
| width: 600px; | |||
| height: 500px; | |||
| } </style> | |||
| </head> | |||
| <body> | |||
| Reset causes crash | |||
| <pre> | |||
| When you press the button, the nodes dataset will receive an update which shall reset the font and color properties, instead, vis crashes :( | |||
| (The browser console shows the details) | |||
| </pre> | |||
| <button onclick="javascript:action()">Click me!</button> | |||
| <div class="graph" id="visualization1"></div> | |||
| <script type="text/javascript"> | |||
| var action = function() { | |||
| nodes.update([ | |||
| { | |||
| "id": "35b99ac8-aa07-4834-b508-6e9435f573cb", | |||
| "label": "Adam", | |||
| "x": -96, | |||
| "y": -382, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "38d37e10-3c8b-487c-9757-1061d2bbbd07", | |||
| "label": "Betsy", | |||
| "x": -19, | |||
| "y": -548, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "4762501a-6bcb-4d35-acfd-f2e9d6310389", | |||
| "label": "Carol", | |||
| "x": -243, | |||
| "y": -378, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "7e17b617-b7a4-4f70-937b-f45ec8dc0a9d", | |||
| "label": "Catherine", | |||
| "x": -551, | |||
| "y": -214, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "e017a09b-4526-4b4d-b097-f70e56f20ab4", | |||
| "label": "Craig", | |||
| "x": 155, | |||
| "y": -381, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "8ec7f3ee-35f9-4c56-a57b-12d91c0c372e", | |||
| "label": "George", | |||
| "x": -302, | |||
| "y": -536, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "8d2a0469-bb6a-4e40-ab1f-3d5edc620415", | |||
| "label": "Jessica", | |||
| "x": -4, | |||
| "y": -379, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "afd75e95-e45a-4dea-848a-e16ca735bc57", | |||
| "label": "John", | |||
| "x": -531, | |||
| "y": -543, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "9c050064-d805-48b3-80a6-181d3599daff", | |||
| "label": "Mary", | |||
| "x": -280, | |||
| "y": -210, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "f24ab062-62a1-4555-a57f-dfcd597c3515", | |||
| "label": "Michael", | |||
| "x": -98, | |||
| "y": -211, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "59d10b18-1c9e-4dcb-ba4f-988ebd7a3efb", | |||
| "label": "Michelle", | |||
| "x": -630, | |||
| "y": -387, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "b11149a2-9050-4632-b095-d9d233319b91", | |||
| "label": "Robert", | |||
| "x": -360, | |||
| "y": -380, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| }, | |||
| { | |||
| "id": "a1485262-99fe-4b1e-a246-cc70fbb1859a", | |||
| "label": "Sharon", | |||
| "x": -532, | |||
| "y": -384, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "color": null, | |||
| "font": null | |||
| } | |||
| ]); | |||
| } | |||
| var nodes = new vis.DataSet([ | |||
| { | |||
| "id": "35b99ac8-aa07-4834-b508-6e9435f573cb", | |||
| "label": "Adam", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -96, | |||
| "y": -382, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "38d37e10-3c8b-487c-9757-1061d2bbbd07", | |||
| "label": "Betsy", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -19, | |||
| "y": -548, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "4762501a-6bcb-4d35-acfd-f2e9d6310389", | |||
| "label": "Carol", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -243, | |||
| "y": -378, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "7e17b617-b7a4-4f70-937b-f45ec8dc0a9d", | |||
| "label": "Catherine", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -551, | |||
| "y": -214, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "e017a09b-4526-4b4d-b097-f70e56f20ab4", | |||
| "label": "Craig", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": 155, | |||
| "y": -381, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "8ec7f3ee-35f9-4c56-a57b-12d91c0c372e", | |||
| "label": "George", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -302, | |||
| "y": -536, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "8d2a0469-bb6a-4e40-ab1f-3d5edc620415", | |||
| "label": "Jessica", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -4, | |||
| "y": -379, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "afd75e95-e45a-4dea-848a-e16ca735bc57", | |||
| "label": "John", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -531, | |||
| "y": -543, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "9c050064-d805-48b3-80a6-181d3599daff", | |||
| "label": "Mary", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -280, | |||
| "y": -210, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "f24ab062-62a1-4555-a57f-dfcd597c3515", | |||
| "label": "Michael", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -98, | |||
| "y": -211, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "59d10b18-1c9e-4dcb-ba4f-988ebd7a3efb", | |||
| "label": "Michelle", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -630, | |||
| "y": -387, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "b11149a2-9050-4632-b095-d9d233319b91", | |||
| "label": "Robert", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -360, | |||
| "y": -380, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| }, | |||
| { | |||
| "id": "a1485262-99fe-4b1e-a246-cc70fbb1859a", | |||
| "label": "Sharon", | |||
| "color": { | |||
| "background": "rgba(252,245,170,1)", | |||
| "border": "rgba(183,148,134,1)" | |||
| }, | |||
| "x": -532, | |||
| "y": -384, | |||
| "fixed": { | |||
| "x": true, | |||
| "y": true | |||
| }, | |||
| "font": { | |||
| "color": "#000000" | |||
| } | |||
| } | |||
| ]); | |||
| #mynetwork { | |||
| width: 600px; | |||
| height: 600px; | |||
| border: 1px solid lightgray; | |||
| var edges = new vis.DataSet([ | |||
| { | |||
| "id": "62b28c2f-c6dc-4b6b-b108-722eb47d5972", | |||
| "from": "35b99ac8-aa07-4834-b508-6e9435f573cb", | |||
| "to": "f24ab062-62a1-4555-a57f-dfcd597c3515", | |||
| "type": "family:father of", | |||
| "label": "father of", | |||
| "color": "#bc960d", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "4ae8de41-ef1a-400a-b51b-05662ce24597", | |||
| "from": "38d37e10-3c8b-487c-9757-1061d2bbbd07", | |||
| "to": "e017a09b-4526-4b4d-b097-f70e56f20ab4", | |||
| "type": "family:mother of", | |||
| "label": "mother of", | |||
| "color": "#eec75b", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "70f6e36a-ce9a-47b4-97e1-14b2df17d204", | |||
| "from": "38d37e10-3c8b-487c-9757-1061d2bbbd07", | |||
| "to": "8d2a0469-bb6a-4e40-ab1f-3d5edc620415", | |||
| "type": "family:mother of", | |||
| "label": "mother of", | |||
| "color": "#eec75b", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "c32a86ce-ab9a-49b6-a202-e93a37265fda", | |||
| "from": "38d37e10-3c8b-487c-9757-1061d2bbbd07", | |||
| "to": "b11149a2-9050-4632-b095-d9d233319b91", | |||
| "type": "family:mother of", | |||
| "label": "mother of", | |||
| "color": "#eec75b", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "bbce9cc0-0353-45cd-bfa6-a13834ff7218", | |||
| "from": "4762501a-6bcb-4d35-acfd-f2e9d6310389", | |||
| "to": "f24ab062-62a1-4555-a57f-dfcd597c3515", | |||
| "type": "family:mother of", | |||
| "label": "mother of", | |||
| "color": "#eec75b", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "deb7eb05-f667-496b-aeda-205c37b2484b", | |||
| "from": "8ec7f3ee-35f9-4c56-a57b-12d91c0c372e", | |||
| "to": "afd75e95-e45a-4dea-848a-e16ca735bc57", | |||
| "type": "family:brother of", | |||
| "label": "brother of", | |||
| "color": "green", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "3c8c7947-6c82-4f98-978a-26bbb372bfbb", | |||
| "from": "afd75e95-e45a-4dea-848a-e16ca735bc57", | |||
| "to": "a1485262-99fe-4b1e-a246-cc70fbb1859a", | |||
| "type": "family:father of", | |||
| "label": "father of", | |||
| "color": "#bc960d", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "cd4e71e7-9735-4a42-8632-e88cc01ab64f", | |||
| "from": "f24ab062-62a1-4555-a57f-dfcd597c3515", | |||
| "to": "9c050064-d805-48b3-80a6-181d3599daff", | |||
| "type": "family:brother of", | |||
| "label": "brother of", | |||
| "color": "green", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "b4499f60-04f9-4306-9c57-3d73b72f37c0", | |||
| "from": "59d10b18-1c9e-4dcb-ba4f-988ebd7a3efb", | |||
| "to": "7e17b617-b7a4-4f70-937b-f45ec8dc0a9d", | |||
| "type": "family:mother of", | |||
| "label": "mother of", | |||
| "color": "#eec75b", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "16562853-b597-44f6-9c55-2ce8a1fe4f83", | |||
| "from": "b11149a2-9050-4632-b095-d9d233319b91", | |||
| "to": "7e17b617-b7a4-4f70-937b-f45ec8dc0a9d", | |||
| "type": "family:father of", | |||
| "label": "father of", | |||
| "color": "#bc960d", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "599dd644-e61f-401e-8b17-dfdd340c125e", | |||
| "from": "b11149a2-9050-4632-b095-d9d233319b91", | |||
| "to": "9c050064-d805-48b3-80a6-181d3599daff", | |||
| "type": "family:father of", | |||
| "label": "father of", | |||
| "color": "#bc960d", | |||
| "labelAlignment": "line-above" | |||
| }, | |||
| { | |||
| "id": "961f7f2b-5abe-4036-a155-aa9b30ae1260", | |||
| "from": "b11149a2-9050-4632-b095-d9d233319b91", | |||
| "to": "a1485262-99fe-4b1e-a246-cc70fbb1859a", | |||
| "type": "family:married to", | |||
| "title": "Does not need to be a christian marriage though...", | |||
| "label": "married to", | |||
| "color": "#17bba3", | |||
| "labelAlignment": "line-above" | |||
| } | |||
| </style> | |||
| <script src="../dist/vis.js" type="text/javascript" ></script> | |||
| <link href="../dist/vis.css" rel="stylesheet" type="text/css"/> | |||
| <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> | |||
| <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> | |||
| <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js" type="text/javascript"></script> | |||
| <script type="text/javascript"> | |||
| var network = null; | |||
| var network2 = null; | |||
| function draw() { | |||
| // create an array with nodes | |||
| var nodes = [ | |||
| {id: 1, label: 'Node 1'}, | |||
| {id: 2, label: 'Node 2'}, | |||
| {id: 3, label: 'Node 3'}, | |||
| {id: 4, label: 'Node 4'}, | |||
| {id: 5, label: 'Node 5'} | |||
| ]; | |||
| // create an array with edges | |||
| var edges = [ | |||
| {from: 1, to: 2}, | |||
| {from: 2, to: 3}, | |||
| {from: 3, to: 4}, | |||
| {from: 4, to: 5} | |||
| ]; | |||
| // create a network | |||
| var container = document.getElementById('mynetwork'); | |||
| var data = { | |||
| nodes: nodes, | |||
| edges: edges | |||
| }; | |||
| var options = {layout:{randomSeed:8}}; | |||
| network = new vis.Network(container, data, options); | |||
| ]); | |||
| setTimeout(function() { | |||
| var clusterOptionsByData = { | |||
| joinCondition:function(childOptions) { | |||
| return childOptions.id == 2 || childOptions.id == 3 || childOptions.id == 4; | |||
| }, | |||
| clusterNodeProperties: {id:'cid1', label:'cid1'} | |||
| } | |||
| network.cluster(clusterOptionsByData); | |||
| },100); | |||
| setTimeout(function() { | |||
| var itemId = 'cid1'; | |||
| network.openCluster([itemId]); | |||
| },300); | |||
| setTimeout(function() { | |||
| var clusterOptionsByData = { | |||
| joinCondition:function(childOptions) { | |||
| return childOptions.id == 2 || childOptions.id == 3 || childOptions.id == 4; | |||
| var data = { | |||
| nodes: nodes, | |||
| edges: edges | |||
| }; | |||
| var options = { | |||
| "autoResize": true, | |||
| "height": "100%", | |||
| "width": "100%", | |||
| "interaction": { | |||
| "dragNodes":true, | |||
| "dragView": true, | |||
| "hideEdgesOnDrag": false, | |||
| "hideNodesOnDrag": false, | |||
| "hover": false, | |||
| "navigationButtons": true, | |||
| "selectable": true, | |||
| "selectConnectedEdges": true, | |||
| "tooltipDelay": 300, | |||
| "zoomView": true, | |||
| "keyboard": { | |||
| "enabled": false, | |||
| "speed": { | |||
| "x": 10, | |||
| "y": 10, | |||
| "zoom": 0.02 | |||
| }, | |||
| "bindToWindow": true | |||
| } | |||
| }, | |||
| "nodes": { | |||
| "shape": "box", | |||
| font: {color:"#ff0000"}, | |||
| "color": { | |||
| "border" : "#2B7CE9", | |||
| "background" : "#97C2FC", | |||
| "highlight": { | |||
| "border": "#2B7CE9", | |||
| "background": "#D2E5FF" | |||
| }, | |||
| "hover": { | |||
| "border": "white", | |||
| "background": "white" | |||
| } | |||
| } | |||
| }, | |||
| "physics": { | |||
| "barnesHut": { | |||
| "centralGravity": 0, | |||
| "springLength": 240 | |||
| } | |||
| }, | |||
| "groups": { | |||
| "neighbours": { | |||
| "color": "#E6E6E6" | |||
| }, | |||
| clusterNodeProperties: {id:'cid2', label:'cid2'} | |||
| "matches": { | |||
| "color": "#97C2FC" | |||
| } | |||
| }, | |||
| "locale": "en_EN" | |||
| } | |||
| ; | |||
| var container = document.getElementById("visualization1"); | |||
| var network = new vis.Network(container, data, options); | |||
| var hasNetworkStabilized = false; | |||
| network.on("stabilized", function(properties) { | |||
| if(!hasNetworkStabilized) { | |||
| hasNetworkStabilized = true; | |||
| network.storePositions(); | |||
| setNodesMoveable(data.nodes.get(), false); | |||
| network.fit(); | |||
| } | |||
| }); | |||
| network.on("dragStart", function(properties) { | |||
| if(properties.nodes.length) { | |||
| var node = data.nodes.get(properties.nodes[0]); | |||
| setNodesMoveable([ node ], true); | |||
| } | |||
| }); | |||
| network.on("dragEnd", function(properties) { | |||
| if(properties.nodes.length) { | |||
| var node = data.nodes.get(properties.nodes[0]); | |||
| setNodesMoveable([ node ], false); | |||
| } | |||
| }); | |||
| setNodesMoveable = function(nodes, isMoveable) { | |||
| // first store positions | |||
| network.storePositions(); | |||
| var updates = []; | |||
| var keys = Object.keys(nodes); | |||
| for(var i = 0; i < keys.length; i++) { | |||
| var id = nodes[keys[i]].id; | |||
| var update = { | |||
| id: id, | |||
| fixed: { // v4: formerly allowToMoveX, allowToMoveY | |||
| x: !isMoveable, | |||
| y: !isMoveable | |||
| } | |||
| network.cluster(clusterOptionsByData); | |||
| },1000); | |||
| }; | |||
| updates.push(update); | |||
| } | |||
| </script> | |||
| </head> | |||
| <body onload="draw();"> | |||
| <h2>Popup Example</h2> | |||
| data.nodes.update(updates); | |||
| console.log(updates); | |||
| }; | |||
| <div id='mynetwork'></div> | |||
| </script> | |||
| </body> | |||
| </html> | |||