mirror of
https://github.com/FoggedLens/iD.git
synced 2026-03-31 01:09:22 +02:00
Extract iD.actions.DiscardTags
This commit is contained in:
@@ -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>
|
||||
|
||||
16
js/id/actions/discard_tags.js
Normal file
16
js/id/actions/discard_tags.js
Normal 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;
|
||||
}
|
||||
};
|
||||
@@ -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()
|
||||
};
|
||||
},
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
25
test/spec/actions/discard_tags.js
Normal file
25
test/spec/actions/discard_tags.js
Normal 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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user