<!DOCTYPE html>
|
|
<html>
|
|
<head lang="en">
|
|
<meta charset="UTF-8">
|
|
<title></title>
|
|
|
|
<script type="text/javascript" src="../dist/vis.js"></script>
|
|
<link href="../dist/vis.css" rel="stylesheet" type="text/css"/>
|
|
|
|
<style type="text/css">
|
|
#mynetwork {
|
|
width: 600px;
|
|
height: 400px;
|
|
border: 1px solid lightgray;
|
|
}
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
<body>
|
|
<div id="mynetwork"></div>
|
|
|
|
<script>
|
|
var network = null;
|
|
// create an array with nodes
|
|
var nodes = new vis.DataSet([
|
|
{id: 1, label: 'Node 1', cid:1},
|
|
{id: 2, label: 'Node 2', cid:1},
|
|
{id: 3, label: 'Node 3'},
|
|
{id: 4, label: 'Node 4'},
|
|
{id: 5, label: 'Node 5'}
|
|
]);
|
|
|
|
// create an array with edges
|
|
var edges = new vis.DataSet([
|
|
{id: 'e1', from: 1, to: 3, label: 'hi'},
|
|
{from: 1, to: 2},
|
|
{from: 2, to: 4},
|
|
{from: 2, to: 5}
|
|
]);
|
|
|
|
var data = {
|
|
nodes: nodes,
|
|
edges: edges
|
|
};
|
|
var container = document.getElementById('mynetwork');
|
|
|
|
function drawQuick(testOptions) {
|
|
draw({physics:{stabilization:false}});
|
|
}
|
|
|
|
function draw(options) {
|
|
try {
|
|
// clean
|
|
if (network !== null) {
|
|
network.destroy();
|
|
network = null;
|
|
}
|
|
network = new vis.Network(container, data, options);
|
|
}
|
|
catch (err) {
|
|
console.log("err")
|
|
}
|
|
}
|
|
|
|
function clusterByCid() {
|
|
drawQuick();
|
|
var clusterOptionsByData = {
|
|
joinCondition:function(childOptions) {
|
|
return childOptions.cid == 1;
|
|
},
|
|
clusterNodeProperties: {id:'cidCluster', borderWidth:3, shape:'database'}
|
|
}
|
|
network.cluster(clusterOptionsByData);
|
|
}
|
|
|
|
|
|
function clusterByConnection() {
|
|
drawQuick();
|
|
network.clusterByConnection(1)
|
|
}
|
|
function clusterByHubsize() {
|
|
drawQuick();
|
|
var clusterOptionsByData = {
|
|
processProperties: function(clusterOptions, childNodes) {
|
|
clusterOptions.label = "[" + childNodes.length + "]";
|
|
return clusterOptions;
|
|
},
|
|
clusterNodeProperties: {borderWidth:3, shape:'box', font:{size:30}}
|
|
}
|
|
network.clusterByHubsize(undefined, clusterOptionsByData);
|
|
}
|
|
|
|
function checkMethods() {
|
|
var methods = [
|
|
{name:"setSize", arguments: [200,300]},
|
|
{name:"canvasToDOM", arguments: [{x:10,y:20}]},
|
|
{name:"DOMtoCanvas", arguments: [{x:10,y:20}]},
|
|
{name:"findNode", arguments: [1]},
|
|
{name:"isCluster", arguments: [1]},
|
|
{name:"cluster", arguments: null, func: clusterByCid},
|
|
{name:"findNode", arguments: [1]},
|
|
{name:"isCluster", arguments: ['cidCluster']},
|
|
{name:"getNodesInCluster", arguments: ['cidCluster']},
|
|
{name:"openCluster", arguments: ['cidCluster']},
|
|
{name:"clusterByConnection",arguments: null, func: clusterByConnection},
|
|
{name:"clusterByHubsize", arguments: null, func: clusterByHubsize},
|
|
{name:"clusterOutliers", arguments: null, funcFirst: drawQuick},
|
|
{name:"getSeed", arguments: null, funcFirst: drawQuick},
|
|
{name:"enableEditMode", arguments: null},
|
|
{name:"disableEditMode", arguments: null},
|
|
{name:"addNodeMode", arguments: null},
|
|
{name:"disableEditMode", arguments: null},
|
|
{name:"editNode", arguments: null, funcFirst: function() {network.setOptions({manipulation:{editNode:function(data,callback) {callback(data);}}})}},
|
|
{name:"disableEditMode", arguments: null},
|
|
{name:"addEdgeMode", arguments: null},
|
|
{name:"disableEditMode", arguments: null},
|
|
{name:"editEdgeMode", arguments: null},
|
|
{name:"disableEditMode", arguments: null},
|
|
{name:"selectNodes", arguments: [[5], true]},
|
|
{name:"deleteSelected", arguments: null, funcFirst:drawQuick},
|
|
{name:"disableEditMode", arguments: null},
|
|
{name:"getPositions", arguments: [[1]]},
|
|
{name:"storePositions", arguments: null, funcFirst:drawQuick},
|
|
{name:"getBoundingBox", arguments: [1]},
|
|
{name:"getConnectedNodes", arguments: [1]},
|
|
{name:"getConnectedEdges", arguments: [1]},
|
|
{name:"startSimulation", arguments: null},
|
|
{name:"stopSimulation", arguments: null},
|
|
{name:"stabilize", arguments: null},
|
|
{name:"getSelection", arguments: null},
|
|
{name:"getSelectedNodes", arguments: null},
|
|
{name:"getSelectedEdges", arguments: null},
|
|
{name:"getNodeAt", arguments: [{x:10,y:20}]},
|
|
{name:"getEdgeAt", arguments: [{x:10,y:20}]},
|
|
{name:"selectNodes", arguments: [[1],false]},
|
|
{name:"selectEdges", arguments: [['e1']]},
|
|
{name:"unselectAll", arguments: null},
|
|
{name:"redraw", arguments: null},
|
|
{name:"getScale", arguments: null},
|
|
{name:"getViewPosition", arguments: null},
|
|
{name:"fit", arguments: null},
|
|
{name:"moveTo", arguments: [{position:{x:0,y:0}}]},
|
|
{name:"focus", arguments: [1]},
|
|
{name:"releaseNode", arguments: null},
|
|
{name:"getOptionsFromConfigurator", arguments: null},
|
|
]
|
|
|
|
drawQuick();
|
|
for (var i = 0; i < methods.length; i++) {
|
|
setTimeout(testMethod.bind(this,methods,i), i*50);
|
|
}
|
|
}
|
|
|
|
function testMethod(methods,i) {
|
|
var methodName = methods[i].name;
|
|
console.log("Currently testing:", methodName);
|
|
|
|
if (methods[i].funcFirst !== undefined) {
|
|
methods[i].funcFirst();
|
|
}
|
|
|
|
if (methods[i].func !== undefined) {
|
|
methods[i].func();
|
|
}
|
|
else {
|
|
if (methods[i].arguments === null) {
|
|
network[methodName].apply(network);
|
|
}
|
|
else {
|
|
network[methodName].apply(network, methods[i].arguments)
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var amountOfOptionChecks = 50;
|
|
var optionsThreshold = 0.8;
|
|
var optionGlobalCount = 0;
|
|
function checkOptions() {
|
|
optionGlobalCount++;
|
|
if (optionGlobalCount == amountOfOptionChecks) {
|
|
checkMethods();
|
|
}
|
|
else {
|
|
var allOptions = vis.network.allOptions.allOptions;
|
|
var testOptions = {};
|
|
constructOptions(allOptions, testOptions);
|
|
var failed = setTimeout(function () {
|
|
console.error("FAILED", JSON.stringify(testOptions, null, 4))
|
|
}, 500);
|
|
var counter = 0;
|
|
drawQuick(testOptions);
|
|
network.on("afterDrawing", function () {
|
|
counter++;
|
|
if (counter > 2) {
|
|
counter = 0;
|
|
network.off('afterDrawing');
|
|
clearTimeout(failed);
|
|
network.destroy();
|
|
}
|
|
})
|
|
network.on("stabilized", function () {
|
|
clearTimeout(failed);
|
|
network.destroy();
|
|
});
|
|
network.on("destroy", function () {
|
|
clearTimeout(failed);
|
|
setTimeout(checkOptions, 100);
|
|
})
|
|
console.log("now testing:",testOptions)
|
|
network.setOptions(testOptions);
|
|
}
|
|
}
|
|
|
|
function constructOptions(allOptions, testOptions) {
|
|
for (var option in allOptions) {
|
|
if (Math.random() < optionsThreshold) {
|
|
if (option !== "__type__" && option !== '__any__' && option !== 'locales' && option !== 'image' && option !== 'id') {
|
|
if (allOptions[option].__type__ !== undefined) {
|
|
if (testOptions[option] === undefined) {
|
|
testOptions[option] = {};
|
|
}
|
|
constructOptions(allOptions[option], testOptions[option])
|
|
if (Object.keys(testOptions).length === 0) {
|
|
testOptions[option] = undefined;
|
|
delete testOptions[option];
|
|
}
|
|
}
|
|
else {
|
|
if (allOptions[option].boolean !== undefined) {
|
|
if (testOptions[option] === undefined) {
|
|
testOptions[option] = {};
|
|
}
|
|
testOptions[option] = Math.random() < 0.5;
|
|
}
|
|
else if(allOptions[option].number !== undefined) {
|
|
if (testOptions[option] === undefined) {
|
|
testOptions[option] = {};
|
|
}
|
|
testOptions[option] = 1 * Math.random();
|
|
}
|
|
else if(allOptions[option].string !== undefined && Array.isArray(allOptions[option].string)) {
|
|
var value = allOptions[option].string[Math.floor(Math.random() * allOptions[option].string.length)];
|
|
if (value !== 'image' && value !== 'circularImage' && value !== 'icon') {
|
|
if (testOptions[option] === undefined) {
|
|
testOptions[option] = {};
|
|
}
|
|
testOptions[option] = value;
|
|
}
|
|
}
|
|
else if(allOptions[option].string !== undefined) {
|
|
// if (testOptions[option] === undefined) {
|
|
// testOptions[option] = {};
|
|
// }
|
|
// testOptions[option] = "hello world";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
checkOptions();
|
|
// for (var i = 0; i < amountOfOptionChecks; i++) {
|
|
// setTimeout(checkOptions.bind(this,i), i*optionCheckTime);
|
|
// }
|
|
// setTimeout(checkMethods, amountOfOptionChecks*optionCheckTime);
|
|
</script>
|
|
</body>
|
|
</html>
|