Add iD.actions.DeleteMember

This commit is contained in:
John Firebaugh
2013-05-16 14:06:38 -07:00
parent ee4ec4e252
commit 1276672783
6 changed files with 30 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
iD.actions.DeleteMember = function(relationId, memberIndex) {
return function(graph) {
return graph.replace(graph.entity(relationId).removeMember(memberIndex));
};
};

View File

@@ -73,6 +73,12 @@ _.extend(iD.Relation.prototype, {
return this.update({members: members});
},
removeMember: function(index) {
var members = this.members.slice();
members.splice(index, 1);
return this.update({members: members});
},
removeMembersWithID: function(id) {
var members = _.reject(this.members, function(m) { return m.id === id; });
return this.update({members: members});

View File

@@ -105,6 +105,7 @@
<script src='../js/id/actions/add_vertex.js'></script>
<script src='../js/id/actions/change_tags.js'></script>
<script src='../js/id/actions/connect.js'></script>
<script src='../js/id/actions/delete_member.js'></script>
<script src='../js/id/actions/delete_multiple.js'></script>
<script src='../js/id/actions/delete_node.js'></script>
<script src="../js/id/actions/delete_relation.js"></script>
@@ -188,6 +189,7 @@
<script src='spec/actions/circularize.js'></script>
<script src='spec/actions/orthogonalize.js'></script>
<script src='spec/actions/connect.js'></script>
<script src='spec/actions/delete_member.js'></script>
<script src="spec/actions/delete_multiple.js"></script>
<script src="spec/actions/delete_node.js"></script>
<script src="spec/actions/delete_relation.js"></script>

View File

@@ -30,6 +30,7 @@
<script src="spec/actions/change_tags.js"></script>
<script src='spec/actions/circularize.js'></script>
<script src='spec/actions/connect.js'></script>
<script src='spec/actions/delete_member.js'></script>
<script src="spec/actions/delete_multiple.js"></script>
<script src="spec/actions/delete_node.js"></script>
<script src="spec/actions/delete_relation.js"></script>

View File

@@ -0,0 +1,9 @@
describe("iD.actions.DeleteMember", function () {
it("removes the member at the specified index", function () {
var node = iD.Node(),
relation = iD.Relation({members: [node.id]}),
action = iD.actions.DeleteMember(relation.id, 0),
graph = action(iD.Graph([node, relation]));
expect(graph.entity(relation.id).members).to.eql([]);
});
});

View File

@@ -128,6 +128,13 @@ describe('iD.Relation', function () {
});
});
describe("#removeMember", function () {
it("removes the member at the specified index", function () {
var r = iD.Relation({members: [{id: 'a'}, {id: 'b'}, {id: 'c'}]});
expect(r.removeMember(1).members).to.eql([{id: 'a'}, {id: 'c'}]);
});
});
describe("#removeMembersWithID", function () {
it("removes members with the given ID", function () {
var r = iD.Relation({members: [{id: 'a'}, {id: 'b'}, {id: 'a'}]});