diff --git a/data/presets.yaml b/data/presets.yaml index 714cc94d7..1ddc62be1 100644 --- a/data/presets.yaml +++ b/data/presets.yaml @@ -1748,6 +1748,9 @@ en: shop/supermarket: name: Supermarket terms: "" + shop/tailor: + name: Tailor + terms: "" shop/toys: name: Toy Store terms: "" diff --git a/data/presets/presets.json b/data/presets/presets.json index a1e91e4d5..31f32bc81 100644 --- a/data/presets/presets.json +++ b/data/presets/presets.json @@ -3351,7 +3351,8 @@ "address", "operator", "opening_hours" - ] + ], + "searchable": false }, "craft/tiler": { "name": "Tiler", @@ -7590,6 +7591,27 @@ }, "name": "Supermarket" }, + "shop/tailor": { + "name": "Tailor", + "geometry": [ + "point", + "area" + ], + "terms": [ + "tailor", + "clothes" + ], + "tags": { + "shop": "tailor" + }, + "icon": "clothing-store", + "fields": [ + "building_area", + "address", + "operator", + "opening_hours" + ] + }, "shop/toys": { "icon": "shop", "fields": [ diff --git a/data/presets/presets/craft/tailor.json b/data/presets/presets/craft/tailor.json index 7fb43924a..cf70706b2 100644 --- a/data/presets/presets/craft/tailor.json +++ b/data/presets/presets/craft/tailor.json @@ -17,5 +17,6 @@ "address", "operator", "opening_hours" - ] + ], + "searchable": false } diff --git a/data/presets/presets/shop/tailor.json b/data/presets/presets/shop/tailor.json new file mode 100644 index 000000000..690df475f --- /dev/null +++ b/data/presets/presets/shop/tailor.json @@ -0,0 +1,21 @@ +{ + "name": "Tailor", + "geometry": [ + "point", + "area" + ], + "terms": [ + "tailor", + "clothes" + ], + "tags": { + "shop": "tailor" + }, + "icon": "clothing-store", + "fields": [ + "building_area", + "address", + "operator", + "opening_hours" + ] +} diff --git a/dist/locales/en.json b/dist/locales/en.json index 92bc651b1..b2a050b07 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -2783,6 +2783,10 @@ "name": "Supermarket", "terms": "bazaar,boutique,chain,co-op,cut-rate store,discount store,five-and-dime,flea market,galleria,grocery store,mall,mart,outlet,outlet store,shop,shopping center,shopping centre,shopping plaza,stand,store,supermarket,thrift shop" }, + "shop/tailor": { + "name": "Tailor", + "terms": "tailor,clothes" + }, "shop/toys": { "name": "Toy Store", "terms": "" diff --git a/js/id/actions/delete_member.js b/js/id/actions/delete_member.js index 50b331e14..ffed567ca 100644 --- a/js/id/actions/delete_member.js +++ b/js/id/actions/delete_member.js @@ -1,5 +1,13 @@ iD.actions.DeleteMember = function(relationId, memberIndex) { return function(graph) { - return graph.replace(graph.entity(relationId).removeMember(memberIndex)); + var relation = graph.entity(relationId) + .removeMember(memberIndex); + + graph = graph.replace(relation); + + if (relation.isDegenerate()) + graph = iD.actions.DeleteRelation(relation.id)(graph); + + return graph; }; }; diff --git a/js/id/ui/raw_member_editor.js b/js/id/ui/raw_member_editor.js index dbc34c678..20a0ca0b6 100644 --- a/js/id/ui/raw_member_editor.js +++ b/js/id/ui/raw_member_editor.js @@ -17,6 +17,10 @@ iD.ui.RawMemberEditor = function(context) { context.perform( iD.actions.DeleteMember(d.relation.id, d.index), t('operations.delete_member.annotation')); + + if (!context.hasEntity(d.relation.id)) { + context.enter(iD.modes.Browse(context)); + } } function rawMemberEditor(selection) { diff --git a/test/spec/actions/delete_member.js b/test/spec/actions/delete_member.js index f23cdb700..187f2c20c 100644 --- a/test/spec/actions/delete_member.js +++ b/test/spec/actions/delete_member.js @@ -1,9 +1,18 @@ describe("iD.actions.DeleteMember", function () { it("removes the member at the specified index", function () { - var node = iD.Node(), - relation = iD.Relation({members: [{id: node.id}]}), - action = iD.actions.DeleteMember(relation.id, 0), - graph = action(iD.Graph([node, relation])); - expect(graph.entity(relation.id).members).to.eql([]); + var a = iD.Node({id: 'a'}), + b = iD.Node({id: 'b'}), + r = iD.Relation({members: [{id: 'a'}, {id: 'b'}]}), + action = iD.actions.DeleteMember(r.id, 0), + graph = action(iD.Graph([a, b, r])); + expect(graph.entity(r.id).members).to.eql([{id: 'b'}]); + }); + + it("deletes relations that become degenerate", function () { + var a = iD.Node({id: 'a'}), + r = iD.Relation({id: 'r', members: [{id: 'a'}]}), + action = iD.actions.DeleteMember(r.id, 0), + graph = action(iD.Graph([a, r])); + expect(graph.hasEntity('r')).to.be.undefined; }); });