|
@ -0,0 +1,316 @@ |
|
|
|
|
|
/** |
|
|
|
|
|
* Created by Alex on 3/26/2015. |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var util = require('../../util'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ConfigurationSystem { |
|
|
|
|
|
constructor(network) { |
|
|
|
|
|
this.network = network; |
|
|
|
|
|
|
|
|
|
|
|
this.possibleOptions = { |
|
|
|
|
|
nodesHandler: { |
|
|
|
|
|
borderWidth: 1, |
|
|
|
|
|
borderWidthSelected: 2, |
|
|
|
|
|
color: { |
|
|
|
|
|
border: 'color', |
|
|
|
|
|
background: 'color', |
|
|
|
|
|
highlight: { |
|
|
|
|
|
border: 'color', |
|
|
|
|
|
background: '#D2E5FF' |
|
|
|
|
|
}, |
|
|
|
|
|
hover: { |
|
|
|
|
|
border: 'color', |
|
|
|
|
|
background: 'color' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
fixed: { |
|
|
|
|
|
x:false, |
|
|
|
|
|
y:false |
|
|
|
|
|
}, |
|
|
|
|
|
font: { |
|
|
|
|
|
color: 'color', |
|
|
|
|
|
size: [14,0,100,1], // px
|
|
|
|
|
|
face: ['arial','verdana','tahoma'], |
|
|
|
|
|
background: 'color', |
|
|
|
|
|
stroke: [0,0,50,1], // px
|
|
|
|
|
|
strokeColor: 'color' |
|
|
|
|
|
}, |
|
|
|
|
|
group: 'string', |
|
|
|
|
|
hidden: false, |
|
|
|
|
|
icon: { |
|
|
|
|
|
face: 'string', //'FontAwesome',
|
|
|
|
|
|
code: 'string', //'\uf007',
|
|
|
|
|
|
size: [50,0,200,1], //50,
|
|
|
|
|
|
color:'color' //'#aa00ff'
|
|
|
|
|
|
}, |
|
|
|
|
|
image: 'string', // --> URL
|
|
|
|
|
|
physics: true, |
|
|
|
|
|
scaling: { |
|
|
|
|
|
min: [10,0,200,1], |
|
|
|
|
|
max: [30,0,200,1], |
|
|
|
|
|
label: { |
|
|
|
|
|
enabled: true, |
|
|
|
|
|
min: [14,0,200,1], |
|
|
|
|
|
max: [30,0,200,1], |
|
|
|
|
|
maxVisible: [30,0,200,1], |
|
|
|
|
|
drawThreshold: [3,0,20,1] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
shape: ['ellipse','box','circle','circularImage','database','diamond','dot','icon','image','square','star','text','triangle','triangleDown'], |
|
|
|
|
|
size: [25,0,200,1] |
|
|
|
|
|
}, |
|
|
|
|
|
edgesHandler: { |
|
|
|
|
|
arrows: { |
|
|
|
|
|
to: {enabled: false, scaleFactor:[1,0,3,0.05]}, // boolean / {arrowScaleFactor:1} / {enabled: false, arrowScaleFactor:1}
|
|
|
|
|
|
middle: {enabled: false, scaleFactor:[1,0,3,0.05]}, |
|
|
|
|
|
from: {enabled: false, scaleFactor:[1,0,3,0.05]} |
|
|
|
|
|
}, |
|
|
|
|
|
color: { |
|
|
|
|
|
color:'color', |
|
|
|
|
|
highlight:'color', |
|
|
|
|
|
hover: 'color', |
|
|
|
|
|
inherit: { |
|
|
|
|
|
enabled: true, |
|
|
|
|
|
source: ['from','to'], // from / to
|
|
|
|
|
|
useGradients: false |
|
|
|
|
|
}, |
|
|
|
|
|
opacity:[1,0,1,0.05] |
|
|
|
|
|
}, |
|
|
|
|
|
dashes:{ |
|
|
|
|
|
enabled: false, |
|
|
|
|
|
length: [5,0,50,1], |
|
|
|
|
|
gap: [5,0,50,1], |
|
|
|
|
|
altLength: [5,0,50,1] |
|
|
|
|
|
}, |
|
|
|
|
|
font: { |
|
|
|
|
|
color: 'color', |
|
|
|
|
|
size: [14,0,100,1], // px
|
|
|
|
|
|
face: ['arial','verdana','tahoma'], |
|
|
|
|
|
background: 'color', |
|
|
|
|
|
stroke: [0,0,50,1], // px
|
|
|
|
|
|
strokeColor: 'color', |
|
|
|
|
|
align:['horizontal','top','middle','bottom'] |
|
|
|
|
|
}, |
|
|
|
|
|
hidden: false, |
|
|
|
|
|
hoverWidth: [1.5,0,10,0.1], |
|
|
|
|
|
physics: true, |
|
|
|
|
|
scaling: { |
|
|
|
|
|
min: [10,0,200,1], |
|
|
|
|
|
max: [30,0,200,1], |
|
|
|
|
|
label: { |
|
|
|
|
|
enabled: true, |
|
|
|
|
|
min: [14,0,200,1], |
|
|
|
|
|
max: [30,0,200,1], |
|
|
|
|
|
maxVisible: [30,0,200,1], |
|
|
|
|
|
drawThreshold: [3,0,20,1] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
selfReferenceSize:[20,0,200,1], |
|
|
|
|
|
smooth: { |
|
|
|
|
|
enabled: true, |
|
|
|
|
|
dynamic: true, |
|
|
|
|
|
type: ["continuous",'discrete','diagonalCross','straightCross','horizontal','vertical','curvedCW','curvedCCW'], |
|
|
|
|
|
roundness: [0.5,0,1,0.05] |
|
|
|
|
|
}, |
|
|
|
|
|
width: [1,0,30,1], |
|
|
|
|
|
widthSelectionMultiplier: [2,0,5,0.1] |
|
|
|
|
|
}, |
|
|
|
|
|
layout:{ |
|
|
|
|
|
randomSeed: [0,0,500,1], |
|
|
|
|
|
hierarchical: { |
|
|
|
|
|
enabled:false, |
|
|
|
|
|
levelSeparation: [150,20,500,5], |
|
|
|
|
|
direction: ["UD",'DU','LR','RL'], // UD, DU, LR, RL
|
|
|
|
|
|
sortMethod: ["hubsize",'directed'] // hubsize, directed
|
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
interaction: { |
|
|
|
|
|
dragNodes:true, |
|
|
|
|
|
dragView: true, |
|
|
|
|
|
zoomView: true, |
|
|
|
|
|
hoverEnabled: false, |
|
|
|
|
|
showNavigationIcons: false, |
|
|
|
|
|
tooltip: { |
|
|
|
|
|
delay: [300,0,1000,25], |
|
|
|
|
|
fontColor: 'color', |
|
|
|
|
|
fontSize: [14,0,40,1], // px
|
|
|
|
|
|
fontFace: ['arial','verdana','tahoma'], |
|
|
|
|
|
color: { |
|
|
|
|
|
border: 'color', |
|
|
|
|
|
background: 'color' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
keyboard: { |
|
|
|
|
|
enabled: false, |
|
|
|
|
|
speed: {x: [10,0,40,1], y: [10,0,40,1], zoom: [0.02,0,0.1,0.005]}, |
|
|
|
|
|
bindToWindow: true |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
manipulation:{ |
|
|
|
|
|
enabled: false, |
|
|
|
|
|
initiallyVisible: false, |
|
|
|
|
|
locale: ['en','nl'], |
|
|
|
|
|
functionality:{ |
|
|
|
|
|
addNode: true, |
|
|
|
|
|
addEdge: true, |
|
|
|
|
|
editNode: true, |
|
|
|
|
|
editEdge: true, |
|
|
|
|
|
deleteNode: true, |
|
|
|
|
|
deleteEdge: true |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
physics: { |
|
|
|
|
|
barnesHut: { |
|
|
|
|
|
theta: [0.5,0.1,1,0.05], |
|
|
|
|
|
gravitationalConstant: [-2000,-300000,0,50], |
|
|
|
|
|
centralGravity: [0.3,0,10,0.05], |
|
|
|
|
|
springLength: [95,0,500,5], |
|
|
|
|
|
springConstant: [0.04,0,5,0.005], |
|
|
|
|
|
damping: [0.09,0,1,0.01] |
|
|
|
|
|
}, |
|
|
|
|
|
repulsion: { |
|
|
|
|
|
centralGravity: [0.2,0,10,0.05], |
|
|
|
|
|
springLength: [200,0,500,5], |
|
|
|
|
|
springConstant: [0.05,0,5,0.005], |
|
|
|
|
|
nodeDistance: [100,0,500,5], |
|
|
|
|
|
damping: [0.09,0,1,0.01] |
|
|
|
|
|
}, |
|
|
|
|
|
hierarchicalRepulsion: { |
|
|
|
|
|
centralGravity: 0.2, |
|
|
|
|
|
springLength: [100,0,500,5], |
|
|
|
|
|
springConstant: [0.01,0,5,0.005], |
|
|
|
|
|
nodeDistance: [120,0,500,5], |
|
|
|
|
|
damping: [0.09,0,1,0.01] |
|
|
|
|
|
}, |
|
|
|
|
|
maxVelocity: [50,0,150,1], |
|
|
|
|
|
minVelocity: [0.1,0.01,0.5,0.01], |
|
|
|
|
|
solver: ['BarnesHut','Repulsion','HierarchicalRepulsion'], |
|
|
|
|
|
timestep: [0.5,0,1,0.05] |
|
|
|
|
|
}, |
|
|
|
|
|
selection:{ |
|
|
|
|
|
select: true, |
|
|
|
|
|
selectConnectedEdges: true |
|
|
|
|
|
}, |
|
|
|
|
|
renderer: { |
|
|
|
|
|
hideEdgesOnDrag: false, |
|
|
|
|
|
hideNodesOnDrag: false |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
this.actualOptions = {}; |
|
|
|
|
|
|
|
|
|
|
|
this.domElements = []; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
setOptions(options) { |
|
|
|
|
|
if (options !== undefined) { |
|
|
|
|
|
util.deepExtend(this.actualOptions, options); |
|
|
|
|
|
|
|
|
|
|
|
if (options.configure !== undefined && options.configure !== false) { |
|
|
|
|
|
let config; |
|
|
|
|
|
if (options.configure instanceof Array) { |
|
|
|
|
|
config = options.configure.join(); |
|
|
|
|
|
} |
|
|
|
|
|
else if (typeof options.configure === 'string') { |
|
|
|
|
|
config = options.configure; |
|
|
|
|
|
} |
|
|
|
|
|
else if (typeof options.configure === 'boolean') { |
|
|
|
|
|
config = options.configure; |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
this._clean(); |
|
|
|
|
|
throw new Error("the option for configure has to be either a string, boolean or an array. Supplied:" + options.configure); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
this._create(config); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
this._clean(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* |
|
|
|
|
|
* @param {Boolean | String} config |
|
|
|
|
|
* @private |
|
|
|
|
|
*/ |
|
|
|
|
|
_create(config) { |
|
|
|
|
|
this._clean(); |
|
|
|
|
|
|
|
|
|
|
|
for (let option in this.possibleOptions) { |
|
|
|
|
|
if (this.possibleOptions.hasOwnProperty(option)) { |
|
|
|
|
|
if (config === true || config.indexOf(option) !== -1) { |
|
|
|
|
|
let optionObj = this.possibleOptions[option]; |
|
|
|
|
|
// a header for the category
|
|
|
|
|
|
this._makeHeader(option); |
|
|
|
|
|
|
|
|
|
|
|
// get the suboptions
|
|
|
|
|
|
for (let subOption in optionObj) { |
|
|
|
|
|
if (optionObj.hasOwnProperty(subOption)) { |
|
|
|
|
|
this._makeLabel(subOption); |
|
|
|
|
|
let subOptionObj = optionObj[subOption]; |
|
|
|
|
|
if (subOptionObj instanceof Array) { |
|
|
|
|
|
this._handleArray(option, subOption, subOptionObj); |
|
|
|
|
|
} |
|
|
|
|
|
else if (subOptionObj instanceof Object) { |
|
|
|
|
|
this._handleObject(option, subOption, subOptionObj); |
|
|
|
|
|
} |
|
|
|
|
|
else if (typeof subOptionObj === 'string') { |
|
|
|
|
|
this._handleString(option, subOption, subOptionObj); |
|
|
|
|
|
} |
|
|
|
|
|
else if (typeof subOptionObj === 'boolean') { |
|
|
|
|
|
this._handleBoolean(option, subOption, subOptionObj); |
|
|
|
|
|
} |
|
|
|
|
|
else { |
|
|
|
|
|
console.error("dont know how to handle", subOptionObj); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_clean() { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_makeHeader(name) { |
|
|
|
|
|
console.log("header",name); |
|
|
|
|
|
//let div = document.createElement('div');
|
|
|
|
|
|
//div.className = 'vis-network-configuration header';
|
|
|
|
|
|
//div.innerHTML = name;
|
|
|
|
|
|
//this.domElements.push(div);
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_makeLabel(name) { |
|
|
|
|
|
console.log("label",name); |
|
|
|
|
|
//let div = document.createElement('div');
|
|
|
|
|
|
//div.className = 'vis-network-configuration label';
|
|
|
|
|
|
//div.innerHTML = name;
|
|
|
|
|
|
//this.domElements.push(div);
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_handleObject(category, subcategory, obj) { |
|
|
|
|
|
console.log("obj",obj); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_handleArray(category, subcategory, arr) { |
|
|
|
|
|
console.log("arr",arr); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_handleString(category, subcategory, string) { |
|
|
|
|
|
console.log("string",string); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
_handleBoolean(category, subcategory, boolean) { |
|
|
|
|
|
console.log("boolean",boolean); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export default ConfigurationSystem; |