diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/client/model/graph.js | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/client/model/graph.js b/src/client/model/graph.js index b7f3e67e..a1d9886f 100644 --- a/src/client/model/graph.js +++ b/src/client/model/graph.js @@ -35,7 +35,12 @@ function Graph() { var name_to_node = {}; topo_diff.node_set_add = topo_diff.node_set_add.map(function(n) { if (n.id === undefined) { - n.id = model_core.random_node_name(); + var existing = findNodeByName(n.name); + if (existing) { + n = existing; + } else { + n.id = model_core.random_node_name(); + } } name_to_node[n.name] = n; return model_util.adapt_format_write_node(n); @@ -62,6 +67,11 @@ function Graph() { } return model_util.adapt_format_write_link(l); }); + // filter already existing nodes now, after we conveniently used them + // for name_to_node map + topo_diff.node_set_add = topo_diff.node_set_add.filter(function(n) { + return !hasNodeByName(n.name); + }); var graph_on_success = function(diff) { on_backend__diff(diff); if (on_success) { @@ -691,7 +701,7 @@ function Graph() { var hasNodeByName = function(name, state) { return nodes.filter(function (n) { - return compareNames(n.name, name) && n.state === state; + return compareNames(n.name, name) && (undefined === state || n.state === state); }).length > 0; } this.hasNodeByName = hasNodeByName; |
