summaryrefslogtreecommitdiff
path: root/src/client/model/graph.js
diff options
context:
space:
mode:
authorAlon Levy <alon@pobox.com>2015-02-15 14:37:04 +0200
committerAlon Levy <alon@pobox.com>2015-02-15 14:37:04 +0200
commit9953fee405a6fa48ad756a0bd495f2f235313497 (patch)
tree6c7d22cf13fffda0f2e6cc98a6f91d8898750295 /src/client/model/graph.js
parentebef3892f73efe349f64cac84aa9c1cafa9c7f40 (diff)
client: node merge: don't add self referencial links
Diffstat (limited to 'src/client/model/graph.js')
-rw-r--r--src/client/model/graph.js14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/client/model/graph.js b/src/client/model/graph.js
index ac5a368a..5cf132d9 100644
--- a/src/client/model/graph.js
+++ b/src/client/model/graph.js
@@ -552,20 +552,26 @@ function Graph(spec) {
var merge_node = find_node__by_id(merge_node_id);
var topo_diff;
util.assert(merge_node != null);
- var links = _.flatten(_.map(merged, function (node_id) {
- var src_links = find_link__by_src_id(node_id).map(function (src_link) {
+ var added_links = _.flatten(_.map(merged, function (node_id) {
+ var src_links = find_link__by_src_id(node_id)
+ .filter(function (src_link) { return src_link.__dst.id !== merge_node_id; })
+ .map(function (src_link) {
return model_core.create_link__set_random_id(merge_node, src_link.__dst, {
name: src_link.name,
});
});
- var dst_links = find_link__by_dst_id(node_id).map(function (dst_link) {
+ var dst_links = find_link__by_dst_id(node_id)
+ .filter(function (dst_link) { return dst_link.__src.id !== merge_node_id; })
+ .map(function (dst_link) {
return model_core.create_link__set_random_id(dst_link.__src, merge_node, {
name: dst_link.name,
});
});
return _.union(src_links, dst_links);
}));
- topo_diff = model_diff.new_topo_diff({link_set_add: links, node_id_set_rm: merged});
+ topo_diff = model_diff.new_topo_diff({
+ link_set_add: added_links,
+ node_id_set_rm: merged});
this.commit_and_tx_diff__topo(topo_diff);
}