diff --git a/docs/network/index.html b/docs/network/index.html
index df4f6c97..4878c6aa 100644
--- a/docs/network/index.html
+++ b/docs/network/index.html
@@ -940,6 +940,28 @@ function releaseFunction (clusterPosition, containedNodesPositions) {
before selecting its own objects. Does not fire events.
+
+ setSelection(
+ Object selection ,
+ [Object options] ) |
+
+
+ Returns: none |
+ Sets the selection, wich must be an object like this:
+
+{
+ nodes: [Array of nodeIds],
+ edges: [Array of edgeIds]
+}
+ You can also pass only nodes or edges in selection object.
+ Available options are:
+
+{
+ unselectAll: Boolean,
+ highlightEdges: Boolean
+}
+ |
+
unselectAll() |
diff --git a/lib/network/modules/SelectionHandler.js b/lib/network/modules/SelectionHandler.js
index 59376c54..15d43547 100644
--- a/lib/network/modules/SelectionHandler.js
+++ b/lib/network/modules/SelectionHandler.js
@@ -300,7 +300,7 @@ class SelectionHandler {
this.selectionObj.edges[edgeId].unselect();
}
}
-
+
this.selectionObj = {nodes:{},edges:{}};
}
@@ -601,6 +601,47 @@ class SelectionHandler {
return idArray;
}
+ /**
+ * Updates the current selection
+ * @param {{nodes: Array., edges: Array.}} Selection
+ * @param {Object} options Options
+ */
+ setSelection(selection, options = {}) {
+ let i, id;
+
+ if (!selection || (!selection.nodes && !selection.edges))
+ throw 'Selection must be an object with nodes and/or edges properties';
+ // first unselect any selected node, if option is true or undefined
+ if (options.unselectAll || options.unselectAll === undefined) {
+ this.unselectAll();
+ }
+ if (selection.nodes) {
+ for (i = 0; i < selection.nodes.length; i++) {
+ id = selection.nodes[i];
+
+ let node = this.body.nodes[id];
+ if (!node) {
+ throw new RangeError('Node with id "' + id + '" not found');
+ }
+ // don't select edges with it
+ this.selectObject(node, options.highlightEdges);
+ }
+ }
+
+ if (selection.edges) {
+ for (i = 0; i < selection.edges.length; i++) {
+ id = selection.edges[i];
+
+ let edge = this.body.edges[id];
+ if (!edge) {
+ throw new RangeError('Edge with id "' + id + '" not found');
+ }
+ this.selectObject(edge);
+ }
+ }
+ this.body.emitter.emit('_requestRedraw');
+ }
+
/**
* select zero or more nodes with the option to highlight edges
@@ -609,24 +650,10 @@ class SelectionHandler {
* @param {boolean} [highlightEdges]
*/
selectNodes(selection, highlightEdges = true) {
- let i, id;
-
if (!selection || (selection.length === undefined))
throw 'Selection must be an array with ids';
-
- // first unselect any selected node
- this.unselectAll();
-
- for (i = 0; i < selection.length; i++) {
- id = selection[i];
-
- let node = this.body.nodes[id];
- if (!node) {
- throw new RangeError('Node with id "' + id + '" not found');
- }
- this.selectObject(node,highlightEdges);
- }
- this.body.emitter.emit('_requestRedraw');
+
+ this.setSelection({nodes: selection}, {highlightEdges: highlightEdges});
}
@@ -636,24 +663,10 @@ class SelectionHandler {
* selected nodes.
*/
selectEdges(selection) {
- let i, id;
-
if (!selection || (selection.length === undefined))
throw 'Selection must be an array with ids';
-
- // first unselect any selected objects
- this.unselectAll();
-
- for (i = 0; i < selection.length; i++) {
- id = selection[i];
-
- let edge = this.body.edges[id];
- if (!edge) {
- throw new RangeError('Edge with id "' + id + '" not found');
- }
- this.selectObject(edge);
- }
- this.body.emitter.emit('_requestRedraw');
+
+ this.setSelection({edges: selection});
}
/**