diff --git a/js/id/actions/delete_way.js b/js/id/actions/delete_way.js index 19f0d669edc..01b7851df9f 100644 --- a/js/id/actions/delete_way.js +++ b/js/id/actions/delete_way.js @@ -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; diff --git a/js/id/core/relation.js b/js/id/core/relation.js index 761db2a6556..01b940ff931 100644 --- a/js/id/core/relation.js +++ b/js/id/core/relation.js @@ -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);