From 9a818b3a490780de0ff80bc914455d2c850be2e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 5 Jun 2018 21:28:15 +0200
Subject: [PATCH 01/28] Buildings: create a real 'figure-ground diagram' as sub
 category of buildings

---
 buildings-figure-ground.json | 37 ++++++++++++++++++++++++++++++++++++
 buildings.json               | 34 +++++----------------------------
 2 files changed, 42 insertions(+), 29 deletions(-)
 create mode 100644 buildings-figure-ground.json

diff --git a/buildings-figure-ground.json b/buildings-figure-ground.json
new file mode 100644
index 0000000..63d23c7
--- /dev/null
+++ b/buildings-figure-ground.json
@@ -0,0 +1,37 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "Schwarzplan",
+        "en": "Figure-ground diagram"
+    },
+    "query": {
+        "16": [
+            "(",
+            "  way[building];",
+            "  relation[building];",
+            ")"
+        ]
+    },
+    "feature": {
+        "markerSymbol": null,
+        "priority": [
+            "{% set p = 100 %}",
+            "{% if tags.name %}{% set p = p - 10 %}{% endif %}",
+            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.historic %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.culture %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.highway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.railway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.aeroway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.tourism %}{% set p = p - 1 %}{% endif %}",
+            "{{ p }}"
+        ],
+        "style": {
+            "width": "0",
+            "color": "#000000",
+            "fillColor": "#000000",
+            "fillOpacity": "1"
+        }
+    }
+}
diff --git a/buildings.json b/buildings.json
index 17b49fa..94bb4a9 100644
--- a/buildings.json
+++ b/buildings.json
@@ -1,38 +1,14 @@
 {
-    "type": "overpass",
+    "type": "index",
     "name": {
         "de": "Gebäude",
         "en": "Buildings",
         "fr": "Bâtiments",
         "pt-br": "Edificações"
     },
-    "query": {
-        "16": [
-            "(",
-            "  way[building];",
-            "  relation[building];",
-            ")"
-        ]
-    },
-    "feature": {
-        "markerSymbol": null,
-        "priority": [
-            "{% set p = 100 %}",
-            "{% if tags.name %}{% set p = p - 10 %}{% endif %}",
-            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.historic %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.culture %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.highway %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.railway %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.aeroway %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
-            "{% if tags.tourism %}{% set p = p - 1 %}{% endif %}",
-            "{{ p }}"
-        ],
-        "style": {
-            "width": "1",
-            "color": "#000000",
-            "fillColor": "#000000"
+    "subCategories": [
+        {
+            "id": "buildings-figure-ground"
         }
-    }
+    ]
 }

From aea862cb407c0f0deb430de3d36dc7cb2c3074d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 5 Jun 2018 22:19:18 +0200
Subject: [PATCH 02/28] Buildings: height

---
 buildings-height.json | 104 ++++++++++++++++++++++++++++++++++++++++++
 buildings.json        |   3 ++
 2 files changed, 107 insertions(+)
 create mode 100644 buildings-height.json

diff --git a/buildings-height.json b/buildings-height.json
new file mode 100644
index 0000000..84c21af
--- /dev/null
+++ b/buildings-height.json
@@ -0,0 +1,104 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "Gebäudehöhen",
+        "en": "Building height"
+    },
+    "query": {
+        "16": [
+            "(",
+            "  way[building];",
+            "  relation[building];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% if tags.height %}",
+            "{% set approxHeight = tags.height %}",
+            "{% elseif attribute(tags, 'building:levels') %}",
+            "{% set approxHeight = attribute(tags, 'building:levels') * 3.5 %}",
+            "{% endif %}",
+            "",
+            "{% if approxHeight <= 50 %}",
+            "{% set color = colorInterpolate(['green', 'red'], approxHeight / 50) %}",
+            "{% elseif approxHeight %}",
+            "{% set color = colorInterpolate(['red', 'yellow'], (approxHeight - 50) / 250) %} ",
+            "{% else %}",
+            "{% set color = '#7f7f7f' %}",
+            "{% endif %}"
+        ],
+        "description": [
+            "{% if tags.height %}",
+            "{{ tags.height }}m",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'building:levels') %}",
+            "{{ attribute(tags, 'building:levels') }} {{ keyTrans('building:levels') }}",
+            "{% endif %}"
+        ],
+        "markerSymbol": null,
+        "listMarkerSymbol": "{{ markerCircle({fillColor: color})|raw }}",
+        "priority": "{{ (approxHeight|default(0)) * -1 }}",
+        "style": {
+            "width": "1",
+            "color": "#000000",
+            "fillColor": "{{ color }}",
+            "fillOpacity": "1"
+        }
+    },
+    "info": [
+        "<div style='display: inline-block'>",
+        "{{ tagTrans('height') }}",
+        "<table>",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td colspan>{{ trans('unknown') }}</td>",
+        "  </tr>",
+        "{% for i in range(0, 50, 10) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], i / 50) })|raw }}</td>",
+        "    <td>{{ i }}m</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "{% for i in range(100, 250, 50) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i - 50) / 250) })|raw }}</td>",
+        "    <td>{{ i }}m</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>≥300m</td>",
+        "  </tr>",
+        "</table>",
+        "</div>",
+        "",
+        "<div style='display: inline-block'>",
+        "{{ tagTrans('building:levels') }}",
+        "<table>",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td colspan>{{ trans('unknown') }}</td>",
+        "  </tr>",
+        "{% for i in range(0, 12, 3) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], (i * 3.5) / 50) })|raw }}</td>",
+        "    <td>{{ i }}</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "{% for i in range(15, 84, 15) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i * 3.5 - 50) / 250) })|raw }}</td>",
+        "    <td>{{ i }}</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>≥85</td>",
+        "  </tr>",
+        "</table>",
+        "",
+        "</div>"
+    ]
+}
diff --git a/buildings.json b/buildings.json
index 94bb4a9..0d77826 100644
--- a/buildings.json
+++ b/buildings.json
@@ -9,6 +9,9 @@
     "subCategories": [
         {
             "id": "buildings-figure-ground"
+        },
+        {
+            "id": "buildings-height"
         }
     ]
 }

From 913ca616169586b415823c420fc99edc53afde7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 6 Jun 2018 15:40:47 +0200
Subject: [PATCH 03/28] Buildings: import start_date category from other
 repository

---
 buildings-start_date.json | 120 ++++++++++++++++++++++++++++++++++++++
 buildings.json            |   3 +
 2 files changed, 123 insertions(+)
 create mode 100644 buildings-start_date.json

diff --git a/buildings-start_date.json b/buildings-start_date.json
new file mode 100644
index 0000000..04a0d67
--- /dev/null
+++ b/buildings-start_date.json
@@ -0,0 +1,120 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Buildings",
+        "de": "Gebäude"
+    },
+    "query": {
+        "16": [
+            "(",
+            "  way[building];",
+            "  relation[building];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% if tags.start_date %}",
+            "  {% set value = tags.start_date|osmParseDate %}",
+            "  {% if value and value[0] and value[1] %}",
+            "    {% set value = (value[1] - value[0]) / 2 + value[0] %}",
+            "  {% elseif value and value[0] %}",
+            "    {% set value = value[0] %}",
+            "  {% elseif value and value[1] %}",
+            "    {% set value = value[1] %}",
+            "  {% else %}",
+            "    {% set value = 'error' %}",
+            "  {% endif %}",
+            "",
+            "  {% if value == 'error' %}",
+            "    {% set color = '#ff0000' %}",
+            "  {% elseif value < 1500 %}",
+            "    {% set color = '#0000ff' %}",
+            "  {% elseif value < 1900 %}",
+            "    {% set color = colorInterpolate([ '#0000ff', '#ff00ff' ], (value - 1500.0) / 400) %}",
+            "  {% elseif value < 2000 %}",
+            "    {% set color = colorInterpolate([ '#ff00ff', '#ffff00' ], (value - 1900.0) / 100) %}",
+            "  {% else %}",
+            "    {% set color = colorInterpolate([ '#ffff00', '#00ff00' ], (value - 2000.0) / 50) %}",
+            "  {% endif %}",
+            "{% else %}",
+            "{% set color = '#000000' %}",
+            "{% endif %}"
+        ],
+        "description": [
+            "{% if tags.start_date %}",
+            "{{ tags.start_date }}",
+            "{% endif %}"
+        ],
+        "markerSign": null,
+        "listMarkerSymbol": "polygon",
+        "priority": [
+            "{% set p = 100 %}",
+            "{% if tags.start_date %}{% set p = p - 20 %}{% endif %}",
+            "{% if tags.name %}{% set p = p - 10 %}{% endif %}",
+            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.historic %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.culture %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.highway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.railway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.aeroway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.tourism %}{% set p = p - 1 %}{% endif %}",
+            "{{ p }}"
+        ],
+        "style": {
+            "weight": "1",
+            "color": "#000000",
+            "fillColor": "{{ color }}",
+            "fillOpacity": "0.8"
+        }
+    },
+    "info": [
+        "<table>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1400\" }))|raw }}</td>",
+        "    <td>&lt;1500</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1500\" }))|raw }}</td>",
+        "    <td>1500</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1600\" }))|raw }}</td>",
+        "    <td>1600</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1700\" }))|raw }}</td>",
+        "    <td>1700</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1800\" }))|raw }}</td>",
+        "    <td>1800</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1900\" }))|raw }}</td>",
+        "    <td>1900</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"1950\" }))|raw }}</td>",
+        "    <td>1950</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"2000\" }))|raw }}</td>",
+        "    <td>2000</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"2020\" }))|raw }}</td>",
+        "    <td>2020</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"start_date\": \"xxx\" }))|raw }}</td>",
+        "    <td>unparseable start_date</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
+        "    <td>no start_date</td>",
+        "  </tr>",
+        "</table>"
+    ]
+}
diff --git a/buildings.json b/buildings.json
index 0d77826..cae67fd 100644
--- a/buildings.json
+++ b/buildings.json
@@ -12,6 +12,9 @@
         },
         {
             "id": "buildings-height"
+        },
+        {
+            "id": "buildings-start_date"
         }
     ]
 }

From c121c07ee70cdc17d525a98b57ba0a6caffea7be Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 6 Jun 2018 20:47:54 +0200
Subject: [PATCH 04/28] Building Start Date: Improvements

---
 buildings-start_date.json | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/buildings-start_date.json b/buildings-start_date.json
index 04a0d67..fadac20 100644
--- a/buildings-start_date.json
+++ b/buildings-start_date.json
@@ -1,8 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Buildings",
-        "de": "Gebäude"
+        "en": "Building age",
+        "de": "Gebäudealter"
     },
     "query": {
         "16": [
@@ -38,7 +38,7 @@
             "    {% set color = colorInterpolate([ '#ffff00', '#00ff00' ], (value - 2000.0) / 50) %}",
             "  {% endif %}",
             "{% else %}",
-            "{% set color = '#000000' %}",
+            "{% set color = '#7f7f7f' %}",
             "{% endif %}"
         ],
         "description": [
@@ -46,8 +46,8 @@
             "{{ tags.start_date }}",
             "{% endif %}"
         ],
-        "markerSign": null,
-        "listMarkerSymbol": "polygon",
+        "markerSymbol": null,
+        "listMarkerSymbol": "{{ markerPolygon({ \"fillColor\": color, \"fillOpacity\": 0.8, \"width\": 1, \"color\": \"#000000\" })|raw }}",
         "priority": [
             "{% set p = 100 %}",
             "{% if tags.start_date %}{% set p = p - 20 %}{% endif %}",
@@ -63,7 +63,7 @@
             "{{ p }}"
         ],
         "style": {
-            "weight": "1",
+            "width": "1",
             "color": "#000000",
             "fillColor": "{{ color }}",
             "fillOpacity": "0.8"

From 6053d2e119c7e7df847748d347c088d1fa6708e3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 27 Jul 2018 06:22:48 +0200
Subject: [PATCH 05/28] buildings-type: unfin

---
 buildings-type.json | 90 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 buildings-type.json

diff --git a/buildings-type.json b/buildings-type.json
new file mode 100644
index 0000000..9c0fc45
--- /dev/null
+++ b/buildings-type.json
@@ -0,0 +1,90 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "Typ",
+        "en": "Type"
+    },
+    "query": {
+        "16": [
+            "(",
+            "  way[building];",
+            "  relation[building];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% if tags.building == 'yes' %}",
+            "{% set color = '#7f7f7f' %}",
+            "{% else %}",
+            "{% set color = '#7f0000' %}",
+            "{% endif %}"
+        ],
+        "description": [
+            "{{ tagTrans('building', tags.building) }}"
+        ],
+        "markerSymbol": null,
+        "listMarkerSymbol": "{{ markerCircle({fillColor: color})|raw }}",
+        "priority": "{{ (approxHeight|default(0)) * -1 }}",
+        "style": {
+            "width": "1",
+            "color": "#000000",
+            "fillColor": "{{ color }}",
+            "fillOpacity": "1"
+        }
+    },
+    "info": [
+        "<div style='display: inline-block'>",
+        "{{ tagTrans('height') }}",
+        "<table>",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td colspan>{{ trans('unknown') }}</td>",
+        "  </tr>",
+        "{% for i in range(0, 50, 10) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], i / 50) })|raw }}</td>",
+        "    <td>{{ i }}m</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "{% for i in range(100, 250, 50) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i - 50) / 250) })|raw }}</td>",
+        "    <td>{{ i }}m</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>≥300m</td>",
+        "  </tr>",
+        "</table>",
+        "</div>",
+        "",
+        "<div style='display: inline-block'>",
+        "{{ tagTrans('building:levels') }}",
+        "<table>",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td colspan>{{ trans('unknown') }}</td>",
+        "  </tr>",
+        "{% for i in range(0, 12, 3) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], (i * 3.5) / 50) })|raw }}</td>",
+        "    <td>{{ i }}</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "{% for i in range(15, 84, 15) %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i * 3.5 - 50) / 250) })|raw }}</td>",
+        "    <td>{{ i }}</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>≥85</td>",
+        "  </tr>",
+        "</table>",
+        "",
+        "</div>"
+    ]
+}

From b998f6f177e9aea9ccce8094a78ceb41458efddf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 29 Nov 2018 14:16:01 +0100
Subject: [PATCH 06/28] Re-order fields (like openstreetbrowser-editor orders)

---
 car_maxspeed.json |  2 +-
 cycle_routes.json | 50 ++++++++++++-------------
 pt.json           | 94 +++++++++++++++++++++++------------------------
 3 files changed, 73 insertions(+), 73 deletions(-)

diff --git a/car_maxspeed.json b/car_maxspeed.json
index b2249f3..b077c96 100644
--- a/car_maxspeed.json
+++ b/car_maxspeed.json
@@ -53,7 +53,7 @@
             "{{ trans('unknown') }}",
             "{% endif %}"
         ],
-        "markerSymbol": null,
+        "markerSymbol": "",
         "listMarkerSymbol": "line",
         "style": {
             "width": "3",
diff --git a/cycle_routes.json b/cycle_routes.json
index 828dfaf..2cb57ed 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -16,18 +16,18 @@
     },
     "members": true,
     "feature": {
-        "priority": "{{ const[tags.network].priority|default(4) }}",
+        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
         "description": "{{ tagTrans('network', tags.network) }}",
+        "markerSymbol": "",
         "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': const[tags.network].color|default(const[''].color) })|raw }}",
-        "title": "{% if tags.ref and tags.name %}{{ tags.ref }} - {{ tags.name }}{% elseif tags.ref %}{{ tags.ref }}{% elseif tags.name %}{{ tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}",
+        "priority": "{{ const[tags.network].priority|default(4) }}",
         "styles": "",
         "style:hover": {
-            "width": 0
+            "width": "0"
         },
         "style:selected": {
-            "width": 0
-        },
-        "markerSymbol": ""
+            "width": "0"
+        }
     },
     "memberFeature": {
         "pre": [
@@ -72,62 +72,62 @@
         "listExclude": "1",
         "styles": "default{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}",
         "style": {
-            "color": "{{ const[network].color }}",
             "width": "4",
+            "color": "{{ const[network].color }}",
+            "opacity": "1",
+            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "dashArray": "{% if not dirForward or not dirBackward %}27,8{% endif %}",
             "dashOffset": "{% if dirBackward %}28{% else %}0{% endif %}",
-            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "noClip": "{% if not dirForward or not dirBackward %}true{% else %}false{% endif %}",
-            "opacity": 1,
             "text": "{{ refs|join(' · ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold",
             "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
             "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
             "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
+            "pattern-path-color": "{{ const[network].color }}",
             "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "{{ const[network].color }}"
+            "textFontWeight": "bold"
         },
         "style:hover": {
             "pane": "hover",
             "width": "4",
+            "color": "black",
+            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
             "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
             "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
             "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
-            "color": "black",
             "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
             "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
             "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "black"
+            "pattern-path-color": "black",
+            "pattern-path-fillOpacity": "1"
         },
         "style:selected": {
             "pane": "selected",
             "width": "4",
+            "color": "#3f3f3f",
+            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
             "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
             "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
             "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
-            "color": "#3f3f3f",
             "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
             "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
             "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "#3f3f3f"
+            "pattern-path-color": "#3f3f3f",
+            "pattern-path-fillOpacity": "1"
         }
     },
     "const": {
diff --git a/pt.json b/pt.json
index 7ade18d..9c26bf2 100644
--- a/pt.json
+++ b/pt.json
@@ -69,10 +69,10 @@
         "markerSymbol": "",
         "styles": "",
         "style:hover": {
-            "width": 0
+            "width": "0"
         },
         "style:selected": {
-            "width": 0
+            "width": "0"
         },
         "listStopsExclude": "true",
         "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
@@ -136,78 +136,78 @@
             "{% endfor %}",
             "</ul>"
         ],
+        "markerSign": " ",
+        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerPointer({ })|raw }}{% endif %}{% endif %}",
         "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}casing,way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
+        "style:hover": {
+            "pane": "hover",
+            "width": "4",
+            "color": "black",
+            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
+            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
+            "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
+            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
+            "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
+            "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
+            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-color": "black",
+            "pattern-path-fillOpacity": "1"
+        },
+        "style:selected": {
+            "pane": "selected",
+            "width": "4",
+            "color": "#3f3f3f",
+            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
+            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
+            "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
+            "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
+            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
+            "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
+            "pattern-repeat": "35",
+            "pattern-polygon": "true",
+            "pattern-pixelSize": "9",
+            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-width": "0",
+            "pattern-path-color": "#3f3f3f",
+            "pattern-path-fillOpacity": "1"
+        },
         "listStopsMarkerSign": null,
         "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
         "listStopsExclude": "{{ not isStop or stopCount == 0 }}",
         "listStopsTitle": "{% if tags %}{{ tags.name|default(stopName)|default(trans('unknown')) }}{% else %}<li>{{ trans('loading') }}</li>{% endif %}",
         "listStopsDescription": "{{ refs|join(' · ') }}",
         "listRoutesExclude": "true",
-        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerPointer({ })|raw }}{% endif %}{% endif %}",
-        "markerSign": " ",
         "style:stop": {
-            "color": "{{ color|default('#ff0000') }}",
             "width": "4",
+            "color": "{{ color|default('#ff0000') }}",
             "radius": "3",
             "zIndex": "1"
         },
         "style:way": {
-            "color": "{{ color|default('#ff0000') }}",
             "width": "4",
+            "color": "{{ color|default('#ff0000') }}",
+            "opacity": "1",
+            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "dashArray": "{% if not dirForward or not dirBackward %}27,8{% endif %}",
             "dashOffset": "{% if dirBackward %}28{% else %}0{% endif %}",
-            "lineCap": "{% if not dirForward or not dirBackward %}butt{% else %}round{% endif %}",
             "noClip": "{% if not dirForward or not dirBackward %}true{% else %}false{% endif %}",
-            "opacity": 1,
             "text": "{{ refs|join(' · ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold",
             "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
             "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
-            "pattern-polygon": "true",
-            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
-            "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "{{ color|default('#ff0000') }}"
-        },
-        "style:hover": {
-            "pane": "hover",
-            "width": "4",
-            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}27,8{% endif %}",
-            "dashOffset": "{% if hover == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if hover == 'forward' or hover == 'backward' %}butt{% else %}round{% endif %}",
-            "noClip": "{% if hover == 'forward' or hover == 'backward' %}true{% else %}false{% endif %}",
-            "color": "black",
-            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "9",
             "pattern-repeat": "35",
-            "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
-            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
-            "pattern-path-width": "0",
-            "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "black"
-        },
-        "style:selected": {
-            "pane": "selected",
-            "width": "4",
-            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}27,8{% endif %}",
-            "dashOffset": "{% if selected == 'backward' %}28{% else %}0{% endif %}",
-            "lineCap": "{% if selected == 'forward' or selected == 'backward' %}butt{% else %}round{% endif %}",
-            "noClip": "{% if selected == 'forward' or selected == 'backward' %}true{% else %}false{% endif %}",
-            "color": "#3f3f3f",
-            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
             "pattern-pixelSize": "9",
-            "pattern-repeat": "35",
-            "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
-            "pattern-polygon": "true",
-            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
             "pattern-path-width": "0",
+            "pattern-path-color": "{{ color|default('#ff0000') }}",
             "pattern-path-fillOpacity": "1",
-            "pattern-path-color": "#3f3f3f"
+            "textFontWeight": "bold"
         }
     },
     "info": [

From 9ef5a06731ceb9e6b9ee37e7e2f88f22d72ab746 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 29 Nov 2018 18:44:31 +0100
Subject: [PATCH 07/28] public: include office=government and
 office=administration

---
 public.json | 40 ++++++++++++++++++++++++++++------------
 1 file changed, 28 insertions(+), 12 deletions(-)

diff --git a/public.json b/public.json
index cf28f62..63061c0 100644
--- a/public.json
+++ b/public.json
@@ -27,6 +27,7 @@
             "node[amenity=recycling][recyling_type=centre];",
             "way[amenity=recycling][recyling_type=centre];",
             "relation[amenity=recycling][recyling_type=centre];",
+            "nwr[office~\"^(government|administration)$\"];",
             ");"
         ],
         "16": [
@@ -35,23 +36,36 @@
             "way[amenity~'^(courthouse|embassy|public_building|townhall|recycling|toilets)$'];",
             "relation[amenity~'^(courthouse|embassy|public_building|townhall|recycling|toilets)$'];",
             "node[drinking_water];",
+            "nwr[office~\"^(government|administration)$\"];",
             ");"
         ]
     },
     "feature": {
         "pre": [
             "{% if tags.drinking_water %}",
+            "{% set key = 'amenity' %}",
             "{% set value = 'drinking_water' %}",
-            "{% else %}",
+            "{% elseif tags.amenity %}",
+            "{% set key = 'amenity' %}",
             "{% set value = tags.amenity %}",
+            "{% elseif tags.office %}",
+            "{% set key = 'office' %}",
+            "{% set value = tags.office %}",
             "{% endif %}"
         ],
         "title": "{{ tags.name|default(tags.operator)|default(tagTrans('amenity', value)) }}",
-        "description": "{{ tagTrans('amenity', value) }}",
+        "description": [
+            "{% if key == 'office' %}",
+            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}"
+        ],
         "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
         "markerSign": [
-            "{% if const[value] %}",
-            "{{ const[value]|raw }}",
+            "{% set kv = key ~ '=' ~ value %}",
+            "{% if const[kv] %}",
+            "{{ const[kv]|raw }}",
             "{% endif %}"
         ]
     },
@@ -66,13 +80,15 @@
         "</table>"
     ],
     "const": {
-        "courthouse": "⚖",
-        "clock": "<i class='fa fa-clock-o' aria-hidden='true'></i>",
-        "drinking_water": "<img src='maki:drinking-water'>",
-        "embassy": "<img src='maki:embassy'>",
-        "public_building": "<img src='maki:building'>",
-        "recycling": "<img src='maki:recycling'>",
-        "toilets": "<img src='maki:toilet'>",
-        "townhall": "<img src='maki:town-hall'>"
+        "amenity=courthouse": "⚖",
+        "amenity=clock": "<i class='fa fa-clock-o' aria-hidden='true'></i>",
+        "amenity=drinking_water": "<img data-src='maki:drinking-water'>",
+        "amenity=embassy": "<img data-src='maki:embassy'>",
+        "amenity=public_building": "<img data-src='maki:building'>",
+        "amenity=recycling": "<img data-src='maki:recycling'>",
+        "amenity=toilets": "<img data-src='maki:toilet'>",
+        "amenity=townhall": "<img data-src='maki:town-hall'>",
+        "office=administration": "<img data-src='maki:town-hall'>",
+        "office=government": "<img data-src='maki:town-hall'>"
     }
 }

From 4662e01bf4779e9a72fec2cd2a84ee5acb15c0ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 29 Nov 2018 18:53:46 +0100
Subject: [PATCH 08/28] education: include office=educational_institution and
 =research

---
 education.json | 51 ++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 37 insertions(+), 14 deletions(-)

diff --git a/education.json b/education.json
index c366e82..5b4772d 100644
--- a/education.json
+++ b/education.json
@@ -32,6 +32,7 @@
             "node[amenity~'^(college|university|library|school|kindergarten|language_school)$'];",
             "way[amenity~'^(college|university|library|school|kindergarten|language_school)$'];",
             "relation[amenity~'^(college|university|library|school|kindergarten|language_school)$'];",
+            "nwr[office~\"^(educational_institution|research)$\"];",
             ")"
         ],
         "16": [
@@ -39,20 +40,30 @@
             "node[amenity~'^(college|university|library|school|kindergarten|public_bookcase)$'];",
             "way[amenity~'^(college|university|library|school|kindergarten|public_bookcase)$'];",
             "relation[amenity~'^(college|university|library|school|kindergarten|public_bookcase)$'];",
+            "nwr[office~\"^(educational_institution|research)$\"];",
             ")"
         ]
     },
     "feature": {
-        "description": "{{ tagTrans('amenity', tags.amenity) }}",
+        "pre": [
+            "{% if tags.office == 'educational_institution' or tags.office == 'research' %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% else %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% endif %}"
+        ],
+        "description": "{{ tagTrans(key, value) }}",
         "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
         "markerSign": [
-            "{% set data = const[tags.amenity] %}",
+            "{% set data = const[key ~ '=' ~ value] %}",
             "{% if data %}",
-            "{{ data.sign }}",
+            "{{ data.sign|raw }}",
             "{% endif %}"
         ],
         "priority": [
-            "{% set data = const[tags.amenity] %}",
+            "{% set data = const[key ~ '=' ~ value] %}",
             "{% if data %}",
             "{{ data.priority }}",
             "{% endif %}"
@@ -60,51 +71,63 @@
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "university": {
+        "amenity=university": {
             "priority": 0,
             "sign": "🎓",
             "zoom": 11
         },
-        "college": {
+        "amenity=college": {
             "priority": 1,
             "sign": "🎓",
             "zoom": 11
         },
-        "library": {
+        "amenity=library": {
             "priority": 2,
             "sign": "🕮",
             "zoom": 11
         },
-        "school": {
+        "amenity=school": {
             "priority": 3,
             "sign": "🏫",
             "zoom": 14
         },
-        "language_school": {
+        "amenity=language_school": {
             "priority": 3,
             "sign": "🏫",
             "zoom": 14
         },
-        "kindergarten": {
+        "amenity=kindergarten": {
             "priority": 4,
             "sign": "⛹",
             "zoom": 14
         },
-        "public_bookcase": {
+        "amenity=public_bookcase": {
             "priority": 5,
             "sign": "📚",
             "zoom": 16
+        },
+        "office=educational_institution": {
+            "priority": 3,
+            "sign": "🏢",
+            "zoom": 14
+        },
+        "office=research": {
+            "priority": 3,
+            "sign": "<i class='fas fa-vials'></i>",
+            "zoom": 14
         }
     }
 }

From 18cb2fdd53bf8436fd8df58e9f2e3c0a9e9b515e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 29 Nov 2018 19:05:02 +0100
Subject: [PATCH 09/28] communication: include office=telecommunication and
 office=it

---
 communication.json | 48 ++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 40 insertions(+), 8 deletions(-)

diff --git a/communication.json b/communication.json
index 27f8372..dbdb662 100644
--- a/communication.json
+++ b/communication.json
@@ -25,21 +25,38 @@
             "node[amenity~'^(post_office|internet_cafe)$'];",
             "way[amenity~'^(post_office|internet_cafe)$'];",
             "relation[amenity~'^(post_office|internet_cafe)$'];",
+            "nwr[office~\"^(telecommunication|it)$\"];",
             ");"
         ],
         "16": [
             "(node[amenity~'^(post_office|internet_cafe|post_box|telephone)$'];",
             "way[amenity~'^(post_office|internet_cafe)$'];",
             "relation[amenity~'^(post_office|internet_cafe)$'];",
+            "nwr[office~\"^(telecommunication|it)$\"];",
             ");"
         ]
     },
     "feature": {
+        "pre": [
+            "{% if tags.amenity %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
         "title": "{{ localizedTag(tags, 'name') |default(localizedTag(tags, 'operator')) |default(tagTrans('amenity', tags.amenity)) }}",
-        "description": "{{ tagTrans('amenity', tags.amenity) }}",
+        "description": [
+            "{% if key == 'office' %}",
+            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}"
+        ],
         "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ localizedTag(tags, 'operator') }}<br/>{% endif %}",
         "markerSign": [
-            "{% set data = const[tags.amenity] %}",
+            "{% set data = const[key ~ '=' ~ value] %}",
             "{% if data %}",
             "{{ data.sign|raw }}",
             "{% endif %}"
@@ -47,30 +64,45 @@
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
+        "    <td>",
+        "      {% if kv|split('=')[0] == 'office' %}",
+        "        {{ keyTrans('office') }}",
+        "        ({{ tagTrans('office', kv|split('=')[1]) }})",
+        "      {% else %}",
+        "        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "      {% endif %}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "post_office": {
+        "amenity=post_office": {
             "sign": "<img src='maki:post?size=15'>",
             "zoom": 13
         },
-        "post_box": {
+        "amenity=post_box": {
             "sign": "<img src='maki:post?size=11'>",
             "zoom": 16
         },
-        "internet_cafe": {
+        "amenity=internet_cafe": {
             "sign": "<i class='fa fa-laptop' aria-hidden='true'></i>",
             "zoom": 13
         },
-        "telephone": {
+        "office=telecommunication": {
+            "sign": "<img src='maki:building'>",
+            "zoom": 13
+        },
+        "office=it": {
+            "sign": "<i class='fas fa-desktop'></i>",
+            "zoom": 13
+        },
+        "amenity=telephone": {
             "sign": "<img src='maki:telephone'>",
             "zoom": 16
         }

From 5c080689cc15191fc32d6e2248d2fb589ffaa508 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 4 Dec 2018 09:18:32 +0100
Subject: [PATCH 10/28] new category organisations

---
 index.json         |  3 ++
 organisations.json | 75 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 78 insertions(+)
 create mode 100644 organisations.json

diff --git a/index.json b/index.json
index 77bd73e..b2f3364 100644
--- a/index.json
+++ b/index.json
@@ -100,6 +100,9 @@
                 },
                 {
                     "id": "tourism_services"
+                },
+                {
+                    "id": "organisations"
                 }
             ]
         },
diff --git a/organisations.json b/organisations.json
new file mode 100644
index 0000000..dcc1aa4
--- /dev/null
+++ b/organisations.json
@@ -0,0 +1,75 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Organisations"
+    },
+    "query": {
+        "13": [
+            "(",
+            "nwr[office~\"^(ngo|quango|political_party|association|charity)$\"];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% set key = 'office' %}",
+            "{% set value = tags.office %}",
+            ""
+        ],
+        "description": "{{ tagTrans(key, value) }}",
+        "body": "{% if tags.operator %}{{ keyTrans('operator') }}: {{ tags.operator }}<br/>{% endif %}",
+        "markerSign": [
+            "{% set data = const[key ~ '=' ~ value] %}",
+            "{% if data %}",
+            "{{ data.sign|raw }}",
+            "{% endif %}"
+        ],
+        "priority": [
+            "{% set data = const[key ~ '=' ~ value] %}",
+            "{% if data %}",
+            "{{ data.priority }}",
+            "{% endif %}"
+        ]
+    },
+    "info": [
+        "<table>",
+        "{% for kv, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ],
+    "const": {
+        "office=ngo": {
+            "priority": 0,
+            "sign": "<i class='fas fa-users'></i>",
+            "zoom": 13
+        },
+        "office=quango": {
+            "priority": 0,
+            "sign": "<i class='fas fa-users'></i>",
+            "zoom": 13
+        },
+        "office=political_party": {
+            "priority": 0,
+            "sign": "<i class='fas fa-flag'></i>",
+            "zoom": 13
+        },
+        "office=association": {
+            "priority": 0,
+            "sign": "<i class='fas fa-people-carry'></i>",
+            "zoom": 13
+        },
+        "office=charity": {
+            "priority": 0,
+            "sign": "<i class='fas fa-hands-helping'></i>",
+            "zoom": 13
+        }
+    }
+}

From a66c807f628ba607f42975d7a2d7082163c3ee62 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 16 Dec 2018 22:17:44 +0100
Subject: [PATCH 11/28] buildings-height: similar markers as in building age

---
 buildings-height.json | 26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/buildings-height.json b/buildings-height.json
index 84c21af..28c2e14 100644
--- a/buildings-height.json
+++ b/buildings-height.json
@@ -14,9 +14,9 @@
     },
     "feature": {
         "pre": [
-            "{% if tags.height %}",
+            "{% if tags.height is defined %}",
             "{% set approxHeight = tags.height %}",
-            "{% elseif attribute(tags, 'building:levels') %}",
+            "{% elseif attribute(tags, 'building:levels') is defined %}",
             "{% set approxHeight = attribute(tags, 'building:levels') * 3.5 %}",
             "{% endif %}",
             "",
@@ -29,16 +29,16 @@
             "{% endif %}"
         ],
         "description": [
-            "{% if tags.height %}",
+            "{% if tags.height is defined %}",
             "{{ tags.height }}m",
             "{% endif %}",
             "",
-            "{% if attribute(tags, 'building:levels') %}",
+            "{% if attribute(tags, 'building:levels') is defined %}",
             "{{ attribute(tags, 'building:levels') }} {{ keyTrans('building:levels') }}",
             "{% endif %}"
         ],
         "markerSymbol": null,
-        "listMarkerSymbol": "{{ markerCircle({fillColor: color})|raw }}",
+        "listMarkerSymbol": "{{ markerPolygon({\"fillColor\": color, \"fillOpacity\": 0.8, \"width\": 1, \"color\": \"#000000\" })|raw }}",
         "priority": "{{ (approxHeight|default(0)) * -1 }}",
         "style": {
             "width": "1",
@@ -52,23 +52,23 @@
         "{{ tagTrans('height') }}",
         "<table>",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
         "    <td colspan>{{ trans('unknown') }}</td>",
         "  </tr>",
         "{% for i in range(0, 50, 10) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], i / 50) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": i }))|raw }}</td>",
         "    <td>{{ i }}m</td>",
         "  </tr>",
         "{% endfor %}",
         "{% for i in range(100, 250, 50) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i - 50) / 250) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": i }))|raw }}</td>",
         "    <td>{{ i }}m</td>",
         "  </tr>",
         "{% endfor %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": \"300\" }))|raw }}</td>",
         "    <td>≥300m</td>",
         "  </tr>",
         "</table>",
@@ -78,23 +78,23 @@
         "{{ tagTrans('building:levels') }}",
         "<table>",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
         "    <td colspan>{{ trans('unknown') }}</td>",
         "  </tr>",
         "{% for i in range(0, 12, 3) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], (i * 3.5) / 50) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": i }))|raw }}</td>",
         "    <td>{{ i }}</td>",
         "  </tr>",
         "{% endfor %}",
         "{% for i in range(15, 84, 15) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i * 3.5 - 50) / 250) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": i }))|raw }}</td>",
         "    <td>{{ i }}</td>",
         "  </tr>",
         "{% endfor %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": \"85\" }))|raw }}</td>",
         "    <td>≥85</td>",
         "  </tr>",
         "</table>",

From b388e23cef4a2127a823aa5291c4bb7161bf9316 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 17 Dec 2018 07:39:58 +0100
Subject: [PATCH 12/28] buildings-type: unfin

---
 buildings-type.json | 42 +++++++++++++++++++++++++-----------------
 buildings.json      |  3 +++
 2 files changed, 28 insertions(+), 17 deletions(-)

diff --git a/buildings-type.json b/buildings-type.json
index 9c0fc45..95af524 100644
--- a/buildings-type.json
+++ b/buildings-type.json
@@ -1,8 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "de": "Typ",
-        "en": "Type"
+        "de": "Gebäudearten",
+        "en": "Building types"
     },
     "query": {
         "16": [
@@ -14,17 +14,20 @@
     },
     "feature": {
         "pre": [
-            "{% if tags.building == 'yes' %}",
-            "{% set color = '#7f7f7f' %}",
-            "{% else %}",
-            "{% set color = '#7f0000' %}",
+            "{% set color = \"#7f7f7f\" %}",
+            "{% if tags.building in const %}",
+            "{% set color = const[tags.building] %}",
             "{% endif %}"
         ],
         "description": [
-            "{{ tagTrans('building', tags.building) }}"
+            "{% if tags.building == 'yes' %}",
+            "{{ keyTrans('building') }}",
+            "{% else %}",
+            "{{ tagTrans('building', tags.building) }}",
+            "{% endif %}"
         ],
         "markerSymbol": null,
-        "listMarkerSymbol": "{{ markerCircle({fillColor: color})|raw }}",
+        "listMarkerSymbol": "{{ markerPolygon({\"fillColor\": color, \"fillOpacity\": 0.8, \"width\": 1, \"color\": \"#000000\" })|raw }}",
         "priority": "{{ (approxHeight|default(0)) * -1 }}",
         "style": {
             "width": "1",
@@ -38,23 +41,23 @@
         "{{ tagTrans('height') }}",
         "<table>",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
         "    <td colspan>{{ trans('unknown') }}</td>",
         "  </tr>",
         "{% for i in range(0, 50, 10) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], i / 50) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": i }))|raw }}</td>",
         "    <td>{{ i }}m</td>",
         "  </tr>",
         "{% endfor %}",
         "{% for i in range(100, 250, 50) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i - 50) / 250) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": i }))|raw }}</td>",
         "    <td>{{ i }}m</td>",
         "  </tr>",
         "{% endfor %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": \"300\" }))|raw }}</td>",
         "    <td>≥300m</td>",
         "  </tr>",
         "</table>",
@@ -64,27 +67,32 @@
         "{{ tagTrans('building:levels') }}",
         "<table>",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': '#7f7f7f' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
         "    <td colspan>{{ trans('unknown') }}</td>",
         "  </tr>",
         "{% for i in range(0, 12, 3) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['green', 'red'], (i * 3.5) / 50) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": i }))|raw }}</td>",
         "    <td>{{ i }}</td>",
         "  </tr>",
         "{% endfor %}",
         "{% for i in range(15, 84, 15) %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': colorInterpolate(['red', 'yellow'], (i * 3.5 - 50) / 250) })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": i }))|raw }}</td>",
         "    <td>{{ i }}</td>",
         "  </tr>",
         "{% endfor %}",
         "  <tr>",
-        "    <td>{{ markerCircle({ 'fillColor': 'yellow' })|raw }}</td>",
+        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": \"85\" }))|raw }}</td>",
         "    <td>≥85</td>",
         "  </tr>",
         "</table>",
         "",
         "</div>"
-    ]
+    ],
+    "const": {
+        "yes": "#7f7f7f",
+        "apartments": "#ff0000",
+        "place_of_worship": "#af29cc"
+    }
 }
diff --git a/buildings.json b/buildings.json
index cae67fd..ba4e1e0 100644
--- a/buildings.json
+++ b/buildings.json
@@ -7,6 +7,9 @@
         "pt-br": "Edificações"
     },
     "subCategories": [
+        {
+            "id": "buildings-type"
+        },
         {
             "id": "buildings-figure-ground"
         },

From b16498594461317ac1807ba22225aaca6783441a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 17 Dec 2018 19:37:26 +0100
Subject: [PATCH 13/28] buildings-type: add many types

---
 buildings-type.json | 133 +++++++++++++++++++++++++-------------------
 1 file changed, 76 insertions(+), 57 deletions(-)

diff --git a/buildings-type.json b/buildings-type.json
index 95af524..8ebe352 100644
--- a/buildings-type.json
+++ b/buildings-type.json
@@ -14,10 +14,12 @@
     },
     "feature": {
         "pre": [
-            "{% set color = \"#7f7f7f\" %}",
-            "{% if tags.building in const %}",
-            "{% set color = const[tags.building] %}",
-            "{% endif %}"
+            "{% set color = const.other.color %}",
+            "{% for cat, data in const %}",
+            "  {% if tags.building in data.types %}",
+            "    {% set color = data.color %}",
+            "  {% endif %}",
+            "{% endfor %}"
         ],
         "description": [
             "{% if tags.building == 'yes' %}",
@@ -26,73 +28,90 @@
             "{{ tagTrans('building', tags.building) }}",
             "{% endif %}"
         ],
+        "priority": [
+            "{% set p = 100 %}",
+            "{% if tags.name %}{% set p = p - 10 %}{% endif %}",
+            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.historic %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.culture %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.highway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.railway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.aeroway %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.amenity %}{% set p = p - 1 %}{% endif %}",
+            "{% if tags.tourism %}{% set p = p - 1 %}{% endif %}",
+            "{{ p }}"
+        ],
         "markerSymbol": null,
         "listMarkerSymbol": "{{ markerPolygon({\"fillColor\": color, \"fillOpacity\": 0.8, \"width\": 1, \"color\": \"#000000\" })|raw }}",
-        "priority": "{{ (approxHeight|default(0)) * -1 }}",
         "style": {
             "width": "1",
             "color": "#000000",
             "fillColor": "{{ color }}",
-            "fillOpacity": "1"
+            "fillOpacity": "0.8"
         }
     },
     "info": [
-        "<div style='display: inline-block'>",
-        "{{ tagTrans('height') }}",
         "<table>",
+        "{% for cat, data in const %}",
         "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
-        "    <td colspan>{{ trans('unknown') }}</td>",
-        "  </tr>",
-        "{% for i in range(0, 50, 10) %}",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": i }))|raw }}</td>",
-        "    <td>{{ i }}m</td>",
+        "    <td>{{ markerPolygon({ \"fillColor\": data.color, \"fillOpacity\": \"0.8\", \"width\": 1, \"color\": \"#000000\" })|raw }}</td>",
+        "    <td>{{ cat }}</td>",
         "  </tr>",
         "{% endfor %}",
-        "{% for i in range(100, 250, 50) %}",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": i }))|raw }}</td>",
-        "    <td>{{ i }}m</td>",
-        "  </tr>",
-        "{% endfor %}",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"height\": \"300\" }))|raw }}</td>",
-        "    <td>≥300m</td>",
-        "  </tr>",
-        "</table>",
-        "</div>",
-        "",
-        "<div style='display: inline-block'>",
-        "{{ tagTrans('building:levels') }}",
-        "<table>",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\" }))|raw }}</td>",
-        "    <td colspan>{{ trans('unknown') }}</td>",
-        "  </tr>",
-        "{% for i in range(0, 12, 3) %}",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": i }))|raw }}</td>",
-        "    <td>{{ i }}</td>",
-        "  </tr>",
-        "{% endfor %}",
-        "{% for i in range(15, 84, 15) %}",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": i }))|raw }}</td>",
-        "    <td>{{ i }}</td>",
-        "  </tr>",
-        "{% endfor %}",
-        "  <tr>",
-        "    <td>{{ markerPolygon(evaluate({ \"building\": \"yes\", \"building:levels\": \"85\" }))|raw }}</td>",
-        "    <td>≥85</td>",
-        "  </tr>",
-        "</table>",
-        "",
-        "</div>"
+        "</table>"
     ],
     "const": {
-        "yes": "#7f7f7f",
-        "apartments": "#ff0000",
-        "place_of_worship": "#af29cc"
+        "residential": {
+            "color": "#25a000",
+            "types": [ "house", "apartments", "block", "flats", "farm", "detached", "dormitory", "terrace", "houseboat", "bungalow", "static_caravan", "cabin", "residential", "semidetached_house", "ger", "trullo" ]
+        },
+        "tourism": {
+            "color": "#814ce2",
+            "types": [ "hotel", "ruins", "conservatory" ]
+        },
+        "commercial": {
+            "color": "#ec5bcf",
+            "types": [ "commercial", "office", "industrial", "retail", "supermarket", "warehouse", "kiosk", "mall", "shop" ]
+        },
+        "religious": {
+            "color": "#af29cc",
+            "types": [ "religious", "cathedral", "chapel", "church", "mosque", "temple", "synagogue", "shrine", "monastery" ]
+        },
+        "amenity": {
+            "color": "#2935cc",
+            "types": [ "kindergarten", "civic", "government", "hospital", "school", "university", "grandstand", "public", "toilets", "college" ]
+        },
+        "farm": {
+            "color": "#92e934",
+            "types": [ "bakehouse", "barn", "cowshed", "farm_auxiliary", "greenhouse", "stable", "sty", "kitchen", "slurry_tank", "silo" ]
+        },
+        "industrial": {
+            "color": "#e2da1b",
+            "types": [ "construction", "garbage_shed", "transformer_tower", "service", "water_tower", "industrial", "warehouse", "storage_tank" ]
+        },
+        "transport": {
+            "color": "#1bb5e2",
+            "types": [ "carport", "garage", "garages", "bridge", "hangar", "parking", "train_station", "transportation" ]
+        },
+        "sport": {
+            "color": "#e21b66",
+            "types": [ "pavilion", "riding_hall", "stadium", "sports_hall" ]
+        },
+        "simple": {
+            "color": "#cc8725",
+            "types": [ "hut", "roof", "shed" ]
+        },
+        "military": {
+            "color": "#4a7300",
+            "types": [ "bunker", "riding_hall", "sports_hall" ]
+        },
+        "other": {
+            "color": "#ff0000",
+            "types": []
+        },
+        "unspecified": {
+            "color": "#7f7f7f",
+            "types": [ "yes" ]
+        }
     }
 }

From 36ca0e95fdb9d6a786687769f40be6e0916f4e30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 17 Dec 2018 21:56:11 +0100
Subject: [PATCH 14/28] buildings-type: support multi values; exclude
 building=no

---
 buildings-type.json | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/buildings-type.json b/buildings-type.json
index 8ebe352..9536d62 100644
--- a/buildings-type.json
+++ b/buildings-type.json
@@ -7,16 +7,17 @@
     "query": {
         "16": [
             "(",
-            "  way[building];",
-            "  relation[building];",
+            "  way[building][building!=no];",
+            "  relation[building][building!=no];",
             ")"
         ]
     },
     "feature": {
         "pre": [
+            "{% set type = tags.building|split(';')[0] %}",
             "{% set color = const.other.color %}",
             "{% for cat, data in const %}",
-            "  {% if tags.building in data.types %}",
+            "  {% if type in data.types %}",
             "    {% set color = data.color %}",
             "  {% endif %}",
             "{% endfor %}"
@@ -25,7 +26,7 @@
             "{% if tags.building == 'yes' %}",
             "{{ keyTrans('building') }}",
             "{% else %}",
-            "{{ tagTrans('building', tags.building) }}",
+            "{{ tagTransList('building', tags.building) }}",
             "{% endif %}"
         ],
         "priority": [

From 4fa537276b37057a84660458a036e7b75c5b3899 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 17 Dec 2018 22:01:40 +0100
Subject: [PATCH 15/28] buildings-type: support building=construction,
 construction=*

---
 buildings-type.json | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/buildings-type.json b/buildings-type.json
index 9536d62..f1eda47 100644
--- a/buildings-type.json
+++ b/buildings-type.json
@@ -27,6 +27,9 @@
             "{{ keyTrans('building') }}",
             "{% else %}",
             "{{ tagTransList('building', tags.building) }}",
+            "{% endif %}",
+            "{% if tags.building == 'construction' and tags.construction %}",
+            "({{ tagTransList('building', tags.construction) }})",
             "{% endif %}"
         ],
         "priority": [

From 5b1b7206d68357c84c188b1e205f1b4209f454ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 31 Dec 2018 10:04:07 +0100
Subject: [PATCH 16/28] Popup/Details: include description, start_date,
 opening_date, (material)

---
 detailsBody.html | 32 ++++++++++++++++++++++++++++++++
 popupBody.html   | 24 ++++++++++++++++++++++++
 2 files changed, 56 insertions(+)

diff --git a/detailsBody.html b/detailsBody.html
index 6b8d180..bd5c84b 100644
--- a/detailsBody.html
+++ b/detailsBody.html
@@ -1,4 +1,12 @@
 <ul>
+{% set hasDescription = tagsPrefix(tags, 'description:') %}
+{% if tags.description or hasDescription %}
+<li class='hasSymbol'>
+  <i class="fa fa-info" aria-hidden="true"></i>
+  <span class='value'>{{ localizedTag(tags, 'description')|default(attribute(tags, 'description:' ~ hasDescription|keys[0])) }}</span>
+</li>
+{% endif %}
+
 {% set address = tagsPrefix(tags, 'addr:') %}
 {% if address %}
 <li class='hasSymbol'>
@@ -133,4 +141,28 @@
 </li>
 {% endif %}
 
+{% if tags.start_date %}
+  <li class='hasSymbol'>
+   <i class="fa fa-clock-o" aria-hidden="true"></i>
+   <span class='key'>{{ keyTrans('start_date') }}:</span>
+   <span class='value'>{{ enumerate(tags.start_date) }}</span>
+  </li>
+{% endif %}
+
+{% if tags.opening_date %}
+  <li class='hasSymbol'>
+   <i class="fa fa-clock-o" aria-hidden="true"></i>
+   <span class='key'>{{ keyTrans('opening_date') }}:</span>
+   <span class='value'>{{ enumerate(tags.opening_date) }}</span>
+  </li>
+{% endif %}
+
+{% if tags.material %}
+  <li class='hasSymbol'>
+   <img data-src="maki:warehouse">
+   <span class='key'>{{ keyTrans('material') }}:</span>
+   <span class='value'>{{ tagTransList('material', tags.material) }}</span>
+  </li>
+{% endif %}
+
 </ul>
diff --git a/popupBody.html b/popupBody.html
index 63b8317..d278846 100644
--- a/popupBody.html
+++ b/popupBody.html
@@ -1,4 +1,12 @@
 <ul>
+{% set hasDescription = tagsPrefix(tags, 'description:') %}
+{% if tags.description or hasDescription %}
+<li class='hasSymbol'>
+  <i class="fa fa-info" aria-hidden="true"></i>
+  <span class='value'>{{ localizedTag(tags, 'description')|default(attribute(tags, 'description:' ~ hasDescription|keys[0])) }}</span>
+</li>
+{% endif %}
+
 {% set address = tagsPrefix(tags, 'addr:') %}
 {% if address %}
 <li class='hasSymbol'>
@@ -139,4 +147,20 @@
   <span class='value'><a href="https://{{ wikipedia[1] }}.wikipedia.org/wiki/{{ wikipedia[2]|replace({ ' ': '_' }) }}">{{ wikipedia[2] }}</a></span>
 {% endif %}
 
+{% if tags.start_date %}
+  <li class='hasSymbol'>
+   <i class="fa fa-clock-o" aria-hidden="true"></i>
+   <span class='key'>{{ keyTrans('start_date') }}:</span>
+   <span class='value'>{{ enumerate(tags.start_date) }}</span>
+  </li>
+{% endif %}
+
+{% if tags.opening_date %}
+  <li class='hasSymbol'>
+   <i class="fa fa-clock-o" aria-hidden="true"></i>
+   <span class='key'>{{ keyTrans('opening_date') }}:</span>
+   <span class='value'>{{ enumerate(tags.opening_date) }}</span>
+  </li>
+{% endif %}
+
 </ul>

From 994b79291b05562261adb132f07473dad1f0a4c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 31 Dec 2018 10:04:48 +0100
Subject: [PATCH 17/28] culture, historic, memorial: include additional info in
 popup body

---
 culture.json  | 24 ++++++++++++++++++++++++
 historic.json | 31 +++++++++++++++++++++++++++++++
 memorial.json | 40 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+)

diff --git a/culture.json b/culture.json
index 9fd02fc..c2c91e4 100644
--- a/culture.json
+++ b/culture.json
@@ -44,6 +44,30 @@
             "{% endif %}"
         ],
         "description": "{{ tagTrans(key, value) }}",
+        "body": [
+            "<ul>",
+            "{% if tags.inscription %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('inscription') }}:</span>",
+            "   <span class='value'>{{ localizedTag(tags, 'inscription') }}</span>",
+            "  </li>",
+            "{% elseif attribute(tags, 'inscription:url') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'><a href=\"{{ attribute(tags, 'inscription:url') }}\">{{ keyTrans('inscription') }}</a></span>",
+            "  </li>",
+            "{% endif %}",
+            "",
+            "{% if tags.artist_name %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-palette\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('artist_name') }}:</span>",
+            "   <span class='value'>{{ enumerate(tags.artist_name) }}</span>",
+            "  </li>",
+            "{% endif %}",
+            "</ul>"
+        ],
         "markerSign": "{{ attribute(const, key ~ '=' ~ value) }}"
     },
     "const": {
diff --git a/historic.json b/historic.json
index f09cf10..b1be977 100644
--- a/historic.json
+++ b/historic.json
@@ -37,6 +37,37 @@
     },
     "feature": {
         "description": "{{ tagTransList('historic', tags.historic) }}",
+        "body": [
+            "<ul>",
+            "{% if tags.inscription %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('inscription') }}:</span>",
+            "   <span class='value'>{{ localizedTag(tags, 'inscription') }}</span>",
+            "  </li>",
+            "{% elseif attribute(tags, 'inscription:url') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'><a href=\"{{ attribute(tags, 'inscription:url') }}\">{{ keyTrans('inscription') }}</a></span>",
+            "  </li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'historic:civilization') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-users\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('historic:civilization') }}:</span>",
+            "   <span class='value'>{{ tagTrans('historic:civilization', attribute(tags, 'historic:civilization')) }}</span>",
+            "  </li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'memorial:conflict') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-bolt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('memorial:conflict') }}:</span>",
+            "   <span class='value'>{{ tagTransList('memorial:conflict', attribute(tags, 'memorial:conflict')) }}</span>",
+            "  </li>",
+            "{% endif %}"
+        ],
         "markerSign": "{{ const[tags.historic].sign|raw }}"
     },
     "info": [
diff --git a/memorial.json b/memorial.json
index 4095a13..82e3495 100644
--- a/memorial.json
+++ b/memorial.json
@@ -32,6 +32,46 @@
             "{% endif %}"
         ],
         "description": "{{ tagTransList('historic', value) }}",
+        "body": [
+            "<ul>",
+            "{% if tags.inscription %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('inscription') }}:</span>",
+            "   <span class='value'>{{ localizedTag(tags, 'inscription') }}</span>",
+            "  </li>",
+            "{% elseif attribute(tags, 'inscription:url') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-pencil-alt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'><a href=\"{{ attribute(tags, 'inscription:url') }}\">{{ keyTrans('inscription') }}</a></span>",
+            "  </li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'historic:civilization') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-users\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('historic:civilization') }}:</span>",
+            "   <span class='value'>{{ tagTrans('historic:civilization', attribute(tags, 'historic:civilization')) }}</span>",
+            "  </li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'memorial:conflict') %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-bolt\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('memorial:conflict') }}:</span>",
+            "   <span class='value'>{{ tagTransList('memorial:conflict', attribute(tags, 'memorial:conflict')) }}</span>",
+            "  </li>",
+            "{% endif %}",
+            "",
+            "{% if tags.artist_name %}",
+            "  <li class='hasSymbol'>",
+            "   <i class=\"fa fa-palette\" aria-hidden=\"true\"></i>",
+            "   <span class='key'>{{ keyTrans('artist_name') }}:</span>",
+            "   <span class='value'>{{ enumerate(tags.artist_name) }}</span>",
+            "  </li>",
+            "{% endif %}",
+            "</ul>"
+        ],
         "markerSign": "{{ const[value].sign|raw }}"
     },
     "info": [

From c7ab9b28203e78d0e182fdc92d3eca431f34768e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 5 Jan 2019 15:38:06 +0100
Subject: [PATCH 18/28] culture: show info about material

---
 culture.json     | 9 +++++++++
 detailsBody.html | 8 --------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/culture.json b/culture.json
index c2c91e4..4fbe618 100644
--- a/culture.json
+++ b/culture.json
@@ -66,6 +66,15 @@
             "   <span class='value'>{{ enumerate(tags.artist_name) }}</span>",
             "  </li>",
             "{% endif %}",
+            "",
+            "{% if tags.material %}",
+            "  <li class='hasSymbol'>",
+            "   <img data-src=\"maki:warehouse\">",
+            "   <span class='key'>{{ keyTrans('material') }}:</span>",
+            "   <span class='value'>{{ tagTransList('material', tags.material) }}</span>",
+            "  </li>",
+            "{% endif %}",
+            "",
             "</ul>"
         ],
         "markerSign": "{{ attribute(const, key ~ '=' ~ value) }}"
diff --git a/detailsBody.html b/detailsBody.html
index bd5c84b..3c5a746 100644
--- a/detailsBody.html
+++ b/detailsBody.html
@@ -157,12 +157,4 @@
   </li>
 {% endif %}
 
-{% if tags.material %}
-  <li class='hasSymbol'>
-   <img data-src="maki:warehouse">
-   <span class='key'>{{ keyTrans('material') }}:</span>
-   <span class='value'>{{ tagTransList('material', tags.material) }}</span>
-  </li>
-{% endif %}
-
 </ul>

From 8fea2ae3d3860c043bf866c5adc1130e663283a0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 6 Jan 2019 08:17:53 +0100
Subject: [PATCH 19/28] Culture: show museum type (tag museum=*)

---
 culture.json | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/culture.json b/culture.json
index 4fbe618..a9bd6ab 100644
--- a/culture.json
+++ b/culture.json
@@ -43,7 +43,13 @@
             "{% set value = tags.tourism %}",
             "{% endif %}"
         ],
-        "description": "{{ tagTrans(key, value) }}",
+        "description": [
+            "{{ tagTrans(key, value) }}",
+            "",
+            "{% if tags.tourism == 'museum' and tags.museum %}",
+            "({{ tagTrans('museum', tags.museum) }})",
+            "{% endif %}"
+        ],
         "body": [
             "<ul>",
             "{% if tags.inscription %}",

From 4bca710e001536418469b6c42e64116e9fc3f7d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 6 Jan 2019 08:42:34 +0100
Subject: [PATCH 20/28] culture: include shop=art

---
 culture.json | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/culture.json b/culture.json
index a9bd6ab..e34c48f 100644
--- a/culture.json
+++ b/culture.json
@@ -30,6 +30,7 @@
             "node[tourism~\"^(artwork|gallery|museum|theme_park)$\"];",
             "way[tourism~\"^(artwork|gallery|museum|theme_park)$\"];",
             "relation[tourism~\"^(artwork|gallery|museum|theme_park)$\"];",
+            "nwr[shop~\"^(art)$\"];",
             ")"
         ]
     },
@@ -41,10 +42,17 @@
             "{% elseif tags.tourism %}",
             "{% set key = 'tourism' %}",
             "{% set value = tags.tourism %}",
+            "{% elseif tags.shop %}",
+            "{% set key = 'shop' %}",
+            "{% set value = tags.shop %}",
             "{% endif %}"
         ],
         "description": [
-            "{{ tagTrans(key, value) }}",
+            "{% if key == 'shop' %}",
+            "  {{ keyTrans(key) }} ({{ tagTrans(key, value) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}",
             "",
             "{% if tags.tourism == 'museum' and tags.museum %}",
             "({{ tagTrans('museum', tags.museum) }})",
@@ -83,7 +91,7 @@
             "",
             "</ul>"
         ],
-        "markerSign": "{{ attribute(const, key ~ '=' ~ value) }}"
+        "markerSign": "{{ attribute(const, key ~ '=' ~ value)|raw }}"
     },
     "const": {
         "amenity=arts_centre": "🎨",
@@ -95,13 +103,14 @@
         "tourism=artwork": "🎨 ",
         "tourism=gallery": "🖼",
         "tourism=museum": "🏛 ",
-        "tourism=theme_park": ""
+        "tourism=theme_park": "",
+        "shop=art": "<i class=\"fa fa-shopping-cart\"></i>"
     },
     "info": [
         "<table>",
         "{% for value, sign in const %}",
         "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ sign }}</div></td>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ sign|raw }}</div></td>",
         "    <td>{{ tagTrans(value|split('=')[0], value|split('=')[1]) }}</td>",
         "  </tr>",
         "{% endfor %}",

From 92b4decbe27fb944a62a3c32c9066c9a164a4528 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 6 Jan 2019 09:07:13 +0100
Subject: [PATCH 21/28] culture: show theatre:genre=* resp. community_centre=*

---
 culture.json | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/culture.json b/culture.json
index e34c48f..25d0dc1 100644
--- a/culture.json
+++ b/culture.json
@@ -56,6 +56,12 @@
             "",
             "{% if tags.tourism == 'museum' and tags.museum %}",
             "({{ tagTrans('museum', tags.museum) }})",
+            "{% endif %}",
+            "{% if tags.amenity == 'theatre' and attribute(tags, 'theatre:genre') %}",
+            "({{ tagTrans('theatre:genre', attribute(tags, 'theatre:genre')) }})",
+            "{% endif %}",
+            "{% if tags.amenity == 'community_centre' and tags.community_centre %}",
+            "({{ tagTrans('community_centre', tags.community_centre) }})",
             "{% endif %}"
         ],
         "body": [

From 4d59cc3e220dc4d710d4be8b9210b99bc2b56fe5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 6 Jan 2019 20:35:04 +0100
Subject: [PATCH 22/28] Entrances

---
 buildings-entrances.json | 24 ++++++++++++++++++++++++
 buildings.json           |  3 +++
 2 files changed, 27 insertions(+)
 create mode 100644 buildings-entrances.json

diff --git a/buildings-entrances.json b/buildings-entrances.json
new file mode 100644
index 0000000..583b2a8
--- /dev/null
+++ b/buildings-entrances.json
@@ -0,0 +1,24 @@
+{
+    "type": "overpass",
+    "name": {
+        "de": "Eingänge",
+        "en": "Entrances"
+    },
+    "query": {
+        "16": [
+            "(",
+            "  node[entrance];",
+            "  node[building=entrance];",
+            ")"
+        ]
+    },
+    "feature": {
+        "description": [
+            "{% if tags.entrance == 'yes' or (not tags.entrance and tags.building == 'entrance') %}",
+            "{{ keyTrans('entrance') }}",
+            "{% else %}",
+            "{{ tagTrans('entrance', tags.entrance) }}",
+            "{% endif %}"
+        ]
+    }
+}
diff --git a/buildings.json b/buildings.json
index ba4e1e0..fe3010a 100644
--- a/buildings.json
+++ b/buildings.json
@@ -18,6 +18,9 @@
         },
         {
             "id": "buildings-start_date"
+        },
+        {
+            "id": "buildings-entrances"
         }
     ]
 }

From 388a86429dc6bc1f1bbb632f15a9615bb3f6cee7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 10 Jan 2019 09:44:39 +0100
Subject: [PATCH 23/28] buildings-type: improvements

---
 buildings-type.json | 162 ++++++++++++++++++++++++++++++++++++++------
 1 file changed, 140 insertions(+), 22 deletions(-)

diff --git a/buildings-type.json b/buildings-type.json
index f1eda47..09bb904 100644
--- a/buildings-type.json
+++ b/buildings-type.json
@@ -32,6 +32,8 @@
             "({{ tagTransList('building', tags.construction) }})",
             "{% endif %}"
         ],
+        "markerSymbol": "",
+        "listMarkerSymbol": "{{ markerPolygon({\"fillColor\": color, \"fillOpacity\": 0.8, \"width\": 1, \"color\": \"#000000\" })|raw }}",
         "priority": [
             "{% set p = 100 %}",
             "{% if tags.name %}{% set p = p - 10 %}{% endif %}",
@@ -45,8 +47,6 @@
             "{% if tags.tourism %}{% set p = p - 1 %}{% endif %}",
             "{{ p }}"
         ],
-        "markerSymbol": null,
-        "listMarkerSymbol": "{{ markerPolygon({\"fillColor\": color, \"fillOpacity\": 0.8, \"width\": 1, \"color\": \"#000000\" })|raw }}",
         "style": {
             "width": "1",
             "color": "#000000",
@@ -58,64 +58,182 @@
         "<table>",
         "{% for cat, data in const %}",
         "  <tr>",
-        "    <td>{{ markerPolygon({ \"fillColor\": data.color, \"fillOpacity\": \"0.8\", \"width\": 1, \"color\": \"#000000\" })|raw }}</td>",
-        "    <td>{{ cat }}</td>",
+        "    <td valign='top'>{{ markerPolygon({ \"fillColor\": data.color, \"fillOpacity\": \"0.8\", \"width\": 1, \"color\": \"#000000\" })|raw }}</td>",
+        "    <td onclick='this.classList.toggle(\"infoShowDetails\")'><b>{{ trans(data.name) }}</b><span class='details'>:",
+        "      {% for i, type in data.types %}<span title='building={{ type }}'>{% if i > 0 %}, {% endif %}{{ tagTrans('building', type) }}</span>{% endfor %}",
+        "      </span>",
+        "<span class='summary'><i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i></span>",
+        "    </td>",
         "  </tr>",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
         "residential": {
+            "name": "tag:building=residential",
             "color": "#25a000",
-            "types": [ "house", "apartments", "block", "flats", "farm", "detached", "dormitory", "terrace", "houseboat", "bungalow", "static_caravan", "cabin", "residential", "semidetached_house", "ger", "trullo" ]
+            "types": [
+                "house",
+                "apartments",
+                "block",
+                "flats",
+                "farm",
+                "detached",
+                "dormitory",
+                "terrace",
+                "houseboat",
+                "bungalow",
+                "static_caravan",
+                "residential",
+                "semidetached_house",
+                "ger",
+                "trullo"
+            ]
         },
         "tourism": {
+            "name": "tag:tourism",
             "color": "#814ce2",
-            "types": [ "hotel", "ruins", "conservatory" ]
+            "types": [
+                "hotel",
+                "ruins",
+                "conservatory"
+            ]
         },
         "commercial": {
+            "name": "tag:building=commercial",
             "color": "#ec5bcf",
-            "types": [ "commercial", "office", "industrial", "retail", "supermarket", "warehouse", "kiosk", "mall", "shop" ]
+            "types": [
+                "commercial",
+                "office",
+                "industrial",
+                "retail",
+                "supermarket",
+                "warehouse",
+                "kiosk",
+                "mall",
+                "shop"
+            ]
         },
         "religious": {
+            "name": "tag:building=religious",
             "color": "#af29cc",
-            "types": [ "religious", "cathedral", "chapel", "church", "mosque", "temple", "synagogue", "shrine", "monastery" ]
+            "types": [
+                "religious",
+                "cathedral",
+                "chapel",
+                "church",
+                "mosque",
+                "temple",
+                "synagogue",
+                "shrine",
+                "monastery"
+            ]
         },
         "amenity": {
+            "name": "tag:amenity",
             "color": "#2935cc",
-            "types": [ "kindergarten", "civic", "government", "hospital", "school", "university", "grandstand", "public", "toilets", "college" ]
+            "types": [
+                "kindergarten",
+                "civic",
+                "government",
+                "hospital",
+                "school",
+                "university",
+                "grandstand",
+                "public",
+                "toilets",
+                "college"
+            ]
         },
-        "farm": {
+        "agriculture": {
+            "name": "tag:landuse=agriculture",
             "color": "#92e934",
-            "types": [ "bakehouse", "barn", "cowshed", "farm_auxiliary", "greenhouse", "stable", "sty", "kitchen", "slurry_tank", "silo" ]
+            "types": [
+                "bakehouse",
+                "barn",
+                "cowshed",
+                "farm_auxiliary",
+                "greenhouse",
+                "stable",
+                "sty",
+                "kitchen",
+                "slurry_tank",
+                "silo"
+            ]
         },
         "industrial": {
+            "name": "tag:landuse=industrial",
             "color": "#e2da1b",
-            "types": [ "construction", "garbage_shed", "transformer_tower", "service", "water_tower", "industrial", "warehouse", "storage_tank" ]
+            "types": [
+                "construction",
+                "garbage_shed",
+                "transformer_tower",
+                "service",
+                "water_tower",
+                "industrial",
+                "warehouse",
+                "storage_tank"
+            ]
         },
-        "transport": {
+        "transportation": {
+            "name": "tag:building=transportation",
             "color": "#1bb5e2",
-            "types": [ "carport", "garage", "garages", "bridge", "hangar", "parking", "train_station", "transportation" ]
+            "types": [
+                "carport",
+                "garage",
+                "garages",
+                "bridge",
+                "hangar",
+                "parking",
+                "train_station",
+                "transportation"
+            ]
         },
         "sport": {
+            "name": "tag:sport",
             "color": "#e21b66",
-            "types": [ "pavilion", "riding_hall", "stadium", "sports_hall" ]
+            "types": [
+                "pavilion",
+                "riding_hall",
+                "stadium",
+                "sports_hall"
+            ]
+        },
+        "roof": {
+            "name": "tag:building=roof",
+            "color": "#afafaf7f",
+            "types": [
+                "roof"
+            ]
         },
-        "simple": {
+        "shelter": {
+            "name": "tag:amenity=shelter",
             "color": "#cc8725",
-            "types": [ "hut", "roof", "shed" ]
+            "types": [
+                "cabin",
+                "hut",
+                "shed"
+            ]
         },
         "military": {
+            "name": "tag:military",
             "color": "#4a7300",
-            "types": [ "bunker", "riding_hall", "sports_hall" ]
+            "types": [
+                "bunker"
+            ]
+        },
+        "unspecified": {
+            "name": "tag:building=generic",
+            "color": "#7f7f7f",
+            "types": [
+                "yes",
+                "generic"
+            ]
         },
         "other": {
+            "name": "other",
             "color": "#ff0000",
             "types": []
-        },
-        "unspecified": {
-            "color": "#7f7f7f",
-            "types": [ "yes" ]
         }
     }
 }

From 195be128037f2bdacd96ae7b3ceb5229cf5b8ee6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 10 Jan 2019 09:57:40 +0100
Subject: [PATCH 24/28] buildings-entrances: show only markers, without blue
 circle

---
 buildings-entrances.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/buildings-entrances.json b/buildings-entrances.json
index 583b2a8..0950f11 100644
--- a/buildings-entrances.json
+++ b/buildings-entrances.json
@@ -19,6 +19,7 @@
             "{% else %}",
             "{{ tagTrans('entrance', tags.entrance) }}",
             "{% endif %}"
-        ]
+        ],
+        "styles": ""
     }
 }

From ac39920610b45ba0366f68f51897c7bf8a4780b2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 10 Jan 2019 09:59:27 +0100
Subject: [PATCH 25/28] buildings-figure-ground: use black polygons as list
 markers

---
 buildings-figure-ground.json | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/buildings-figure-ground.json b/buildings-figure-ground.json
index 63d23c7..726fc2b 100644
--- a/buildings-figure-ground.json
+++ b/buildings-figure-ground.json
@@ -13,7 +13,8 @@
         ]
     },
     "feature": {
-        "markerSymbol": null,
+        "markerSymbol": "",
+        "listMarkerSymbol": "{{ markerPolygon({fillColor: \"#000000\", fillOpacity: 1 })|raw }}",
         "priority": [
             "{% set p = 100 %}",
             "{% if tags.name %}{% set p = p - 10 %}{% endif %}",

From a4196720e0e2e34a159d165ffa1079de79a4141e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 10 Jan 2019 10:20:52 +0100
Subject: [PATCH 26/28] culture, historic, memorial, tourism_attractions:
 improve icons

---
 culture.json             |  6 +++---
 historic.json            | 16 ++++++++++++----
 memorial.json            |  2 +-
 tourism_attractions.json | 10 +++++-----
 4 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/culture.json b/culture.json
index 25d0dc1..630f375 100644
--- a/culture.json
+++ b/culture.json
@@ -102,14 +102,14 @@
     "const": {
         "amenity=arts_centre": "🎨",
         "amenity=cinema": "🎦",
-        "amenity=community_centre": "",
+        "amenity=community_centre": "<i class=\"fas fa-users\" aria-hidden=\"true\"></i>",
         "amenity=fountain": "⛲",
-        "amenity=studio": "",
+        "amenity=studio": "<i class=\"fas fa-microphone\"></i>",
         "amenity=theatre": "🎭",
         "tourism=artwork": "🎨 ",
         "tourism=gallery": "🖼",
         "tourism=museum": "🏛 ",
-        "tourism=theme_park": "",
+        "tourism=theme_park": "<img data-src='maki:amusement-park'>",
         "shop=art": "<i class=\"fa fa-shopping-cart\"></i>"
     },
     "info": [
diff --git a/historic.json b/historic.json
index b1be977..0042fc1 100644
--- a/historic.json
+++ b/historic.json
@@ -90,19 +90,27 @@
     ],
     "const": {
         "archaeological_site": {
-            "sign": "",
+            "sign": "<i class=\"fas fa-archway\"></i>",
             "zoom": 11
         },
         "battlefield": {
-            "sign": "",
+            "sign": "⚔️",
             "zoom": 11
         },
         "castle": {
-            "sign": "<img src='maki:castle'>",
+            "sign": "<img data-src='maki:castle'>",
             "zoom": 11
         },
+        "building": {
+            "sign": "<img data-src='maki:building'>",
+            "zoom": 14
+        },
         "aircraft": {
-            "sign": "<img src='maki:airport'>",
+            "sign": "<img data-src='maki:airport'>",
+            "zoom": 14
+        },
+        "ruins": {
+            "sign": "<img data-src='temaki:ruins'>",
             "zoom": 14
         }
     }
diff --git a/memorial.json b/memorial.json
index 82e3495..300f321 100644
--- a/memorial.json
+++ b/memorial.json
@@ -102,7 +102,7 @@
             "zoom": 14
         },
         "monument": {
-            "sign": "<img src='maki:monument?size=15'>",
+            "sign": "<img data-src='maki:monument?size=15'>",
             "zoom": 11
         }
     }
diff --git a/tourism_attractions.json b/tourism_attractions.json
index 7fdfea7..d69b2b4 100644
--- a/tourism_attractions.json
+++ b/tourism_attractions.json
@@ -49,12 +49,12 @@
     "const": {
         "aquarium": "🐟",
         "artwork": "🎨 ",
-        "attraction": "<img src='maki:attraction'>",
+        "attraction": "<img data-src='maki:attraction'>",
         "gallery": "🖼",
-        "museum": "<img src='maki:museum'>",
-        "picnic_site": "<img src='maki:picnic-site'>",
-        "theme_park": "<img src='maki:amusement-park'>",
-        "viewpoint": "<i class='fa fa-eye' aria-hidden='true'></i>",
+        "museum": "<img data-src='maki:museum'>",
+        "picnic_site": "<img data-src='maki:picnic-site'>",
+        "theme_park": "<img data-src='maki:amusement-park'>",
+        "viewpoint": "<i class='fas fa-eye' aria-hidden='true'></i>",
         "zoo": "🦁"
     }
 }

From 34d03da4ab315d9e107eb021aa92d57a92c76843 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 10 Jan 2019 11:31:23 +0100
Subject: [PATCH 27/28] Include more office-tags (new category: law)

---
 communication.json    | 30 ++++++++++++++++--
 financial.json        | 56 ++++++++++++++++++++++++++++------
 index.json            |  3 ++
 law.json              | 59 +++++++++++++++++++++++++++++++++++
 organisations.json    |  5 +++
 public.json           | 13 ++++----
 tourism_services.json | 71 ++++++++++++++++++++++++++++++++++---------
 7 files changed, 203 insertions(+), 34 deletions(-)
 create mode 100644 law.json

diff --git a/communication.json b/communication.json
index dbdb662..83a90d3 100644
--- a/communication.json
+++ b/communication.json
@@ -25,14 +25,14 @@
             "node[amenity~'^(post_office|internet_cafe)$'];",
             "way[amenity~'^(post_office|internet_cafe)$'];",
             "relation[amenity~'^(post_office|internet_cafe)$'];",
-            "nwr[office~\"^(telecommunication|it)$\"];",
+            "nwr[office~\"^(telecommunication|it|newspaper|publisher|advertising_agency)$\"];",
             ");"
         ],
         "16": [
             "(node[amenity~'^(post_office|internet_cafe|post_box|telephone)$'];",
             "way[amenity~'^(post_office|internet_cafe)$'];",
             "relation[amenity~'^(post_office|internet_cafe)$'];",
-            "nwr[office~\"^(telecommunication|it)$\"];",
+            "nwr[office~\"^(telecommunication|it|newspaper|publisher|advertising_agency)$\"];",
             ");"
         ]
     },
@@ -95,13 +95,37 @@
             "zoom": 13
         },
         "office=telecommunication": {
-            "sign": "<img src='maki:building'>",
+            "sign": "<i class='fas fa-mobile-alt'></i>",
             "zoom": 13
         },
         "office=it": {
             "sign": "<i class='fas fa-desktop'></i>",
             "zoom": 13
         },
+        "office=newspaper": {
+            "sign": "<i class='fas fa-newspaper'></i>",
+            "zoom": 13
+        },
+        "office=publisher": {
+            "sign": "<i class='fas fa-book'></i>",
+            "zoom": 13
+        },
+        "office=advertising_agency": {
+            "sign": "<i class='fas fa-sign'></i>",
+            "zoom": 13
+        },
+        "office=public_relations": {
+            "sign": "<i class='fas fa-sign'></i>",
+            "zoom": 13
+        },
+        "office=audiovisual_production": {
+            "sign": "<i class='fas fa-film'></i>",
+            "zoom": 13
+        },
+        "office=film_production": {
+            "sign": "<i class='fas fa-film'></i>",
+            "zoom": 13
+        },
         "amenity=telephone": {
             "sign": "<img src='maki:telephone'>",
             "zoom": 16
diff --git a/financial.json b/financial.json
index b0ea37a..82b3bfb 100644
--- a/financial.json
+++ b/financial.json
@@ -31,37 +31,75 @@
             "node[amenity~\"^(bank|bureau_de_change|atm)$\"];",
             "way[amenity~\"^(bank|bureau_de_change|atm)$\"];",
             "relation[amenity~\"^(bank|bureau_de_change|atm)$\"];",
+            "node[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
+            "way[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
+            "relation[office~\"^(financial|accountant|insurance|tax|tax_advisor)$\"];",
             ")"
         ]
     },
     "feature": {
-        "description": "{{ tagTrans('amenity', tags.amenity) }}",
-        "markerSign": "{{ const[tags.amenity].sign|raw }}"
+        "pre": [
+            "{% if tags.amenity %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
+        "description": "{{ tagTrans(key, value) }}",
+        "markerSign": "{{ const[key ~ '=' ~ value].sign|raw }}"
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('amenity', value) }}</td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "atm": {
-            "sign": "<img src='maki:bank?size=11'>",
+        "amenity=atm": {
+            "sign": "<img data-src='maki:bank?size=11'>",
             "zoom": 15
         },
-        "bank": {
-            "sign": "<img src='maki:building'>",
+        "amenity=bank": {
+            "sign": "<img data-src='maki:building'>",
             "zoom": 14
         },
-        "bureau_de_change": {
+        "amenity=bureau_de_change": {
             "sign": "⇄",
             "zoom": 15
+        },
+        "office=financial": {
+            "sign": "<i class=\"fas fa-coins\"></i>",
+            "zoom": 15
+        },
+        "office=accountant": {
+            "sign": "<i class=\"fas fa-book\"></i>",
+            "zoom": 15
+        },
+        "office=insurance": {
+            "sign": "<i class=\"fas fa-file-signature\"></i>",
+            "zoom": 15
+        },
+        "office=tax": {
+            "sign": "%",
+            "zoom": 15
+        },
+        "office=tax_advisor": {
+            "sign": "<span style='color: green'>%</span>",
+            "zoom": 15
+        },
+        "office=cooperative": {
+            "sign": "<i class=\"fas fa-piggy-bank\"></i>",
+            "zoom": 15
         }
     }
 }
diff --git a/index.json b/index.json
index b2f3364..cff222f 100644
--- a/index.json
+++ b/index.json
@@ -95,6 +95,9 @@
                 {
                     "id": "financial"
                 },
+                {
+                    "id": "law"
+                },
                 {
                     "id": "public"
                 },
diff --git a/law.json b/law.json
new file mode 100644
index 0000000..02beff1
--- /dev/null
+++ b/law.json
@@ -0,0 +1,59 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Law"
+    },
+    "query": {
+        "14": [
+            "(",
+            "node[amenity~\"^(courthouse)$\"];",
+            "way[amenity~\"^(courthouse)$\"];",
+            "relation[amenity~\"^(courthouse)$\"];",
+            "node[office~\"^(lawyer|notary)$\"];",
+            "way[office~\"^(lawyer|notary)$\"];",
+            "relation[office~\"^(lawyer|notary)$\"];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": [
+            "{% if tags.amenity %}",
+            "  {% set key = 'amenity' %}",
+            "  {% set value = tags.amenity %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
+        "description": "{{ tagTrans(key, value) }}",
+        "markerSign": "{{ const[key ~ '=' ~ value].sign|raw }}"
+    },
+    "info": [
+        "<table>",
+        "{% for kv, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>",
+        "      {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "    </td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ],
+    "const": {
+        "amenity=courthouse": {
+            "sign": "<i class=\"fas fa-gavel\"></i>",
+            "zoom": 14
+        },
+        "office=lawyer": {
+            "sign": "⚖",
+            "zoom": 14
+        },
+        "office=notary": {
+            "sign": "<i class=\"fas fa-file-signature\"></i>",
+            "zoom": 14
+        }
+    }
+}
diff --git a/organisations.json b/organisations.json
index dcc1aa4..a6652b3 100644
--- a/organisations.json
+++ b/organisations.json
@@ -66,6 +66,11 @@
             "sign": "<i class='fas fa-people-carry'></i>",
             "zoom": 13
         },
+        "office=foundation": {
+            "priority": 0,
+            "sign": "<i class='fas fa-people-carry'></i>",
+            "zoom": 13
+        },
         "office=charity": {
             "priority": 0,
             "sign": "<i class='fas fa-hands-helping'></i>",
diff --git a/public.json b/public.json
index 63061c0..956e60a 100644
--- a/public.json
+++ b/public.json
@@ -21,9 +21,9 @@
     "query": {
         "12": [
             "(",
-            "node[amenity~'^(courthouse|embassy|public_building|townhall)$'];",
-            "way[amenity~'^(courthouse|embassy|public_building|townhall)$'];",
-            "relation[amenity~'^(courthouse|embassy|public_building|townhall)$'];",
+            "node[amenity~'^(embassy|public_building|townhall)$'];",
+            "way[amenity~'^(embassy|public_building|townhall)$'];",
+            "relation[amenity~'^(embassy|public_building|townhall)$'];",
             "node[amenity=recycling][recyling_type=centre];",
             "way[amenity=recycling][recyling_type=centre];",
             "relation[amenity=recycling][recyling_type=centre];",
@@ -32,9 +32,9 @@
         ],
         "16": [
             "(",
-            "node[amenity~'^(courthouse|embassy|public_building|townhall|clock|drinking_water|recycling|toilets)$'];",
-            "way[amenity~'^(courthouse|embassy|public_building|townhall|recycling|toilets)$'];",
-            "relation[amenity~'^(courthouse|embassy|public_building|townhall|recycling|toilets)$'];",
+            "node[amenity~'^(embassy|public_building|townhall|clock|drinking_water|recycling|toilets)$'];",
+            "way[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];",
+            "relation[amenity~'^(embassy|public_building|townhall|recycling|toilets)$'];",
             "node[drinking_water];",
             "nwr[office~\"^(government|administration)$\"];",
             ");"
@@ -80,7 +80,6 @@
         "</table>"
     ],
     "const": {
-        "amenity=courthouse": "⚖",
         "amenity=clock": "<i class='fa fa-clock-o' aria-hidden='true'></i>",
         "amenity=drinking_water": "<img data-src='maki:drinking-water'>",
         "amenity=embassy": "<img data-src='maki:embassy'>",
diff --git a/tourism_services.json b/tourism_services.json
index 721916e..d6e5ad2 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -25,6 +25,7 @@
             "node[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|motel|wilderness_hut)$\"];",
             "way[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|motel|wilderness_hut)$\"];",
             "relation[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|motel|wilderness_hut)$\"];",
+            "nwr[office~\"^(guide|tourism|tourist_accommodation)$\"];",
             ")"
         ],
         "16": [
@@ -32,67 +33,107 @@
             "node[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|information|motel|wilderness_hut)$\"];",
             "way[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|information|motel|wilderness_hut)$\"];",
             "relation[tourism~\"^(alpine_hut|apartment|camp_site|caravan_site|chalet|guest_house|hostel|hotel|information|motel|wilderness_hut)$\"];",
+            "nwr[office~\"^(guide|tourism|tourist_accommodation)$\"];",
             ")"
         ]
     },
     "feature": {
-        "description": "{{ tagTrans('tourism', tags.tourism) }}",
-        "markerSign": "{{ const[tags.tourism].sign|raw }}"
+        "pre": [
+            "{% if tags.tourism %}",
+            "  {% set key = 'tourism' %}",
+            "  {% set value = tags.tourism %}",
+            "{% else %}",
+            "  {% set key = 'office' %}",
+            "  {% set value = tags.office %}",
+            "{% endif %}"
+        ],
+        "description": [
+            "{% if key == 'office' %}",
+            "  {{ keyTrans('office') }} ({{ tagTrans('office', tags.office) }})",
+            "{% else %}",
+            "  {{ tagTrans(key, value) }}",
+            "{% endif %}"
+        ],
+        "markerSign": [
+            "{% set data = const[key ~ '=' ~ value] %}",
+            "{% if data %}",
+            "{{ data.sign|raw }}",
+            "{% endif %}"
+        ]
     },
     "info": [
         "<table>",
-        "{% for value, data in const %}",
+        "{% for kv, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ tagTrans('tourism', value) }}</td>",
+        "    <td>",
+        "      {% if kv|split('=')[0] == 'office' %}",
+        "        {{ keyTrans('office') }}",
+        "        ({{ tagTrans('office', kv|split('=')[1]) }})",
+        "      {% else %}",
+        "        {{ tagTrans(kv|split('=')[0], kv|split('=')[1]) }}",
+        "      {% endif %}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
         "</table>"
     ],
     "const": {
-        "alpine_hut": {
+        "tourism=alpine_hut": {
             "sign": "🛌",
             "zoom": 13
         },
-        "apartment": {
+        "tourism=apartment": {
             "sign": "🛌",
             "zoom": 13
         },
-        "camp_site": {
+        "tourism=camp_site": {
             "sign": "⛺",
             "zoom": 13
         },
-        "caravan_site": {
+        "tourism=caravan_site": {
             "sign": "⛺",
             "zoom": 13
         },
-        "chalet": {
+        "tourism=chalet": {
             "sign": "🛌",
             "zoom": 13
         },
-        "guest_house": {
+        "tourism=guest_house": {
             "sign": "🛌",
             "zoom": 13
         },
-        "hostel": {
+        "tourism=hostel": {
             "sign": "🛌",
             "zoom": 13
         },
-        "hotel": {
+        "tourism=hotel": {
             "sign": "🛌",
             "zoom": 13
         },
-        "motel": {
+        "tourism=motel": {
             "sign": "🛌",
             "zoom": 13
         },
-        "wilderness_hut": {
+        "tourism=wilderness_hut": {
             "sign": "",
             "zoom": 13
         },
-        "information": {
+        "office=tourism": {
+            "sign": "<i class=\"fas fa-info-circle\"></i>",
+            "zoom": 13
+        },
+        "office=guide": {
+            "sign": "<i class=\"fas fa-flag\"></i>",
+            "zoom": 13
+        },
+        "office=tourist_accommodation": {
+            "sign": "🛌",
+            "zoom": 13
+        },
+        "tourism=information": {
             "sign": "ℹ️",
             "zoom": 16
         }

From 35806ea7e09bb6800eb6a3148faaaf9e49e00749 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 10 Jan 2019 11:31:56 +0100
Subject: [PATCH 28/28] religion: include some office tags

---
 religion.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/religion.json b/religion.json
index ebdc2b6..b3e2c5a 100644
--- a/religion.json
+++ b/religion.json
@@ -38,6 +38,7 @@
             "node[historic~\"^wayside_(cross|shrine|chapel)$\"];",
             "way[historic~\"^wayside_(cross|shrine|chapel)$\"];",
             "relation[historic~\"^wayside_(cross|shrine|chapel)$\"];",
+            "nwr[office~\"^(parish|religion)$\"];",
             ")"
         ]
     },
@@ -49,6 +50,9 @@
             "{% elseif tags.historic in [ 'wayside_cross', 'wayside_shrine', 'wayside_chapel' ] %}",
             "{% set key = 'historic' %}",
             "{% set value = tags.historic %}",
+            "{% elseif tags.office %}",
+            "{% set key = 'office' %}",
+            "{% set value = tags.office %}",
             "{% else %}",
             "{% set key = 'amenity' %}",
             "{% set value = tags.amenity %}",