Skip to content

Commit

Permalink
Extend protection to multipolygon outer ways
Browse files Browse the repository at this point in the history
  • Loading branch information
systemed committed Feb 12, 2015
1 parent ff1597f commit 8148db3
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
7 changes: 5 additions & 2 deletions js/id/actions/delete_way.js
Expand Up @@ -33,12 +33,15 @@ iD.actions.DeleteWay = function(wayId) {

action.disabled = function(graph) {
var way = graph.entity(wayId);
var reltypes = ['route','boundary'];
var reltypes = ['route','boundary','multipolygon'];
var required_roles = { 'multipolygon': 'outer' };
var disabled = false;
graph.parentRelations(way)
.forEach(function(parent) {
if (reltypes.indexOf(parent.tags.type)>-1) {
disabled = 'part_of_relation';
if (!required_roles[parent.tags.type] || parent.containsEntityInRole(way,required_roles[parent.tags.type])) {
disabled = 'part_of_relation';
}
}
});
return disabled;
Expand Down
10 changes: 10 additions & 0 deletions js/id/core/relation.js
Expand Up @@ -115,6 +115,16 @@ _.extend(iD.Relation.prototype, {
}
},

// Test whether the relation contains an entity in the given role.
containsEntityInRole: function(entity, role) {
for (var i = 0; i < this.members.length; i++) {
if (this.members[i].id === entity.id && this.members[i].type === entity.type && this.members[i].role === role) {
return true;
}
}
return false;
},

addMember: function(member, index) {
var members = this.members.slice();
members.splice(index === undefined ? members.length : index, 0, member);
Expand Down

0 comments on commit 8148db3

Please sign in to comment.