From 48dedb15ed2c54eb93baebfa07c9ac4e446f56c8 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Sun, 30 Mar 2014 22:49:19 -0400 Subject: [PATCH] Prevent a closed way from disconnecting itself.. --- js/id/actions/disconnect.js | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/js/id/actions/disconnect.js b/js/id/actions/disconnect.js index b9220fa69..a3afe8b4d 100644 --- a/js/id/actions/disconnect.js +++ b/js/id/actions/disconnect.js @@ -20,9 +20,10 @@ iD.actions.Disconnect = function(nodeId, newNodeId) { replacements = action.replacements(graph); replacements.forEach(function(replacement) { - var newNode = iD.Node({id: newNodeId, loc: node.loc, tags: node.tags}); + var way = graph.entity(replacement.wayID), + newNode = iD.Node({id: newNodeId, loc: node.loc, tags: node.tags}); graph = graph.replace(newNode); - graph = graph.replace(graph.entity(replacement.wayID).updateNode(newNode.id, replacement.index)); + graph = graph.replace(way.replaceNode(way.nodes[replacement.index], newNode.id)); }); return graph; @@ -31,21 +32,22 @@ iD.actions.Disconnect = function(nodeId, newNodeId) { action.replacements = function(graph) { var candidates = [], keeping = false, - parents = graph.parentWays(graph.entity(nodeId)); + parentWays = graph.parentWays(graph.entity(nodeId)); - parents.forEach(function(parent) { - if (wayIds && wayIds.indexOf(parent.id) === -1) { + parentWays.forEach(function(way) { + if (wayIds && wayIds.indexOf(way.id) === -1) { keeping = true; return; } - parent.nodes.forEach(function(waynode, index) { + way.nodes.forEach(function(waynode, index) { if (waynode === nodeId) { - candidates.push({wayID: parent.id, index: index}); + candidates.push({wayID: way.id, index: index}); } }); }); + candidates = _.uniq(candidates, function(item) { return item.wayID; } ); return keeping ? candidates : candidates.slice(1); };