vis-rails 0.0.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vis/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/vis.js +2 -9
  4. data/vendor/assets/vis/DataSet.js +17 -9
  5. data/vendor/assets/vis/graph/Edge.js +49 -24
  6. data/vendor/assets/vis/graph/Graph.js +268 -64
  7. data/vendor/assets/vis/graph/Groups.js +1 -1
  8. data/vendor/assets/vis/graph/Node.js +18 -67
  9. data/vendor/assets/vis/graph/Popup.js +40 -13
  10. data/vendor/assets/vis/graph/css/graph-navigation.css +18 -14
  11. data/vendor/assets/vis/graph/graphMixins/ClusterMixin.js +7 -5
  12. data/vendor/assets/vis/graph/graphMixins/HierarchicalLayoutMixin.js +20 -5
  13. data/vendor/assets/vis/graph/graphMixins/ManipulationMixin.js +33 -33
  14. data/vendor/assets/vis/graph/graphMixins/MixinLoader.js +30 -32
  15. data/vendor/assets/vis/graph/graphMixins/NavigationMixin.js +33 -1
  16. data/vendor/assets/vis/graph/graphMixins/SectorsMixin.js +2 -2
  17. data/vendor/assets/vis/graph/graphMixins/SelectionMixin.js +72 -60
  18. data/vendor/assets/vis/graph/graphMixins/physics/BarnesHut.js +43 -18
  19. data/vendor/assets/vis/graph/graphMixins/physics/HierarchialRepulsion.js +8 -8
  20. data/vendor/assets/vis/graph/graphMixins/physics/PhysicsMixin.js +309 -129
  21. data/vendor/assets/vis/graph/graphMixins/physics/Repulsion.js +10 -10
  22. data/vendor/assets/vis/module/exports.js +1 -2
  23. data/vendor/assets/vis/module/header.js +2 -2
  24. data/vendor/assets/vis/timeline/Range.js +53 -93
  25. data/vendor/assets/vis/timeline/Timeline.js +328 -224
  26. data/vendor/assets/vis/timeline/component/Component.js +17 -95
  27. data/vendor/assets/vis/timeline/component/CurrentTime.js +54 -59
  28. data/vendor/assets/vis/timeline/component/CustomTime.js +55 -83
  29. data/vendor/assets/vis/timeline/component/Group.js +398 -75
  30. data/vendor/assets/vis/timeline/component/ItemSet.js +662 -403
  31. data/vendor/assets/vis/timeline/component/Panel.js +118 -60
  32. data/vendor/assets/vis/timeline/component/RootPanel.js +80 -132
  33. data/vendor/assets/vis/timeline/component/TimeAxis.js +191 -277
  34. data/vendor/assets/vis/timeline/component/css/item.css +16 -23
  35. data/vendor/assets/vis/timeline/component/css/itemset.css +25 -4
  36. data/vendor/assets/vis/timeline/component/css/labelset.css +34 -0
  37. data/vendor/assets/vis/timeline/component/css/panel.css +15 -1
  38. data/vendor/assets/vis/timeline/component/css/timeaxis.css +8 -8
  39. data/vendor/assets/vis/timeline/component/item/Item.js +48 -26
  40. data/vendor/assets/vis/timeline/component/item/ItemBox.js +156 -230
  41. data/vendor/assets/vis/timeline/component/item/ItemPoint.js +118 -166
  42. data/vendor/assets/vis/timeline/component/item/ItemRange.js +135 -187
  43. data/vendor/assets/vis/timeline/component/item/ItemRangeOverflow.js +29 -92
  44. data/vendor/assets/vis/timeline/stack.js +112 -0
  45. data/vendor/assets/vis/util.js +136 -38
  46. metadata +4 -18
  47. data/vendor/assets/vis/.gitignore +0 -1
  48. data/vendor/assets/vis/EventBus.js +0 -89
  49. data/vendor/assets/vis/events.js +0 -116
  50. data/vendor/assets/vis/graph/ClusterMixin.js +0 -1019
  51. data/vendor/assets/vis/graph/NavigationMixin.js +0 -245
  52. data/vendor/assets/vis/graph/SectorsMixin.js +0 -547
  53. data/vendor/assets/vis/graph/SelectionMixin.js +0 -515
  54. data/vendor/assets/vis/graph/img/downarrow.png +0 -0
  55. data/vendor/assets/vis/graph/img/leftarrow.png +0 -0
  56. data/vendor/assets/vis/graph/img/rightarrow.png +0 -0
  57. data/vendor/assets/vis/graph/img/uparrow.png +0 -0
  58. data/vendor/assets/vis/timeline/Controller.js +0 -183
  59. data/vendor/assets/vis/timeline/Stack.js +0 -190
  60. data/vendor/assets/vis/timeline/component/ContentPanel.js +0 -113
  61. data/vendor/assets/vis/timeline/component/GroupSet.js +0 -580
  62. data/vendor/assets/vis/timeline/component/css/groupset.css +0 -59
@@ -11,7 +11,7 @@ var graphMixinLoaders = {
11
11
  * @param {Object} sourceVariable | this object has to contain functions.
12
12
  * @private
13
13
  */
14
- _loadMixin : function(sourceVariable) {
14
+ _loadMixin: function (sourceVariable) {
15
15
  for (var mixinFunction in sourceVariable) {
16
16
  if (sourceVariable.hasOwnProperty(mixinFunction)) {
17
17
  Graph.prototype[mixinFunction] = sourceVariable[mixinFunction];
@@ -26,7 +26,7 @@ var graphMixinLoaders = {
26
26
  * @param {Object} sourceVariable | this object has to contain functions.
27
27
  * @private
28
28
  */
29
- _clearMixin : function(sourceVariable) {
29
+ _clearMixin: function (sourceVariable) {
30
30
  for (var mixinFunction in sourceVariable) {
31
31
  if (sourceVariable.hasOwnProperty(mixinFunction)) {
32
32
  Graph.prototype[mixinFunction] = undefined;
@@ -40,15 +40,13 @@ var graphMixinLoaders = {
40
40
  *
41
41
  * @private
42
42
  */
43
- _loadPhysicsSystem : function() {
43
+ _loadPhysicsSystem: function () {
44
44
  this._loadMixin(physicsMixin);
45
45
  this._loadSelectedForceSolver();
46
46
  if (this.constants.configurePhysics == true) {
47
47
  this._loadPhysicsConfiguration();
48
48
  }
49
- },
50
-
51
-
49
+ },
52
50
 
53
51
 
54
52
  /**
@@ -56,7 +54,7 @@ var graphMixinLoaders = {
56
54
  *
57
55
  * @private
58
56
  */
59
- _loadClusterSystem : function() {
57
+ _loadClusterSystem: function () {
60
58
  this.clusterSession = 0;
61
59
  this.hubThreshold = 5;
62
60
  this._loadMixin(ClusterMixin);
@@ -68,26 +66,26 @@ var graphMixinLoaders = {
68
66
  *
69
67
  * @private
70
68
  */
71
- _loadSectorSystem : function() {
72
- this.sectors = { },
69
+ _loadSectorSystem: function () {
70
+ this.sectors = {};
73
71
  this.activeSector = ["default"];
74
- this.sectors["active"] = { },
75
- this.sectors["active"]["default"] = {"nodes":{},
76
- "edges":{},
77
- "nodeIndices":[],
78
- "formationScale": 1.0,
79
- "drawingNode": undefined };
80
- this.sectors["frozen"] = {},
81
- this.sectors["support"] = {"nodes":{},
82
- "edges":{},
83
- "nodeIndices":[],
84
- "formationScale": 1.0,
85
- "drawingNode": undefined };
72
+ this.sectors["active"] = {};
73
+ this.sectors["active"]["default"] = {"nodes": {},
74
+ "edges": {},
75
+ "nodeIndices": [],
76
+ "formationScale": 1.0,
77
+ "drawingNode": undefined };
78
+ this.sectors["frozen"] = {};
79
+ this.sectors["support"] = {"nodes": {},
80
+ "edges": {},
81
+ "nodeIndices": [],
82
+ "formationScale": 1.0,
83
+ "drawingNode": undefined };
86
84
 
87
85
  this.nodeIndices = this.sectors["active"]["default"]["nodeIndices"]; // the node indices list is used to speed up the computation of the repulsion fields
88
86
 
89
87
  this._loadMixin(SectorMixin);
90
- },
88
+ },
91
89
 
92
90
 
93
91
  /**
@@ -95,11 +93,11 @@ var graphMixinLoaders = {
95
93
  *
96
94
  * @private
97
95
  */
98
- _loadSelectionSystem : function() {
99
- this.selectionObj = { };
96
+ _loadSelectionSystem: function () {
97
+ this.selectionObj = {nodes: {}, edges: {}};
100
98
 
101
99
  this._loadMixin(SelectionMixin);
102
- },
100
+ },
103
101
 
104
102
 
105
103
  /**
@@ -107,10 +105,10 @@ var graphMixinLoaders = {
107
105
  *
108
106
  * @private
109
107
  */
110
- _loadManipulationSystem : function() {
108
+ _loadManipulationSystem: function () {
111
109
  // reset global variables -- these are used by the selection of nodes and edges.
112
110
  this.blockConnectingEdgeSelection = false;
113
- this.forceAppendSelection = false
111
+ this.forceAppendSelection = false;
114
112
 
115
113
  if (this.constants.dataManipulation.enabled == true) {
116
114
  // load the manipulator HTML elements. All styling done in css.
@@ -170,7 +168,7 @@ var graphMixinLoaders = {
170
168
  this._clearMixin(manipulationMixin);
171
169
  }
172
170
  }
173
- },
171
+ },
174
172
 
175
173
 
176
174
  /**
@@ -178,7 +176,7 @@ var graphMixinLoaders = {
178
176
  *
179
177
  * @private
180
178
  */
181
- _loadNavigationControls : function() {
179
+ _loadNavigationControls: function () {
182
180
  this._loadMixin(NavigationMixin);
183
181
 
184
182
  // the clean function removes the button divs, this is done to remove the bindings.
@@ -186,7 +184,7 @@ var graphMixinLoaders = {
186
184
  if (this.constants.navigation.enabled == true) {
187
185
  this._loadNavigationElements();
188
186
  }
189
- },
187
+ },
190
188
 
191
189
 
192
190
  /**
@@ -194,8 +192,8 @@ var graphMixinLoaders = {
194
192
  *
195
193
  * @private
196
194
  */
197
- _loadHierarchySystem : function() {
195
+ _loadHierarchySystem: function () {
198
196
  this._loadMixin(HierarchicalLayoutMixin);
199
197
  }
200
198
 
201
- }
199
+ };
@@ -30,6 +30,9 @@ var NavigationMixin = {
30
30
 
31
31
  this.navigationDivs['wrapper'] = document.createElement('div');
32
32
  this.navigationDivs['wrapper'].id = "graph-navigation_wrapper";
33
+ this.navigationDivs['wrapper'].style.position = "absolute";
34
+ this.navigationDivs['wrapper'].style.width = this.frame.canvas.clientWidth + "px";
35
+ this.navigationDivs['wrapper'].style.height = this.frame.canvas.clientHeight + "px";
33
36
  this.containerElement.insertBefore(this.navigationDivs['wrapper'],this.frame);
34
37
 
35
38
  for (var i = 0; i < navigationDivs.length; i++) {
@@ -81,10 +84,12 @@ var NavigationMixin = {
81
84
  * @private
82
85
  */
83
86
  _moveUp : function(event) {
84
- console.log("here")
85
87
  this.yIncrement = this.constants.keyboard.speed.y;
86
88
  this.start(); // if there is no node movement, the calculation wont be done
87
89
  this._preventDefault(event);
90
+ if (this.navigationDivs) {
91
+ this.navigationDivs['up'].className += " active";
92
+ }
88
93
  },
89
94
 
90
95
 
@@ -96,6 +101,9 @@ var NavigationMixin = {
96
101
  this.yIncrement = -this.constants.keyboard.speed.y;
97
102
  this.start(); // if there is no node movement, the calculation wont be done
98
103
  this._preventDefault(event);
104
+ if (this.navigationDivs) {
105
+ this.navigationDivs['down'].className += " active";
106
+ }
99
107
  },
100
108
 
101
109
 
@@ -107,6 +115,9 @@ var NavigationMixin = {
107
115
  this.xIncrement = this.constants.keyboard.speed.x;
108
116
  this.start(); // if there is no node movement, the calculation wont be done
109
117
  this._preventDefault(event);
118
+ if (this.navigationDivs) {
119
+ this.navigationDivs['left'].className += " active";
120
+ }
110
121
  },
111
122
 
112
123
 
@@ -118,6 +129,9 @@ var NavigationMixin = {
118
129
  this.xIncrement = -this.constants.keyboard.speed.y;
119
130
  this.start(); // if there is no node movement, the calculation wont be done
120
131
  this._preventDefault(event);
132
+ if (this.navigationDivs) {
133
+ this.navigationDivs['right'].className += " active";
134
+ }
121
135
  },
122
136
 
123
137
 
@@ -129,6 +143,9 @@ var NavigationMixin = {
129
143
  this.zoomIncrement = this.constants.keyboard.speed.zoom;
130
144
  this.start(); // if there is no node movement, the calculation wont be done
131
145
  this._preventDefault(event);
146
+ if (this.navigationDivs) {
147
+ this.navigationDivs['zoomIn'].className += " active";
148
+ }
132
149
  },
133
150
 
134
151
 
@@ -140,6 +157,9 @@ var NavigationMixin = {
140
157
  this.zoomIncrement = -this.constants.keyboard.speed.zoom;
141
158
  this.start(); // if there is no node movement, the calculation wont be done
142
159
  this._preventDefault(event);
160
+ if (this.navigationDivs) {
161
+ this.navigationDivs['zoomOut'].className += " active";
162
+ }
143
163
  },
144
164
 
145
165
 
@@ -149,6 +169,10 @@ var NavigationMixin = {
149
169
  */
150
170
  _stopZoom : function() {
151
171
  this.zoomIncrement = 0;
172
+ if (this.navigationDivs) {
173
+ this.navigationDivs['zoomIn'].className = this.navigationDivs['zoomIn'].className.replace(" active","");
174
+ this.navigationDivs['zoomOut'].className = this.navigationDivs['zoomOut'].className.replace(" active","");
175
+ }
152
176
  },
153
177
 
154
178
 
@@ -158,6 +182,10 @@ var NavigationMixin = {
158
182
  */
159
183
  _yStopMoving : function() {
160
184
  this.yIncrement = 0;
185
+ if (this.navigationDivs) {
186
+ this.navigationDivs['up'].className = this.navigationDivs['up'].className.replace(" active","");
187
+ this.navigationDivs['down'].className = this.navigationDivs['down'].className.replace(" active","");
188
+ }
161
189
  },
162
190
 
163
191
 
@@ -167,6 +195,10 @@ var NavigationMixin = {
167
195
  */
168
196
  _xStopMoving : function() {
169
197
  this.xIncrement = 0;
198
+ if (this.navigationDivs) {
199
+ this.navigationDivs['left'].className = this.navigationDivs['left'].className.replace(" active","");
200
+ this.navigationDivs['right'].className = this.navigationDivs['right'].className.replace(" active","");
201
+ }
170
202
  }
171
203
 
172
204
 
@@ -286,7 +286,7 @@ var SectorMixin = {
286
286
  // console.log("the node is part of the active sector");
287
287
  // }
288
288
  // else {
289
- // console.log("I dont know what the fuck happened!!");
289
+ // console.log("I dont know what happened!!");
290
290
  // }
291
291
 
292
292
  // when we switch to a new sector, we remove the node that will be expanded from the current nodes list.
@@ -549,4 +549,4 @@ var SectorMixin = {
549
549
  this._drawSectorNodes(ctx,"active");
550
550
  this._loadLatestSector();
551
551
  }
552
- };
552
+ };
@@ -131,7 +131,13 @@ var SelectionMixin = {
131
131
  * @private
132
132
  */
133
133
  _addToSelection : function(obj) {
134
- this.selectionObj[obj.id] = obj;
134
+ if (obj instanceof Node) {
135
+ this.selectionObj.nodes[obj.id] = obj;
136
+ }
137
+ else {
138
+ this.selectionObj.edges[obj.id] = obj;
139
+ }
140
+
135
141
  },
136
142
 
137
143
 
@@ -142,7 +148,12 @@ var SelectionMixin = {
142
148
  * @private
143
149
  */
144
150
  _removeFromSelection : function(obj) {
145
- delete this.selectionObj[obj.id];
151
+ if (obj instanceof Node) {
152
+ delete this.selectionObj.nodes[obj.id];
153
+ }
154
+ else {
155
+ delete this.selectionObj.edges[obj.id];
156
+ }
146
157
  },
147
158
 
148
159
 
@@ -156,13 +167,18 @@ var SelectionMixin = {
156
167
  if (doNotTrigger === undefined) {
157
168
  doNotTrigger = false;
158
169
  }
159
-
160
- for (var objectId in this.selectionObj) {
161
- if (this.selectionObj.hasOwnProperty(objectId)) {
162
- this.selectionObj[objectId].unselect();
170
+ for(var nodeId in this.selectionObj.nodes) {
171
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
172
+ this.selectionObj.nodes[nodeId].unselect();
173
+ }
174
+ }
175
+ for(var edgeId in this.selectionObj.edges) {
176
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
177
+ this.selectionObj.edges[edgeId].unselect();
163
178
  }
164
179
  }
165
- this.selectionObj = {};
180
+
181
+ this.selectionObj = {nodes:{},edges:{}};
166
182
 
167
183
  if (doNotTrigger == false) {
168
184
  this.emit('select', this.getSelection());
@@ -180,13 +196,11 @@ var SelectionMixin = {
180
196
  doNotTrigger = false;
181
197
  }
182
198
 
183
- for (var objectId in this.selectionObj) {
184
- if (this.selectionObj.hasOwnProperty(objectId)) {
185
- if (this.selectionObj[objectId] instanceof Node) {
186
- if (this.selectionObj[objectId].clusterSize > 1) {
187
- this.selectionObj[objectId].unselect();
188
- this._removeFromSelection(this.selectionObj[objectId]);
189
- }
199
+ for (var nodeId in this.selectionObj.nodes) {
200
+ if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
201
+ if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
202
+ this.selectionObj.nodes[nodeId].unselect();
203
+ this._removeFromSelection(this.selectionObj.nodes[nodeId]);
190
204
  }
191
205
  }
192
206
  }
@@ -205,11 +219,9 @@ var SelectionMixin = {
205
219
  */
206
220
  _getSelectedNodeCount : function() {
207
221
  var count = 0;
208
- for (var objectId in this.selectionObj) {
209
- if (this.selectionObj.hasOwnProperty(objectId)) {
210
- if (this.selectionObj[objectId] instanceof Node) {
211
- count += 1;
212
- }
222
+ for (var nodeId in this.selectionObj.nodes) {
223
+ if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
224
+ count += 1;
213
225
  }
214
226
  }
215
227
  return count;
@@ -222,11 +234,9 @@ var SelectionMixin = {
222
234
  * @private
223
235
  */
224
236
  _getSelectedNode : function() {
225
- for (var objectId in this.selectionObj) {
226
- if (this.selectionObj.hasOwnProperty(objectId)) {
227
- if (this.selectionObj[objectId] instanceof Node) {
228
- return this.selectionObj[objectId];
229
- }
237
+ for (var nodeId in this.selectionObj.nodes) {
238
+ if (this.selectionObj.nodes.hasOwnProperty(nodeId)) {
239
+ return this.selectionObj.nodes[nodeId];
230
240
  }
231
241
  }
232
242
  return null;
@@ -241,11 +251,9 @@ var SelectionMixin = {
241
251
  */
242
252
  _getSelectedEdgeCount : function() {
243
253
  var count = 0;
244
- for (var objectId in this.selectionObj) {
245
- if (this.selectionObj.hasOwnProperty(objectId)) {
246
- if (this.selectionObj[objectId] instanceof Edge) {
247
- count += 1;
248
- }
254
+ for (var edgeId in this.selectionObj.edges) {
255
+ if (this.selectionObj.edges.hasOwnProperty(edgeId)) {
256
+ count += 1;
249
257
  }
250
258
  }
251
259
  return count;
@@ -260,8 +268,13 @@ var SelectionMixin = {
260
268
  */
261
269
  _getSelectedObjectCount : function() {
262
270
  var count = 0;
263
- for (var objectId in this.selectionObj) {
264
- if (this.selectionObj.hasOwnProperty(objectId)) {
271
+ for(var nodeId in this.selectionObj.nodes) {
272
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
273
+ count += 1;
274
+ }
275
+ }
276
+ for(var edgeId in this.selectionObj.edges) {
277
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
265
278
  count += 1;
266
279
  }
267
280
  }
@@ -275,8 +288,13 @@ var SelectionMixin = {
275
288
  * @private
276
289
  */
277
290
  _selectionIsEmpty : function() {
278
- for(var objectId in this.selectionObj) {
279
- if(this.selectionObj.hasOwnProperty(objectId)) {
291
+ for(var nodeId in this.selectionObj.nodes) {
292
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
293
+ return false;
294
+ }
295
+ }
296
+ for(var edgeId in this.selectionObj.edges) {
297
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
280
298
  return false;
281
299
  }
282
300
  }
@@ -291,12 +309,10 @@ var SelectionMixin = {
291
309
  * @private
292
310
  */
293
311
  _clusterInSelection : function() {
294
- for(var objectId in this.selectionObj) {
295
- if(this.selectionObj.hasOwnProperty(objectId)) {
296
- if (this.selectionObj[objectId] instanceof Node) {
297
- if (this.selectionObj[objectId].clusterSize > 1) {
298
- return true;
299
- }
312
+ for(var nodeId in this.selectionObj.nodes) {
313
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
314
+ if (this.selectionObj.nodes[nodeId].clusterSize > 1) {
315
+ return true;
300
316
  }
301
317
  }
302
318
  }
@@ -477,11 +493,9 @@ var SelectionMixin = {
477
493
  */
478
494
  getSelectedNodes : function() {
479
495
  var idArray = [];
480
- for(var objectId in this.selectionObj) {
481
- if(this.selectionObj.hasOwnProperty(objectId)) {
482
- if (this.selectionObj[objectId] instanceof Node) {
483
- idArray.push(objectId);
484
- }
496
+ for(var nodeId in this.selectionObj.nodes) {
497
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
498
+ idArray.push(nodeId);
485
499
  }
486
500
  }
487
501
  return idArray
@@ -495,14 +509,12 @@ var SelectionMixin = {
495
509
  */
496
510
  getSelectedEdges : function() {
497
511
  var idArray = [];
498
- for(var objectId in this.selectionObj) {
499
- if(this.selectionObj.hasOwnProperty(objectId)) {
500
- if (this.selectionObj[objectId] instanceof Edge) {
501
- idArray.push(objectId);
502
- }
512
+ for(var edgeId in this.selectionObj.edges) {
513
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
514
+ idArray.push(edgeId);
503
515
  }
504
516
  }
505
- return idArray
517
+ return idArray;
506
518
  },
507
519
 
508
520
 
@@ -538,17 +550,17 @@ var SelectionMixin = {
538
550
  * @private
539
551
  */
540
552
  _updateSelection : function () {
541
- for(var objectId in this.selectionObj) {
542
- if(this.selectionObj.hasOwnProperty(objectId)) {
543
- if (this.selectionObj[objectId] instanceof Node) {
544
- if (!this.nodes.hasOwnProperty(objectId)) {
545
- delete this.selectionObj[objectId];
546
- }
553
+ for(var nodeId in this.selectionObj.nodes) {
554
+ if(this.selectionObj.nodes.hasOwnProperty(nodeId)) {
555
+ if (!this.nodes.hasOwnProperty(nodeId)) {
556
+ delete this.selectionObj.nodes[nodeId];
547
557
  }
548
- else { // assuming only edges and nodes are selected
549
- if (!this.edges.hasOwnProperty(objectId)) {
550
- delete this.selectionObj[objectId];
551
- }
558
+ }
559
+ }
560
+ for(var edgeId in this.selectionObj.edges) {
561
+ if(this.selectionObj.edges.hasOwnProperty(edgeId)) {
562
+ if (!this.edges.hasOwnProperty(edgeId)) {
563
+ delete this.selectionObj.edges[edgeId];
552
564
  }
553
565
  }
554
566
  }