diff --git a/index.html b/index.html index c88bace38..dae31a0fd 100644 --- a/index.html +++ b/index.html @@ -37,6 +37,7 @@ + diff --git a/js/id/ui/commit.js b/js/id/ui/commit.js index 49b8b649f..c9b02a875 100644 --- a/js/id/ui/commit.js +++ b/js/id/ui/commit.js @@ -131,7 +131,7 @@ iD.ui.Commit = function(context) { var li = section.append('ul') .attr('class', 'changeset-list') .selectAll('li') - .data(function(d) { return changes[d]; }) + .data(function(d) { return iD.util.relevantChanges(context.graph(), changes[d]); }) .enter() .append('li'); diff --git a/js/id/util/relevant_changes.js b/js/id/util/relevant_changes.js new file mode 100644 index 000000000..c2e4bce80 --- /dev/null +++ b/js/id/util/relevant_changes.js @@ -0,0 +1,18 @@ +// filters out verticies where the parent entity is already present +// for simpler changeset listing +iD.util.relevantChanges = function(graph, entities) { + var relevant = {}; + for (var i = entities.length - 1; i >= 0; i--) { + var entity = entities[i]; + if (entity.geometry(graph) === 'vertex') { + var parents = graph.parentWays(entity); + for (var j = parents.length - 1; j >= 0; j--) { + var parent = parents[j]; + relevant[parent.id] = parent; + } + } else { + relevant[entity.id] = entity; + } + } + return d3.values(relevant); +}; diff --git a/test/index.html b/test/index.html index 14fb4087e..170cc5ea4 100644 --- a/test/index.html +++ b/test/index.html @@ -192,6 +192,7 @@ + @@ -273,6 +274,7 @@ + diff --git a/test/index_packaged.html b/test/index_packaged.html index 356e4b687..650a0b886 100644 --- a/test/index_packaged.html +++ b/test/index_packaged.html @@ -91,6 +91,7 @@ + diff --git a/test/spec/util/relevant_changes.js b/test/spec/util/relevant_changes.js new file mode 100644 index 000000000..2a5432bd9 --- /dev/null +++ b/test/spec/util/relevant_changes.js @@ -0,0 +1,29 @@ +describe("iD.util.relevantChanges", function() { + var graph = iD.Graph({ + 'a': iD.Node({id: 'a', loc: [0, 0]}), + 'b': iD.Node({id: 'b', loc: [2, 0]}), + 'c': iD.Node({id: 'c', loc: [2, 2]}), + 'd': iD.Node({id: 'd', loc: [0, 2]}), + 'e': iD.Node({id: 'e', loc: [0, 2]}), + '-': iD.Way({id: '-', nodes: ['a', 'b', 'c', 'd', 'e', 'a']}) + }); + + it("returns a way that changed", function() { + var entities = [graph.entity('-')], + a = iD.util.relevantChanges(graph, entities); + expect(a).to.eql(entities); + }); + + it("just returns the way that changed, leaving out the verticies", function() { + var entities = [ + graph.entity('a'), + graph.entity('b'), + graph.entity('c'), + graph.entity('d'), + graph.entity('e'), + graph.entity('-')], + a = iD.util.relevantChanges(graph, entities), + way = [graph.entity('-')]; + expect(a).to.eql(way); + }); +});