summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2014-12-23 23:14:29 +0200
committerAlon Levy <alon@pobox.com>2014-12-23 23:14:29 +0200
commit60d3cbb5dac88be86237cb933c7fbfc8bc03ad7b (patch)
treea7aeb5f3100a19fcc3a006d02a2a22ab23bfb493
parentf7ff8bc38410c2666665c4c70cc71c17f6eb7835 (diff)
client: fix submitting sentences including existing nodes
-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;