diff --git a/js/id/util/relevant_changes.js b/js/id/util/relevant_changes.js index c289d2eeb..869ae27c5 100644 --- a/js/id/util/relevant_changes.js +++ b/js/id/util/relevant_changes.js @@ -6,7 +6,7 @@ iD.util.relevantChanges = function(graph, changes, base) { function addEntity(entity, changeType) { relevant[entity.id] = { entity: entity, - changeType: changeType, + changeType: changeType }; } @@ -21,14 +21,20 @@ iD.util.relevantChanges = function(graph, changes, base) { _.each(changes, function(entities, change) { _.each(entities, function(entity) { - var relevantGraph = change === 'deleted' ? base : graph; - if (entity.geometry(relevantGraph) === 'vertex') { - addParents(entity, relevantGraph); - if (change === 'modified' && (entity.tags !== base.entity(entity.id).tags)) { + if (entity.geometry(change === 'deleted' ? base : graph) !== 'vertex') { + addEntity(entity, change); + + } else if (change === 'modified') { + var moved = entity.loc !== base.entity(entity.id).loc, + retagged = entity.tags !== base.entity(entity.id).tags; + + if (moved) { + addParents(entity, graph); + } + + if (retagged || (moved && entity.hasInterestingTags())) { addEntity(entity, change); } - } else { - addEntity(entity, change); } }); }); diff --git a/test/spec/util/relevant_changes.js b/test/spec/util/relevant_changes.js index 2182f63dd..23ee5f631 100644 --- a/test/spec/util/relevant_changes.js +++ b/test/spec/util/relevant_changes.js @@ -1,6 +1,6 @@ describe("iD.util.relevantChanges", function() { var base = iD.Graph({ - 'a': iD.Node({id: 'a', loc: [0, 0]}), + 'a': iD.Node({id: 'a', loc: [0, 0], tags: {crossing: 'zebra'}}), 'b': iD.Node({id: 'b', loc: [2, 0]}), 'c': iD.Node({id: 'c', loc: [2, 2]}), 'd': iD.Node({id: 'd', loc: [0, 2]}), @@ -84,7 +84,7 @@ describe("iD.util.relevantChanges", function() { }); it("reports an existing vertex with added tags as modified", function() { - var vertex = iD.Node({id: 'f', tags: {yes: 'it works'}}), + var vertex = base.entity('a').mergeTags({highway: 'traffic_signals'}), graph = base.replace(vertex), changes = { modified: [vertex] }, a = iD.util.relevantChanges(graph, changes, base); @@ -93,4 +93,15 @@ describe("iD.util.relevantChanges", function() { entity: vertex }]); }); + + it("reports an existing tagged vertex that is moved as modified", function() { + var vertex = base.entity('a').move([1, 2]), + graph = base.replace(vertex), + changes = { modified: [vertex] }, + a = iD.util.relevantChanges(graph, changes, base); + expect(a[1]).to.eql({ + changeType: 'modified', + entity: vertex + }); + }); });