diff --git a/build.js b/build.js
index 780c7b98e..ba3a77cd1 100644
--- a/build.js
+++ b/build.js
@@ -28,7 +28,6 @@ fs.writeFileSync('data/presets/presets.json', JSON.stringify(
fs.writeFileSync('data/data.js', 'iD.data = ' + JSON.stringify({
deprecated: r('deprecated.json'),
discarded: r('discarded.json'),
- imagery: r('imagery.json'),
keys: r('keys.json'),
imagery: r('imagery.json'),
presets: {
diff --git a/css/app.css b/css/app.css
index bc37e41a3..36faa04ee 100644
--- a/css/app.css
+++ b/css/app.css
@@ -672,7 +672,8 @@ a.selected:hover .toggle.icon { background-position: -40px -180px;}
}
.preset-section h4 + input,
-h4 + .input-wrap-position input {
+h4 + .input-wrap-position input,
+h4 + .preset-input input:first-child {
padding-top: 35px;
height: 60px;
}
@@ -691,6 +692,12 @@ input[type=number] {
right: 50%;
}
+button.preset-add-form {
+ width: 40px;
+ height: 40px;
+ margin-right: 10px;
+}
+
.preset-fav button.fav {
height: 30px;
margin: 5px;
diff --git a/css/map.css b/css/map.css
index 496891c1e..f0afd417d 100644
--- a/css/map.css
+++ b/css/map.css
@@ -331,6 +331,7 @@ path.fill.tag-natural-beach,
path.fill.tag-natural-scrub,
path.fill.tag-landuse-cemetery,
path.fill.tag-landuse-meadow,
+path.fill.tag-landuse-farm,
path.fill.tag-landuse-farmland,
path.fill.tag-landuse-construction,
path.fill.tag-landuse-orchard {
@@ -343,6 +344,7 @@ path.fill.tag-landuse-orchard {
.pattern-color-meadow,
.pattern-color-wetland,
.pattern-color-cemetery,
+.pattern-color-farm,
.pattern-color-farmland,
.pattern-color-construction,
.pattern-color-orchard {
@@ -362,10 +364,12 @@ path.fill.tag-landuse-residential {
fill: #e06e5f;
}
+path.fill.tag-landuse-farm,
path.fill.tag-landuse-farmland {
fill: url(#pattern-farmland) #8cd05f;
}
+.pattern-color-farm,
.pattern-color-farmland {
fill: url(#pattern-farmland) #8cd05f;
}
diff --git a/data/presets/categories.json b/data/presets/categories.json
index 184ab0df1..2b5138900 100644
--- a/data/presets/categories.json
+++ b/data/presets/categories.json
@@ -1,7 +1,7 @@
[
{
"match": {
- "type": "line"
+ "geometry": "line"
},
"icon": "highway",
"name": "roads",
diff --git a/data/presets/forms.json b/data/presets/forms.json
index 72815cbd9..573e72986 100644
--- a/data/presets/forms.json
+++ b/data/presets/forms.json
@@ -1 +1 @@
-{"access":{"key":"access","type":"combo"},"address":{"type":"address","keys":["addr:housename","addr:housenumber","addr:street","addr:city"]},"atm":{"key":"atm","type":"check"},"building":{"key":"building","type":"combo"},"building_area":{"key":"building","type":"check","default":{"area":"yes"}},"building_yes":{"key":"building","type":"combo","default":{"area":"yes"}},"capacity":{"key":"capacity","type":"text"},"cuisine":{"key":"cuisine","type":"combo","indexed":true},"denomination":{"key":"denomination","type":"combo"},"elevation":{"key":"ele","type":"number"},"emergency":{"key":"emergency","type":"check"},"fax":{"key":"fax","type":"tel"},"fee":{"key":"fee","type":"check"},"internet_access":{"key":"internet_access","type":"combo","options":["yes","no","wlan","wired","terminal"]},"layer":{"key":"layer","type":"combo"},"levels":{"key":"building:levels","type":"number"},"maxspeed":{"key":"maxspeed","type":"combo"},"network":{"key":"network","type":"text"},"oneway":{"key":"oneway","type":"check"},"opening_hours":{"key":"opening_hours","type":"text"},"operator":{"key":"operator","type":"text"},"phone":{"key":"phone","type":"tel"},"religion":{"key":"religion","type":"combo","options":["christian","muslim","buddhist","jewish","hindu","shinto","taoist"]},"roadtype":{"title":" ","type":"radio","options":["bridge","tunnel","embankment","cutting"]},"shelter":{"key":"shelter","type":"check"},"surface":{"key":"surface","type":"combo"}}
\ No newline at end of file
+{"access":{"key":"access","type":"combo"},"address":{"type":"address","keys":["addr:housename","addr:housenumber","addr:street","addr:city"],"universal":true},"atm":{"key":"atm","type":"check"},"building":{"key":"building","type":"combo"},"building_area":{"key":"building","type":"check","default":{"area":"yes"}},"building_yes":{"key":"building","type":"combo","default":{"area":"yes"}},"capacity":{"key":"capacity","type":"text"},"cuisine":{"key":"cuisine","type":"combo","indexed":true},"denomination":{"key":"denomination","type":"combo"},"elevation":{"key":"ele","type":"number","universal":true},"emergency":{"key":"emergency","type":"check"},"fax":{"key":"fax","type":"tel"},"fee":{"key":"fee","type":"check"},"internet_access":{"key":"internet_access","type":"combo","options":["yes","no","wlan","wired","terminal"]},"layer":{"key":"layer","type":"combo"},"levels":{"key":"building:levels","type":"number"},"maxspeed":{"key":"maxspeed","type":"combo"},"network":{"key":"network","type":"text"},"oneway":{"key":"oneway","type":"check"},"opening_hours":{"key":"opening_hours","type":"text"},"operator":{"key":"operator","type":"text"},"phone":{"key":"phone","type":"tel"},"religion":{"key":"religion","type":"combo","options":["christian","muslim","buddhist","jewish","hindu","shinto","taoist"]},"roadtype":{"title":" ","type":"radio","options":["bridge","tunnel","embankment","cutting"]},"shelter":{"key":"shelter","type":"check"},"source":{"key":"source","type":"text","universal":true},"surface":{"key":"surface","type":"combo"},"telephone":{"key":"phone","type":"tel","universal":true},"website":{"key":"website","type":"url","universal":true},"wikipedia":{"key":"wikipedia","type":"text","universal":true}}
\ No newline at end of file
diff --git a/data/presets/forms/address.json b/data/presets/forms/address.json
index dd8a73898..02d01ebb0 100644
--- a/data/presets/forms/address.json
+++ b/data/presets/forms/address.json
@@ -5,5 +5,6 @@
"addr:housenumber",
"addr:street",
"addr:city"
- ]
+ ],
+ "universal": true
}
diff --git a/data/presets/forms/elevation.json b/data/presets/forms/elevation.json
index 3793abbc0..c4ceed73e 100644
--- a/data/presets/forms/elevation.json
+++ b/data/presets/forms/elevation.json
@@ -1,4 +1,5 @@
{
"key": "ele",
- "type": "number"
-}
\ No newline at end of file
+ "type": "number",
+ "universal": true
+}
diff --git a/data/presets/forms/source.json b/data/presets/forms/source.json
new file mode 100644
index 000000000..64db875fc
--- /dev/null
+++ b/data/presets/forms/source.json
@@ -0,0 +1,5 @@
+{
+ "key": "source",
+ "type": "text",
+ "universal": true
+}
diff --git a/data/presets/forms/telephone.json b/data/presets/forms/telephone.json
new file mode 100644
index 000000000..5ac9b3a94
--- /dev/null
+++ b/data/presets/forms/telephone.json
@@ -0,0 +1,5 @@
+{
+ "key": "phone",
+ "type": "tel",
+ "universal": true
+}
diff --git a/data/presets/forms/website.json b/data/presets/forms/website.json
new file mode 100644
index 000000000..205eec6ba
--- /dev/null
+++ b/data/presets/forms/website.json
@@ -0,0 +1,5 @@
+{
+ "key": "website",
+ "type": "url",
+ "universal": true
+}
diff --git a/data/presets/forms/wikipedia.json b/data/presets/forms/wikipedia.json
new file mode 100644
index 000000000..34ce5248d
--- /dev/null
+++ b/data/presets/forms/wikipedia.json
@@ -0,0 +1,5 @@
+{
+ "key": "wikipedia",
+ "type": "text",
+ "universal": true
+}
diff --git a/data/presets/presets.json b/data/presets/presets.json
index da99bb325..870b9da2f 100644
--- a/data/presets/presets.json
+++ b/data/presets/presets.json
@@ -1 +1 @@
-[{"name":"aeroway","match":{"type":["point","vertex","line","area"],"tags":{"aeroway":"*"}},"form":[{"key":"aeroway","type":"combo"}]},{"name":"airport","match":{"type":["point","area"],"terms":["airplane","airport","aerodrome"],"tags":{"aeroway":"aerodrome"}},"icon":"airport","form":[]},{"name":"helipad","match":{"type":["point","area"],"terms":["helicopter","helipad","heliport"],"tags":{"aeroway":"helipad"}},"icon":"heliport","form":[]},{"name":"amenity","match":{"type":["point","area"],"tags":{"amenity":"*"}},"form":[{"key":"amenity","type":"combo"}]},{"name":"bank","match":{"type":["point","area"],"terms":["coffer","countinghouse","credit union","depository","exchequer","fund","hoard","investment firm","repository","reserve","reservoir","safe","savings","stock","stockpile","store","storehouse","thrift","treasury","trust company","vault"],"tags":{"amenity":"bank"}},"icon":"bank","form":["atm","building_area","address"]},{"name":"bar","match":{"type":["point","area"],"tags":{"amenity":"bar"},"terms":[]},"icon":"bar","form":["building_area","address"]},{"name":"bicycle rental","match":{"type":["point","area"],"tags":{"amenity":"bicycle_rental"}},"icon":"bicycle","form":["capacity","network","operator"]},{"name":"cafe","match":{"type":["point","area"],"terms":["coffee","tea","coffee shop"],"tags":{"amenity":"cafe"}},"icon":"cafe","form":["cuisine","internet_access","building_area","address"]},{"name":"cinema","match":{"type":["point","area"],"terms":["big screen","bijou","cine","drive-in","film","flicks","motion pictures","movie house","movie theater","moving pictures","nabes","photoplay","picture show","pictures","playhouse","show","silver screen"],"tags":{"amenity":"cinema"}},"icon":"cinema","form":["building_area","address"]},{"name":"fast food","match":{"type":["point","area"],"tags":{"amenity":"fast_food"},"terms":[]},"icon":"fast-food","form":["cuisine","building_area","address"]},{"name":"fire station","match":{"type":["point","area"],"tags":{"amenity":"fire_station"},"terms":[]},"icon":"fire-station","form":["operator","building_area","address"]},{"name":"grave yard","match":{"type":["point","area"],"tags":{"amenity":"grave_yard"}},"icon":"cemetery","form":["religion"]},{"name":"hospital","match":{"type":["point","area"],"terms":["clinic","emergency room","health service","hospice","infirmary","institution","nursing home","rest home","sanatorium","sanitarium","sick bay","surgery","ward"],"tags":{"amenity":"hospital"}},"icon":"hospital","form":["emergency","building_area","address"]},{"name":"library","match":{"type":["point","area"],"tags":{"amenity":"library"},"terms":[]},"icon":"library","form":["operator","building_area","address"]},{"name":"parking","match":{"type":["point","area"],"tags":{"amenity":"parking"},"terms":[]},"icon":"parking","form":["fee","access","address"]},{"name":"pharmacy","match":{"type":["point","area"],"tags":{"amenity":"pharmacy"},"terms":[]},"icon":"pharmacy","form":["operator","building_area","address"]},{"name":"place of worship","match":{"type":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"place_of_worship"}},"icon":"place-of-worship","form":["religion","denomination","building","address"]},{"name":"church","match":{"type":["point","area"],"terms":["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],"tags":{"amenity":"place_of_worship","religion":"christian"}},"icon":"religious-christian","form":["denomination","building","address"]},{"name":"synagogue","match":{"type":["point","area"],"terms":["jewish","synagogue"],"tags":{"amenity":"place_of_worship","religion":"jewish"}},"icon":"religious-jewish","form":["denomination","building","address"]},{"name":"mosque","match":{"type":["point","area"],"terms":["muslim","mosque"],"tags":{"amenity":"place_of_worship","religion":"muslim"}},"icon":"religious-muslim","form":["denomination","building","address"]},{"name":"police","match":{"type":["point","area"],"terms":["badge","bear","blue","bluecoat","bobby","boy scout","bull","constable","constabulary","cop","copper","corps","county mounty","detective","fed","flatfoot","force","fuzz","gendarme","gumshoe","heat","law","law enforcement","man","narc","officers","patrolman","police"],"tags":{"amenity":"police"}},"icon":"police","form":["operator","building_area","address"]},{"name":"post box","match":{"type":["point"],"tags":{"amenity":"post_box"},"terms":["letter drop","letterbox","mail drop","mailbox","pillar box","postbox"]},"icon":"post","form":["address","operator",{"key":"collection_times","type":"text"}]},{"name":"pub","match":{"type":["point","area"],"tags":{"amenity":"pub"},"terms":[]},"icon":"beer","form":["building_area","address"]},{"name":"restaurant","match":{"type":["point","area"],"terms":["bar","cafeteria","café","canteen","chophouse","coffee shop","diner","dining room","dive*","doughtnut shop","drive-in","eatery","eating house","eating place","fast-food place","greasy spoon","grill","hamburger stand","hashery","hideaway","hotdog stand","inn","joint*","luncheonette","lunchroom","night club","outlet*","pizzeria","saloon","soda fountain","watering hole"],"tags":{"amenity":"restaurant"}},"icon":"restaurant","form":["cuisine","building_area","address"]},{"name":"school","match":{"type":["point","area"],"terms":["academy","alma mater","blackboard","college","department","discipline","establishment","faculty","hall","halls of ivy","institute","institution","jail*","schoolhouse","seminary","university"],"tags":{"amenity":"school"}},"icon":"school","form":["operator","building","address"]},{"name":"toilets","match":{"type":["point","area"],"terms":[],"tags":{"amenity":"toilets"}},"form":["operator","building","address"]},{"name":"town hall","match":{"type":["point","areea"],"terms":["village hall","city government","courthouse","municipal building","municipal center"],"tags":{"amenity":"townhall"}},"icon":"town-hall","form":["building_area","address"]},{"name":"university","match":{"type":["point","area"],"tags":{"amenity":"university"},"terms":[]},"icon":"college","form":["operator","address"]},{"name":"building","match":{"type":["point","area"],"tags":{"building":"*"},"terms":[]},"icon":"warehouse","form":["building_yes","levels","address"]},{"name":"highway","match":{"type":["point","vertex","line","area"],"tags":{"highway":"*"}},"form":[{"key":"highway","type":"combo"}]},{"name":"bus stop","match":{"type":["point"],"tags":{"highway":"bus_stop"},"terms":[]},"icon":"bus","form":["operator","shelter"]},{"name":"crossing","match":{"type":["vertex"],"tags":{"highway":"crossing"},"terms":["crosswalk","zebra crossing"]},"form":[{"key":"crossing","type":"combo"}]},{"name":"cycle path","match":{"type":["line"],"tags":{"highway":"cycleway"},"terms":[]},"icon":"highway-cycleway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"foot path","match":{"type":["line"],"terms":["beaten path","boulevard","clearing","course","cut*","drag*","footpath","highway","lane","line","orbit","passage","pathway","rail","rails","road","roadway","route","street","thoroughfare","trackway","trail","trajectory","walk"],"tags":{"highway":"footway"}},"icon":"highway-footway","form":["access","surface"]},{"name":"motorway","match":{"type":["line"],"tags":{"highway":"motorway"},"terms":[]},"icon":"highway-motorway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"path","match":{"type":["line"],"tags":{"highway":"path"},"terms":[]},"icon":"highway-footway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"primary road","match":{"type":["line"],"tags":{"highway":"primary"},"terms":[]},"icon":"highway-primary","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"residential road","match":{"type":["line"],"tags":{"highway":"residential"},"terms":[]},"icon":"highway-residential","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"secondary road","match":{"type":["line"],"tags":{"highway":"secondary"},"terms":[]},"icon":"highway-secondary","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"service road","match":{"type":["line"],"tags":{"highway":"service"},"terms":[]},"icon":"highway-service","form":[{"key":"service","type":"combo","options":["parking_aisle","driveway","alley","drive-through","emergency_access"]},"oneway","roadtype","access","maxspeed","surface"]},{"name":"steps","match":{"type":["line"],"tags":{"highway":"steps"},"terms":["stairs","staircase"]},"form":["access","surface"]},{"name":"tertiary road","match":{"type":["line"],"tags":{"highway":"tertiary"},"terms":[]},"icon":"highway-tertiary","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"track","match":{"type":["line"],"tags":{"highway":"track"},"terms":[]},"icon":"highway-track","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"trunk highway","match":{"type":["line"],"tags":{"highway":"trunk"},"terms":[]},"icon":"highway-trunk","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"turning circle","match":{"type":["vertex"],"tags":{"highway":"turning_circle"},"terms":[]},"icon":"circle"},{"name":"unclassified","match":{"type":["line"],"tags":{"highway":"unclassified"},"terms":[]},"icon":"highway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"landuse","match":{"type":["point","area"],"tags":{"landuse":"*"}},"form":[{"key":"landuse","type":"combo"}]},{"name":"allotments","match":{"type":["point","area"],"tags":{"landuse":"allotments"},"terms":[]},"form":[]},{"name":"cemetery","match":{"type":["point","area"],"tags":{"landuse":"cemetery"},"terms":[]},"form":[],"icon":"cemetery"},{"name":"commercial","match":{"type":["point","area"],"tags":{"landuse":"commercial"},"terms":[]},"form":[]},{"name":"construction","match":{"type":["point","area"],"tags":{"landuse":"construction"},"terms":[]},"form":[{"key":"construction","type":"combo"},"operator"]},{"name":"farm","match":{"type":["point","area"],"tags":{"landuse":"farm"},"terms":[]},"form":[]},{"name":"farmyard","match":{"type":["point","area"],"tags":{"landuse":"farmyard"},"terms":[]},"form":[]},{"name":"forest","match":{"type":["point","area"],"tags":{"landuse":"forest"},"terms":[]},"form":[{"key":"wood","type":"combo"}],"icon":"park2"},{"name":"grass","match":{"type":["point","area"],"tags":{"landuse":"grass"},"terms":[]},"form":[]},{"name":"industrial","match":{"type":["point","area"],"tags":{"landuse":"industrial"},"terms":[]},"form":[]},{"name":"meadow","match":{"type":["point","area"],"tags":{"landuse":"meadow"},"terms":[]},"form":[]},{"name":"orchard","match":{"type":["point","area"],"tags":{"landuse":"orchard"},"terms":[]},"form":[]},{"name":"quarry","match":{"type":["point","area"],"tags":{"landuse":"quarry"},"terms":[]},"form":[]},{"name":"residential","match":{"type":["point","area"],"tags":{"landuse":"residential"},"terms":[]},"form":[]},{"name":"vineyard","match":{"type":["point","area"],"tags":{"landuse":"vineyard"},"terms":[]},"form":[]},{"name":"leisure","match":{"type":["point","area"],"tags":{"leisure":"*"}},"form":[{"key":"leisure","type":"combo"}]},{"name":"golf course","match":{"type":["point","area"],"tags":{"leisure":"golf_course"},"terms":[]},"icon":"golf","form":["operator","address"]},{"name":"park","match":{"type":["point","area"],"terms":["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],"tags":{"leisure":"park"}},"icon":"park"},{"name":"sport pitch","match":{"type":["point","area"],"tags":{"leisure":"pitch"},"terms":[]},"icon":"pitch","form":[{"key":"sport","type":"combo"},"surface"]},{"name":"baseball diamond","match":{"type":["point","area"],"tags":{"leisure":"pitch","sport":"baseball"},"terms":[]},"icon":"baseball","form":["surface"]},{"name":"basketball court","match":{"type":["point","area"],"tags":{"leisure":"pitch","sport":"basketball"},"terms":[]},"icon":"basketball","form":["surface"]},{"name":"soccer field","match":{"type":["point","area"],"tags":{"leisure":"pitch","sport":"soccer"},"terms":[]},"icon":"soccer","form":["surface"]},{"name":"tennis court","match":{"type":["point","area"],"tags":{"leisure":"pitch","sport":"tennis"},"terms":[]},"icon":"tennis","form":["surface"]},{"name":"man made","match":{"type":["point","vertex","line","area"],"tags":{"man_made":"*"}},"form":[{"key":"man_made","type":"combo"}]},{"name":"lighthouse","match":{"type":["point","area"],"tags":{"man_made":"lighthouse"}}},{"name":"pier","match":{"type":["line","area"],"tags":{"man_made":"pier"}}},{"name":"natural","match":{"type":["point","area"],"tags":{"natural":"*"}},"form":[{"key":"natural","type":"combo"}]},{"name":"bay","match":{"type":["point","area"],"terms":[],"tags":{"natural":"bay"}}},{"name":"beach","match":{"type":["point","area"],"terms":[],"tags":{"natural":"beach"}},"form":["surface"]},{"name":"cliff","match":{"type":["point","vertex","line","area"],"terms":[],"tags":{"natural":"cliff"}}},{"name":"coastline","match":{"type":["line"],"terms":["shore"],"tags":{"natural":"coastline"}}},{"name":"glacier","match":{"type":["area"],"terms":[],"tags":{"natural":"glacier"}}},{"name":"grassland","match":{"type":["point","area"],"terms":[],"tags":{"natural":"grassland"}}},{"name":"heath","match":{"type":["area"],"terms":[],"tags":{"natural":"heath"}}},{"name":"peak","match":{"type":["point","vertex"],"tags":{"natural":"peak"},"terms":["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"]},"icon":"triangle","form":["elevation"]},{"name":"scrub","match":{"type":["area"],"tags":{"natural":"scrub"},"terms":[]}},{"name":"spring","match":{"type":["point","vertex"],"terms":[],"tags":{"natural":"spring"}}},{"name":"tree","match":{"type":["point","vertex"],"terms":[],"tags":{"natural":"tree"}},"form":[{"key":"denotation","type":"combo"}],"icon":"park"},{"name":"water","match":{"type":["area"],"tags":{"natural":"water"},"terms":[]},"form":[{"key":"water","type":"combo"}]},{"name":"lake","match":{"type":["area"],"tags":{"natural":"water","water":"lake"},"terms":["lakelet","loch","mere"]}},{"name":"pond","match":{"type":["area"],"tags":{"natural":"water","water":"pond"},"terms":["lakelet","millpond","tarn","pool","mere"]}},{"name":"reservoir","match":{"type":["area"],"tags":{"natural":"water","water":"reservoir"},"terms":[]}},{"name":"wetland","match":{"type":["point","area"],"tags":{"natural":"wetland"},"terms":[]},"form":[{"key":"wetland","type":"combo"}]},{"name":"wood","match":{"type":["point","area"],"tags":{"natural":"wood"},"terms":[]},"form":[{"key":"wood","type":"combo"}],"icon":"park2"},{"name":"office","match":{"type":["point","area"],"tags":{"office":"*"},"terms":[]},"icon":"commercial","form":[{"key":"office","type":"combo"},"address","opening_hours"]},{"name":"place","match":{"type":["point","area"],"tags":{"place":"*"}},"form":[{"key":"place","type":"combo"}]},{"name":"hamlet","match":{"type":["point","area"],"tags":{"place":"hamlet"}},"icon":"triangle-stroked"},{"name":"island","match":{"type":["point","area"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"island"}}},{"name":"locality","match":{"type":["point","area"],"tags":{"place":"locality"}},"icon":"marker"},{"name":"village","match":{"type":["point","area"],"tags":{"place":"village"}},"icon":"square-stroked"},{"name":"railway","match":{"type":["point","vertex","line","area"],"tags":{"railway":"*"}},"form":[{"key":"railway","type":"combo"}]},{"name":"rail","match":{"type":["line"],"tags":{"railway":"rail"},"terms":[]},"icon":"railway-rail"},{"name":"subway","match":{"type":["line"],"tags":{"railway":"subway"},"terms":[]},"icon":"railway-rail"},{"name":"subway entrance","match":{"type":["point"],"tags":{"railway":"subway_entrance"},"terms":[]},"icon":"rail-underground"},{"name":"shop","match":{"type":["point","area"],"tags":{"shop":"*"},"terms":[]},"icon":"shop","form":[{"key":"shop","type":"combo"},"address","opening_hours"]},{"name":"supermarket","match":{"type":["point","area"],"terms":["bazaar","boutique","chain","co-op","cut-rate store","discount store","five-and-dime","flea market","galleria","mall","mart","outlet","outlet store","shop","shopping center","shopping plaza","stand","store","supermarket","thrift shop"],"tags":{"shop":"supermarket"}},"icon":"grocery","form":["operator","building_area","address"]},{"name":"tourism","match":{"type":["point","area"],"tags":{"tourism":"*"}},"form":[{"key":"tourism","type":"combo"}]},{"name":"camp site","match":{"type":["point","area"],"terms":[],"tags":{"tourism":"camp_site"}},"icon":"campsite","form":["operator","address"]},{"name":"hotel","match":{"type":["point","area"],"terms":[],"tags":{"tourism":"hotel"}},"icon":"lodging","form":["operator","building_area","address"]},{"name":"museum","match":{"type":["point","area"],"terms":["exhibition","exhibits archive","foundation","gallery","hall","institution","library","menagerie","repository","salon","storehouse","treasury","vault"],"tags":{"tourism":"museum"}},"icon":"museum","form":["operator","building_area","address"]},{"name":"picnic site","match":{"type":["point","area"],"terms":[],"tags":{"tourism":"picnic_site"}},"form":["operator","building_area","address"]},{"name":"waterway","match":{"type":["point","vertex","line","area"],"tags":{"waterway":"*"}},"form":[{"key":"waterway","type":"combo"}]},{"name":"canal","match":{"type":["line"],"tags":{"waterway":"canal"}},"icon":"waterway-river"},{"name":"dam","match":{"type":["point","vertex","line","area"],"tags":{"waterway":"dam"}},"icon":"dam"},{"name":"ditch","match":{"type":["line"],"tags":{"waterway":"ditch"}},"icon":"waterway-river"},{"name":"drain","match":{"type":["line"],"tags":{"waterway":"drain"}},"icon":"waterway-river"},{"name":"river","match":{"type":["line"],"terms":["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],"tags":{"waterway":"river"}},"icon":"waterway-river"},{"name":"riverbank","match":{"type":["area"],"tags":{"waterway":"riverbank"}},"icon":"water"},{"name":"stream","match":{"type":["line"],"terms":["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],"tags":{"waterway":"stream"}},"icon":"waterway-river","form":["layer"]},{"name":"weir","match":{"type":["vertex","line"],"tags":{"waterway":"weir"}},"icon":"dam"}]
\ No newline at end of file
+[{"name":"aeroway","match":{"geometry":["point","vertex","line","area"],"tags":{"aeroway":"*"}},"form":[{"key":"aeroway","type":"combo"}]},{"name":"airport","match":{"geometry":["point","area"],"terms":["airplane","airport","aerodrome"],"tags":{"aeroway":"aerodrome"}},"icon":"airport","form":[]},{"name":"helipad","match":{"geometry":["point","area"],"terms":["helicopter","helipad","heliport"],"tags":{"aeroway":"helipad"}},"icon":"heliport","form":[]},{"name":"amenity","match":{"geometry":["point","area"],"tags":{"amenity":"*"}},"form":[{"key":"amenity","type":"combo"}]},{"name":"bank","match":{"geometry":["point","area"],"terms":["coffer","countinghouse","credit union","depository","exchequer","fund","hoard","investment firm","repository","reserve","reservoir","safe","savings","stock","stockpile","store","storehouse","thrift","treasury","trust company","vault"],"tags":{"amenity":"bank"}},"icon":"bank","form":["atm","building_area","address"]},{"name":"bar","match":{"geometry":["point","area"],"tags":{"amenity":"bar"},"terms":[]},"icon":"bar","form":["building_area","address"]},{"name":"bicycle rental","match":{"geometry":["point","area"],"tags":{"amenity":"bicycle_rental"}},"icon":"bicycle","form":["capacity","network","operator"]},{"name":"cafe","match":{"geometry":["point","area"],"terms":["coffee","tea","coffee shop"],"tags":{"amenity":"cafe"}},"icon":"cafe","form":["cuisine","internet_access","building_area","address"]},{"name":"cinema","match":{"geometry":["point","area"],"terms":["big screen","bijou","cine","drive-in","film","flicks","motion pictures","movie house","movie theater","moving pictures","nabes","photoplay","picture show","pictures","playhouse","show","silver screen"],"tags":{"amenity":"cinema"}},"icon":"cinema","form":["building_area","address"]},{"name":"fast food","match":{"geometry":["point","area"],"tags":{"amenity":"fast_food"},"terms":[]},"icon":"fast-food","form":["cuisine","building_area","address"]},{"name":"fire station","match":{"geometry":["point","area"],"tags":{"amenity":"fire_station"},"terms":[]},"icon":"fire-station","form":["operator","building_area","address"]},{"name":"grave yard","match":{"geometry":["point","area"],"tags":{"amenity":"grave_yard"}},"icon":"cemetery","form":["religion"]},{"name":"hospital","match":{"geometry":["point","area"],"terms":["clinic","emergency room","health service","hospice","infirmary","institution","nursing home","rest home","sanatorium","sanitarium","sick bay","surgery","ward"],"tags":{"amenity":"hospital"}},"icon":"hospital","form":["emergency","building_area","address"]},{"name":"library","match":{"geometry":["point","area"],"tags":{"amenity":"library"},"terms":[]},"icon":"library","form":["operator","building_area","address"]},{"name":"parking","match":{"geometry":["point","area"],"tags":{"amenity":"parking"},"terms":[]},"icon":"parking","form":["fee","access","address"]},{"name":"pharmacy","match":{"geometry":["point","area"],"tags":{"amenity":"pharmacy"},"terms":[]},"icon":"pharmacy","form":["operator","building_area","address"]},{"name":"place of worship","match":{"geometry":["point","area"],"terms":["abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","mosque","oratory","parish","sacellum","sanctuary","shrine","synagogue","tabernacle","temple"],"tags":{"amenity":"place_of_worship"}},"icon":"place-of-worship","form":["religion","denomination","building","address"]},{"name":"church","match":{"geometry":["point","area"],"terms":["christian","abbey","basilica","bethel","cathedral","chancel","chantry","chapel","church","fold","house of God","house of prayer","house of worship","minster","mission","oratory","parish","sacellum","sanctuary","shrine","tabernacle","temple"],"tags":{"amenity":"place_of_worship","religion":"christian"}},"icon":"religious-christian","form":["denomination","building","address"]},{"name":"synagogue","match":{"geometry":["point","area"],"terms":["jewish","synagogue"],"tags":{"amenity":"place_of_worship","religion":"jewish"}},"icon":"religious-jewish","form":["denomination","building","address"]},{"name":"mosque","match":{"geometry":["point","area"],"terms":["muslim","mosque"],"tags":{"amenity":"place_of_worship","religion":"muslim"}},"icon":"religious-muslim","form":["denomination","building","address"]},{"name":"police","match":{"geometry":["point","area"],"terms":["badge","bear","blue","bluecoat","bobby","boy scout","bull","constable","constabulary","cop","copper","corps","county mounty","detective","fed","flatfoot","force","fuzz","gendarme","gumshoe","heat","law","law enforcement","man","narc","officers","patrolman","police"],"tags":{"amenity":"police"}},"icon":"police","form":["operator","building_area","address"]},{"name":"post box","match":{"geometry":["point"],"tags":{"amenity":"post_box"},"terms":["letter drop","letterbox","mail drop","mailbox","pillar box","postbox"]},"icon":"post","form":["address","operator",{"key":"collection_times","type":"text"}]},{"name":"pub","match":{"geometry":["point","area"],"tags":{"amenity":"pub"},"terms":[]},"icon":"beer","form":["building_area","address"]},{"name":"restaurant","match":{"geometry":["point","area"],"terms":["bar","cafeteria","café","canteen","chophouse","coffee shop","diner","dining room","dive*","doughtnut shop","drive-in","eatery","eating house","eating place","fast-food place","greasy spoon","grill","hamburger stand","hashery","hideaway","hotdog stand","inn","joint*","luncheonette","lunchroom","night club","outlet*","pizzeria","saloon","soda fountain","watering hole"],"tags":{"amenity":"restaurant"}},"icon":"restaurant","form":["cuisine","building_area","address"]},{"name":"school","match":{"geometry":["point","area"],"terms":["academy","alma mater","blackboard","college","department","discipline","establishment","faculty","hall","halls of ivy","institute","institution","jail*","schoolhouse","seminary","university"],"tags":{"amenity":"school"}},"icon":"school","form":["operator","building","address"]},{"name":"toilets","match":{"geometry":["point","area"],"terms":[],"tags":{"amenity":"toilets"}},"form":["operator","building","address"]},{"name":"town hall","match":{"geometry":["point","areea"],"terms":["village hall","city government","courthouse","municipal building","municipal center"],"tags":{"amenity":"townhall"}},"icon":"town-hall","form":["building_area","address"]},{"name":"university","match":{"geometry":["point","area"],"tags":{"amenity":"university"},"terms":[]},"icon":"college","form":["operator","address"]},{"name":"building","match":{"geometry":["point","area"],"tags":{"building":"*"},"terms":[]},"icon":"warehouse","form":["building_yes","levels","address"]},{"name":"highway","match":{"geometry":["point","vertex","line","area"],"tags":{"highway":"*"}},"form":[{"key":"highway","type":"combo"}]},{"name":"bus stop","match":{"geometry":["point"],"tags":{"highway":"bus_stop"},"terms":[]},"icon":"bus","form":["operator","shelter"]},{"name":"crossing","match":{"geometry":["vertex"],"tags":{"highway":"crossing"},"terms":["crosswalk","zebra crossing"]},"form":[{"key":"crossing","type":"combo"}]},{"name":"cycle path","match":{"geometry":["line"],"tags":{"highway":"cycleway"},"terms":[]},"icon":"highway-cycleway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"foot path","match":{"geometry":["line"],"terms":["beaten path","boulevard","clearing","course","cut*","drag*","footpath","highway","lane","line","orbit","passage","pathway","rail","rails","road","roadway","route","street","thoroughfare","trackway","trail","trajectory","walk"],"tags":{"highway":"footway"}},"icon":"highway-footway","form":["access","surface"]},{"name":"motorway","match":{"geometry":["line"],"tags":{"highway":"motorway"},"terms":[]},"icon":"highway-motorway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"path","match":{"geometry":["line"],"tags":{"highway":"path"},"terms":[]},"icon":"highway-footway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"primary road","match":{"geometry":["line"],"tags":{"highway":"primary"},"terms":[]},"icon":"highway-primary","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"residential road","match":{"geometry":["line"],"tags":{"highway":"residential"},"terms":[]},"icon":"highway-residential","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"secondary road","match":{"geometry":["line"],"tags":{"highway":"secondary"},"terms":[]},"icon":"highway-secondary","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"service road","match":{"geometry":["line"],"tags":{"highway":"service"},"terms":[]},"icon":"highway-service","form":[{"key":"service","type":"combo","options":["parking_aisle","driveway","alley","drive-through","emergency_access"]},"oneway","roadtype","access","maxspeed","surface"]},{"name":"steps","match":{"geometry":["line"],"tags":{"highway":"steps"},"terms":["stairs","staircase"]},"form":["access","surface"]},{"name":"tertiary road","match":{"geometry":["line"],"tags":{"highway":"tertiary"},"terms":[]},"icon":"highway-tertiary","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"track","match":{"geometry":["line"],"tags":{"highway":"track"},"terms":[]},"icon":"highway-track","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"trunk highway","match":{"geometry":["line"],"tags":{"highway":"trunk"},"terms":[]},"icon":"highway-trunk","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"turning circle","match":{"geometry":["vertex"],"tags":{"highway":"turning_circle"},"terms":[]},"icon":"circle"},{"name":"unclassified","match":{"geometry":["line"],"tags":{"highway":"unclassified"},"terms":[]},"icon":"highway","form":["oneway","roadtype","access","maxspeed","surface"]},{"name":"landuse","match":{"geometry":["point","area"],"tags":{"landuse":"*"}},"form":[{"key":"landuse","type":"combo"}]},{"name":"allotments","match":{"geometry":["point","area"],"tags":{"landuse":"allotments"},"terms":[]},"form":[]},{"name":"cemetery","match":{"geometry":["point","area"],"tags":{"landuse":"cemetery"},"terms":[]},"form":[],"icon":"cemetery"},{"name":"commercial","match":{"geometry":["point","area"],"tags":{"landuse":"commercial"},"terms":[]},"form":[]},{"name":"construction","match":{"geometry":["point","area"],"tags":{"landuse":"construction"},"terms":[]},"form":[{"key":"construction","type":"combo"},"operator"]},{"name":"farm","match":{"geometry":["point","area"],"tags":{"landuse":"farm"},"terms":[]},"form":[]},{"name":"farmyard","match":{"geometry":["point","area"],"tags":{"landuse":"farmyard"},"terms":[]},"form":[]},{"name":"forest","match":{"geometry":["point","area"],"tags":{"landuse":"forest"},"terms":[]},"form":[{"key":"wood","type":"combo"}],"icon":"park2"},{"name":"grass","match":{"geometry":["point","area"],"tags":{"landuse":"grass"},"terms":[]},"form":[]},{"name":"industrial","match":{"geometry":["point","area"],"tags":{"landuse":"industrial"},"terms":[]},"form":[]},{"name":"meadow","match":{"geometry":["point","area"],"tags":{"landuse":"meadow"},"terms":[]},"form":[]},{"name":"orchard","match":{"geometry":["point","area"],"tags":{"landuse":"orchard"},"terms":[]},"form":[]},{"name":"quarry","match":{"geometry":["point","area"],"tags":{"landuse":"quarry"},"terms":[]},"form":[]},{"name":"residential","match":{"geometry":["point","area"],"tags":{"landuse":"residential"},"terms":[]},"form":[]},{"name":"vineyard","match":{"geometry":["point","area"],"tags":{"landuse":"vineyard"},"terms":[]},"form":[]},{"name":"leisure","match":{"geometry":["point","area"],"tags":{"leisure":"*"}},"form":[{"key":"leisure","type":"combo"}]},{"name":"golf course","match":{"geometry":["point","area"],"tags":{"leisure":"golf_course"},"terms":[]},"icon":"golf","form":["operator","address"]},{"name":"park","match":{"geometry":["point","area"],"terms":["esplanade","estate","forest","garden","grass","green","grounds","lawn","lot","meadow","parkland","place","playground","plaza","pleasure garden","recreation area","square","tract","village green","woodland"],"tags":{"leisure":"park"}},"icon":"park"},{"name":"sport pitch","match":{"geometry":["point","area"],"tags":{"leisure":"pitch"},"terms":[]},"icon":"pitch","form":[{"key":"sport","type":"combo"},"surface"]},{"name":"baseball diamond","match":{"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"baseball"},"terms":[]},"icon":"baseball"},{"name":"basketball court","match":{"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"basketball"},"terms":[]},"icon":"basketball","form":["surface"]},{"name":"soccer field","match":{"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"soccer"},"terms":[]},"icon":"soccer","form":["surface"]},{"name":"tennis court","match":{"geometry":["point","area"],"tags":{"leisure":"pitch","sport":"tennis"},"terms":[]},"icon":"tennis","form":["surface"]},{"name":"playground","match":{"geometry":["point","area"],"tags":{"leisure":"playground"}}},{"name":"man made","match":{"geometry":["point","vertex","line","area"],"tags":{"man_made":"*"}},"form":[{"key":"man_made","type":"combo"}]},{"name":"lighthouse","match":{"geometry":["point","area"],"tags":{"man_made":"lighthouse"}}},{"name":"pier","match":{"geometry":["line","area"],"tags":{"man_made":"pier"}}},{"name":"natural","match":{"geometry":["point","area"],"tags":{"natural":"*"}},"form":[{"key":"natural","type":"combo"}]},{"name":"bay","match":{"geometry":["point","area"],"terms":[],"tags":{"natural":"bay"}}},{"name":"beach","match":{"geometry":["point","area"],"terms":[],"tags":{"natural":"beach"}},"form":["surface"]},{"name":"cliff","match":{"geometry":["point","vertex","line","area"],"terms":[],"tags":{"natural":"cliff"}}},{"name":"coastline","match":{"geometry":["line"],"terms":["shore"],"tags":{"natural":"coastline"}}},{"name":"glacier","match":{"geometry":["area"],"terms":[],"tags":{"natural":"glacier"}}},{"name":"grassland","match":{"geometry":["point","area"],"terms":[],"tags":{"natural":"grassland"}}},{"name":"heath","match":{"geometry":["area"],"terms":[],"tags":{"natural":"heath"}}},{"name":"peak","match":{"geometry":["point","vertex"],"tags":{"natural":"peak"},"terms":["acme","aiguille","alp","climax","crest","crown","hill","mount","mountain","pinnacle","summit","tip","top"]},"icon":"triangle","form":["elevation"]},{"name":"scrub","match":{"geometry":["area"],"tags":{"natural":"scrub"},"terms":[]}},{"name":"spring","match":{"geometry":["point","vertex"],"terms":[],"tags":{"natural":"spring"}}},{"name":"tree","match":{"geometry":["point","vertex"],"terms":[],"tags":{"natural":"tree"}},"form":[{"key":"denotation","type":"combo"}],"icon":"park"},{"name":"water","match":{"geometry":["area"],"tags":{"natural":"water"},"terms":[]},"form":[{"key":"water","type":"combo"}]},{"name":"lake","match":{"geometry":["area"],"tags":{"natural":"water","water":"lake"},"terms":["lakelet","loch","mere"]}},{"name":"pond","match":{"geometry":["area"],"tags":{"natural":"water","water":"pond"},"terms":["lakelet","millpond","tarn","pool","mere"]}},{"name":"reservoir","match":{"geometry":["area"],"tags":{"natural":"water","water":"reservoir"},"terms":[]}},{"name":"wetland","match":{"geometry":["point","area"],"tags":{"natural":"wetland"},"terms":[]},"form":[{"key":"wetland","type":"combo"}]},{"name":"wood","match":{"geometry":["point","area"],"tags":{"natural":"wood"},"terms":[]},"form":[{"key":"wood","type":"combo"}],"icon":"park2"},{"name":"office","match":{"geometry":["point","area"],"tags":{"office":"*"},"terms":[]},"icon":"commercial","form":[{"key":"office","type":"combo"},"address","opening_hours"]},{"name":"place","match":{"geometry":["point","area"],"tags":{"place":"*"}},"form":[{"key":"place","type":"combo"}]},{"name":"hamlet","match":{"geometry":["point","area"],"tags":{"place":"hamlet"}},"icon":"triangle-stroked"},{"name":"island","match":{"geometry":["point","area"],"terms":["archipelago","atoll","bar","cay","isle","islet","key","reef"],"tags":{"place":"island"}}},{"name":"locality","match":{"geometry":["point","area"],"tags":{"place":"locality"}},"icon":"marker"},{"name":"village","match":{"geometry":["point","area"],"tags":{"place":"village"}},"icon":"square-stroked"},{"name":"railway","match":{"geometry":["point","vertex","line","area"],"tags":{"railway":"*"}},"form":[{"key":"railway","type":"combo"}]},{"name":"rail","match":{"geometry":["line"],"tags":{"railway":"rail"},"terms":[]},"icon":"railway-rail"},{"name":"subway","match":{"geometry":["line"],"tags":{"railway":"subway"},"terms":[]},"icon":"railway-rail"},{"name":"subway entrance","match":{"geometry":["point"],"tags":{"railway":"subway_entrance"},"terms":[]},"icon":"rail-underground"},{"name":"shop","match":{"geometry":["point","area"],"tags":{"shop":"*"},"terms":[]},"icon":"shop","form":[{"key":"shop","type":"combo"},"address","opening_hours"]},{"name":"supermarket","match":{"geometry":["point","area"],"terms":["bazaar","boutique","chain","co-op","cut-rate store","discount store","five-and-dime","flea market","galleria","mall","mart","outlet","outlet store","shop","shopping center","shopping plaza","stand","store","supermarket","thrift shop"],"tags":{"shop":"supermarket"}},"icon":"grocery","form":["operator","building_area","address"]},{"name":"tourism","match":{"geometry":["point","area"],"tags":{"tourism":"*"}},"form":[{"key":"tourism","type":"combo"}]},{"name":"camp site","match":{"geometry":["point","area"],"terms":[],"tags":{"tourism":"camp_site"}},"icon":"campsite","form":["operator","address"]},{"name":"hotel","match":{"geometry":["point","area"],"terms":[],"tags":{"tourism":"hotel"}},"icon":"lodging","form":["operator","building_area","address"]},{"name":"museum","match":{"geometry":["point","area"],"terms":["exhibition","exhibits archive","foundation","gallery","hall","institution","library","menagerie","repository","salon","storehouse","treasury","vault"],"tags":{"tourism":"museum"}},"icon":"museum","form":["operator","building_area","address"]},{"name":"picnic site","match":{"geometry":["point","area"],"terms":[],"tags":{"tourism":"picnic_site"}},"form":["operator","building_area","address"]},{"name":"waterway","match":{"geometry":["point","vertex","line","area"],"tags":{"waterway":"*"}},"form":[{"key":"waterway","type":"combo"}]},{"name":"canal","match":{"geometry":["line"],"tags":{"waterway":"canal"}},"icon":"waterway-river"},{"name":"dam","match":{"geometry":["point","vertex","line","area"],"tags":{"waterway":"dam"}},"icon":"dam"},{"name":"ditch","match":{"geometry":["line"],"tags":{"waterway":"ditch"}},"icon":"waterway-river"},{"name":"drain","match":{"geometry":["line"],"tags":{"waterway":"drain"}},"icon":"waterway-river"},{"name":"river","match":{"geometry":["line"],"terms":["beck","branch","brook","course","creek","estuary","rill","rivulet","run","runnel","stream","tributary","watercourse"],"tags":{"waterway":"river"}},"icon":"waterway-river"},{"name":"riverbank","match":{"geometry":["area"],"tags":{"waterway":"riverbank"}},"icon":"water"},{"name":"stream","match":{"geometry":["line"],"terms":["beck","branch","brook","burn","course","creek","current","drift","flood","flow","freshet","race","rill","rindle","rivulet","run","runnel","rush","spate","spritz","surge","tide","torrent","tributary","watercourse"],"tags":{"waterway":"stream"}},"icon":"waterway-river","form":["layer"]},{"name":"weir","match":{"geometry":["vertex","line"],"tags":{"waterway":"weir"}},"icon":"dam"}]
\ No newline at end of file
diff --git a/data/presets/presets/aeroway.json b/data/presets/presets/aeroway.json
index c1e578441..d3e8c5b4e 100644
--- a/data/presets/presets/aeroway.json
+++ b/data/presets/presets/aeroway.json
@@ -1,7 +1,7 @@
{
"name": "aeroway",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/aeroway/aerodrome.json b/data/presets/presets/aeroway/aerodrome.json
index 3a9902d95..3bf3bdd96 100644
--- a/data/presets/presets/aeroway/aerodrome.json
+++ b/data/presets/presets/aeroway/aerodrome.json
@@ -1,7 +1,7 @@
{
"name": "airport",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/aeroway/helipad.json b/data/presets/presets/aeroway/helipad.json
index 8a26fbdc5..0aa1f5d02 100644
--- a/data/presets/presets/aeroway/helipad.json
+++ b/data/presets/presets/aeroway/helipad.json
@@ -1,7 +1,7 @@
{
"name": "helipad",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity.json b/data/presets/presets/amenity.json
index de010b188..e55aaae03 100644
--- a/data/presets/presets/amenity.json
+++ b/data/presets/presets/amenity.json
@@ -1,7 +1,7 @@
{
"name": "amenity",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/bank.json b/data/presets/presets/amenity/bank.json
index 0fe34acb3..5fc666799 100644
--- a/data/presets/presets/amenity/bank.json
+++ b/data/presets/presets/amenity/bank.json
@@ -1,7 +1,7 @@
{
"name": "bank",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/bar.json b/data/presets/presets/amenity/bar.json
index 770a6263c..0aead72e1 100644
--- a/data/presets/presets/amenity/bar.json
+++ b/data/presets/presets/amenity/bar.json
@@ -1,7 +1,7 @@
{
"name": "bar",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/bicycle_rental.json b/data/presets/presets/amenity/bicycle_rental.json
index 9b33d993c..49ffab05d 100644
--- a/data/presets/presets/amenity/bicycle_rental.json
+++ b/data/presets/presets/amenity/bicycle_rental.json
@@ -1,7 +1,7 @@
{
"name": "bicycle rental",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/cafe.json b/data/presets/presets/amenity/cafe.json
index 033724dfb..0adfc6f77 100644
--- a/data/presets/presets/amenity/cafe.json
+++ b/data/presets/presets/amenity/cafe.json
@@ -1,7 +1,7 @@
{
"name": "cafe",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/cinema.json b/data/presets/presets/amenity/cinema.json
index 88f829539..644a4552f 100644
--- a/data/presets/presets/amenity/cinema.json
+++ b/data/presets/presets/amenity/cinema.json
@@ -1,7 +1,7 @@
{
"name": "cinema",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/fast_food.json b/data/presets/presets/amenity/fast_food.json
index 1af60bfa0..c20284a2c 100644
--- a/data/presets/presets/amenity/fast_food.json
+++ b/data/presets/presets/amenity/fast_food.json
@@ -1,7 +1,7 @@
{
"name": "fast food",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/fire_station.json b/data/presets/presets/amenity/fire_station.json
index f257dd629..db24919e9 100644
--- a/data/presets/presets/amenity/fire_station.json
+++ b/data/presets/presets/amenity/fire_station.json
@@ -1,7 +1,7 @@
{
"name": "fire station",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/grave_yard.json b/data/presets/presets/amenity/grave_yard.json
index c5bb73e01..0ac475e6a 100644
--- a/data/presets/presets/amenity/grave_yard.json
+++ b/data/presets/presets/amenity/grave_yard.json
@@ -1,7 +1,7 @@
{
"name": "grave yard",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/hospital.json b/data/presets/presets/amenity/hospital.json
index ae98d309e..b9b3b3400 100644
--- a/data/presets/presets/amenity/hospital.json
+++ b/data/presets/presets/amenity/hospital.json
@@ -1,7 +1,7 @@
{
"name": "hospital",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/library.json b/data/presets/presets/amenity/library.json
index 673235d7f..ecbfc4e68 100644
--- a/data/presets/presets/amenity/library.json
+++ b/data/presets/presets/amenity/library.json
@@ -1,7 +1,7 @@
{
"name": "library",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/parking.json b/data/presets/presets/amenity/parking.json
index 6c5accd7c..beb1ea4f0 100644
--- a/data/presets/presets/amenity/parking.json
+++ b/data/presets/presets/amenity/parking.json
@@ -1,7 +1,7 @@
{
"name": "parking",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/pharmacy.json b/data/presets/presets/amenity/pharmacy.json
index ac1e9a732..ea96822a3 100644
--- a/data/presets/presets/amenity/pharmacy.json
+++ b/data/presets/presets/amenity/pharmacy.json
@@ -1,7 +1,7 @@
{
"name": "pharmacy",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/place_of_worship.json b/data/presets/presets/amenity/place_of_worship.json
index 96fb77f9d..ab6fb6f0b 100644
--- a/data/presets/presets/amenity/place_of_worship.json
+++ b/data/presets/presets/amenity/place_of_worship.json
@@ -1,7 +1,7 @@
{
"name": "place of worship",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/place_of_worship/christian.json b/data/presets/presets/amenity/place_of_worship/christian.json
index f4da88d4c..886a8ed58 100644
--- a/data/presets/presets/amenity/place_of_worship/christian.json
+++ b/data/presets/presets/amenity/place_of_worship/christian.json
@@ -1,7 +1,7 @@
{
"name": "church",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/place_of_worship/jewish.json b/data/presets/presets/amenity/place_of_worship/jewish.json
index 6c562ca6d..22861c980 100644
--- a/data/presets/presets/amenity/place_of_worship/jewish.json
+++ b/data/presets/presets/amenity/place_of_worship/jewish.json
@@ -1,7 +1,7 @@
{
"name": "synagogue",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/place_of_worship/muslim.json b/data/presets/presets/amenity/place_of_worship/muslim.json
index c3f48f905..7828e8baa 100644
--- a/data/presets/presets/amenity/place_of_worship/muslim.json
+++ b/data/presets/presets/amenity/place_of_worship/muslim.json
@@ -1,7 +1,7 @@
{
"name": "mosque",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/police.json b/data/presets/presets/amenity/police.json
index 51f9c931b..56a2113f3 100644
--- a/data/presets/presets/amenity/police.json
+++ b/data/presets/presets/amenity/police.json
@@ -1,7 +1,7 @@
{
"name": "police",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/post_box.json b/data/presets/presets/amenity/post_box.json
index 047aa6cbb..94a4cfbb2 100644
--- a/data/presets/presets/amenity/post_box.json
+++ b/data/presets/presets/amenity/post_box.json
@@ -1,7 +1,7 @@
{
"name": "post box",
"match": {
- "type": [
+ "geometry": [
"point"
],
"tags": {
diff --git a/data/presets/presets/amenity/pub.json b/data/presets/presets/amenity/pub.json
index 248ae57ed..6904678ea 100644
--- a/data/presets/presets/amenity/pub.json
+++ b/data/presets/presets/amenity/pub.json
@@ -1,7 +1,7 @@
{
"name": "pub",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/restaurant.json b/data/presets/presets/amenity/restaurant.json
index ae92a8b2a..fc93d926d 100644
--- a/data/presets/presets/amenity/restaurant.json
+++ b/data/presets/presets/amenity/restaurant.json
@@ -1,7 +1,7 @@
{
"name": "restaurant",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/school.json b/data/presets/presets/amenity/school.json
index b3d4ddd72..19746564f 100644
--- a/data/presets/presets/amenity/school.json
+++ b/data/presets/presets/amenity/school.json
@@ -1,7 +1,7 @@
{
"name": "school",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/toilets.json b/data/presets/presets/amenity/toilets.json
index ea98c523b..891591d22 100644
--- a/data/presets/presets/amenity/toilets.json
+++ b/data/presets/presets/amenity/toilets.json
@@ -1,7 +1,7 @@
{
"name": "toilets",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/amenity/townhall.json b/data/presets/presets/amenity/townhall.json
index 15e87c278..8b6f87cdc 100644
--- a/data/presets/presets/amenity/townhall.json
+++ b/data/presets/presets/amenity/townhall.json
@@ -1,7 +1,7 @@
{
"name": "town hall",
"match": {
- "type": [
+ "geometry": [
"point",
"areea"
],
diff --git a/data/presets/presets/amenity/university.json b/data/presets/presets/amenity/university.json
index 45ebf8679..f4508c153 100644
--- a/data/presets/presets/amenity/university.json
+++ b/data/presets/presets/amenity/university.json
@@ -1,7 +1,7 @@
{
"name": "university",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/building.json b/data/presets/presets/building.json
index e5adb7cf1..6d4bb8a3c 100644
--- a/data/presets/presets/building.json
+++ b/data/presets/presets/building.json
@@ -1,7 +1,7 @@
{
"name": "building",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/highway.json b/data/presets/presets/highway.json
index ce0f56828..97ab342dd 100644
--- a/data/presets/presets/highway.json
+++ b/data/presets/presets/highway.json
@@ -1,7 +1,7 @@
{
"name": "highway",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/highway/bus_stop.json b/data/presets/presets/highway/bus_stop.json
index 60a5f2587..75a7e88a8 100644
--- a/data/presets/presets/highway/bus_stop.json
+++ b/data/presets/presets/highway/bus_stop.json
@@ -1,7 +1,7 @@
{
"name": "bus stop",
"match": {
- "type": [
+ "geometry": [
"point"
],
"tags": {
diff --git a/data/presets/presets/highway/crossing.json b/data/presets/presets/highway/crossing.json
index 00fe9d496..0409caf9e 100644
--- a/data/presets/presets/highway/crossing.json
+++ b/data/presets/presets/highway/crossing.json
@@ -1,7 +1,7 @@
{
"name": "crossing",
"match": {
- "type": [
+ "geometry": [
"vertex"
],
"tags": {
diff --git a/data/presets/presets/highway/cycleway.json b/data/presets/presets/highway/cycleway.json
index bcccf5962..f96d37516 100644
--- a/data/presets/presets/highway/cycleway.json
+++ b/data/presets/presets/highway/cycleway.json
@@ -1,7 +1,7 @@
{
"name": "cycle path",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/footway.json b/data/presets/presets/highway/footway.json
index 780485ad0..0e343c217 100644
--- a/data/presets/presets/highway/footway.json
+++ b/data/presets/presets/highway/footway.json
@@ -1,7 +1,7 @@
{
"name": "foot path",
"match": {
- "type": [
+ "geometry": [
"line"
],
"terms": [
diff --git a/data/presets/presets/highway/motorway.json b/data/presets/presets/highway/motorway.json
index bdec8ba38..e31aab447 100644
--- a/data/presets/presets/highway/motorway.json
+++ b/data/presets/presets/highway/motorway.json
@@ -1,7 +1,7 @@
{
"name": "motorway",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/path.json b/data/presets/presets/highway/path.json
index 9e1052b99..e06de5f3d 100644
--- a/data/presets/presets/highway/path.json
+++ b/data/presets/presets/highway/path.json
@@ -1,7 +1,7 @@
{
"name": "path",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/primary.json b/data/presets/presets/highway/primary.json
index 7dc80e0cd..9ebd52c50 100644
--- a/data/presets/presets/highway/primary.json
+++ b/data/presets/presets/highway/primary.json
@@ -1,7 +1,7 @@
{
"name": "primary road",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/residential.json b/data/presets/presets/highway/residential.json
index 062850a1a..67f60cb33 100644
--- a/data/presets/presets/highway/residential.json
+++ b/data/presets/presets/highway/residential.json
@@ -1,7 +1,7 @@
{
"name": "residential road",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/secondary.json b/data/presets/presets/highway/secondary.json
index 5d837853b..b229af62b 100644
--- a/data/presets/presets/highway/secondary.json
+++ b/data/presets/presets/highway/secondary.json
@@ -1,7 +1,7 @@
{
"name": "secondary road",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/service.json b/data/presets/presets/highway/service.json
index 4073393fc..b21c4c259 100644
--- a/data/presets/presets/highway/service.json
+++ b/data/presets/presets/highway/service.json
@@ -1,7 +1,7 @@
{
"name": "service road",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/steps.json b/data/presets/presets/highway/steps.json
index 1379dad11..31fe8d490 100644
--- a/data/presets/presets/highway/steps.json
+++ b/data/presets/presets/highway/steps.json
@@ -1,7 +1,7 @@
{
"name": "steps",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/tertiary.json b/data/presets/presets/highway/tertiary.json
index 03b764fee..f838a4c90 100644
--- a/data/presets/presets/highway/tertiary.json
+++ b/data/presets/presets/highway/tertiary.json
@@ -1,7 +1,7 @@
{
"name": "tertiary road",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/track.json b/data/presets/presets/highway/track.json
index d0812cced..a83da1bfe 100644
--- a/data/presets/presets/highway/track.json
+++ b/data/presets/presets/highway/track.json
@@ -1,7 +1,7 @@
{
"name": "track",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/trunk.json b/data/presets/presets/highway/trunk.json
index 424e735ee..7325bd0a9 100644
--- a/data/presets/presets/highway/trunk.json
+++ b/data/presets/presets/highway/trunk.json
@@ -1,7 +1,7 @@
{
"name": "trunk highway",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/highway/turning_circle.json b/data/presets/presets/highway/turning_circle.json
index ab5db3a37..78b40f95c 100644
--- a/data/presets/presets/highway/turning_circle.json
+++ b/data/presets/presets/highway/turning_circle.json
@@ -1,7 +1,7 @@
{
"name": "turning circle",
"match": {
- "type": [
+ "geometry": [
"vertex"
],
"tags": {
diff --git a/data/presets/presets/highway/unclassified.json b/data/presets/presets/highway/unclassified.json
index cf7a6d157..dde578754 100644
--- a/data/presets/presets/highway/unclassified.json
+++ b/data/presets/presets/highway/unclassified.json
@@ -1,7 +1,7 @@
{
"name": "unclassified",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/landuse.json b/data/presets/presets/landuse.json
index 5a0885b7e..9a0637d8f 100644
--- a/data/presets/presets/landuse.json
+++ b/data/presets/presets/landuse.json
@@ -1,7 +1,7 @@
{
"name": "landuse",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/allotments.json b/data/presets/presets/landuse/allotments.json
index 5cba18e10..cb325330a 100644
--- a/data/presets/presets/landuse/allotments.json
+++ b/data/presets/presets/landuse/allotments.json
@@ -1,7 +1,7 @@
{
"name": "allotments",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/cemetery.json b/data/presets/presets/landuse/cemetery.json
index 3ffd94d1b..ffdc2a2e7 100644
--- a/data/presets/presets/landuse/cemetery.json
+++ b/data/presets/presets/landuse/cemetery.json
@@ -1,7 +1,7 @@
{
"name": "cemetery",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/commercial.json b/data/presets/presets/landuse/commercial.json
index 081c06848..d4d5967c7 100644
--- a/data/presets/presets/landuse/commercial.json
+++ b/data/presets/presets/landuse/commercial.json
@@ -1,7 +1,7 @@
{
"name": "commercial",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/construction.json b/data/presets/presets/landuse/construction.json
index 517a76450..3c5ca1b11 100644
--- a/data/presets/presets/landuse/construction.json
+++ b/data/presets/presets/landuse/construction.json
@@ -1,7 +1,7 @@
{
"name": "construction",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/farm.json b/data/presets/presets/landuse/farm.json
index a14c02bab..6c32c9af1 100644
--- a/data/presets/presets/landuse/farm.json
+++ b/data/presets/presets/landuse/farm.json
@@ -1,7 +1,7 @@
{
"name": "farm",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/farmyard.json b/data/presets/presets/landuse/farmyard.json
index 11282ec2a..cf982184d 100644
--- a/data/presets/presets/landuse/farmyard.json
+++ b/data/presets/presets/landuse/farmyard.json
@@ -1,7 +1,7 @@
{
"name": "farmyard",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/forest.json b/data/presets/presets/landuse/forest.json
index b2948264f..c81ecd1d0 100644
--- a/data/presets/presets/landuse/forest.json
+++ b/data/presets/presets/landuse/forest.json
@@ -1,7 +1,7 @@
{
"name": "forest",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/grass.json b/data/presets/presets/landuse/grass.json
index 6bf9ad245..6fccf2ff6 100644
--- a/data/presets/presets/landuse/grass.json
+++ b/data/presets/presets/landuse/grass.json
@@ -1,7 +1,7 @@
{
"name": "grass",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/industrial.json b/data/presets/presets/landuse/industrial.json
index 779bef0c6..9d22e13fa 100644
--- a/data/presets/presets/landuse/industrial.json
+++ b/data/presets/presets/landuse/industrial.json
@@ -1,7 +1,7 @@
{
"name": "industrial",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/meadow.json b/data/presets/presets/landuse/meadow.json
index 55995998d..d92086812 100644
--- a/data/presets/presets/landuse/meadow.json
+++ b/data/presets/presets/landuse/meadow.json
@@ -1,7 +1,7 @@
{
"name": "meadow",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/orchard.json b/data/presets/presets/landuse/orchard.json
index 71e273c6a..2066b7ef1 100644
--- a/data/presets/presets/landuse/orchard.json
+++ b/data/presets/presets/landuse/orchard.json
@@ -1,7 +1,7 @@
{
"name": "orchard",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/quarry.json b/data/presets/presets/landuse/quarry.json
index cdfeffa31..3785d619a 100644
--- a/data/presets/presets/landuse/quarry.json
+++ b/data/presets/presets/landuse/quarry.json
@@ -1,7 +1,7 @@
{
"name": "quarry",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/residential.json b/data/presets/presets/landuse/residential.json
index cf4f0609a..b2389006d 100644
--- a/data/presets/presets/landuse/residential.json
+++ b/data/presets/presets/landuse/residential.json
@@ -1,7 +1,7 @@
{
"name": "residential",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/landuse/vineyard.json b/data/presets/presets/landuse/vineyard.json
index af99bd6c0..c7faf3878 100644
--- a/data/presets/presets/landuse/vineyard.json
+++ b/data/presets/presets/landuse/vineyard.json
@@ -1,7 +1,7 @@
{
"name": "vineyard",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure.json b/data/presets/presets/leisure.json
index 4103c56de..b9f39339d 100644
--- a/data/presets/presets/leisure.json
+++ b/data/presets/presets/leisure.json
@@ -1,7 +1,7 @@
{
"name": "leisure",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/golf_course.json b/data/presets/presets/leisure/golf_course.json
index 1bccee40d..a26890958 100644
--- a/data/presets/presets/leisure/golf_course.json
+++ b/data/presets/presets/leisure/golf_course.json
@@ -1,7 +1,7 @@
{
"name": "golf course",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/park.json b/data/presets/presets/leisure/park.json
index 7616510ab..3dbea6066 100644
--- a/data/presets/presets/leisure/park.json
+++ b/data/presets/presets/leisure/park.json
@@ -1,7 +1,7 @@
{
"name": "park",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/pitch.json b/data/presets/presets/leisure/pitch.json
index 8cadc81d4..05b27a11c 100644
--- a/data/presets/presets/leisure/pitch.json
+++ b/data/presets/presets/leisure/pitch.json
@@ -1,7 +1,7 @@
{
"name": "sport pitch",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/pitch/baseball.json b/data/presets/presets/leisure/pitch/baseball.json
index da32ce8a7..1caf26900 100644
--- a/data/presets/presets/leisure/pitch/baseball.json
+++ b/data/presets/presets/leisure/pitch/baseball.json
@@ -1,7 +1,7 @@
{
"name": "baseball diamond",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
@@ -11,8 +11,5 @@
},
"terms": []
},
- "icon": "baseball",
- "form": [
- "surface"
- ]
+ "icon": "baseball"
}
diff --git a/data/presets/presets/leisure/pitch/basketball.json b/data/presets/presets/leisure/pitch/basketball.json
index 862bf44b0..2e4697f40 100644
--- a/data/presets/presets/leisure/pitch/basketball.json
+++ b/data/presets/presets/leisure/pitch/basketball.json
@@ -1,7 +1,7 @@
{
"name": "basketball court",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/pitch/soccer.json b/data/presets/presets/leisure/pitch/soccer.json
index 650624f07..7d09a2728 100644
--- a/data/presets/presets/leisure/pitch/soccer.json
+++ b/data/presets/presets/leisure/pitch/soccer.json
@@ -1,7 +1,7 @@
{
"name": "soccer field",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/pitch/tennis.json b/data/presets/presets/leisure/pitch/tennis.json
index 119021c20..64e78f666 100644
--- a/data/presets/presets/leisure/pitch/tennis.json
+++ b/data/presets/presets/leisure/pitch/tennis.json
@@ -1,7 +1,7 @@
{
"name": "tennis court",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/leisure/playground.json b/data/presets/presets/leisure/playground.json
new file mode 100644
index 000000000..64f70b9e2
--- /dev/null
+++ b/data/presets/presets/leisure/playground.json
@@ -0,0 +1,12 @@
+{
+ "name": "playground",
+ "match": {
+ "geometry": [
+ "point",
+ "area"
+ ],
+ "tags": {
+ "leisure": "playground"
+ }
+ }
+}
diff --git a/data/presets/presets/man_made.json b/data/presets/presets/man_made.json
index 5ba7c0f48..1918be887 100644
--- a/data/presets/presets/man_made.json
+++ b/data/presets/presets/man_made.json
@@ -1,7 +1,7 @@
{
"name": "man made",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/man_made/lighthouse.json b/data/presets/presets/man_made/lighthouse.json
index 09ae75049..061695853 100644
--- a/data/presets/presets/man_made/lighthouse.json
+++ b/data/presets/presets/man_made/lighthouse.json
@@ -1,7 +1,7 @@
{
"name": "lighthouse",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/man_made/pier.json b/data/presets/presets/man_made/pier.json
index 59836279c..7a869efe2 100644
--- a/data/presets/presets/man_made/pier.json
+++ b/data/presets/presets/man_made/pier.json
@@ -1,7 +1,7 @@
{
"name": "pier",
"match": {
- "type": [
+ "geometry": [
"line",
"area"
],
diff --git a/data/presets/presets/natural.json b/data/presets/presets/natural.json
index 99866992c..ec6915069 100644
--- a/data/presets/presets/natural.json
+++ b/data/presets/presets/natural.json
@@ -1,7 +1,7 @@
{
"name": "natural",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/natural/bay.json b/data/presets/presets/natural/bay.json
index c984fea71..ffd6fa1a2 100644
--- a/data/presets/presets/natural/bay.json
+++ b/data/presets/presets/natural/bay.json
@@ -1,7 +1,7 @@
{
"name": "bay",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/natural/beach.json b/data/presets/presets/natural/beach.json
index 30995af62..07248a73a 100644
--- a/data/presets/presets/natural/beach.json
+++ b/data/presets/presets/natural/beach.json
@@ -1,7 +1,7 @@
{
"name": "beach",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/natural/cliff.json b/data/presets/presets/natural/cliff.json
index ded9e2c8f..c8d9631dc 100644
--- a/data/presets/presets/natural/cliff.json
+++ b/data/presets/presets/natural/cliff.json
@@ -1,7 +1,7 @@
{
"name": "cliff",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/natural/coastline.json b/data/presets/presets/natural/coastline.json
index 2825acb10..aa0422db9 100644
--- a/data/presets/presets/natural/coastline.json
+++ b/data/presets/presets/natural/coastline.json
@@ -1,7 +1,7 @@
{
"name": "coastline",
"match": {
- "type": [
+ "geometry": [
"line"
],
"terms": [
diff --git a/data/presets/presets/natural/glacier.json b/data/presets/presets/natural/glacier.json
index 3d794eb50..fe071601e 100644
--- a/data/presets/presets/natural/glacier.json
+++ b/data/presets/presets/natural/glacier.json
@@ -1,7 +1,7 @@
{
"name": "glacier",
"match": {
- "type": [
+ "geometry": [
"area"
],
"terms": [
diff --git a/data/presets/presets/natural/grassland.json b/data/presets/presets/natural/grassland.json
index 627a1a7c7..8fd3927a6 100644
--- a/data/presets/presets/natural/grassland.json
+++ b/data/presets/presets/natural/grassland.json
@@ -1,7 +1,7 @@
{
"name": "grassland",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/natural/heath.json b/data/presets/presets/natural/heath.json
index 2e3e70490..e447a6cde 100644
--- a/data/presets/presets/natural/heath.json
+++ b/data/presets/presets/natural/heath.json
@@ -1,7 +1,7 @@
{
"name": "heath",
"match": {
- "type": [
+ "geometry": [
"area"
],
"terms": [
diff --git a/data/presets/presets/natural/peak.json b/data/presets/presets/natural/peak.json
index 7b77631af..d89cd93b1 100644
--- a/data/presets/presets/natural/peak.json
+++ b/data/presets/presets/natural/peak.json
@@ -1,7 +1,7 @@
{
"name": "peak",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex"
],
diff --git a/data/presets/presets/natural/scrub.json b/data/presets/presets/natural/scrub.json
index ff87022c7..2fea59fc7 100644
--- a/data/presets/presets/natural/scrub.json
+++ b/data/presets/presets/natural/scrub.json
@@ -1,7 +1,7 @@
{
"name": "scrub",
"match": {
- "type": [
+ "geometry": [
"area"
],
"tags": {
diff --git a/data/presets/presets/natural/spring.json b/data/presets/presets/natural/spring.json
index cabc97cc5..d12c210d2 100644
--- a/data/presets/presets/natural/spring.json
+++ b/data/presets/presets/natural/spring.json
@@ -1,7 +1,7 @@
{
"name": "spring",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex"
],
diff --git a/data/presets/presets/natural/tree.json b/data/presets/presets/natural/tree.json
index 21ebf5895..b3b81e048 100644
--- a/data/presets/presets/natural/tree.json
+++ b/data/presets/presets/natural/tree.json
@@ -1,7 +1,7 @@
{
"name": "tree",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex"
],
diff --git a/data/presets/presets/natural/water.json b/data/presets/presets/natural/water.json
index 3c53a7540..1d2412c62 100644
--- a/data/presets/presets/natural/water.json
+++ b/data/presets/presets/natural/water.json
@@ -1,7 +1,7 @@
{
"name": "water",
"match": {
- "type": [
+ "geometry": [
"area"
],
"tags": {
diff --git a/data/presets/presets/natural/water/lake.json b/data/presets/presets/natural/water/lake.json
index 67fe90a8a..493aa7b27 100644
--- a/data/presets/presets/natural/water/lake.json
+++ b/data/presets/presets/natural/water/lake.json
@@ -1,7 +1,7 @@
{
"name": "lake",
"match": {
- "type": [
+ "geometry": [
"area"
],
"tags": {
diff --git a/data/presets/presets/natural/water/pond.json b/data/presets/presets/natural/water/pond.json
index 8bd6bf658..f1d40311f 100644
--- a/data/presets/presets/natural/water/pond.json
+++ b/data/presets/presets/natural/water/pond.json
@@ -1,7 +1,7 @@
{
"name": "pond",
"match": {
- "type": [
+ "geometry": [
"area"
],
"tags": {
diff --git a/data/presets/presets/natural/water/reservoir.json b/data/presets/presets/natural/water/reservoir.json
index 54ab1f2db..23c3ae8f6 100644
--- a/data/presets/presets/natural/water/reservoir.json
+++ b/data/presets/presets/natural/water/reservoir.json
@@ -1,7 +1,7 @@
{
"name": "reservoir",
"match": {
- "type": [
+ "geometry": [
"area"
],
"tags": {
diff --git a/data/presets/presets/natural/wetland.json b/data/presets/presets/natural/wetland.json
index f65d22ebd..5769f4b81 100644
--- a/data/presets/presets/natural/wetland.json
+++ b/data/presets/presets/natural/wetland.json
@@ -1,7 +1,7 @@
{
"name": "wetland",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/natural/wood.json b/data/presets/presets/natural/wood.json
index 96a45e726..e127dde35 100644
--- a/data/presets/presets/natural/wood.json
+++ b/data/presets/presets/natural/wood.json
@@ -1,7 +1,7 @@
{
"name": "wood",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/office.json b/data/presets/presets/office.json
index 4ec845763..56c85cfc3 100644
--- a/data/presets/presets/office.json
+++ b/data/presets/presets/office.json
@@ -1,7 +1,7 @@
{
"name": "office",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/place.json b/data/presets/presets/place.json
index b440150ea..87b25e571 100644
--- a/data/presets/presets/place.json
+++ b/data/presets/presets/place.json
@@ -1,7 +1,7 @@
{
"name": "place",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/place/hamlet.json b/data/presets/presets/place/hamlet.json
index 6cdf3a919..80aa2cf05 100644
--- a/data/presets/presets/place/hamlet.json
+++ b/data/presets/presets/place/hamlet.json
@@ -1,7 +1,7 @@
{
"name": "hamlet",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/place/island.json b/data/presets/presets/place/island.json
index 6cfcee497..a1fc0abae 100644
--- a/data/presets/presets/place/island.json
+++ b/data/presets/presets/place/island.json
@@ -1,7 +1,7 @@
{
"name": "island",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/place/locality.json b/data/presets/presets/place/locality.json
index 3fa8c43fa..c6a61b90b 100644
--- a/data/presets/presets/place/locality.json
+++ b/data/presets/presets/place/locality.json
@@ -1,7 +1,7 @@
{
"name": "locality",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/place/village.json b/data/presets/presets/place/village.json
index 1dae9ffde..8a5447e63 100644
--- a/data/presets/presets/place/village.json
+++ b/data/presets/presets/place/village.json
@@ -1,7 +1,7 @@
{
"name": "village",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/railway.json b/data/presets/presets/railway.json
index aff59dbb0..f101aac2d 100644
--- a/data/presets/presets/railway.json
+++ b/data/presets/presets/railway.json
@@ -1,7 +1,7 @@
{
"name": "railway",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/railway/rail.json b/data/presets/presets/railway/rail.json
index a90c18e99..81060918c 100644
--- a/data/presets/presets/railway/rail.json
+++ b/data/presets/presets/railway/rail.json
@@ -1,7 +1,7 @@
{
"name": "rail",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/railway/subway.json b/data/presets/presets/railway/subway.json
index db770b294..ca2bb966e 100644
--- a/data/presets/presets/railway/subway.json
+++ b/data/presets/presets/railway/subway.json
@@ -1,7 +1,7 @@
{
"name": "subway",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/railway/subway_entrance.json b/data/presets/presets/railway/subway_entrance.json
index 09d1c5901..60b6fa0ac 100644
--- a/data/presets/presets/railway/subway_entrance.json
+++ b/data/presets/presets/railway/subway_entrance.json
@@ -1,7 +1,7 @@
{
"name": "subway entrance",
"match": {
- "type": [
+ "geometry": [
"point"
],
"tags": {
diff --git a/data/presets/presets/shop.json b/data/presets/presets/shop.json
index 6aa08d949..d7d8bde69 100644
--- a/data/presets/presets/shop.json
+++ b/data/presets/presets/shop.json
@@ -1,7 +1,7 @@
{
"name": "shop",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/shop/supermarket.json b/data/presets/presets/shop/supermarket.json
index 66efada36..90cd913ee 100644
--- a/data/presets/presets/shop/supermarket.json
+++ b/data/presets/presets/shop/supermarket.json
@@ -1,7 +1,7 @@
{
"name": "supermarket",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/tourism.json b/data/presets/presets/tourism.json
index 589030525..36669d915 100644
--- a/data/presets/presets/tourism.json
+++ b/data/presets/presets/tourism.json
@@ -1,7 +1,7 @@
{
"name": "tourism",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/tourism/camp_site.json b/data/presets/presets/tourism/camp_site.json
index 4b8e006d8..ecc0e9cde 100644
--- a/data/presets/presets/tourism/camp_site.json
+++ b/data/presets/presets/tourism/camp_site.json
@@ -1,7 +1,7 @@
{
"name": "camp site",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/tourism/hotel.json b/data/presets/presets/tourism/hotel.json
index f2d7e3969..89605810d 100644
--- a/data/presets/presets/tourism/hotel.json
+++ b/data/presets/presets/tourism/hotel.json
@@ -1,7 +1,7 @@
{
"name": "hotel",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/tourism/museum.json b/data/presets/presets/tourism/museum.json
index 396711959..d4655c0c8 100644
--- a/data/presets/presets/tourism/museum.json
+++ b/data/presets/presets/tourism/museum.json
@@ -1,7 +1,7 @@
{
"name": "museum",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/tourism/picnic_site.json b/data/presets/presets/tourism/picnic_site.json
index 799c9e1ec..8447647bb 100644
--- a/data/presets/presets/tourism/picnic_site.json
+++ b/data/presets/presets/tourism/picnic_site.json
@@ -1,7 +1,7 @@
{
"name": "picnic site",
"match": {
- "type": [
+ "geometry": [
"point",
"area"
],
diff --git a/data/presets/presets/waterway.json b/data/presets/presets/waterway.json
index 95bfde7a3..075acda7a 100644
--- a/data/presets/presets/waterway.json
+++ b/data/presets/presets/waterway.json
@@ -1,7 +1,7 @@
{
"name": "waterway",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/waterway/canal.json b/data/presets/presets/waterway/canal.json
index f8edaafe5..a78f6fb66 100644
--- a/data/presets/presets/waterway/canal.json
+++ b/data/presets/presets/waterway/canal.json
@@ -1,7 +1,7 @@
{
"name": "canal",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/waterway/dam.json b/data/presets/presets/waterway/dam.json
index 9d2bb2222..6477c8734 100644
--- a/data/presets/presets/waterway/dam.json
+++ b/data/presets/presets/waterway/dam.json
@@ -1,7 +1,7 @@
{
"name": "dam",
"match": {
- "type": [
+ "geometry": [
"point",
"vertex",
"line",
diff --git a/data/presets/presets/waterway/ditch.json b/data/presets/presets/waterway/ditch.json
index 1f180da0a..2fb7a7565 100644
--- a/data/presets/presets/waterway/ditch.json
+++ b/data/presets/presets/waterway/ditch.json
@@ -1,7 +1,7 @@
{
"name": "ditch",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/waterway/drain.json b/data/presets/presets/waterway/drain.json
index e820f9a32..ae5e6c219 100644
--- a/data/presets/presets/waterway/drain.json
+++ b/data/presets/presets/waterway/drain.json
@@ -1,7 +1,7 @@
{
"name": "drain",
"match": {
- "type": [
+ "geometry": [
"line"
],
"tags": {
diff --git a/data/presets/presets/waterway/river.json b/data/presets/presets/waterway/river.json
index fff05840b..4295b0a86 100644
--- a/data/presets/presets/waterway/river.json
+++ b/data/presets/presets/waterway/river.json
@@ -1,7 +1,7 @@
{
"name": "river",
"match": {
- "type": [
+ "geometry": [
"line"
],
"terms": [
diff --git a/data/presets/presets/waterway/riverbank.json b/data/presets/presets/waterway/riverbank.json
index cd11f7170..b97c2ca57 100644
--- a/data/presets/presets/waterway/riverbank.json
+++ b/data/presets/presets/waterway/riverbank.json
@@ -1,7 +1,7 @@
{
"name": "riverbank",
"match": {
- "type": [
+ "geometry": [
"area"
],
"tags": {
diff --git a/data/presets/presets/waterway/stream.json b/data/presets/presets/waterway/stream.json
index 7a3be3f0c..64104a623 100644
--- a/data/presets/presets/waterway/stream.json
+++ b/data/presets/presets/waterway/stream.json
@@ -1,7 +1,7 @@
{
"name": "stream",
"match": {
- "type": [
+ "geometry": [
"line"
],
"terms": [
diff --git a/data/presets/presets/waterway/weir.json b/data/presets/presets/waterway/weir.json
index 9a00d83ea..897c474d2 100644
--- a/data/presets/presets/waterway/weir.json
+++ b/data/presets/presets/waterway/weir.json
@@ -1,7 +1,7 @@
{
"name": "weir",
"match": {
- "type": [
+ "geometry": [
"vertex",
"line"
],
diff --git a/index.html b/index.html
index 7a96558f9..12524e251 100644
--- a/index.html
+++ b/index.html
@@ -182,6 +182,7 @@
+
diff --git a/js/id/actions/connect.js b/js/id/actions/connect.js
index aed9882bc..82764e15f 100644
--- a/js/id/actions/connect.js
+++ b/js/id/actions/connect.js
@@ -17,10 +17,12 @@ iD.actions.Connect = function(nodeIds) {
var survivor = graph.entity(_.last(nodeIds));
for (var i = 0; i < nodeIds.length - 1; i++) {
- var node = graph.entity(nodeIds[i]), index;
+ var node = graph.entity(nodeIds[i]);
graph.parentWays(node).forEach(function(parent) {
- graph = graph.replace(parent.replaceNode(node.id, survivor.id));
+ if (!parent.areAdjacent(node.id, survivor.id)) {
+ graph = graph.replace(parent.replaceNode(node.id, survivor.id));
+ }
});
graph.parentRelations(node).forEach(function(parent) {
diff --git a/js/id/core/entity.js b/js/id/core/entity.js
index b0ed5b0f0..0aaa36907 100644
--- a/js/id/core/entity.js
+++ b/js/id/core/entity.js
@@ -68,17 +68,19 @@ iD.Entity.prototype = {
},
mergeTags: function(tags) {
- var merged = _.clone(this.tags);
+ var merged = _.clone(this.tags), changed = false;
for (var k in tags) {
var t1 = merged[k],
t2 = tags[k];
- if (t1 && t1 !== t2) {
- merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
- } else {
+ if (!t1) {
+ changed = true;
merged[k] = t2;
+ } else if (t1 !== t2) {
+ changed = true;
+ merged[k] = _.union(t1.split(/;\s*/), t2.split(/;\s*/)).join(';');
}
}
- return this.update({tags: merged});
+ return changed ? this.update({tags: merged}) : this;
},
intersects: function(extent, resolver) {
diff --git a/js/id/core/way.js b/js/id/core/way.js
index 14bbd14fd..9eb27650d 100644
--- a/js/id/core/way.js
+++ b/js/id/core/way.js
@@ -59,7 +59,7 @@ _.extend(iD.Way.prototype, {
areAdjacent: function(n1, n2) {
for (var i = 0; i < this.nodes.length; i++) {
- if (this.nodes[i] === n1) {
+ if (this.nodes[i] === n1) {
if (this.nodes[i - 1] === n2) return true;
if (this.nodes[i + 1] === n2) return true;
}
diff --git a/js/id/modes/drag_node.js b/js/id/modes/drag_node.js
index fea02bf86..475f7aef7 100644
--- a/js/id/modes/drag_node.js
+++ b/js/id/modes/drag_node.js
@@ -102,12 +102,6 @@ iD.modes.DragNode = function(context) {
function end(entity) {
if (cancelled) return;
- function adjacent(d) {
- return _.any(context.graph().parentWays(entity).map(function(w) {
- return w.areAdjacent(d.id, entity.id);
- }));
- }
-
var d = datum();
if (d.type === 'way') {
@@ -117,15 +111,6 @@ iD.modes.DragNode = function(context) {
iD.actions.AddVertex(d.id, entity.id, choice.index),
connectAnnotation(d));
- } else if (d.type === 'node' && adjacent(d)) {
- if (wasMidpoint) {
- context.history().pop();
- } else {
- context.replace(
- iD.actions.DeleteNode(entity.id),
- t('operations.delete.annotation.vertex'));
- }
-
} else if (d.type === 'node' && d.id !== entity.id) {
context.replace(
iD.actions.Connect([entity.id, d.id]),
diff --git a/js/id/presets.js b/js/id/presets.js
index 2747a80c0..8f6a43bbc 100644
--- a/js/id/presets.js
+++ b/js/id/presets.js
@@ -8,13 +8,14 @@ iD.presets = function(context) {
icon: 'marker-stroked',
match: {
tags: {},
- type: ['point', 'vertex', 'line', 'area']
+ geometry: ['point', 'vertex', 'line', 'area']
},
form: []
}),
all = iD.presets.Collection([iD.presets.Preset(other)]),
defaults = { area: all, line: all, point: all, vertex: all },
forms = {},
+ universal = [],
recent = iD.presets.Collection([]);
all.load = function(d) {
@@ -22,6 +23,7 @@ iD.presets = function(context) {
if (d.forms) {
_.forEach(d.forms, function(d, id) {
forms[id] = iD.presets.Form(d, id);
+ if (d.universal) universal.push(forms[id]);
});
}
@@ -31,6 +33,7 @@ iD.presets = function(context) {
});
}
+
if (d.categories) {
d.categories.forEach(function(d) {
all.collection.push(iD.presets.Category(d, all));
@@ -50,8 +53,12 @@ iD.presets = function(context) {
return all;
};
+ all.universal = function() {
+ return universal;
+ };
+
all.defaults = function(entity, n) {
- var rec = recent.matchType(entity, context.graph()).collection.slice(0, 4),
+ var rec = recent.matchGeometry(entity, context.graph()).collection.slice(0, 4),
def = _.uniq(rec.concat(defaults[entity.geometry(context.graph())].collection)).slice(0, n - 1);
return iD.presets.Collection(_.unique(rec.concat(def).concat(other)));
};
diff --git a/js/id/presets/category.js b/js/id/presets/category.js
index 21f16d939..e3c9c13ec 100644
--- a/js/id/presets/category.js
+++ b/js/id/presets/category.js
@@ -5,8 +5,8 @@ iD.presets.Category = function(category, all) {
return all.item(name);
}));
- category.matchType = function(entity, resolver) {
- return category.match.type.indexOf(entity.geometry(resolver)) >= 0;
+ category.matchGeometry = function(entity, resolver) {
+ return category.match.geometry.indexOf(entity.geometry(resolver)) >= 0;
};
category.matchTags = function() { return false; };
diff --git a/js/id/presets/collection.js b/js/id/presets/collection.js
index da7f9e5c9..2d7d528d0 100644
--- a/js/id/presets/collection.js
+++ b/js/id/presets/collection.js
@@ -11,12 +11,12 @@ iD.presets.Collection = function(collection) {
},
match: function(entity, resolver) {
- return presets.matchType(entity, resolver).matchTags(entity);
+ return presets.matchGeometry(entity, resolver).matchTags(entity);
},
- matchType: function(entity, resolver) {
+ matchGeometry: function(entity, resolver) {
return iD.presets.Collection(collection.filter(function(d) {
- return d.matchType(entity, resolver);
+ return d.matchGeometry(entity, resolver);
}));
},
diff --git a/js/id/presets/preset.js b/js/id/presets/preset.js
index 7e8dc2672..79f27b32d 100644
--- a/js/id/presets/preset.js
+++ b/js/id/presets/preset.js
@@ -3,16 +3,19 @@ iD.presets.Preset = function(preset, forms) {
preset.icon = preset.icon || 'marker-stroked';
- preset.form = preset.form ? preset.form.map(function(f) {
+ preset.form = preset.form ? preset.form.map(getForms) : [];
+ preset.additional = preset.additional ? preset.additional.map(getForms) : [];
+
+ function getForms(f) {
if (typeof f === 'string') {
return forms[f];
} else {
return iD.presets.Form(f, f.key);
}
- }) : [];
+ }
- preset.matchType = function(entity, resolver) {
- return preset.match.type.indexOf(entity.geometry(resolver)) >= 0;
+ preset.matchGeometry = function(entity, resolver) {
+ return preset.match.geometry.indexOf(entity.geometry(resolver)) >= 0;
};
preset.matchTags = function(entity) {
diff --git a/js/id/svg/areas.js b/js/id/svg/areas.js
index 7244f06f1..c0d66cca9 100644
--- a/js/id/svg/areas.js
+++ b/js/id/svg/areas.js
@@ -34,7 +34,8 @@ iD.svg.Areas = function(projection) {
cemetery: 'cemetery',
grave_yard: 'cemetery',
meadow: 'meadow',
- famrland: 'farmland',
+ farm: 'farmland',
+ farmland: 'farmland',
orchard: 'orchard'
};
diff --git a/js/id/ui/background.js b/js/id/ui/background.js
index 4d5588567..21e710dc2 100644
--- a/js/id/ui/background.js
+++ b/js/id/ui/background.js
@@ -187,9 +187,9 @@ iD.ui.Background = function(context) {
.attr('class', 'adjustments pad1');
var directions = [
- ['left', [-1, 0]],
+ ['left', [1, 0]],
['top', [0, -1]],
- ['right', [1, 0]],
+ ['right', [-1, 0]],
['bottom', [0, 1]]];
adjustments.append('a')
diff --git a/js/id/ui/preset.js b/js/id/ui/preset.js
index ac4249141..8f2242d45 100644
--- a/js/id/ui/preset.js
+++ b/js/id/ui/preset.js
@@ -3,7 +3,9 @@ iD.ui.preset = function(context) {
entity,
tags,
keys,
- preset;
+ preset,
+ formwrap,
+ formbuttonwrap;
function input(d) {
var i = iD.ui.preset[d.type](d, context)
@@ -18,7 +20,7 @@ iD.ui.preset = function(context) {
keys = keys.concat(d.key ? [d.key] : d.keys);
- this.call(i);
+ d3.select(this).call(i);
}
function presets(selection) {
@@ -26,22 +28,53 @@ iD.ui.preset = function(context) {
selection.html('');
keys = [];
+ formwrap = selection.append('div');
+ draw(formwrap, preset.form);
+
+ var wrap = selection.append('div')
+ .attr('class', 'col12 inspector-inner');
+
+ wrap.append('div')
+ .attr('class', 'col3 preset-label')
+ .text('Add field');
+
+ formbuttonwrap = wrap.append('div')
+ .attr('class', 'col9 preset-input');
+
+ formbuttonwrap.selectAll('button')
+ .data(preset.additional)
+ .enter()
+ .append('button')
+ .attr('class', 'preset-add-form')
+ .attr('title', function(d) { return d.label(); })
+ .on('click', addForm)
+ .append('span')
+ .attr('class', function(d) { return 'icon ' + d.icon; });
+
+ function addForm(d) {
+ draw(formwrap, [d]);
+ d3.select(this).remove();
+ if (!wrap.selectAll('button').node()) wrap.remove();
+ }
+ }
+
+ function formKey(d) {
+ return d.key || String(d.keys);
+ }
+
+ function draw(selection, form) {
+
var sections = selection.selectAll('div.preset-section')
- .data(preset.form)
+ .data(form, formKey)
.enter()
.append('div')
- .attr('class', 'preset-section fillL inspector-inner col12');
+ .attr('class', 'preset-section fillL inspector-inner col12')
- sections.each(function(d) {
- var s = d3.select(this);
-
- s.append('h4')
- .attr('for', 'input-' + d.key)
+ sections.append('h4')
+ .attr('for', function(d) { return 'input-' + d.key; })
.text(function(d) { return d.label(); });
- input.call(s, d);
- });
- if (tags) event.setTags(tags);
+ sections.each(input);
}
presets.rendered = function() {
@@ -54,9 +87,25 @@ iD.ui.preset = function(context) {
return presets;
};
- presets.change = function(_) {
- tags = _;
- event.setTags(_);
+ presets.change = function(t) {
+ tags = t;
+
+ function haveKey(k) { return k && !!tags[k]; }
+
+ formbuttonwrap.selectAll('button').each(function(p) {
+ if (haveKey(p.key) || _.any(p.keys, haveKey)) {
+ draw(formwrap, [p]);
+ d3.select(this).remove();
+ }
+ });
+
+ context.presets().universal().forEach(function(p) {
+ if (haveKey(p.key) || _.any(p.keys, haveKey)) {
+ draw(formwrap, [p]);
+ }
+ });
+
+ event.setTags(tags);
return presets;
};
diff --git a/js/id/ui/preset/check.js b/js/id/ui/preset/check.js
index 738b14765..ab653ca86 100644
--- a/js/id/ui/preset/check.js
+++ b/js/id/ui/preset/check.js
@@ -2,7 +2,7 @@ iD.ui.preset.check = function(form) {
var event = d3.dispatch('change', 'close'),
values = ['', 'yes', 'no'],
- value,
+ value = '',
box,
text,
label;
@@ -14,9 +14,11 @@ iD.ui.preset.check = function(form) {
label = selection.append('label');
box = label.append('input')
+ .property('indeterminate', true)
.attr('type', 'checkbox');
text = label.append('span')
+ .text('unknown')
.attr('class', 'value');
box.on('click', function() {
diff --git a/js/id/ui/preset_grid.js b/js/id/ui/preset_grid.js
index 9e45690d9..1bd787b99 100644
--- a/js/id/ui/preset_grid.js
+++ b/js/id/ui/preset_grid.js
@@ -8,7 +8,7 @@ iD.ui.PresetGrid = function(context) {
selection.html('');
- presets = presets.matchType(entity, context.graph());
+ presets = presets.matchGeometry(entity, context.graph());
var messagewrap = selection.append('div')
.attr('class', 'message inspector-inner fillL');
diff --git a/js/id/ui/radial_menu.js b/js/id/ui/radial_menu.js
index 3a6e3314c..ff8ec1007 100644
--- a/js/id/ui/radial_menu.js
+++ b/js/id/ui/radial_menu.js
@@ -1,6 +1,7 @@
iD.ui.RadialMenu = function(operations) {
var menu,
- center = [0, 0];
+ center = [0, 0],
+ tooltip;
var radialMenu = function(selection) {
if (!operations.length)
@@ -57,7 +58,7 @@ iD.ui.RadialMenu = function(operations) {
.attr('clip-path', 'url(#clip-square-20)')
.attr('xlink:href', function(d) { return '#icon-operation-' + d.id; });
- var tooltip = d3.select(document.body)
+ tooltip = d3.select(document.body)
.append('div')
.attr('class', 'tooltip-inner radial-menu-tooltip');
@@ -84,6 +85,10 @@ iD.ui.RadialMenu = function(operations) {
.attr('opacity', 0)
.remove();
}
+
+ if (tooltip) {
+ tooltip.remove();
+ }
};
radialMenu.center = function(_) {
diff --git a/js/id/ui/tag_editor.js b/js/id/ui/tag_editor.js
index 66655b002..3e7f5482b 100644
--- a/js/id/ui/tag_editor.js
+++ b/js/id/ui/tag_editor.js
@@ -149,7 +149,7 @@ iD.ui.TagEditor = function(context) {
// change preset if necessary (undos/redos)
var newmatch = presets
- .matchType(entity, context.graph())
+ .matchGeometry(entity, context.graph())
.matchTags(entity.update({ tags: tags }));
if (newmatch !== preset) {
return tageditor(selection_, newmatch);
diff --git a/js/lib/locale.js b/js/lib/locale.js
index 91b3818a9..04d9025e7 100644
--- a/js/lib/locale.js
+++ b/js/lib/locale.js
@@ -18,7 +18,7 @@ function t(s, o, loc) {
if (rep !== undefined) {
if (o) for (var k in o) rep = rep.replace('{' + k + '}', o[k]);
return rep;
- } else if (o.default) {
+ } else if (o && o.default) {
return o.default;
} else {
var missing = 'Missing translation: ' + s;
diff --git a/locale/lv.js b/locale/lv.js
index aa27ced1e..b6aba3d26 100644
--- a/locale/lv.js
+++ b/locale/lv.js
@@ -115,12 +115,12 @@ locale.lv = {
}
},
rotate: {
- title: "Rotate",
- description: "Rotate this object around its centre point.",
+ title: "Pagriezt",
+ description: "Pagriezt šo objektu ap tā centru.",
key: "R",
annotation: {
- line: "Rotated a line.",
- area: "Rotated an area."
+ line: "Līnija pagriezta.",
+ area: "Apgabals pagriezts."
}
},
reverse: {
@@ -182,10 +182,10 @@ locale.lv = {
okay: "Labi",
view_on_osm: "Apskatīt OSM",
name: "Name",
- editing: "Editing {type}",
- additional: "Additional tags",
- choose: "What are you adding?",
- results: "{n} results for {search}"
+ editing: "Rediģē {type}",
+ additional: "Papildus apzīmējumi",
+ choose: "Ko vēlaties pievienot?",
+ results: "Atrasti {n} rezultāti meklējot {search}"
},
background: {
@@ -222,15 +222,15 @@ locale.lv = {
tag_reference: {
description: "Apraksts",
- on_wiki: "{tag} on wiki.osm.org",
- used_with: "used with {type}"
+ on_wiki: "{tag} wiki.osm.org",
+ used_with: "izmantots kopā ar {type}"
},
validations: {
untagged_point: "Neapzīmēts punkts",
untagged_line: "Neapzīmēta līnija",
untagged_area: "Neapzīmēts apgabals",
- many_deletions: "You're deleting {n} objects. Are you sure you want to do this? This will delete them from the map that everyone else sees on openstreetmap.org.",
+ many_deletions: "Jūs dzēšat {n} objektus. Vai tiešām vēlaties to darīt? Tie tiks izdzēsti no kartes, ko visi var aplūkt openstreetmap.org.",
tag_suggests_area: "Apzīmējums {tag} parasti tiek lietots apgabaliem, bet objekts nav apgabals",
deprecated_tags: "Novecojuši apzīmējumi: {tags}"
},
diff --git a/locale/pt.js b/locale/pt.js
index 55871bb8e..f5a4eed94 100644
--- a/locale/pt.js
+++ b/locale/pt.js
@@ -1,4 +1,4 @@
-locale.es = {
+locale.pt = {
modes: {
add_area: {
title: "Área", //"Area",
diff --git a/test/index.html b/test/index.html
index 6405d8280..d97f2a6bd 100644
--- a/test/index.html
+++ b/test/index.html
@@ -164,6 +164,7 @@
+
@@ -179,6 +180,7 @@
+
diff --git a/test/spec/actions/connect.js b/test/spec/actions/connect.js
index fc585b43c..683bae623 100644
--- a/test/spec/actions/connect.js
+++ b/test/spec/actions/connect.js
@@ -78,6 +78,75 @@ describe("iD.actions.Connect", function() {
expect(graph.entity('-').nodes).to.eql(['d', 'b', 'c', 'd']);
});
+ it("merges adjacent nodes", function() {
+ // a --- b --- c
+ //
+ // Connect [b, c]
+ //
+ // Expected result:
+ //
+ // a --- c
+ //
+ var graph = iD.Graph({
+ 'a': iD.Node({id: 'a'}),
+ 'b': iD.Node({id: 'b'}),
+ 'c': iD.Node({id: 'c'}),
+ '-': iD.Way({id: '-', nodes: ['a', 'b', 'c']})
+ });
+
+ graph = iD.actions.Connect(['b', 'c'])(graph);
+
+ expect(graph.entity('-').nodes).to.eql(['a', 'c']);
+ expect(graph.entity('b')).to.be.undefined;
+ });
+
+ it("merges adjacent nodes with connections", function() {
+ // a --- b --- c
+ // |
+ // d
+ //
+ // Connect [b, c]
+ //
+ // Expected result:
+ //
+ // a --- c
+ // |
+ // d
+ //
+ var graph = iD.Graph({
+ 'a': iD.Node({id: 'a'}),
+ 'b': iD.Node({id: 'b'}),
+ 'c': iD.Node({id: 'c'}),
+ 'd': iD.Node({id: 'c'}),
+ '-': iD.Way({id: '-', nodes: ['a', 'b', 'c']}),
+ '|': iD.Way({id: '|', nodes: ['b', 'd']})
+
+ });
+
+ graph = iD.actions.Connect(['b', 'c'])(graph);
+
+ expect(graph.entity('-').nodes).to.eql(['a', 'c']);
+ expect(graph.entity('|').nodes).to.eql(['c', 'd']);
+ expect(graph.entity('b')).to.be.undefined;
+ });
+
+ it("deletes a degenerate way", function() {
+ // a --- b
+ //
+ // Connect [a, b]
+ //
+ var graph = iD.Graph({
+ 'a': iD.Node({id: 'a'}),
+ 'b': iD.Node({id: 'b'}),
+ '-': iD.Way({id: '-', nodes: ['a', 'b']})
+ });
+
+ graph = iD.actions.Connect(['a', 'b'])(graph);
+
+ expect(graph.entity('a')).to.be.undefined;
+ expect(graph.entity('-')).to.be.undefined;
+ });
+
it("merges tags to the surviving node", function() {
var graph = iD.Graph({
'a': iD.Node({id: 'a', tags: {a: 'a'}}),
diff --git a/test/spec/core/entity.js b/test/spec/core/entity.js
index 2cc3cce05..b1ea3d308 100644
--- a/test/spec/core/entity.js
+++ b/test/spec/core/entity.js
@@ -64,9 +64,15 @@ describe('iD.Entity', function () {
});
describe("#mergeTags", function () {
- it("returns a new Entity", function () {
- var a = iD.Entity(),
- b = a.mergeTags({});
+ it("returns self if unchanged", function () {
+ var a = iD.Entity({tags: {a: 'a'}}),
+ b = a.mergeTags({a: 'a'});
+ expect(a).to.equal(b);
+ });
+
+ it("returns a new Entity if changed", function () {
+ var a = iD.Entity({tags: {a: 'a'}}),
+ b = a.mergeTags({a: 'b'});
expect(b instanceof iD.Entity).to.be.true;
expect(a).not.to.equal(b);
});
diff --git a/test/spec/core/way.js b/test/spec/core/way.js
index 00f33b4df..935d51dc4 100644
--- a/test/spec/core/way.js
+++ b/test/spec/core/way.js
@@ -141,6 +141,30 @@ describe('iD.Way', function() {
});
});
+ describe("#areAdjacent", function() {
+ it("returns false for nodes not in the way", function() {
+ expect(iD.Way().areAdjacent('a', 'b')).to.equal(false);
+ });
+
+ it("returns false for non-adjacent nodes in the way", function() {
+ expect(iD.Way({nodes: ['a', 'b', 'c']}).areAdjacent('a', 'c')).to.equal(false);
+ });
+
+ it("returns true for adjacent nodes in the way (forward)", function() {
+ var way = iD.Way({nodes: ['a', 'b', 'c', 'd']});
+ expect(way.areAdjacent('a', 'b')).to.equal(true);
+ expect(way.areAdjacent('b', 'c')).to.equal(true);
+ expect(way.areAdjacent('c', 'd')).to.equal(true);
+ });
+
+ it("returns true for adjacent nodes in the way (reverse)", function() {
+ var way = iD.Way({nodes: ['a', 'b', 'c', 'd']});
+ expect(way.areAdjacent('b', 'a')).to.equal(true);
+ expect(way.areAdjacent('c', 'b')).to.equal(true);
+ expect(way.areAdjacent('d', 'c')).to.equal(true);
+ });
+ });
+
describe("#geometry", function() {
it("returns 'line' when the way is not an area", function () {
expect(iD.Way().geometry()).to.equal('line');
diff --git a/test/spec/lib/locale.js b/test/spec/lib/locale.js
index 3228aa99b..8b4c355fb 100644
--- a/test/spec/lib/locale.js
+++ b/test/spec/lib/locale.js
@@ -18,6 +18,10 @@ describe("locale", function() {
expect(t('test')).to.equal('test');
});
+ it("supports a default option", function() {
+ expect(t('nonesuch', {default: 'default'})).to.equal('default');
+ });
+
it("falls back to en", function() {
locale._current = '__';
expect(t('test')).to.equal('test');
diff --git a/test/spec/presets/category.js b/test/spec/presets/category.js
index 43c1fd068..5ad3799b6 100644
--- a/test/spec/presets/category.js
+++ b/test/spec/presets/category.js
@@ -4,7 +4,7 @@ describe("iD.presets.Category", function() {
beforeEach(function() {
category = {
"match": {
- "type": "line"
+ "geometry": "line"
},
"icon": "highway",
"name": "roads",
@@ -18,7 +18,7 @@ describe("iD.presets.Category", function() {
tags: {
highway: 'residential'
},
- type: ['line']
+ geometry: ['line']
}
});
});
@@ -28,14 +28,14 @@ describe("iD.presets.Category", function() {
expect(c.members.collection[0]).to.eql(residential);
});
- describe("#matchType", function() {
+ describe("#matchGeometry", function() {
it("matches the type of an entity", function() {
var c = iD.presets.Category(category, iD.presets.Collection([residential])),
w = iD.Way(),
n = iD.Node(),
g = iD.Graph().replace(w);
- expect(c.matchType(w, g)).to.eql(true);
- expect(c.matchType(n, g)).to.eql(false);
+ expect(c.matchGeometry(w, g)).to.eql(true);
+ expect(c.matchGeometry(n, g)).to.eql(false);
});
});
});
diff --git a/test/spec/presets/collection.js b/test/spec/presets/collection.js
index 8d0a888c7..a078557cc 100644
--- a/test/spec/presets/collection.js
+++ b/test/spec/presets/collection.js
@@ -1,11 +1,11 @@
-describe("iD.prests.Collection", function() {
+describe("iD.presets.Collection", function() {
var p = {
other: iD.presets.Preset({
name: 'other',
match: {
tags: {},
- type: ['point', 'vertex', 'line', 'area']
+ geometry: ['point', 'vertex', 'line', 'area']
}
}),
residential: iD.presets.Preset({
@@ -14,7 +14,7 @@ describe("iD.prests.Collection", function() {
tags: {
highway: 'residential'
},
- type: ['line']
+ geometry: ['line']
}
}),
park: iD.presets.Preset({
@@ -23,7 +23,7 @@ describe("iD.prests.Collection", function() {
tags: {
leisure: 'park'
},
- type: ['point', 'area']
+ geometry: ['point', 'area']
}
})
};
@@ -39,9 +39,9 @@ describe("iD.prests.Collection", function() {
});
});
- describe("#matchType", function() {
+ describe("#matchGeometry", function() {
it("returns a new collection only containing presets matching an entity's type", function() {
- expect(c.matchType(w, g).collection).to.eql([p.other, p.residential]);
+ expect(c.matchGeometry(w, g).collection).to.eql([p.other, p.residential]);
});
});
diff --git a/test/spec/presets/preset.js b/test/spec/presets/preset.js
index 8b7a85761..ab5e7c379 100644
--- a/test/spec/presets/preset.js
+++ b/test/spec/presets/preset.js
@@ -13,7 +13,7 @@ describe('iD.presets.Preset', function() {
name: 'other',
match: {
tags: {},
- type: ['point', 'vertex', 'line', 'area']
+ geometry: ['point', 'vertex', 'line', 'area']
}
}),
residential: iD.presets.Preset({
@@ -22,7 +22,7 @@ describe('iD.presets.Preset', function() {
tags: {
highway: 'residential'
},
- type: ['line']
+ geometry: ['line']
}
}),
tennis: iD.presets.Preset({
@@ -32,7 +32,7 @@ describe('iD.presets.Preset', function() {
leisure: 'pitch',
sport: 'tennis'
},
- type: ['area']
+ geometry: ['area']
}
}),
building: iD.presets.Preset({
@@ -41,7 +41,7 @@ describe('iD.presets.Preset', function() {
tags: {
building: '*'
},
- type: ['area']
+ geometry: ['area']
}
}),
cafe: iD.presets.Preset({
@@ -50,7 +50,7 @@ describe('iD.presets.Preset', function() {
tags: {
amenity: 'cafe'
},
- type: ['point', 'area']
+ geometry: ['point', 'area']
},
form: ['building_area']
}, forms)
@@ -76,15 +76,15 @@ describe('iD.presets.Preset', function() {
expect(p.other.form).to.eql([]);
});
- describe('#matchType', function() {
+ describe('#matchGeometry', function() {
var n = iD.Node();
var g = iD.Graph().replace(p);
it("returns false if it doesn't match the entity type", function() {
- expect(p.residential.matchType(n, g)).to.equal(false);
+ expect(p.residential.matchGeometry(n, g)).to.equal(false);
});
it("returns true if it does match the entity type", function() {
- expect(p.other.matchType(n, g)).to.equal(true);
+ expect(p.other.matchGeometry(n, g)).to.equal(true);
});
});