diff --git a/build.js b/build.js
index 87b7ffdc2..e7f3c9948 100644
--- a/build.js
+++ b/build.js
@@ -90,6 +90,12 @@ function generateFields() {
function generatePresets() {
var presets = {};
+
+ // A closed way is considered to be an area if it has a tag with one
+ // of the following keys, and the value is _not_ one of the associated
+ // values for the respective key.
+ var areaKeys = {};
+
glob.sync(__dirname + '/data/presets/presets/**/*.json').forEach(function(file) {
var preset = read(file),
id = file.match(/presets\/presets\/([^.]*)\.json/)[1];
@@ -101,10 +107,22 @@ function generatePresets() {
terms: (preset.terms || []).join(',')
};
+ for (var key in preset.tags) break;
+ var value = preset.tags[key];
+
+ if (['highway', 'footway', 'railway', 'type'].indexOf(key) === -1) {
+ if (preset.geometry.indexOf('area') >= 0) {
+ areaKeys[key] = areaKeys[key] || {};
+ } else if (key in areaKeys && value !== '*') {
+ areaKeys[key][value] = true;
+ }
+ }
+
presets[id] = preset;
});
fs.writeFileSync('data/presets/presets.json', stringify(presets));
+ fs.writeFileSync('js/id/core/area_keys.js', 'iD.Way.areaKeys = ' + stringify(areaKeys) + ';');
var presetsYaml = _.cloneDeep(translations);
_.forEach(presetsYaml.presets, function(preset) {
diff --git a/data/presets/presets.json b/data/presets/presets.json
index 668915e8e..f21564d9a 100644
--- a/data/presets/presets.json
+++ b/data/presets/presets.json
@@ -1484,8 +1484,7 @@
"boundary/administrative": {
"name": "Administrative Boundary",
"geometry": [
- "line",
- "area"
+ "line"
],
"tags": {
"boundary": "administrative"
diff --git a/data/presets/presets/boundary/administrative.json b/data/presets/presets/boundary/administrative.json
index 1f6bebba7..194f8ec72 100644
--- a/data/presets/presets/boundary/administrative.json
+++ b/data/presets/presets/boundary/administrative.json
@@ -1,8 +1,7 @@
{
"name": "Administrative Boundary",
"geometry": [
- "line",
- "area"
+ "line"
],
"tags": {
"boundary": "administrative"
diff --git a/index.html b/index.html
index a1fd74225..3d43d56a4 100644
--- a/index.html
+++ b/index.html
@@ -204,6 +204,7 @@
+
diff --git a/js/id/core/area_keys.js b/js/id/core/area_keys.js
new file mode 100644
index 000000000..64ddc2bfa
--- /dev/null
+++ b/js/id/core/area_keys.js
@@ -0,0 +1,79 @@
+iD.Way.areaKeys = {
+ "aeroway": {
+ "gate": true,
+ "taxiway": true
+ },
+ "amenity": {
+ "atm": true,
+ "bench": true,
+ "drinking_water": true,
+ "post_box": true,
+ "telephone": true,
+ "vending_machine": true,
+ "waste_basket": true
+ },
+ "area": {},
+ "barrier": {
+ "block": true,
+ "bollard": true,
+ "cattle_grid": true,
+ "cycle_barrier": true,
+ "entrance": true,
+ "gate": true,
+ "kissing_gate": true,
+ "lift_gate": true,
+ "stile": true,
+ "toll_booth": true
+ },
+ "building": {
+ "entrance": true
+ },
+ "emergency": {
+ "fire_hydrant": true,
+ "phone": true
+ },
+ "historic": {
+ "boundary_stone": true
+ },
+ "landuse": {},
+ "leisure": {
+ "slipway": true
+ },
+ "man_made": {
+ "cutline": true,
+ "embankment": true,
+ "flagpole": true,
+ "pipeline": true,
+ "survey_point": true
+ },
+ "military": {},
+ "natural": {
+ "coastline": true,
+ "peak": true,
+ "spring": true,
+ "tree": true
+ },
+ "office": {},
+ "place": {},
+ "power": {
+ "line": true,
+ "minor_line": true,
+ "pole": true,
+ "tower": true
+ },
+ "public_transport": {
+ "stop_position": true
+ },
+ "shop": {},
+ "tourism": {
+ "viewpoint": true
+ },
+ "waterway": {
+ "canal": true,
+ "ditch": true,
+ "drain": true,
+ "river": true,
+ "stream": true,
+ "weir": true
+ }
+};
\ No newline at end of file
diff --git a/js/id/core/way.js b/js/id/core/way.js
index 8f703049a..9579be396 100644
--- a/js/id/core/way.js
+++ b/js/id/core/way.js
@@ -189,29 +189,3 @@ _.extend(iD.Way.prototype, {
});
}
});
-
-// A closed way is considered to be an area if it has a tag with one
-// of the following keys, and the value is _not_ one of the associated
-// values for the respective key.
-iD.Way.areaKeys = {
- aeroway: { taxiway: true},
- amenity: {},
- area: {},
- 'area:highway': {},
- building: {},
- 'building:part': {},
- historic: {},
- landuse: {},
- leisure: {},
- man_made: { cutline: true, embankment: true, pipeline: true},
- military: {},
- natural: { coastline: true },
- office: {},
- place: {},
- power: {},
- public_transport: {},
- ruins: {},
- shop: {},
- tourism: {},
- waterway: {}
-};
diff --git a/test/index.html b/test/index.html
index 0ea970316..8fe2bc698 100644
--- a/test/index.html
+++ b/test/index.html
@@ -184,6 +184,7 @@
+