Extract iD.actions.DiscardTags

This commit is contained in:
John Firebaugh
2013-05-12 12:40:00 -07:00
parent a53d5cbb44
commit 0ae54abdcc
7 changed files with 55 additions and 13 deletions

View File

@@ -125,6 +125,7 @@
<script src='js/id/actions/delete_node.js'></script>
<script src="js/id/actions/delete_relation.js"></script>
<script src="js/id/actions/delete_way.js"></script>
<script src='js/id/actions/discard_tags.js'></script>
<script src='js/id/actions/disconnect.js'></script>
<script src='js/id/actions/join.js'></script>
<script src='js/id/actions/merge.js'></script>

View File

@@ -0,0 +1,16 @@
iD.actions.DiscardTags = function(difference) {
return function(graph) {
function discardTags(entity) {
if (!_.isEmpty(entity.tags)) {
graph = graph.replace(entity.update({
tags: _.omit(entity.tags, iD.data.discarded)
}));
}
}
difference.modified().forEach(discardTags);
difference.created().forEach(discardTags);
return graph;
}
};

View File

@@ -137,22 +137,19 @@ iD.History = function(context) {
return iD.Difference(base, head);
},
changes: function() {
var difference = history.difference();
changes: function(action) {
var base = stack[0].graph,
head = stack[index].graph;
function discardTags(entity) {
if (_.isEmpty(entity.tags)) {
return entity;
} else {
return entity.update({
tags: _.omit(entity.tags, iD.data.discarded)
});
}
if (action) {
head = action(head);
}
var difference = iD.Difference(base, head);
return {
modified: difference.modified().map(discardTags),
created: difference.created().map(discardTags),
modified: difference.modified(),
created: difference.created(),
deleted: difference.deleted()
};
},

View File

@@ -38,7 +38,7 @@ iD.ui.Save = function(context) {
.call(loading);
connection.putChangeset(
history.changes(),
history.changes(iD.actions.DiscardTags(history.difference())),
e.comment,
history.imagery_used(),
function(err, changeset_id) {

View File

@@ -110,6 +110,7 @@
<script src='../js/id/actions/delete_node.js'></script>
<script src="../js/id/actions/delete_relation.js"></script>
<script src="../js/id/actions/delete_way.js"></script>
<script src='../js/id/actions/discard_tags.js'></script>
<script src='../js/id/actions/disconnect.js'></script>
<script src='../js/id/actions/join.js'></script>
<script src='../js/id/actions/merge.js'></script>
@@ -191,6 +192,7 @@
<script src="spec/actions/delete_node.js"></script>
<script src="spec/actions/delete_relation.js"></script>
<script src="spec/actions/delete_way.js"></script>
<script src='spec/actions/discard_tags.js'></script>
<script src='spec/actions/disconnect.js'></script>
<script src="spec/actions/join.js"></script>
<script src='spec/actions/merge.js'></script>

View File

@@ -34,6 +34,7 @@
<script src="spec/actions/delete_node.js"></script>
<script src="spec/actions/delete_relation.js"></script>
<script src="spec/actions/delete_way.js"></script>
<script src='spec/actions/discard_tags.js'></script>
<script src='spec/actions/disconnect.js'></script>
<script src="spec/actions/join.js"></script>
<script src='spec/actions/merge.js'></script>

View File

@@ -0,0 +1,25 @@
describe("iD.actions.DiscardTags", function() {
it("discards obsolete tags from modified entities", function() {
var way = iD.Way({id: 'w1', tags: {created_by: 'Potlatch'}}),
base = iD.Graph([way]),
head = base.replace(way.update({tags: {created_by: 'Potlatch', foo: 'bar'}})),
action = iD.actions.DiscardTags(iD.Difference(base, head));
expect(action(head).entity(way.id).tags).to.eql({foo: 'bar'});
});
it("discards obsolete tags from created entities", function() {
var way = iD.Way({tags: {created_by: 'Potlatch'}}),
base = iD.Graph(),
head = base.replace(way),
action = iD.actions.DiscardTags(iD.Difference(base, head));
expect(action(head).entity(way.id).tags).to.eql({});
});
it("doesn't modify entities without obsolete tags", function() {
var way = iD.Way(),
base = iD.Graph(),
head = base.replace(way),
action = iD.actions.DiscardTags(iD.Difference(base, head));
expect(action(head).entity(way.id)).to.equal(way);
});
});