From b065de05509f3c434946b0bec9d87fac0a35778c Mon Sep 17 00:00:00 2001 From: Quincy Morgan Date: Wed, 7 Aug 2019 09:48:19 -0500 Subject: [PATCH] Generalize the `address` field type Add `amenity=letter_box` preset with `post:*` field (close #6718) --- data/presets.yaml | 8 ++++ data/presets/fields.json | 3 +- data/presets/fields/address.json | 2 +- data/presets/fields/post.json | 29 +++++++++++++ data/presets/presets.json | 1 + data/presets/presets/amenity/letter_box.json | 45 ++++++++++++++++++++ data/taginfo.json | 21 +++++++++ dist/locales/en.json | 7 +++ modules/ui/fields/address.js | 14 +++--- 9 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 data/presets/fields/post.json create mode 100644 data/presets/presets/amenity/letter_box.json diff --git a/data/presets.yaml b/data/presets.yaml index b8b043da4..a910749ec 100644 --- a/data/presets.yaml +++ b/data/presets.yaml @@ -1525,6 +1525,9 @@ en: population: # population=* label: Population + post: + # 'post:block_number=*, post:city=*, post:block_number=*, post:conscriptionnumber=*, post:county=*, post:country=*, post:county=*, post:district=*, post:floor=*, post:hamlet=*, post:housename=*, post:housenumber=*, post:neighbourhood=*, post:place=*, post:postcode=*, post:province=*, post:quarter=*, post:state=*, post:street=*, post:subdistrict=*, post:suburb=*, post:unit=*' + label: Delivery Address power: # power=* label: Type @@ -2828,6 +2831,11 @@ en: name: Language School # 'terms: esl' terms: '' + amenity/letter_box: + # amenity=letter_box + name: Letter Box + # 'terms: curbside delivery box,home delivery box,direct-to-door delivery box,letter hole,letter plate,letter slot,letterbox,letterhole,letterplate,letterslot,mail box,mail hole,mail slot,mailbox,mailhole,mailslot,through-door delivery box' + terms: '' amenity/library: # amenity=library name: Library diff --git a/data/presets/fields.json b/data/presets/fields.json index bd3c4720f..b06d4c9e7 100644 --- a/data/presets/fields.json +++ b/data/presets/fields.json @@ -3,7 +3,7 @@ "access_simple": {"key": "access", "type": "combo", "label": "Allowed Access", "options": ["yes", "permissive", "private", "customers", "permit", "no"]}, "access": {"keys": ["access", "foot", "motor_vehicle", "bicycle", "horse"], "reference": {"key": "access"}, "type": "access", "label": "Allowed Access", "placeholder": "Not Specified", "strings": {"types": {"access": "All", "foot": "Foot", "motor_vehicle": "Motor Vehicles", "bicycle": "Bicycles", "horse": "Horses"}, "options": {"yes": {"title": "Allowed", "description": "Access allowed by law; a right of way"}, "no": {"title": "Prohibited", "description": "Access not allowed to the general public"}, "permissive": {"title": "Permissive", "description": "Access allowed until such time as the owner revokes the permission"}, "private": {"title": "Private", "description": "Access allowed only with permission of the owner on an individual basis"}, "designated": {"title": "Designated", "description": "Access allowed according to signs or specific local laws"}, "destination": {"title": "Destination", "description": "Access allowed only to reach a destination"}, "dismount": {"title": "Dismount", "description": "Access allowed but rider must dismount"}, "permit": {"title": "Permit", "description": "Access allowed only with a valid permit or license"}}}}, "addr/interpolation": {"key": "addr:interpolation", "type": "combo", "label": "Type", "strings": {"options": {"all": "All", "even": "Even", "odd": "Odd", "alphabetic": "Alphabetic"}}}, - "address": {"type": "address", "keys": ["addr:block_number", "addr:city", "addr:block_number", "addr:conscriptionnumber", "addr:county", "addr:country", "addr:county", "addr:district", "addr:floor", "addr:hamlet", "addr:housename", "addr:housenumber", "addr:neighbourhood", "addr:place", "addr:postcode", "addr:province", "addr:quarter", "addr:state", "addr:street", "addr:subdistrict", "addr:suburb", "addr:unit"], "reference": {"key": "addr"}, "icon": "address", "label": "Address", "strings": {"placeholders": {"block_number": "Block Number", "block_number!jp": "Block No.", "city": "City", "city!jp": "City/Town/Village/Tokyo Special Ward", "city!vn": "City/Town", "conscriptionnumber": "123", "country": "Country", "county": "County", "county!jp": "District", "district": "District", "district!vn": "Arrondissement/Town/District", "floor": "Floor", "hamlet": "Hamlet", "housename": "Housename", "housenumber": "123", "housenumber!jp": "Building No./Lot No.", "neighbourhood": "Neighbourhood", "neighbourhood!jp": "Chōme/Aza/Koaza", "place": "Place", "postcode": "Postcode", "province": "Province", "province!jp": "Prefecture", "quarter": "Quarter", "quarter!jp": "Ōaza/Machi", "state": "State", "street": "Street", "subdistrict": "Subdistrict", "subdistrict!vn": "Ward/Commune/Townlet", "suburb": "Suburb", "suburb!jp": "Ward", "unit": "Unit"}}}, + "address": {"type": "address", "key": "addr", "keys": ["addr:block_number", "addr:city", "addr:block_number", "addr:conscriptionnumber", "addr:county", "addr:country", "addr:county", "addr:district", "addr:floor", "addr:hamlet", "addr:housename", "addr:housenumber", "addr:neighbourhood", "addr:place", "addr:postcode", "addr:province", "addr:quarter", "addr:state", "addr:street", "addr:subdistrict", "addr:suburb", "addr:unit"], "icon": "address", "label": "Address", "strings": {"placeholders": {"block_number": "Block Number", "block_number!jp": "Block No.", "city": "City", "city!jp": "City/Town/Village/Tokyo Special Ward", "city!vn": "City/Town", "conscriptionnumber": "123", "country": "Country", "county": "County", "county!jp": "District", "district": "District", "district!vn": "Arrondissement/Town/District", "floor": "Floor", "hamlet": "Hamlet", "housename": "Housename", "housenumber": "123", "housenumber!jp": "Building No./Lot No.", "neighbourhood": "Neighbourhood", "neighbourhood!jp": "Chōme/Aza/Koaza", "place": "Place", "postcode": "Postcode", "province": "Province", "province!jp": "Prefecture", "quarter": "Quarter", "quarter!jp": "Ōaza/Machi", "state": "State", "street": "Street", "subdistrict": "Subdistrict", "subdistrict!vn": "Ward/Commune/Townlet", "suburb": "Suburb", "suburb!jp": "Ward", "unit": "Unit"}}}, "admin_level": {"key": "admin_level", "type": "number", "minValue": 1, "label": "Admin Level"}, "aerialway": {"key": "aerialway", "type": "typeCombo", "label": "Type"}, "aerialway/access": {"key": "aerialway:access", "type": "combo", "label": "Access", "strings": {"options": {"entry": "Entry", "exit": "Exit", "both": "Both"}}}, @@ -272,6 +272,7 @@ "playground/min_age": {"key": "min_age", "type": "number", "minValue": 0, "label": "Minimum Age"}, "polling_station": {"key": "polling_station", "type": "check", "label": "Polling Place"}, "population": {"key": "population", "type": "text", "label": "Population"}, + "post": {"type": "address", "key": "post", "keys": ["post:block_number", "post:city", "post:block_number", "post:conscriptionnumber", "post:county", "post:country", "post:county", "post:district", "post:floor", "post:hamlet", "post:housename", "post:housenumber", "post:neighbourhood", "post:place", "post:postcode", "post:province", "post:quarter", "post:state", "post:street", "post:subdistrict", "post:suburb", "post:unit"], "label": "Delivery Address"}, "power_supply": {"key": "power_supply", "type": "check", "label": "Power Supply"}, "power": {"key": "power", "type": "typeCombo", "label": "Type"}, "preschool": {"key": "preschool", "type": "check", "label": "Preschool"}, diff --git a/data/presets/fields/address.json b/data/presets/fields/address.json index 0aeceb166..e5f384e12 100644 --- a/data/presets/fields/address.json +++ b/data/presets/fields/address.json @@ -1,5 +1,6 @@ { "type": "address", + "key": "addr", "keys": [ "addr:block_number", "addr:city", @@ -24,7 +25,6 @@ "addr:suburb", "addr:unit" ], - "reference": {"key": "addr"}, "icon": "address", "label": "Address", "strings": { diff --git a/data/presets/fields/post.json b/data/presets/fields/post.json new file mode 100644 index 000000000..fb22ab382 --- /dev/null +++ b/data/presets/fields/post.json @@ -0,0 +1,29 @@ +{ + "type": "address", + "key": "post", + "keys": [ + "post:block_number", + "post:city", + "post:block_number", + "post:conscriptionnumber", + "post:county", + "post:country", + "post:county", + "post:district", + "post:floor", + "post:hamlet", + "post:housename", + "post:housenumber", + "post:neighbourhood", + "post:place", + "post:postcode", + "post:province", + "post:quarter", + "post:state", + "post:street", + "post:subdistrict", + "post:suburb", + "post:unit" + ], + "label": "Delivery Address" +} diff --git a/data/presets/presets.json b/data/presets/presets.json index e4ab32dd8..9ae777a77 100644 --- a/data/presets/presets.json +++ b/data/presets/presets.json @@ -133,6 +133,7 @@ "amenity/karaoke": {"icon": "maki-karaoke", "fields": ["name", "operator", "address", "building_area", "opening_hours", "website"], "moreFields": ["air_conditioning", "email", "fax", "payment_multi", "phone", "smoking", "wheelchair"], "geometry": ["point", "area"], "terms": ["karaoke club", "karaoke room", "karaoke television", "KTV"], "tags": {"amenity": "karaoke_box"}, "name": "Karaoke Box"}, "amenity/kindergarten": {"icon": "maki-school", "fields": ["name", "operator", "address", "phone", "preschool"], "moreFields": ["email", "fax", "opening_hours", "payment_multi", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["kindergarden", "pre-school"], "tags": {"amenity": "kindergarten"}, "name": "Preschool/Kindergarten Grounds"}, "amenity/language_school": {"icon": "maki-school", "fields": ["name", "operator", "operator/type", "address", "building_area", "opening_hours", "language_multi"], "moreFields": ["email", "fax", "internet_access", "internet_access/fee", "internet_access/ssid", "payment_multi", "phone", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["esl"], "tags": {"amenity": "language_school"}, "name": "Language School"}, + "amenity/letter_box": {"icon": "temaki-letter_box", "fields": ["post", "access_simple", "collection_times", "height"], "moreFields": ["covered", "indoor", "lit", "manufacturer", "material", "operator", "wheelchair"], "geometry": ["point", "vertex"], "tags": {"amenity": "letter_box"}, "terms": ["curbside delivery box", "home delivery box", "direct-to-door delivery box", "letter hole", "letter plate", "letter slot", "letterbox", "letterhole", "letterplate", "letterslot", "mail box", "mail hole", "mail slot", "mailbox", "mailhole", "mailslot", "through-door delivery box"], "name": "Letter Box"}, "amenity/library": {"icon": "maki-library", "fields": ["name", "operator", "operator/type", "building_area", "address", "ref/isil", "internet_access", "internet_access/fee", "internet_access/ssid"], "moreFields": ["access_simple", "air_conditioning", "email", "fax", "opening_hours", "payment_multi", "phone", "polling_station", "website", "wheelchair"], "geometry": ["point", "area"], "terms": ["book"], "tags": {"amenity": "library"}, "name": "Library"}, "amenity/love_hotel": {"icon": "maki-heart", "fields": ["name", "operator", "address", "building_area", "rooms", "internet_access", "internet_access/fee"], "moreFields": ["smoking", "payment_multi", "internet_access/ssid", "website", "phone", "email", "fax", "wheelchair"], "geometry": ["point", "area"], "tags": {"amenity": "love_hotel"}, "name": "Love Hotel"}, "amenity/marketplace": {"icon": "maki-shop", "fields": ["name", "operator", "address", "building", "opening_hours"], "moreFields": ["website", "phone", "email", "fax", "wheelchair"], "geometry": ["point", "area"], "tags": {"amenity": "marketplace"}, "name": "Marketplace"}, diff --git a/data/presets/presets/amenity/letter_box.json b/data/presets/presets/amenity/letter_box.json new file mode 100644 index 000000000..08901eab3 --- /dev/null +++ b/data/presets/presets/amenity/letter_box.json @@ -0,0 +1,45 @@ +{ + "icon": "temaki-letter_box", + "fields": [ + "post", + "access_simple", + "collection_times", + "height" + ], + "moreFields": [ + "covered", + "indoor", + "lit", + "manufacturer", + "material", + "operator", + "wheelchair" + ], + "geometry": [ + "point", + "vertex" + ], + "tags": { + "amenity": "letter_box" + }, + "terms": [ + "curbside delivery box", + "home delivery box", + "direct-to-door delivery box", + "letter hole", + "letter plate", + "letter slot", + "letterbox", + "letterhole", + "letterplate", + "letterslot", + "mail box", + "mail hole", + "mail slot", + "mailbox", + "mailhole", + "mailslot", + "through-door delivery box" + ], + "name": "Letter Box" +} diff --git a/data/taginfo.json b/data/taginfo.json index 7896241e6..651a0aa4c 100644 --- a/data/taginfo.json +++ b/data/taginfo.json @@ -135,6 +135,7 @@ {"key": "amenity", "value": "karaoke_box", "description": "πŸ„Ώ Karaoke Box", "object_types": ["node", "area"], "icon_url": "https://cdn.jsdelivr.net/gh/mapbox/maki/icons/karaoke-15.svg"}, {"key": "amenity", "value": "kindergarten", "description": "πŸ„Ώ Preschool/Kindergarten Grounds", "object_types": ["node", "area"], "icon_url": "https://cdn.jsdelivr.net/gh/mapbox/maki/icons/school-15.svg"}, {"key": "amenity", "value": "language_school", "description": "πŸ„Ώ Language School", "object_types": ["node", "area"], "icon_url": "https://cdn.jsdelivr.net/gh/mapbox/maki/icons/school-15.svg"}, + {"key": "amenity", "value": "letter_box", "description": "πŸ„Ώ Letter Box", "object_types": ["node"], "icon_url": "https://cdn.jsdelivr.net/gh/bhousel/temaki/icons/letter_box.svg"}, {"key": "amenity", "value": "library", "description": "πŸ„Ώ Library", "object_types": ["node", "area"], "icon_url": "https://cdn.jsdelivr.net/gh/mapbox/maki/icons/library-15.svg"}, {"key": "amenity", "value": "love_hotel", "description": "πŸ„Ώ Love Hotel", "object_types": ["node", "area"], "icon_url": "https://cdn.jsdelivr.net/gh/mapbox/maki/icons/heart-15.svg"}, {"key": "amenity", "value": "marketplace", "description": "πŸ„Ώ Marketplace", "object_types": ["node", "area"], "icon_url": "https://cdn.jsdelivr.net/gh/mapbox/maki/icons/shop-15.svg"}, @@ -1566,6 +1567,26 @@ {"key": "max_age", "description": "πŸ„΅ Maximum Age"}, {"key": "min_age", "description": "πŸ„΅ Minimum Age"}, {"key": "population", "description": "πŸ„΅ Population"}, + {"key": "post:block_number", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:city", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:conscriptionnumber", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:county", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:country", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:district", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:floor", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:hamlet", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:housename", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:housenumber", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:neighbourhood", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:place", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:postcode", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:province", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:quarter", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:state", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:street", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:subdistrict", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:suburb", "description": "πŸ„΅ Delivery Address"}, + {"key": "post:unit", "description": "πŸ„΅ Delivery Address"}, {"key": "power_supply", "description": "πŸ„΅ Power Supply"}, {"key": "preschool", "description": "πŸ„΅ Preschool"}, {"key": "produce", "description": "πŸ„΅ Produce"}, diff --git a/dist/locales/en.json b/dist/locales/en.json index 08e52b81e..450b92155 100644 --- a/dist/locales/en.json +++ b/dist/locales/en.json @@ -3692,6 +3692,9 @@ "population": { "label": "Population" }, + "post": { + "label": "Delivery Address" + }, "power_supply": { "label": "Power Supply" }, @@ -4903,6 +4906,10 @@ "name": "Language School", "terms": "esl" }, + "amenity/letter_box": { + "name": "Letter Box", + "terms": "curbside delivery box,home delivery box,direct-to-door delivery box,letter hole,letter plate,letter slot,letterbox,letterhole,letterplate,letterslot,mail box,mail hole,mail slot,mailbox,mailhole,mailslot,through-door delivery box" + }, "amenity/library": { "name": "Library", "terms": "book" diff --git a/modules/ui/fields/address.js b/modules/ui/fields/address.js index 41c1db07f..139ae96a0 100644 --- a/modules/ui/fields/address.js +++ b/modules/ui/fields/address.js @@ -14,6 +14,8 @@ export function uiFieldAddress(field, context) { var wrap = d3_select(null); var _isInitialized = false; var _entity; + // needed for placeholder strings + var addrField = context.presets().field('address'); function getNearStreets() { var extent = _entity.extent(context.graph()); @@ -159,8 +161,8 @@ export function uiFieldAddress(field, context) { .property('type', 'text') .attr('placeholder', function (d) { var localkey = d.id + '!' + countryCode; - var tkey = field.strings.placeholders[localkey] ? localkey : d.id; - return field.t('placeholders.' + tkey); + var tkey = addrField.strings.placeholders[localkey] ? localkey : d.id; + return addrField.t('placeholders.' + tkey); }) .attr('class', function (d) { return 'addr-' + d.id; }) .call(utilNoAuto) @@ -220,8 +222,8 @@ export function uiFieldAddress(field, context) { var tags = {}; wrap.selectAll('input') - .each(function (field) { - tags['addr:' + field.id] = this.value || undefined; + .each(function (subfield) { + tags[field.key + ':' + subfield.id] = this.value || undefined; }); dispatch.call('change', this, tags, onInput); @@ -230,8 +232,8 @@ export function uiFieldAddress(field, context) { function updateTags(tags) { - utilGetSetValue(wrap.selectAll('input'), function (field) { - return tags['addr:' + field.id] || ''; + utilGetSetValue(wrap.selectAll('input'), function (subfield) { + return tags[field.key + ':' + subfield.id] || ''; }); }