Support deleting relations

This commit is contained in:
John Firebaugh
2013-02-01 14:46:59 -05:00
parent 3da0e70c0f
commit 7ba31f05d2
6 changed files with 40 additions and 4 deletions

View File

@@ -77,6 +77,7 @@
<script src='js/id/actions/add_vertex.js'></script>
<script src='js/id/actions/change_tags.js'></script>
<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/move_node.js'></script>
<script src='js/id/actions/move_way.js'></script>

View File

@@ -0,0 +1,13 @@
// https://github.com/openstreetmap/potlatch2/blob/master/net/systemeD/halcyon/connection/actions/DeleteRelationAction.as
iD.actions.DeleteRelation = function(relationId) {
return function(graph) {
var relation = graph.entity(relationId);
graph.parentRelations(relation)
.forEach(function(parent) {
graph = graph.replace(parent.removeMember(relationId));
});
return graph.remove(relation);
};
};

View File

@@ -3,7 +3,11 @@ iD.operations.Delete = function(selection, context) {
var operation = function() {
var entity = context.entity(entityId),
action = {way: iD.actions.DeleteWay, node: iD.actions.DeleteNode}[entity.type],
action = {
way: iD.actions.DeleteWay,
node: iD.actions.DeleteNode,
relation: iD.actions.DeleteRelation
}[entity.type],
annotation = t('operations.delete.annotation.' + context.geometry(entityId));
context.perform(
@@ -12,9 +16,7 @@ iD.operations.Delete = function(selection, context) {
};
operation.available = function() {
var entity = context.entity(entityId);
return selection.length === 1 &&
(entity.type === 'way' || entity.type === 'node');
return selection.length === 1;
};
operation.enabled = function() {

View File

@@ -74,6 +74,7 @@
<script src='../js/id/actions/change_tags.js'></script>
<script src='../js/id/actions/circularize.js'></script>
<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/move_node.js'></script>
<script src='../js/id/actions/move_way.js'></script>
@@ -141,6 +142,7 @@
<script src="spec/actions/add_entity.js"></script>
<script src="spec/actions/change_tags.js"></script>
<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/move_node.js"></script>
<script src="spec/actions/move_way.js"></script>

View File

@@ -36,6 +36,7 @@
<script src="spec/actions/add_entity.js"></script>
<script src="spec/actions/change_tags.js"></script>
<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/move_node.js"></script>
<script src="spec/actions/move_way.js"></script>

View File

@@ -0,0 +1,17 @@
describe("iD.actions.DeleteRelation", function () {
it("removes the relation from the graph", function () {
var relation = iD.Relation(),
action = iD.actions.DeleteRelation(relation.id),
graph = action(iD.Graph([relation]));
expect(graph.entity(relation.id)).to.be.undefined;
});
it("removes the relation from parent relations", function () {
var a = iD.Relation(),
b = iD.Relation(),
parent = iD.Relation({members: [{ id: a.id }, { id: b.id }]}),
action = iD.actions.DeleteRelation(a.id),
graph = action(iD.Graph([a, b, parent]));
expect(graph.entity(parent.id).members).to.eql([{ id: b.id }]);
});
});