]> git.openstreetmap.org Git - rails.git/blobdiff - vendor/assets/iD/iD.js
Merge pull request #14 from tomhughes/routing
[rails.git] / vendor / assets / iD / iD.js
index fd19d32de8f0ebedb489e3278b22ab63a3d91efb..c7bb962195dce765dd685e4dafbef7c4c5dbac1e 100644 (file)
@@ -16151,7 +16151,7 @@ window.iD = function () {
     return d3.rebind(context, dispatch, 'on');
 };
 
     return d3.rebind(context, dispatch, 'on');
 };
 
-iD.version = '1.3.5';
+iD.version = '1.3.7';
 
 (function() {
     var detected = {};
 
 (function() {
     var detected = {};
@@ -16187,7 +16187,7 @@ iD.version = '1.3.5';
 })();
 iD.taginfo = function() {
     var taginfo = {},
 })();
 iD.taginfo = function() {
     var taginfo = {},
-        endpoint = 'http://taginfo.openstreetmap.org/api/4/',
+        endpoint = 'https://taginfo.openstreetmap.org/api/4/',
         tag_sorts = {
             point: 'count_nodes',
             vertex: 'count_nodes',
         tag_sorts = {
             point: 'count_nodes',
             vertex: 'count_nodes',
@@ -16323,7 +16323,7 @@ iD.taginfo = function() {
 };
 iD.wikipedia  = function() {
     var wiki = {},
 };
 iD.wikipedia  = function() {
     var wiki = {},
-        endpoint = 'http://en.wikipedia.org/w/api.php?';
+        endpoint = 'https://en.wikipedia.org/w/api.php?';
 
     wiki.search = function(lang, query, callback) {
         lang = lang || 'en';
 
     wiki.search = function(lang, query, callback) {
         lang = lang || 'en';
@@ -17702,10 +17702,14 @@ iD.actions.MergePolygon = function(ids, newRelationId) {
             graph = graph.remove(m);
         });
 
             graph = graph.remove(m);
         });
 
-        members.forEach(function(m) {
-            var entity = graph.entity(m.id);
-            relation = relation.mergeTags(entity.tags);
-            graph = graph.replace(entity.update({ tags: {} }));
+        entities.closedWay.forEach(function(way) {
+            function isThisOuter(m) {
+                return m.id === way.id && m.role !== 'inner';
+            }
+            if (members.some(isThisOuter)) {
+                relation = relation.mergeTags(way.tags);
+                graph = graph.replace(way.update({ tags: {} }));
+            }
         });
 
         return graph.replace(relation.update({
         });
 
         return graph.replace(relation.update({
@@ -17719,6 +17723,8 @@ iD.actions.MergePolygon = function(ids, newRelationId) {
         if (entities.other.length > 0 ||
             entities.closedWay.length + entities.multipolygon.length < 2)
             return 'not_eligible';
         if (entities.other.length > 0 ||
             entities.closedWay.length + entities.multipolygon.length < 2)
             return 'not_eligible';
+        if (!entities.multipolygon.every(function(r) { return r.isComplete(graph); }))
+            return 'incomplete_relation';
     };
 
     return action;
     };
 
     return action;
@@ -17783,7 +17789,7 @@ iD.actions.Noop = function() {
  */
 
 iD.actions.Orthogonalize = function(wayId, projection) {
  */
 
 iD.actions.Orthogonalize = function(wayId, projection) {
-    var threshold = 7, // degrees within right or straight to alter
+    var threshold = 12, // degrees within right or straight to alter
         lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180),
         upperThreshold = Math.cos(threshold * Math.PI / 180);
 
         lowerThreshold = Math.cos((90 - threshold) * Math.PI / 180),
         upperThreshold = Math.cos(threshold * Math.PI / 180);
 
@@ -20567,6 +20573,9 @@ iD.operations.Merge = function(selectedIDs, context) {
         if (j === 'restriction' && m && p)
             return t('operations.merge.restriction', {relation: context.presets().item('type/restriction').name()});
 
         if (j === 'restriction' && m && p)
             return t('operations.merge.restriction', {relation: context.presets().item('type/restriction').name()});
 
+        if (p === 'incomplete_relation' && j && m)
+            return t('operations.merge.incomplete_relation');
+
         if (j && m && p)
             return t('operations.merge.' + j);
 
         if (j && m && p)
             return t('operations.merge.' + j);
 
@@ -20678,9 +20687,18 @@ iD.operations.Rotate = function(selectedIDs, context) {
     };
 
     operation.available = function() {
     };
 
     operation.available = function() {
-        return selectedIDs.length === 1 &&
-            context.entity(entityId).type === 'way' &&
-            context.geometry(entityId) === 'area';
+        var graph = context.graph(),
+            entity = graph.entity(entityId);
+
+        if (selectedIDs.length !== 1 ||
+            entity.type !== 'way')
+            return false;
+        if (context.geometry(entityId) === 'area')
+            return true;
+        if (entity.isClosed() &&
+            graph.parentRelations(entity).some(function(r) { return r.isMultipolygon(); }))
+            return true;
+        return false;
     };
 
     operation.disabled = function() {
     };
 
     operation.disabled = function() {
@@ -22024,7 +22042,9 @@ iD.History = function(context) {
         toJSON: function() {
             if (stack.length <= 1) return;
 
         toJSON: function() {
             if (stack.length <= 1) return;
 
-            var allEntities = {};
+            var allEntities = {},
+                baseEntities = {},
+                base = stack[0];
 
             var s = stack.map(function(i) {
                 var modified = [], deleted = [];
 
             var s = stack.map(function(i) {
                 var modified = [], deleted = [];
@@ -22037,6 +22057,12 @@ iD.History = function(context) {
                     } else {
                         deleted.push(id);
                     }
                     } else {
                         deleted.push(id);
                     }
+
+                    // make sure that the originals of changed or deleted entities get merged
+                    // into the base of the stack after restoring the data from JSON.
+                    if (id in base.graph.entities) {
+                        baseEntities[id] = base.graph.entities[id];
+                    }
                 });
 
                 var x = {};
                 });
 
                 var x = {};
@@ -22050,8 +22076,9 @@ iD.History = function(context) {
             });
 
             return JSON.stringify({
             });
 
             return JSON.stringify({
-                version: 2,
+                version: 3,
                 entities: _.values(allEntities),
                 entities: _.values(allEntities),
+                baseEntities: _.values(baseEntities),
                 stack: s,
                 nextIDs: iD.Entity.id.next,
                 index: index
                 stack: s,
                 nextIDs: iD.Entity.id.next,
                 index: index
@@ -22064,13 +22091,22 @@ iD.History = function(context) {
             iD.Entity.id.next = h.nextIDs;
             index = h.index;
 
             iD.Entity.id.next = h.nextIDs;
             index = h.index;
 
-            if (h.version === 2) {
+            if (h.version === 2 || h.version === 3) {
                 var allEntities = {};
 
                 h.entities.forEach(function(entity) {
                     allEntities[iD.Entity.key(entity)] = iD.Entity(entity);
                 });
 
                 var allEntities = {};
 
                 h.entities.forEach(function(entity) {
                     allEntities[iD.Entity.key(entity)] = iD.Entity(entity);
                 });
 
+                if (h.version === 3) {
+                    // this merges originals for changed entities into the base of
+                    // the stack even if the current stack doesn't have them (for
+                    // example when iD has been restarted in a different region)
+                    var baseEntities = h.baseEntities.map(iD.Entity);
+                    stack[0].graph.rebase(baseEntities, _.pluck(stack, 'graph'));
+                    tree.rebase(baseEntities);
+                }
+
                 stack = h.stack.map(function(d) {
                     var entities = {}, entity;
 
                 stack = h.stack.map(function(d) {
                     var entities = {}, entity;
 
@@ -22142,8 +22178,6 @@ iD.History = function(context) {
 
             var json = context.storage(getKey('saved_history'));
             if (json) history.fromJSON(json);
 
             var json = context.storage(getKey('saved_history'));
             if (json) history.fromJSON(json);
-
-            context.storage(getKey('saved_history', null));
         },
 
         _getKey: getKey
         },
 
         _getKey: getKey
@@ -22487,7 +22521,11 @@ iD.Tree = function(head) {
         return rect;
     }
 
         return rect;
     }
 
-    function updateParents(entity, insertions) {
+    function updateParents(entity, insertions, memo) {
+        if (memo && memo[entity.id]) return;
+        memo = memo || {};
+        memo[entity.id] = true;
+
         head.parentWays(entity).forEach(function(parent) {
             if (rectangles[parent.id]) {
                 rtree.remove(rectangles[parent.id]);
         head.parentWays(entity).forEach(function(parent) {
             if (rectangles[parent.id]) {
                 rtree.remove(rectangles[parent.id]);
@@ -22500,7 +22538,7 @@ iD.Tree = function(head) {
                 rtree.remove(rectangles[parent.id]);
                 insertions.push(parent);
             }
                 rtree.remove(rectangles[parent.id]);
                 insertions.push(parent);
             }
-            updateParents(parent, insertions);
+            updateParents(parent, insertions, memo);
         });
     }
 
         });
     }
 
@@ -23053,7 +23091,7 @@ iD.BackgroundSource.Bing = function(data, dispatch) {
 
     var bing = iD.BackgroundSource(data),
         key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM
 
     var bing = iD.BackgroundSource(data),
         key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM
-        url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' +
+        url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' +
             key + '&jsonp={callback}',
         providers = [];
 
             key + '&jsonp={callback}',
         providers = [];
 
@@ -23072,7 +23110,7 @@ iD.BackgroundSource.Bing = function(data, dispatch) {
         dispatch.change();
     });
 
         dispatch.change();
     });
 
-    var template = 'http://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z',
+    var template = 'https://ecn.t{t}.tiles.virtualearth.net/tiles/a{u}.jpeg?g=587&mkt=en-gb&n=z',
         subdomains = [0, 1, 2, 3];
 
     bing.url = function(coord) {
         subdomains = [0, 1, 2, 3];
 
     bing.url = function(coord) {
@@ -29371,7 +29409,6 @@ iD.ui.preset.access = function(field) {
 };
 iD.ui.preset.address = function(field, context) {
     var event = d3.dispatch('change'),
 };
 iD.ui.preset.address = function(field, context) {
     var event = d3.dispatch('change'),
-        housename,
         housenumber,
         street,
         city,
         housenumber,
         street,
         city,
@@ -29469,12 +29506,6 @@ iD.ui.preset.address = function(field, context) {
         var enter = wrap.enter().append('div')
             .attr('class', 'preset-input-wrap');
 
         var enter = wrap.enter().append('div')
             .attr('class', 'preset-input-wrap');
 
-        enter.append('input')
-            .property('type', 'text')
-            .attr('placeholder', field.t('placeholders.housename'))
-            .attr('class', 'addr-housename')
-            .attr('id', 'preset-input-' + field.id);
-
         enter.append('input')
             .property('type', 'text')
             .attr('placeholder', field.t('placeholders.number'))
         enter.append('input')
             .property('type', 'text')
             .attr('placeholder', field.t('placeholders.number'))
@@ -29497,7 +29528,6 @@ iD.ui.preset.address = function(field, context) {
 
         // Update
 
 
         // Update
 
-        housename = wrap.select('.addr-housename');
         housenumber = wrap.select('.addr-number');
         street = wrap.select('.addr-street');
         city = wrap.select('.addr-city');
         housenumber = wrap.select('.addr-number');
         street = wrap.select('.addr-street');
         city = wrap.select('.addr-city');
@@ -29528,7 +29558,6 @@ iD.ui.preset.address = function(field, context) {
 
     function change() {
         event.change({
 
     function change() {
         event.change({
-            'addr:housename': housename.value() || undefined,
             'addr:housenumber': housenumber.value() || undefined,
             'addr:street': street.value() || undefined,
             'addr:city': city.value() || undefined,
             'addr:housenumber': housenumber.value() || undefined,
             'addr:street': street.value() || undefined,
             'addr:city': city.value() || undefined,
@@ -29543,7 +29572,6 @@ iD.ui.preset.address = function(field, context) {
     };
 
     address.tags = function(tags) {
     };
 
     address.tags = function(tags) {
-        housename.value(tags['addr:housename'] || '');
         housenumber.value(tags['addr:housenumber'] || '');
         street.value(tags['addr:street'] || '');
         city.value(tags['addr:city'] || '');
         housenumber.value(tags['addr:housenumber'] || '');
         street.value(tags['addr:street'] || '');
         city.value(tags['addr:city'] || '');
@@ -29551,7 +29579,7 @@ iD.ui.preset.address = function(field, context) {
     };
 
     address.focus = function() {
     };
 
     address.focus = function() {
-        housename.node().focus();
+        housenumber.node().focus();
     };
 
     return d3.rebind(address, event, 'on');
     };
 
     return d3.rebind(address, event, 'on');
@@ -45609,7 +45637,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
             "name": "New & Misaligned TIGER Roads",
             "type": "tms",
             "description": "At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap",
             "name": "New & Misaligned TIGER Roads",
             "type": "tms",
             "description": "At zoom level 16+, public domain map data from the US Census. At lower zooms, only changes since 2006 minus changes already incorporated into OpenStreetMap",
-            "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/enf.ho204tap,enf.ho20a3n1,enf.game1617/{zoom}/{x}/{y}.png",
+            "template": "http://{switch:a,b,c}.tiles.mapbox.com/v3/enf.y5c4ygb9,enf.ho20a3n1,enf.game1617/{zoom}/{x}/{y}.png",
             "scaleExtent": [
                 0,
                 22
             "scaleExtent": [
                 0,
                 22
@@ -62599,7 +62627,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "icon": "hospital",
                 "fields": [
                     "building_area",
                 "icon": "hospital",
                 "fields": [
                     "building_area",
-                    "social_facility",
                     "address",
                     "opening_hours"
                 ]
                     "address",
                     "opening_hours"
                 ]
@@ -62657,7 +62684,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "dentist's office"
                 ],
                 "tags": {
                     "dentist's office"
                 ],
                 "tags": {
-                    "amenity": "doctors"
+                    "amenity": "dentist"
                 },
                 "icon": "hospital",
                 "fields": [
                 },
                 "icon": "hospital",
                 "fields": [
@@ -63338,6 +63365,95 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "name": "Shelter"
             },
                 ],
                 "name": "Shelter"
             },
+            "amenity/social_facility": {
+                "name": "Social Facility",
+                "geometry": [
+                    "point",
+                    "area"
+                ],
+                "terms": [],
+                "tags": {
+                    "amenity": "social_facility"
+                },
+                "fields": [
+                    "social_facility_for",
+                    "address",
+                    "phone",
+                    "opening_hours",
+                    "wheelchair",
+                    "operator"
+                ]
+            },
+            "amenity/social_facility/food_bank": {
+                "name": "Food Bank",
+                "geometry": [
+                    "point",
+                    "area"
+                ],
+                "terms": [],
+                "tags": {
+                    "amenity": "social_facility",
+                    "social_facility": "food_bank"
+                },
+                "fields": [
+                    "social_facility_for",
+                    "address",
+                    "phone",
+                    "opening_hours",
+                    "wheelchair",
+                    "operator"
+                ]
+            },
+            "amenity/social_facility/group_home": {
+                "name": "Group Home",
+                "geometry": [
+                    "point",
+                    "area"
+                ],
+                "terms": [
+                    "elderly",
+                    "old",
+                    "senior living"
+                ],
+                "tags": {
+                    "amenity": "social_facility",
+                    "social_facility": "group_home",
+                    "social_facility_for": "senior"
+                },
+                "fields": [
+                    "social_facility_for",
+                    "address",
+                    "phone",
+                    "opening_hours",
+                    "wheelchair",
+                    "operator"
+                ]
+            },
+            "amenity/social_facility/homeless_shelter": {
+                "name": "Homeless Shelter",
+                "geometry": [
+                    "point",
+                    "area"
+                ],
+                "terms": [
+                    "houseless",
+                    "unhoused",
+                    "displaced"
+                ],
+                "tags": {
+                    "amenity": "social_facility",
+                    "social_facility": "shelter",
+                    "social_facility:for": "homeless"
+                },
+                "fields": [
+                    "social_facility_for",
+                    "address",
+                    "phone",
+                    "opening_hours",
+                    "wheelchair",
+                    "operator"
+                ]
+            },
             "amenity/studio": {
                 "name": "Studio",
                 "geometry": [
             "amenity/studio": {
                 "name": "Studio",
                 "geometry": [
@@ -63803,6 +63919,102 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "name": "Apartments"
             },
                 },
                 "name": "Apartments"
             },
+            "building/barn": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "barn"
+                },
+                "name": "Barn"
+            },
+            "building/bunker": {
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "bunker"
+                },
+                "name": "Bunker",
+                "searchable": false
+            },
+            "building/cabin": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "cabin"
+                },
+                "name": "Cabin"
+            },
+            "building/cathedral": {
+                "icon": "place-of-worship",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "cathedral"
+                },
+                "name": "Cathedral"
+            },
+            "building/chapel": {
+                "icon": "place-of-worship",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "chapel"
+                },
+                "name": "Chapel"
+            },
+            "building/church": {
+                "icon": "place-of-worship",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "church"
+                },
+                "name": "Church"
+            },
             "building/commercial": {
                 "icon": "commercial",
                 "geometry": [
             "building/commercial": {
                 "icon": "commercial",
                 "geometry": [
@@ -63815,6 +64027,54 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "name": "Commercial Building"
             },
                 },
                 "name": "Commercial Building"
             },
+            "building/construction": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "construction"
+                },
+                "name": "Building Under Construction"
+            },
+            "building/detached": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "detached"
+                },
+                "name": "Detached Home"
+            },
+            "building/dormitory": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "dormitory"
+                },
+                "name": "Dormitory"
+            },
             "building/entrance": {
                 "icon": "entrance",
                 "geometry": [
             "building/entrance": {
                 "icon": "entrance",
                 "geometry": [
@@ -63841,6 +64101,69 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "name": "Garage",
                 "icon": "warehouse"
             },
                 "name": "Garage",
                 "icon": "warehouse"
             },
+            "building/garages": {
+                "icon": "warehouse",
+                "fields": [
+                    "capacity"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "garages"
+                },
+                "name": "Garages"
+            },
+            "building/greenhouse": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "greenhouse"
+                },
+                "name": "Greenhouse"
+            },
+            "building/hospital": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "hospital"
+                },
+                "name": "Hospital Building"
+            },
+            "building/hotel": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "hotel"
+                },
+                "name": "Hotel Building"
+            },
             "building/house": {
                 "icon": "building",
                 "fields": [
             "building/house": {
                 "icon": "building",
                 "fields": [
@@ -63883,6 +64206,22 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "name": "Industrial Building"
             },
                 },
                 "name": "Industrial Building"
             },
+            "building/public": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "public"
+                },
+                "name": "Public Building"
+            },
             "building/residential": {
                 "icon": "building",
                 "fields": [
             "building/residential": {
                 "icon": "building",
                 "fields": [
@@ -63899,6 +64238,167 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "name": "Residential Building"
             },
                 },
                 "name": "Residential Building"
             },
+            "building/retail": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "retail"
+                },
+                "name": "Retail Building"
+            },
+            "building/roof": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "roof"
+                },
+                "name": "Roof"
+            },
+            "building/school": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "school"
+                },
+                "name": "School Building"
+            },
+            "building/shed": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "shed"
+                },
+                "name": "Shed"
+            },
+            "building/stable": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "stable"
+                },
+                "name": "Stable"
+            },
+            "building/static_caravan": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "static_caravan"
+                },
+                "name": "Static Mobile Home"
+            },
+            "building/terrace": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "terrace"
+                },
+                "name": "Row Houses"
+            },
+            "building/train_station": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "train_station"
+                },
+                "name": "Train Station",
+                "searchable": false
+            },
+            "building/university": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "university"
+                },
+                "name": "University Building"
+            },
+            "building/warehouse": {
+                "icon": "building",
+                "fields": [
+                    "address",
+                    "levels"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "building": "warehouse"
+                },
+                "name": "Warehouse"
+            },
             "craft/basket_maker": {
                 "name": "Basket Maker",
                 "geometry": [
             "craft/basket_maker": {
                 "name": "Basket Maker",
                 "geometry": [
@@ -64391,7 +64891,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ]
             },
             "craft/painter": {
                 ]
             },
             "craft/painter": {
-                "name": "painter",
+                "name": "Painter",
                 "geometry": [
                     "point",
                     "area"
                 "geometry": [
                     "point",
                     "area"
@@ -67660,6 +68160,9 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
             },
             "railway/station": {
                 "icon": "rail",
             },
             "railway/station": {
                 "icon": "rail",
+                "fields": [
+                    "building_area"
+                ],
                 "geometry": [
                     "point",
                     "vertex",
                 "geometry": [
                     "point",
                     "vertex",
@@ -67778,6 +68281,27 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 ],
                 "name": "Liquor Store"
             },
                 ],
                 "name": "Liquor Store"
             },
+            "shop/art": {
+                "icon": "art-gallery",
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "terms": [
+                    "art store",
+                    "art gallery"
+                ],
+                "tags": {
+                    "shop": "art"
+                },
+                "name": "Art Shop"
+            },
             "shop/bakery": {
                 "icon": "bakery",
                 "fields": [
             "shop/bakery": {
                 "icon": "bakery",
                 "fields": [
@@ -67852,6 +68376,23 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "name": "Bicycle Shop"
             },
                 },
                 "name": "Bicycle Shop"
             },
+            "shop/bookmaker": {
+                "icon": "shop",
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "shop": "bookmaker"
+                },
+                "name": "Bookmaker"
+            },
             "shop/books": {
                 "icon": "shop",
                 "fields": [
             "shop/books": {
                 "icon": "shop",
                 "fields": [
@@ -68371,6 +68912,23 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 },
                 "name": "Locksmith"
             },
                 },
                 "name": "Locksmith"
             },
+            "shop/lottery": {
+                "icon": "shop",
+                "fields": [
+                    "address",
+                    "building_area",
+                    "opening_hours"
+                ],
+                "geometry": [
+                    "point",
+                    "vertex",
+                    "area"
+                ],
+                "tags": {
+                    "shop": "lottery"
+                },
+                "name": "Lottery Shop"
+            },
             "shop/mall": {
                 "icon": "shop",
                 "fields": [
             "shop/mall": {
                 "icon": "shop",
                 "fields": [
@@ -97020,7 +97578,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
             "address": {
                 "type": "address",
                 "keys": [
             "address": {
                 "type": "address",
                 "keys": [
-                    "addr:housename",
                     "addr:housenumber",
                     "addr:street",
                     "addr:city",
                     "addr:housenumber",
                     "addr:street",
                     "addr:city",
@@ -97031,7 +97588,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "label": "Address",
                 "strings": {
                     "placeholders": {
                 "label": "Address",
                 "strings": {
                     "placeholders": {
-                        "housename": "Housename",
                         "number": "123",
                         "street": "Street",
                         "city": "City",
                         "number": "123",
                         "street": "Street",
                         "city": "City",
@@ -97652,6 +98208,28 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "type": "typeCombo",
                 "label": "Type"
             },
                 "type": "typeCombo",
                 "label": "Type"
             },
+            "social_facility_for": {
+                "key": "social_facility:for",
+                "type": "radio",
+                "label": "People served",
+                "placeholder": "Homeless, Disabled, Child, etc",
+                "options": [
+                    "abused",
+                    "child",
+                    "disabled",
+                    "diseased",
+                    "drug_addicted",
+                    "homeless",
+                    "juvenile",
+                    "mental_health",
+                    "migrant",
+                    "orphan",
+                    "senior",
+                    "underprivileged",
+                    "unemployed",
+                    "victim"
+                ]
+            },
             "source": {
                 "key": "source",
                 "type": "text",
             "source": {
                 "key": "source",
                 "type": "text",
@@ -109637,8 +110215,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
     },
     "locales": [
         "af",
     },
     "locales": [
         "af",
+        "sq",
         "ar",
         "ar-AA",
         "ar",
         "ar-AA",
+        "hy",
         "ast",
         "bn",
         "bs",
         "ast",
         "bn",
         "bs",
@@ -109667,6 +110247,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
         "ja",
         "kn",
         "ko",
         "ja",
         "kn",
         "ko",
+        "ko-KR",
         "lv",
         "lt",
         "no",
         "lv",
         "lt",
         "no",
@@ -109684,6 +110265,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
         "sl",
         "es",
         "sv",
         "sl",
         "es",
         "sv",
+        "ta",
         "te",
         "tr",
         "uk",
         "te",
         "tr",
         "uk",
@@ -109825,7 +110407,8 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "annotation": "Merged {n} lines.",
                 "not_eligible": "These features can't be merged.",
                 "not_adjacent": "These lines can't be merged because they aren't connected.",
                 "annotation": "Merged {n} lines.",
                 "not_eligible": "These features can't be merged.",
                 "not_adjacent": "These lines can't be merged because they aren't connected.",
-                "restriction": "These lines can't be merged because at least one is a member of a \"{relation}\" relation."
+                "restriction": "These lines can't be merged because at least one is a member of a \"{relation}\" relation.",
+                "incomplete_relation": "These features can't be merged because at least one hasn't been fully downloaded."
             },
             "move": {
                 "title": "Move",
             },
             "move": {
                 "title": "Move",
@@ -110160,7 +110743,6 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "address": {
                     "label": "Address",
                     "placeholders": {
                 "address": {
                     "label": "Address",
                     "placeholders": {
-                        "housename": "Housename",
                         "number": "123",
                         "street": "Street",
                         "city": "City",
                         "number": "123",
                         "street": "Street",
                         "city": "City",
@@ -110488,6 +111070,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                 "shop": {
                     "label": "Type"
                 },
                 "shop": {
                     "label": "Type"
                 },
+                "social_facility_for": {
+                    "label": "People served",
+                    "placeholder": "Homeless, Disabled, Child, etc"
+                },
                 "source": {
                     "label": "Source"
                 },
                 "source": {
                     "label": "Source"
                 },
@@ -110833,6 +111419,22 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Shelter",
                     "terms": "lean-to"
                 },
                     "name": "Shelter",
                     "terms": "lean-to"
                 },
+                "amenity/social_facility": {
+                    "name": "Social Facility",
+                    "terms": ""
+                },
+                "amenity/social_facility/food_bank": {
+                    "name": "Food Bank",
+                    "terms": ""
+                },
+                "amenity/social_facility/group_home": {
+                    "name": "Group Home",
+                    "terms": "elderly,old,senior living"
+                },
+                "amenity/social_facility/homeless_shelter": {
+                    "name": "Homeless Shelter",
+                    "terms": "houseless,unhoused,displaced"
+                },
                 "amenity/studio": {
                     "name": "Studio",
                     "terms": "recording studio,studio,radio,radio studio,television,television studio"
                 "amenity/studio": {
                     "name": "Studio",
                     "terms": "recording studio,studio,radio,radio studio,television,television studio"
@@ -110961,10 +111563,46 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Apartments",
                     "terms": ""
                 },
                     "name": "Apartments",
                     "terms": ""
                 },
+                "building/barn": {
+                    "name": "Barn",
+                    "terms": ""
+                },
+                "building/bunker": {
+                    "name": "Bunker",
+                    "terms": ""
+                },
+                "building/cabin": {
+                    "name": "Cabin",
+                    "terms": ""
+                },
+                "building/cathedral": {
+                    "name": "Cathedral",
+                    "terms": ""
+                },
+                "building/chapel": {
+                    "name": "Chapel",
+                    "terms": ""
+                },
+                "building/church": {
+                    "name": "Church",
+                    "terms": ""
+                },
                 "building/commercial": {
                     "name": "Commercial Building",
                     "terms": ""
                 },
                 "building/commercial": {
                     "name": "Commercial Building",
                     "terms": ""
                 },
+                "building/construction": {
+                    "name": "Building Under Construction",
+                    "terms": ""
+                },
+                "building/detached": {
+                    "name": "Detached Home",
+                    "terms": ""
+                },
+                "building/dormitory": {
+                    "name": "Dormitory",
+                    "terms": ""
+                },
                 "building/entrance": {
                     "name": "Entrance",
                     "terms": ""
                 "building/entrance": {
                     "name": "Entrance",
                     "terms": ""
@@ -110973,6 +111611,22 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Garage",
                     "terms": ""
                 },
                     "name": "Garage",
                     "terms": ""
                 },
+                "building/garages": {
+                    "name": "Garages",
+                    "terms": ""
+                },
+                "building/greenhouse": {
+                    "name": "Greenhouse",
+                    "terms": ""
+                },
+                "building/hospital": {
+                    "name": "Hospital Building",
+                    "terms": ""
+                },
+                "building/hotel": {
+                    "name": "Hotel Building",
+                    "terms": ""
+                },
                 "building/house": {
                     "name": "House",
                     "terms": ""
                 "building/house": {
                     "name": "House",
                     "terms": ""
@@ -110985,10 +111639,54 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Industrial Building",
                     "terms": ""
                 },
                     "name": "Industrial Building",
                     "terms": ""
                 },
+                "building/public": {
+                    "name": "Public Building",
+                    "terms": ""
+                },
                 "building/residential": {
                     "name": "Residential Building",
                     "terms": ""
                 },
                 "building/residential": {
                     "name": "Residential Building",
                     "terms": ""
                 },
+                "building/retail": {
+                    "name": "Retail Building",
+                    "terms": ""
+                },
+                "building/roof": {
+                    "name": "Roof",
+                    "terms": ""
+                },
+                "building/school": {
+                    "name": "School Building",
+                    "terms": ""
+                },
+                "building/shed": {
+                    "name": "Shed",
+                    "terms": ""
+                },
+                "building/stable": {
+                    "name": "Stable",
+                    "terms": ""
+                },
+                "building/static_caravan": {
+                    "name": "Static Mobile Home",
+                    "terms": ""
+                },
+                "building/terrace": {
+                    "name": "Row Houses",
+                    "terms": ""
+                },
+                "building/train_station": {
+                    "name": "Train Station",
+                    "terms": ""
+                },
+                "building/university": {
+                    "name": "University Building",
+                    "terms": ""
+                },
+                "building/warehouse": {
+                    "name": "Warehouse",
+                    "terms": ""
+                },
                 "craft/basket_maker": {
                     "name": "Basket Maker",
                     "terms": "basket,basketry,basket maker,basket weaver"
                 "craft/basket_maker": {
                     "name": "Basket Maker",
                     "terms": "basket,basketry,basket maker,basket weaver"
@@ -111082,7 +111780,7 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "terms": "glasses,optician"
                 },
                 "craft/painter": {
                     "terms": "glasses,optician"
                 },
                 "craft/painter": {
-                    "name": "painter",
+                    "name": "Painter",
                     "terms": "painter"
                 },
                 "craft/photographer": {
                     "terms": "painter"
                 },
                 "craft/photographer": {
@@ -111965,6 +112663,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Liquor Store",
                     "terms": "alcohol"
                 },
                     "name": "Liquor Store",
                     "terms": "alcohol"
                 },
+                "shop/art": {
+                    "name": "Art Shop",
+                    "terms": "art store,art gallery"
+                },
                 "shop/bakery": {
                     "name": "Bakery",
                     "terms": ""
                 "shop/bakery": {
                     "name": "Bakery",
                     "terms": ""
@@ -111981,6 +112683,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Bicycle Shop",
                     "terms": ""
                 },
                     "name": "Bicycle Shop",
                     "terms": ""
                 },
+                "shop/bookmaker": {
+                    "name": "Bookmaker",
+                    "terms": ""
+                },
                 "shop/books": {
                     "name": "Bookstore",
                     "terms": ""
                 "shop/books": {
                     "name": "Bookstore",
                     "terms": ""
@@ -112101,6 +112807,10 @@ iD.introGraph = '{"n185954700":{"id":"n185954700","loc":[-85.642244,41.939081],"
                     "name": "Locksmith",
                     "terms": "keys"
                 },
                     "name": "Locksmith",
                     "terms": "keys"
                 },
+                "shop/lottery": {
+                    "name": "Lottery Shop",
+                    "terms": ""
+                },
                 "shop/mall": {
                     "name": "Mall",
                     "terms": ""
                 "shop/mall": {
                     "name": "Mall",
                     "terms": ""