From 60d3cbb5dac88be86237cb933c7fbfc8bc03ad7b Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Tue, 23 Dec 2014 23:14:29 +0200 Subject: client: fix submitting sentences including existing nodes --- src/client/model/graph.js | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/client') 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; -- cgit v1.3.1