summaryrefslogtreecommitdiff
path: root/src/client/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/model')
-rw-r--r--src/client/model/graph.js14
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;