Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
this.configurator.setOptions(options.configure);
}
// if the configuration system is enabled, copy all options and put them into the config system
if (this.configurator && this.configurator.options.enabled === true) {
let networkOptions = {nodes:{},edges:{},layout:{},interaction:{},manipulation:{},physics:{},global:{}};
util.deepExtend(networkOptions.nodes, this.nodesHandler.options);
util.deepExtend(networkOptions.edges, this.edgesHandler.options);
util.deepExtend(networkOptions.layout, this.layoutEngine.options);
// load the selectionHandler and render default options in to the interaction group
util.deepExtend(networkOptions.interaction, this.selectionHandler.options);
util.deepExtend(networkOptions.interaction, this.renderer.options);
util.deepExtend(networkOptions.interaction, this.interactionHandler.options);
util.deepExtend(networkOptions.manipulation, this.manipulation.options);
util.deepExtend(networkOptions.physics, this.physics.options);
// load globals into the global object
util.deepExtend(networkOptions.global, this.canvas.options);
util.deepExtend(networkOptions.global, this.options);
this.configurator.setModuleOptions(networkOptions);
}
// handle network global options
if (options.clickToUse !== undefined) {
if (options.clickToUse === true) {
if (this.activator === undefined) {
this.activator = new Activator(this.canvas.frame);
this.activator.on('change', () => {this.body.emitter.emit("activate")});
}
_clean() {
// not in mode
this.inMode = false;
// _clean the divs
if (this.guiEnabled === true) {
util.recursiveDOMDelete(this.editModeDiv);
util.recursiveDOMDelete(this.manipulationDiv);
// removes all the bindings and overloads
this._cleanManipulatorHammers();
}
// remove temporary nodes and edges
this._cleanupTemporaryNodesAndEdges();
// restore overloaded UI functions
this._unbindTemporaryUIs();
// remove the temporaryEventFunctions
this._unbindTemporaryEvents();
// restore the physics if required
this.body.emitter.emit('restorePhysics');
setOptions(options, allOptions) {
if (options !== undefined) {
let hierarchical = this.options.hierarchical;
let prevHierarchicalState = hierarchical.enabled;
util.selectiveDeepExtend(["randomSeed", "improvedLayout", "clusterThreshold"],this.options, options);
util.mergeOptions(this.options, options, 'hierarchical');
if (options.randomSeed !== undefined) {this.initialRandomSeed = options.randomSeed;}
if (hierarchical.enabled === true) {
if (prevHierarchicalState === true) {
// refresh the overridden options for nodes and edges.
this.body.emitter.emit('refresh', true);
}
// make sure the level separation is the right way up
if (hierarchical.direction === 'RL' || hierarchical.direction === 'DU') {
if (hierarchical.levelSeparation > 0) {
hierarchical.levelSeparation *= -1;
}
}
else {
if (hierarchical.levelSeparation < 0) {
setOptions(options) {
if (options !== undefined) {
if (options === false) {
this.options.enabled = false;
this.physicsEnabled = false;
this.stopSimulation();
}
else if (options === true) {
this.options.enabled = true;
this.physicsEnabled = true;
this.startSimulation();
}
else {
this.physicsEnabled = true;
util.selectiveNotDeepExtend(['stabilization'], this.options, options);
util.mergeOptions(this.options, options, 'stabilization');
if (options.enabled === undefined) {
this.options.enabled = true;
}
if (this.options.enabled === false) {
this.physicsEnabled = false;
this.stopSimulation();
}
// set the timestep
this.timestep = this.options.timestep;
}
}
this.init();
}
setOptions(options) {
if (options !== undefined) {
let fields = ['width','height','autoResize'];
util.selectiveDeepExtend(fields,this.options, options);
}
if (this.options.autoResize === true) {
// automatically adapt to a changing size of the browser.
this._cleanUp();
this.resizeTimer = setInterval(() => {
let changed = this.setSize();
if (changed === true) {
this.body.emitter.emit("_requestRedraw");
}
}, 1000);
this.resizeFunction = this._onResize.bind(this);
util.addEventListener(window,'resize',this.resizeFunction);
}
}
setOptions(options, allOptions) {
if (options !== undefined) {
let hierarchical = this.options.hierarchical;
let prevHierarchicalState = hierarchical.enabled;
util.selectiveDeepExtend(["randomSeed", "improvedLayout", "clusterThreshold"],this.options, options);
util.mergeOptions(this.options, options, 'hierarchical');
if (options.randomSeed !== undefined) {this.initialRandomSeed = options.randomSeed;}
if (hierarchical.enabled === true) {
if (prevHierarchicalState === true) {
// refresh the overridden options for nodes and edges.
this.body.emitter.emit('refresh', true);
}
// make sure the level separation is the right way up
if (hierarchical.direction === 'RL' || hierarchical.direction === 'DU') {
if (hierarchical.levelSeparation > 0) {
hierarchical.levelSeparation *= -1;
}
}
else {
Network.prototype.setOptions = function (options) {
if (options === null) {
options = undefined; // This ensures that options handling doesn't crash in the handling
}
if (options !== undefined) {
let errorFound = Validator.validate(options, allOptions);
if (errorFound === true) {
console.log('%cErrors have been found in the supplied options object.', printStyle);
}
// copy the global fields over
let fields = ['locale','locales','clickToUse'];
util.selectiveDeepExtend(fields,this.options, options);
// the hierarchical system can adapt the edges and the physics to it's own options because not all combinations work with the hierarichical system.
options = this.layoutEngine.setOptions(options.layout, options);
this.canvas.setOptions(options); // options for canvas are in globals
// pass the options to the modules
this.groups.setOptions(options.groups);
this.nodesHandler.setOptions(options.nodes);
this.edgesHandler.setOptions(options.edges);
this.physics.setOptions(options.physics);
this.manipulation.setOptions(options.manipulation, options, this.options); // manipulation uses the locales in the globals
this.interactionHandler.setOptions(options.interaction);
this.renderer.setOptions(options.interaction); // options for rendering are in interaction
this.selectionHandler.setOptions(options.interaction); // options for selection are in interaction
console.log('%c' + message + Validator.printLocation(path, option), printStyle);
};
let optionType = Validator.getType(options[option]);
let refOptionType = refOptionObj[optionType];
if (refOptionType !== undefined) {
// if the type is correct, we check if it is supposed to be one of a few select values
if (Validator.getType(refOptionType) === 'array' && refOptionType.indexOf(options[option]) === -1) {
log('Invalid option detected in "' + option + '".' +
' Allowed values are:' + Validator.print(refOptionType) +
' not "' + options[option] + '". ');
errorFound = true;
}
else if (optionType === 'object' && referenceOption !== "__any__") {
path = util.copyAndExtendArray(path, option);
Validator.parse(options[option], referenceOptions[referenceOption], path);
}
}
else if (refOptionObj['any'] === undefined) {
// type of the field is incorrect and the field cannot be any
log('Invalid type received for "' + option +
'". Expected: ' + Validator.print(Object.keys(refOptionObj)) +
'. Received [' + optionType + '] "' + options[option] + '"');
errorFound = true;
}
}
setOptions(options) {
if (options !== undefined) {
if (options === false) {
this.options.enabled = false;
this.physicsEnabled = false;
this.stopSimulation();
}
else if (options === true) {
this.options.enabled = true;
this.physicsEnabled = true;
this.startSimulation();
}
else {
this.physicsEnabled = true;
util.selectiveNotDeepExtend(['stabilization'], this.options, options);
util.mergeOptions(this.options, options, 'stabilization');
if (options.enabled === undefined) {
this.options.enabled = true;
}
if (this.options.enabled === false) {
this.physicsEnabled = false;
this.stopSimulation();
}
// set the timestep
this.timestep = this.options.timestep;
}
}
this.init();
if (options !== undefined) {
let fields = ['width','height','autoResize'];
util.selectiveDeepExtend(fields,this.options, options);
}
if (this.options.autoResize === true) {
// automatically adapt to a changing size of the browser.
this._cleanUp();
this.resizeTimer = setInterval(() => {
let changed = this.setSize();
if (changed === true) {
this.body.emitter.emit("_requestRedraw");
}
}, 1000);
this.resizeFunction = this._onResize.bind(this);
util.addEventListener(window,'resize',this.resizeFunction);
}
}