diff --git a/js/id/modes/add_area.js b/js/id/modes/add_area.js index 58109befc..6b476a5b8 100644 --- a/js/id/modes/add_area.js +++ b/js/id/modes/add_area.js @@ -30,6 +30,18 @@ iD.modes.AddArea = function() { iD.actions.AddWayNode(way.id, node.id), iD.actions.AddWayNode(way.id, node.id)); + } else if (datum.type === 'way') { + // begin a new way starting from an existing way + var choice = iD.geo.chooseIndex(datum, d3.mouse(map.surface.node()), map); + node = iD.Node({ loc: choice.loc }); + + history.perform( + iD.actions.AddWay(way), + iD.actions.AddNode(node), + iD.actions.AddWayNode(datum.id, node.id, choice.index), + iD.actions.AddWayNode(way.id, node.id), + iD.actions.AddWayNode(way.id, node.id)); + } else { // start from a new node node = iD.Node({loc: map.mouseCoordinates()}); diff --git a/js/id/modes/draw_area.js b/js/id/modes/draw_area.js index d692ae550..8ad50c97b 100644 --- a/js/id/modes/draw_area.js +++ b/js/id/modes/draw_area.js @@ -20,6 +20,10 @@ iD.modes.DrawArea = function(wayId) { behavior.addNode(node, way.nodes.length > 2 ? 'added to an area' : ''); } + function addWay(way, loc, index) { + behavior.addWay(way, loc, index, way.nodes.length > 2 ? 'added to an area' : ''); + } + function add(loc) { behavior.add(loc, way.nodes.length > 2 ? 'added to an area' : ''); } @@ -28,7 +32,7 @@ iD.modes.DrawArea = function(wayId) { .on('addHead', addHeadTail) .on('addTail', addHeadTail) .on('addNode', addNode) - .on('addWay', add) + .on('addWay', addWay) .on('add', add); mode.map.surface.call(behavior);