From b3d20e824098d9943cd688bfb2ea38dd48e8aa8d Mon Sep 17 00:00:00 2001
From: Igor Eliezer <IgorEliezer@users.noreply.github.com>
Date: Sat, 27 Oct 2018 08:28:40 -0300
Subject: [PATCH 01/32] Update pt-br.json

---
 lang/pt-br.json | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/lang/pt-br.json b/lang/pt-br.json
index e0fa41f..332aeaf 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -9,7 +9,7 @@
     "category:car_maxspeed": "Velocidade máxima",
     "category:car_routes": "Rotas rodoviárias",
     "category:children": "Equipamentos infantis",
-    "category:coal": "",
+    "category:coal": "Carvão",
     "category:communication": "Comunicação",
     "category:construction": "Terrenos vazios e obras",
     "category:craft": "Ofícios",
@@ -18,9 +18,9 @@
     "category:cycle_amenities": "Equipamentos",
     "category:cycle_routes": "Ciclorrotas",
     "category:education": "Educação",
-    "category:electric_power": "Energia",
+    "category:electric_power": "Energia elétrica",
     "category:emergency": "Emergência",
-    "category:energy": "",
+    "category:energy": "Energia",
     "category:financial": "Finanças",
     "category:gastro": "Gastronomia",
     "category:gastro-smoking": "Gastronomia sem fumo",
@@ -32,11 +32,11 @@
     "category:internet": "Acesso à Internet",
     "category:leisure": "Lazer",
     "category:leisure_sport_shopping": "Lazer, esportes e compras",
-    "category:memorial": "",
+    "category:memorial": "Memoriais",
     "category:military": "Militar",
-    "category:mtb-routes": "Rotas mountain bike",
+    "category:mtb-routes": "Rotas de mountain bike",
     "category:natural": "Formações naturais",
-    "category:oil_gas": "",
+    "category:oil_gas": "Petróleo e gás",
     "category:other": "Outros",
     "category:outdoor": "Atividades ao ar livre",
     "category:phone": "Telefone",
@@ -55,7 +55,7 @@
     "category:railway-maxspeed": "Velocidade máxima",
     "category:railway-routes": "Rotas ferroviárias",
     "category:religion": "Religião",
-    "category:renewables": "",
+    "category:renewables": "Renováveis",
     "category:residential": "Áreas residenciais",
     "category:resources": "Extração de recursos",
     "category:services": "Prestação de serviços",

From f968b451ad340d929be640cdc83f37cb5fbe06aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 27 Oct 2018 20:38:53 +0200
Subject: [PATCH 02/32] New category: power routes

---
 index.json         |  3 +++
 lang/ast.json      |  1 +
 lang/ca.json       |  1 +
 lang/cs.json       |  1 +
 lang/de.json       |  1 +
 lang/el.json       |  1 +
 lang/en.json       |  1 +
 lang/es.json       |  1 +
 lang/et.json       |  1 +
 lang/fr.json       |  1 +
 lang/hu.json       |  1 +
 lang/it.json       |  1 +
 lang/ja.json       |  1 +
 lang/nl.json       |  1 +
 lang/pl.json       |  1 +
 lang/pt-br.json    |  1 +
 lang/pt.json       |  1 +
 lang/ro.json       |  1 +
 lang/ru.json       |  1 +
 lang/template.json |  1 +
 lang/uk.json       |  1 +
 power_routes.json  | 63 ++++++++++++++++++++++++++++++++++++++++++++++
 22 files changed, 86 insertions(+)
 create mode 100644 power_routes.json

diff --git a/index.json b/index.json
index 2fbd6b8..e7b6bc0 100644
--- a/index.json
+++ b/index.json
@@ -260,6 +260,9 @@
                         {
                             "id": "electric_power"
                         },
+                        {
+                            "id": "power_routes"
+                        },
                         {
                             "id": "coal"
                         },
diff --git a/lang/ast.json b/lang/ast.json
index a5e172f..0f66d31 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Llugares",
     "category:playgrounds": "Xuegos infantiles",
     "category:post": "Corréu",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Paraes y estaciones",
diff --git a/lang/ca.json b/lang/ca.json
index 9a95a3e..3fd3e7d 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -44,6 +44,7 @@
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
diff --git a/lang/cs.json b/lang/cs.json
index 316a8e5..b6e8cfe 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Sídla",
     "category:playgrounds": "Hřiště",
     "category:post": "Poštovní služby",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Zastávky & Stanice",
diff --git a/lang/de.json b/lang/de.json
index 2a77009..467fec3 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Orte",
     "category:playgrounds": "Spielplätze",
     "category:post": "Post",
+    "category:power_routes": "",
     "category:pt": "ÖV Karte",
     "category:pt:routes": "Routen",
     "category:pt:stops": "Haltestellen",
diff --git a/lang/el.json b/lang/el.json
index 97c3dc6..ff8f645 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Μέρη",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Στάσεις & Σταθμοί",
diff --git a/lang/en.json b/lang/en.json
index 153aea4..6966220 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Places",
     "category:playgrounds": "Playground",
     "category:post": "Post",
+    "category:power_routes": "Power routes",
     "category:pt": "Public transport map",
     "category:pt:routes": "Routes",
     "category:pt:stops": "Stops & Stations",
diff --git a/lang/es.json b/lang/es.json
index b13fced..4af85d5 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -44,6 +44,7 @@
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Paradas y estaciones",
diff --git a/lang/et.json b/lang/et.json
index e647441..9bbb3c5 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Kohad",
     "category:playgrounds": "Mänguväljak",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
diff --git a/lang/fr.json b/lang/fr.json
index 784d81c..fb9798c 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Lieux",
     "category:playgrounds": "Jeux pour enfants",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "Lignes",
     "category:pt:stops": "Arrêts/Stops, Stations",
diff --git a/lang/hu.json b/lang/hu.json
index a673480..7239711 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Helyek",
     "category:playgrounds": "Játszóterek",
     "category:post": "Posta",
+    "category:power_routes": "",
     "category:pt": "Tömegközlekedési térkép",
     "category:pt:routes": "Útvonalak",
     "category:pt:stops": "Megállók és állomások",
diff --git a/lang/it.json b/lang/it.json
index 1e54cd3..69663bb 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Luoghi",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Stazioni e fermate",
diff --git a/lang/ja.json b/lang/ja.json
index 6f92a3b..883490c 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -44,6 +44,7 @@
     "category:places_geo": "場所",
     "category:playgrounds": "",
     "category:post": "郵便",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "停留所と駅",
diff --git a/lang/nl.json b/lang/nl.json
index a7ca08e..c1902e3 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Plaatsen",
     "category:playgrounds": "",
     "category:post": "Post",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Haltes en Stations",
diff --git a/lang/pl.json b/lang/pl.json
index fbce3f3..bf6258e 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Miejsca",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Przystanki i Stacje",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index e0fa41f..aded34d 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parquinhos",
     "category:post": "Correios",
+    "category:power_routes": "",
     "category:pt": "Mapa de transporte público",
     "category:pt:routes": "Rotas",
     "category:pt:stops": "Paradas e estações",
diff --git a/lang/pt.json b/lang/pt.json
index 64314ad..9a16662 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parques infantis",
     "category:post": "Correios",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "Rotas",
     "category:pt:stops": "",
diff --git a/lang/ro.json b/lang/ro.json
index 827c329..4649196 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Locuri",
     "category:playgrounds": "Loc de joaca",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
diff --git a/lang/ru.json b/lang/ru.json
index 57ed500..e4f125f 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Места",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Остановки и станции",
diff --git a/lang/template.json b/lang/template.json
index 39c78d3..fa309a5 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -44,6 +44,7 @@
     "category:places_geo": "",
     "category:playgrounds": "",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "",
diff --git a/lang/uk.json b/lang/uk.json
index ae7ca29..96d8e03 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -44,6 +44,7 @@
     "category:places_geo": "Місцевість",
     "category:playgrounds": "Дитячий майданчик",
     "category:post": "",
+    "category:power_routes": "",
     "category:pt": "",
     "category:pt:routes": "",
     "category:pt:stops": "Зупинки та станції",
diff --git a/power_routes.json b/power_routes.json
new file mode 100644
index 0000000..dd3c6f4
--- /dev/null
+++ b/power_routes.json
@@ -0,0 +1,63 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Power routes"
+    },
+    "query": {
+        "10": "relation[type=route][route=power]"
+    },
+    "members": true,
+    "feature": {
+        "pre": "{% set color = '#' ~ tags.operator|default('')|md5|slice(0, 6) %}",
+        "description": "{% if tags.operator %}{{ tags.operator }}{% endif %}",
+        "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 %}",
+        "listMarkerSymbol": "{{ markerLine({ 'width': 4, 'color': color })|raw }}",
+        "markerSymbol": "",
+        "styles": ""
+    },
+    "memberFeature": {
+        "pre": [
+            "{% set refs = [] %}",
+            "{% set color = '#d41d8c' %}",
+            "{% if tags.ref %}",
+            "  {% for ref in tags.ref|split(';') %}",
+            "    {% set refs = refs|merge([ ref|trim ]) %}",
+            "  {% endfor %}",
+            "{% endif %}",
+            "",
+            "{% for master in masters %}",
+            "  {% if master.tags.operator %}",
+            "    {% set color = '#' ~ master.tags.operator|md5|slice(0, 6) %}",
+            "  {% endif %}",
+            "  {% if master.tags.ref %}",
+            "    {% set refs = refs|merge([ master.tags.ref ]) %}",
+            "  {% endif %}",
+            "{% endfor %}",
+            "",
+            "{% set refs = refs|unique|natsort({ insensitive: true }) %}"
+        ],
+        "body": [
+            "<h4>Routes</h4>",
+            "<ul>",
+            "{% for master in masters %}",
+            "  {% set _color = '#' ~ master.tags.operator|default('')|md5|slice(0, 6) %}",
+            "  <li data-object=\"{{ master.id }}\" style='list-style: none;'>",
+            "    <span class='markerParent'><div class='marker'>{{ markerLine({ width: 4, color: _color })|raw }}</div></span>",
+            "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
+            "    <span class='description'>{{ master.tags.operator }}</span>",
+            "  </li>",
+            "{% endfor %}",
+            "</ul>"
+        ],
+        "listExclude": "1",
+        "style": {
+            "color": "{{ color }}",
+            "width": 4,
+            "opacity": 1,
+            "text": "{{ refs|join(' · ') }}             ",
+            "textRepeat": "1",
+            "textOffset": "12",
+            "textFontWeight": "bold"
+        }
+    }
+}

From 11c08791ea11f755fa7f0e41252886daf3801598 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 30 Oct 2018 06:18:10 +0100
Subject: [PATCH 03/32] Cycle routes: show directions on ways

---
 cycle_routes.json | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 3844eec..9361024 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -28,6 +28,8 @@
             "{% set priority = 4 %}",
             "{% set network = '' %}",
             "{% set refs = [] %}",
+            "{% set dirForward = false %}",
+            "{% set dirBackward = false %}",
             "",
             "{% for master in masters %}",
             "  {% set _p = const[master.tags.network].priority|default(4) %}",
@@ -38,6 +40,10 @@
             "  {% if master.tags.ref %}",
             "    {% set refs = refs|merge([ master.tags.ref ]) %}",
             "  {% endif %}",
+            "  {% if master.role == 'forward' %}{% set dirForward = true %}",
+            "  {% elseif master.role == 'backward' %}{% set dirBackward = true %}",
+            "  {% else %}{% set dirForward = true %}{% set dirBackward = true %}",
+            "  {% endif %}",
             "{% endfor %}"
         ],
         "title": "",
@@ -56,12 +62,19 @@
         "listExclude": "1",
         "style": {
             "color": "{{ const[network].color }}",
-            "width": 4,
+            "width": "{% if not dirForward or not dirBackward %}0{% else %}4{% endif %}",
             "opacity": 1,
             "text": "{{ refs|join(' · ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold"
+            "textFontWeight": "bold",
+            "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
+            "pattern-pixelSize": "4",
+            "pattern-repeat": "7",
+            "pattern-polygon": "",
+            "pattern-path-weight": "2",
+            "pattern-path-color": "{{ const[network].color }}",
+            "pattern-path-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}"
         }
     },
     "const": {

From 06132618339186eff714503de4916dd96404a21c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 30 Oct 2018 12:05:29 +0100
Subject: [PATCH 04/32] Cycle routes: hover/selected on the member features
 instead of master

---
 cycle_routes.json | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/cycle_routes.json b/cycle_routes.json
index 9361024..ee3bdb6 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -21,6 +21,12 @@
         "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 %}",
         "styles": "",
+        "style:hover": {
+            "width": 0
+        },
+        "style:selected": {
+            "width": 0
+        },
         "markerSymbol": ""
     },
     "memberFeature": {
@@ -30,6 +36,8 @@
             "{% set refs = [] %}",
             "{% set dirForward = false %}",
             "{% set dirBackward = false %}",
+            "{% set hover = false %}",
+            "{% set selected = false %}",
             "",
             "{% for master in masters %}",
             "  {% set _p = const[master.tags.network].priority|default(4) %}",
@@ -44,6 +52,8 @@
             "  {% elseif master.role == 'backward' %}{% set dirBackward = true %}",
             "  {% else %}{% set dirForward = true %}{% set dirBackward = true %}",
             "  {% endif %}",
+            "  {% if master.flags.hover %}{% set hover = master.role|default('both') %}{% endif %}",
+            "  {% if master.flags.selected %}{% set selected = master.role|default('both') %}{% endif %}",
             "{% endfor %}"
         ],
         "title": "",
@@ -60,6 +70,7 @@
             "</ul>"
         ],
         "listExclude": "1",
+        "styles": "default{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}",
         "style": {
             "color": "{{ const[network].color }}",
             "width": "{% if not dirForward or not dirBackward %}0{% else %}4{% endif %}",
@@ -75,6 +86,30 @@
             "pattern-path-weight": "2",
             "pattern-path-color": "{{ const[network].color }}",
             "pattern-path-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}"
+        },
+        "style:hover": {
+            "pane": "hover",
+            "width": "{% if hover == 'forward' or hover == 'backward' %}0{% else %}4{% endif %}",
+            "color": "black",
+            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "4",
+            "pattern-repeat": "7",
+            "pattern-polygon": "",
+            "pattern-path-weight": "2",
+            "pattern-path-color": "black",
+            "pattern-path-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}"
+        },
+        "style:selected": {
+            "pane": "selected",
+            "width": "{% if selected == 'forward' or selected == 'backward' %}0{% else %}3{% endif %}",
+            "color": "#3f3f3f",
+            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "4",
+            "pattern-repeat": "7",
+            "pattern-polygon": "",
+            "pattern-path-weight": "2",
+            "pattern-path-color": "#3f3f3f",
+            "pattern-path-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}"
         }
     },
     "const": {

From 2ab2a904b2f37b0ab4f441c1eac8ac31de3e1122 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 1 Nov 2018 10:05:17 +0100
Subject: [PATCH 05/32] pt: instead of circles on stops use markers of type
 circle (always on top)

---
 pt.json | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/pt.json b/pt.json
index 46451cf..5ef6590 100644
--- a/pt.json
+++ b/pt.json
@@ -118,13 +118,14 @@
             "{% endfor %}",
             "</ul>"
         ],
-        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}way{% else %}{% endif %}",
+        "styles": "{% if isStop and stopCount > 0 %}{% elseif isWay %}way{% else %}{% endif %}",
         "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 %}{{ markerCircle({ width: 0, fill: true, fillColor: color, fillOpacity: '1', radius: 5 })|raw }}{% endif %}",
         "style:way": {
             "width": "3",
             "color": "{{ color|default('#ff0000') }}",
@@ -132,11 +133,6 @@
             "textRepeat": "1",
             "textOffset": "12",
             "textFontWeight": "bold"
-        },
-        "style:stop": {
-            "width": "5",
-            "color": "{{ color|default('#ff0000') }}",
-            "radius": "3"
         }
     },
     "info": [

From 4225e151fa1f995507862df5d5629415fb86975b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 1 Nov 2018 10:06:06 +0100
Subject: [PATCH 06/32] pt: show arrowHeads to indicate direction of routes

---
 pt.json | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/pt.json b/pt.json
index 5ef6590..210e56f 100644
--- a/pt.json
+++ b/pt.json
@@ -82,6 +82,8 @@
             "{% set isWay = false %}",
             "{% set aRoute = null %}",
             "{% set refs = [] %}",
+            "{% set dirForward = false %}",
+            "{% set dirBackward = false %}",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport == 'stop_area' %}",
             "    {% set stopName = master.tags.name %}",
@@ -97,6 +99,10 @@
             "    {% if master.tags.ref %}",
             "      {% set refs = refs|merge([ master.tags.ref ]) %}",
             "    {% endif %}",
+            "    {% if master.dir == 'forward' %}{% set dirForward = true %}",
+            "    {% elseif master.dir == 'backward' %}{% set dirBackward = true %}",
+            "    {% else %}{% set dirForward = true %}{% set dirBackward = true %}",
+            "    {% endif %}",
             "  {% endif %}",
             "{% endfor %}",
             "",
@@ -128,11 +134,19 @@
         "markerSymbol": "{% if isStop and stopCount > 0 %}{{ markerCircle({ width: 0, fill: true, fillColor: color, fillOpacity: '1', radius: 5 })|raw }}{% endif %}",
         "style:way": {
             "width": "3",
+            "opacity": "{% if (dirForward and dirBackward) or (not dirForward and not dirBackward) %}1{% else %}0{% endif %}",
             "color": "{{ color|default('#ff0000') }}",
             "text": "{{ refs|join(' · ') }}             ",
             "textRepeat": "1",
             "textOffset": "12",
-            "textFontWeight": "bold"
+            "textFontWeight": "bold",
+            "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
+            "pattern-pixelSize": "4",
+            "pattern-repeat": "7",
+            "pattern-polygon": "",
+            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
+            "pattern-path-weight": "2",
+            "pattern-path-color": "{{ color|default('#ff0000') }}"
         }
     },
     "info": [

From 6d3e7c932e7531d2e508be7668a5b9cc08fb95ae Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 1 Nov 2018 10:25:36 +0100
Subject: [PATCH 07/32] pt: show directions in hover and selected

---
 pt.json | 35 ++++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/pt.json b/pt.json
index 210e56f..3f4bb5b 100644
--- a/pt.json
+++ b/pt.json
@@ -84,6 +84,8 @@
             "{% set refs = [] %}",
             "{% set dirForward = false %}",
             "{% set dirBackward = false %}",
+            "{% set hover = false %}",
+            "{% set selected = false %}",
             "{% for master in masters %}",
             "  {% if master.tags.public_transport == 'stop_area' %}",
             "    {% set stopName = master.tags.name %}",
@@ -104,6 +106,9 @@
             "    {% else %}{% set dirForward = true %}{% set dirBackward = true %}",
             "    {% endif %}",
             "  {% endif %}",
+            "",
+            "  {% if master.flags.hover %}{% set hover = master.dir|default('both') %}{% endif %}",
+            "  {% if master.flags.selected %}{% set selected = master.dir|default('both') %}{% endif %}",
             "{% endfor %}",
             "",
             "{% set refs = refs|unique|natsort({ insensitive: true }) %}",
@@ -118,20 +123,20 @@
             "  <li data-object=\"{{ master.id }}\">",
             "    <span class='markerParent'><div class='marker'>{{ markerCircle({fillColor:const[master.tags.route].color})|raw }}</div><div class='icon'>{{ const[master.tags.route].sign|raw }}</div></span>",
             "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
-            "    <span class='description'>{{ tagTrans('route', master.tags.route) }}</span>",
+            "    <span class='description'>{{ tagTrans('route', master.tags.route) }}{{ master.dir }}</span>",
             "  </li>",
             "  {% endif %}",
             "{% endfor %}",
             "</ul>"
         ],
-        "styles": "{% if isStop and stopCount > 0 %}{% elseif isWay %}way{% else %}{% endif %}",
+        "styles": "{% if isStop and stopCount > 0 %}{% elseif isWay %}way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
         "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 %}{{ markerCircle({ width: 0, fill: true, fillColor: color, fillOpacity: '1', radius: 5 })|raw }}{% endif %}",
+        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerCircle({ width: 0, fill: true, fillColor: hover ? '#000000' : '#3f3f3f', fillOpacity: '1', radius: 7 })|raw }}{% else %}{{ markerCircle({ width: 0, fill: true, fillColor: color, fillOpacity: '1', radius: 5 })|raw }}{% endif %}{% endif %}",
         "style:way": {
             "width": "3",
             "opacity": "{% if (dirForward and dirBackward) or (not dirForward and not dirBackward) %}1{% else %}0{% endif %}",
@@ -147,6 +152,30 @@
             "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
             "pattern-path-weight": "2",
             "pattern-path-color": "{{ color|default('#ff0000') }}"
+        },
+        "style:hover": {
+            "pane": "hover",
+            "width": "{% if hover == 'forward' or hover == 'backward' %}0{% else %}4{% endif %}",
+            "color": "black",
+            "pattern": "{% if hover == 'forward' or hover == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "4",
+            "pattern-repeat": "7",
+            "pattern-polygon": "",
+            "pattern-path-weight": "2",
+            "pattern-path-color": "black",
+            "pattern-path-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}"
+        },
+        "style:selected": {
+            "pane": "selected",
+            "width": "{% if selected == 'forward' or selected == 'backward' %}0{% else %}3{% endif %}",
+            "color": "#3f3f3f",
+            "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
+            "pattern-pixelSize": "4",
+            "pattern-repeat": "7",
+            "pattern-polygon": "",
+            "pattern-path-weight": "2",
+            "pattern-path-color": "#3f3f3f",
+            "pattern-path-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}"
         }
     },
     "info": [

From 335ccb9df8731437c5889790fe2018b740d1595f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 1 Nov 2018 22:04:39 +0100
Subject: [PATCH 08/32] Import pt-br translations to categories

---
 coal.json           | 3 ++-
 electric_power.json | 2 +-
 index.json          | 3 ++-
 memorial.json       | 3 ++-
 mtb-routes.json     | 2 +-
 oil_gas.json        | 5 +++--
 renewables.json     | 3 ++-
 7 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/coal.json b/coal.json
index 3cc7137..325af1f 100644
--- a/coal.json
+++ b/coal.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "de": "Kohle",
-        "en": "Coal"
+        "en": "Coal",
+        "pt-br": "Carvão"
     },
     "query": {
         "11": [
diff --git a/electric_power.json b/electric_power.json
index ce31be5..d77bbec 100644
--- a/electric_power.json
+++ b/electric_power.json
@@ -12,7 +12,7 @@
         "ja": "電力",
         "nl": "Stroomvoorziening",
         "pt": "Eletricidade",
-        "pt-br": "Energia",
+        "pt-br": "Energia elétrica",
         "ro": "Energie",
         "ru": "Энергетика"
     },
diff --git a/index.json b/index.json
index e7b6bc0..2721734 100644
--- a/index.json
+++ b/index.json
@@ -254,7 +254,8 @@
                     "type": "index",
                     "name": {
                         "en": "Energy",
-                        "de": "Energie"
+                        "de": "Energie",
+                        "pt-br": "Energia"
                     },
                     "subCategories": [
                         {
diff --git a/memorial.json b/memorial.json
index 117785c..50d2bc1 100644
--- a/memorial.json
+++ b/memorial.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "de": "Denkmäler",
-        "en": "Memorials"
+        "en": "Memorials",
+        "pt-br": "Memoriais"
     },
     "query": {
         "11": [
diff --git a/mtb-routes.json b/mtb-routes.json
index 02d2c71..ffc2670 100644
--- a/mtb-routes.json
+++ b/mtb-routes.json
@@ -4,7 +4,7 @@
         "en": "Mountain bike routes",
         "fr": "Itinéraires de VTT",
         "hu": "Hegyikerékpáros útvonalak",
-        "pt-br": "Rotas mountain bike"
+        "pt-br": "Rotas de mountain bike"
     },
     "query": {
         "13": "relation[type=route][route=mtb]"
diff --git a/oil_gas.json b/oil_gas.json
index 6dfaf03..5c8fbdd 100644
--- a/oil_gas.json
+++ b/oil_gas.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "de": "Erdöl und Erdgas",
-        "en": "Petroleum and natural gas"
+        "en": "Petroleum and natural gas",
+        "pt-br": "Petróleo e gás"
     },
     "query": {
         "11": [
@@ -23,7 +24,7 @@
             ")"
         ],
         "13": [
-          "(",
+            "(",
             "way[man_made~\"^(pipeline|goods_conveyor)$\"][substance~\"^(|.*;)(oil|gas|lng|cng|multiphase)(|;.*)$\"];",
             "relation[man_made~\"^(pipeline|goods_conveyor)$\"][substance~\"^(|.*;)(oil|gas|lng|cng|multiphase)(|;.*)$\"];",
             "node[landuse=industrial][industrial~\"^(|.*;)(oil|gas|lng|cng|multiphase|refinery|oil_refinery)(|;.*)$\"];",
diff --git a/renewables.json b/renewables.json
index 8e22ef7..f2eb805 100644
--- a/renewables.json
+++ b/renewables.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "de": "Erneuerbare Energien",
-        "en": "Renewables"
+        "en": "Renewables",
+        "pt-br": "Renováveis"
     },
     "query": {
         "11": [

From 60aac841bd7ecaa5ad28fde53c0d0e1f530e228c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 2 Nov 2018 17:24:03 +0100
Subject: [PATCH 09/32] children: Translate toilets with diaper changing table

---
 children.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/children.json b/children.json
index e814ed1..69fc913 100644
--- a/children.json
+++ b/children.json
@@ -37,7 +37,7 @@
             "{% elseif tags.shop=='baby_goods' or tags.shop=='toys' %}",
             "{{ keyTrans('shop') }}: {{ tagTrans('shop', tags.shop) }}",
             "{% elseif tags.amenity=='toilets' and tags.diaper %}",
-            "{{ tagTrans('amenity', 'toilets') }} with diaper changing table",
+            "{{ tagTrans('amenity', 'toilets diaper=yes') }}",
             "{% endif %}"
         ],
         "markerSign": [
@@ -78,7 +78,7 @@
         "  </tr>",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>🚽🚼</div></td>",
-        "    <td>{{ tagTrans('amenity', 'toilets') }} with diaper changing table</td>",
+        "    <td>{{ tagTrans('amenity', 'toilets diaper=yes') }}</td>",
         "  </tr>",
         "</table>"
     ]

From 682ac5c0f989dc64187fd074b0d4412092416441 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 5 Nov 2018 21:11:17 +0100
Subject: [PATCH 10/32] cycle_routes: bettern pattern

---
 cycle_routes.json | 62 ++++++++++++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 22 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index ee3bdb6..5cef3e3 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -73,43 +73,61 @@
         "styles": "default{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}",
         "style": {
             "color": "{{ const[network].color }}",
-            "width": "{% if not dirForward or not dirBackward %}0{% else %}4{% endif %}",
+            "width": "4",
+            "dashArray": "{% if not dirForward or not dirBackward %}13,10{% endif %}",
+            "dashOffset": "{% if dirBackward %}16{% 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": "4",
-            "pattern-repeat": "7",
-            "pattern-polygon": "",
-            "pattern-path-weight": "2",
-            "pattern-path-color": "{{ const[network].color }}",
-            "pattern-path-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}"
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "23",
+            "pattern-offset": "{% if dirBackward %}2{% else %}18.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
+            "pattern-path-weight": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "{{ const[network].color }}"
         },
         "style:hover": {
             "pane": "hover",
-            "width": "{% if hover == 'forward' or hover == 'backward' %}0{% else %}4{% endif %}",
+            "width": "4",
+            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}15,8{% endif %}",
+            "dashOffset": "{% if hover == 'backward' %}16{% 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": "4",
-            "pattern-repeat": "7",
-            "pattern-polygon": "",
-            "pattern-path-weight": "2",
-            "pattern-path-color": "black",
-            "pattern-path-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}"
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "23",
+            "pattern-offset": "{% if hover == 'backward' %}2{% else %}18.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-weight": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "black"
         },
         "style:selected": {
             "pane": "selected",
-            "width": "{% if selected == 'forward' or selected == 'backward' %}0{% else %}3{% endif %}",
-            "color": "#3f3f3f",
+            "width": "4",
+            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}15,8{% endif %}",
+            "dashOffset": "{% if selected == 'backward' %}16{% 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": "black",
             "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
-            "pattern-pixelSize": "4",
-            "pattern-repeat": "7",
-            "pattern-polygon": "",
-            "pattern-path-weight": "2",
-            "pattern-path-color": "#3f3f3f",
-            "pattern-path-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}"
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "23",
+            "pattern-offset": "{% if selected == 'backward' %}2{% else %}18.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-weight": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "#3f3f3f"
         }
     },
     "const": {

From acc5de362e30df8f7e9c1567bab49203878cbb70 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 11 Nov 2018 21:54:09 +0100
Subject: [PATCH 11/32] xmas: new category in special

---
 index.json |  3 ++
 xmas.json  | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 83 insertions(+)
 create mode 100644 xmas.json

diff --git a/index.json b/index.json
index 2721734..d5c01b9 100644
--- a/index.json
+++ b/index.json
@@ -342,6 +342,9 @@
                 },
                 {
                     "id": "wikipedia"
+                },
+                {
+                    "id": "xmas"
                 }
             ]
         }
diff --git a/xmas.json b/xmas.json
new file mode 100644
index 0000000..91adbfc
--- /dev/null
+++ b/xmas.json
@@ -0,0 +1,80 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Christmas"
+    },
+    "query": {
+        "14": [
+            "(",
+            "node[\"xmas:feature\"];",
+            "way[\"xmas:feature\"];",
+            "relation[\"xmas:feature\"];",
+            ")"
+        ]
+    },
+    "feature": {
+        "title": "{{ attribute(tags, \"xmas:name\")|default(trans(\"unnamed\")) }}",
+        "description": "{{ tagTransList(\"xmas:feature\", attribute(tags, \"xmas:feature\")) }}",
+        "body": [
+            "{% if attribute(tags, 'xmas:location') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-globe\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>{{ keyTrans('location') }}:</span>",
+            "  <span class='value'>",
+            "    {{ attribute(tags, 'xmas:location') }}",
+            "  </span>",
+            "</li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'xmas:day_date') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-clock-o\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>Open:</span>",
+            "  <span class='value'>",
+            "    {{ attribute(tags, 'xmas:day_date') }}",
+            "  </span>",
+            "</li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'xmas:opening_hours') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-clock-o\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>{{ keyTrans('opening_hours') }}:</span>",
+            "  <span class='value'>",
+            "    {{ attribute(tags, 'xmas:opening_hours') }}",
+            "  </span>",
+            "</li>",
+            "{% endif %}",
+            "",
+            "{% if attribute(tags, 'xmas:url') %}",
+            "<li class='hasSymbol'>",
+            "  <i class=\"fa fa-globe\" aria-hidden=\"true\"></i>",
+            "  <span class='key'>{{ keyTrans('website') }}:</span>",
+            "  <span class='value'>",
+            "    <a target='_blank' href='{{ attribute(tags, 'xmas:url')|websiteUrl }}'>{{ attribute(tags, 'xmas:url') }}</a>",
+            "  </span>",
+            "</li>",
+            "{% endif %}"
+        ],
+        "markerSign": [
+            "{{ attribute(const, attribute(tags, 'xmas:feature'))|raw }}",
+            ""
+        ]
+    },
+    "const": {
+        "market": "<img src='maki:commercial'>",
+        "tree": "<i class=\"fa fa-tree\" aria-hidden=\"true\"></i>",
+        "shop": "<i class=\"fa fa-shopping-basket\" aria-hidden=\"true\"></i>",
+        "event": "<img src='maki:amusement-park'>"
+    },
+    "info": [
+        "<table>",
+        "{% for value, icon in const %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ icon|raw }}</div></td>",
+        "    <td>{{ tagTrans('xmas:feature', value) }}</td>",
+        "  </tr>",
+        "{% endfor %}",
+        "</table>"
+    ]
+}

From 2759d6c6e38aec302a66a97341fb7e51fc7a7366 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 8 Nov 2018 10:33:46 +0100
Subject: [PATCH 12/32] pt: better patterns

---
 pt.json | 66 +++++++++++++++++++++++++++++++++++++++------------------
 1 file changed, 45 insertions(+), 21 deletions(-)

diff --git a/pt.json b/pt.json
index 3f4bb5b..cd3bbe0 100644
--- a/pt.json
+++ b/pt.json
@@ -67,6 +67,12 @@
         ],
         "markerSymbol": "",
         "styles": "",
+        "style:hover": {
+            "width": 0
+        },
+        "style:selected": {
+            "width": 0
+        },
         "listStopsExclude": "true",
         "listRoutesMarkerSign": "{{ const[tags.route].sign|raw }}",
         "listRoutesMarkerSymbol": "{{ markerCircle({fillColor:const[tags.route].color})|raw }}",
@@ -129,7 +135,7 @@
             "{% endfor %}",
             "</ul>"
         ],
-        "styles": "{% if isStop and stopCount > 0 %}{% elseif isWay %}way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
+        "styles": "{% if isStop and stopCount > 0 %}{% elseif isWay %}casing,way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
         "listStopsMarkerSign": null,
         "listStopsMarkerSymbol": "{{ markerCircle({ width: 5, color: color, fillOpacity: '1', radius: 3 })|raw }}",
         "listStopsExclude": "{{ not isStop or stopCount == 0 }}",
@@ -138,44 +144,62 @@
         "listRoutesExclude": "true",
         "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerCircle({ width: 0, fill: true, fillColor: hover ? '#000000' : '#3f3f3f', fillOpacity: '1', radius: 7 })|raw }}{% else %}{{ markerCircle({ width: 0, fill: true, fillColor: color, fillOpacity: '1', radius: 5 })|raw }}{% endif %}{% endif %}",
         "style:way": {
-            "width": "3",
-            "opacity": "{% if (dirForward and dirBackward) or (not dirForward and not dirBackward) %}1{% else %}0{% endif %}",
             "color": "{{ color|default('#ff0000') }}",
+            "width": "4",
+            "dashArray": "{% if not dirForward or not dirBackward %}15,8{% endif %}",
+            "dashOffset": "{% if dirBackward %}16{% 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": "4",
-            "pattern-repeat": "7",
-            "pattern-polygon": "",
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "23",
+            "pattern-offset": "{% if dirBackward %}2{% else %}18.5{% endif %}",
+            "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "2",
+            "pattern-path-weight": "0",
+            "pattern-path-fillOpacity": "1",
             "pattern-path-color": "{{ color|default('#ff0000') }}"
         },
         "style:hover": {
             "pane": "hover",
-            "width": "{% if hover == 'forward' or hover == 'backward' %}0{% else %}4{% endif %}",
+            "width": "4",
+            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}15,8{% endif %}",
+            "dashOffset": "{% if hover == 'backward' %}16{% 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": "4",
-            "pattern-repeat": "7",
-            "pattern-polygon": "",
-            "pattern-path-weight": "2",
-            "pattern-path-color": "black",
-            "pattern-path-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}"
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "23",
+            "pattern-offset": "{% if hover == 'backward' %}2{% else %}18.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-weight": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "black"
         },
         "style:selected": {
             "pane": "selected",
-            "width": "{% if selected == 'forward' or selected == 'backward' %}0{% else %}3{% endif %}",
+            "width": "4",
+            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}15,8{% endif %}",
+            "dashOffset": "{% if selected == 'backward' %}16{% 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": "4",
-            "pattern-repeat": "7",
-            "pattern-polygon": "",
-            "pattern-path-weight": "2",
-            "pattern-path-color": "#3f3f3f",
-            "pattern-path-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}"
+            "pattern-pixelSize": "9",
+            "pattern-repeat": "23",
+            "pattern-offset": "{% if selected == 'backward' %}2{% else %}18.5{% endif %}",
+            "pattern-polygon": "true",
+            "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
+            "pattern-path-weight": "0",
+            "pattern-path-fillOpacity": "1",
+            "pattern-path-color": "#3f3f3f"
         }
     },
     "info": [

From 0e11d00ed8f65d2749a85ec6ccf42befae569c8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 12 Nov 2018 21:52:13 +0100
Subject: [PATCH 13/32] pt, cycle_routes: longer arrows

---
 cycle_routes.json | 26 +++++++++++++-------------
 pt.json           | 24 ++++++++++++------------
 2 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 5cef3e3..3e001bc 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -74,8 +74,8 @@
         "style": {
             "color": "{{ const[network].color }}",
             "width": "4",
-            "dashArray": "{% if not dirForward or not dirBackward %}13,10{% endif %}",
-            "dashOffset": "{% if dirBackward %}16{% else %}0{% 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,
@@ -85,8 +85,8 @@
             "textFontWeight": "bold",
             "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
             "pattern-pixelSize": "9",
-            "pattern-repeat": "23",
-            "pattern-offset": "{% if dirBackward %}2{% else %}18.5{% endif %}",
+            "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-weight": "0",
@@ -96,15 +96,15 @@
         "style:hover": {
             "pane": "hover",
             "width": "4",
-            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}15,8{% endif %}",
-            "dashOffset": "{% if hover == 'backward' %}16{% else %}0{% 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": "23",
-            "pattern-offset": "{% if hover == 'backward' %}2{% else %}18.5{% endif %}",
+            "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-weight": "0",
@@ -114,15 +114,15 @@
         "style:selected": {
             "pane": "selected",
             "width": "4",
-            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}15,8{% endif %}",
-            "dashOffset": "{% if selected == 'backward' %}16{% else %}0{% 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": "black",
+            "color": "#3f3f3f",
             "pattern": "{% if selected == 'forward' or selected == 'backward' %}arrowHead{% endif %}",
             "pattern-pixelSize": "9",
-            "pattern-repeat": "23",
-            "pattern-offset": "{% if selected == 'backward' %}2{% else %}18.5{% endif %}",
+            "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-path-weight": "0",
diff --git a/pt.json b/pt.json
index cd3bbe0..b1cdc2b 100644
--- a/pt.json
+++ b/pt.json
@@ -146,8 +146,8 @@
         "style:way": {
             "color": "{{ color|default('#ff0000') }}",
             "width": "4",
-            "dashArray": "{% if not dirForward or not dirBackward %}15,8{% endif %}",
-            "dashOffset": "{% if dirBackward %}16{% else %}0{% 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,
@@ -157,8 +157,8 @@
             "textFontWeight": "bold",
             "pattern": "{% if dirForward and dirBackward %}{% else %}arrowHead{% endif %}",
             "pattern-pixelSize": "9",
-            "pattern-repeat": "23",
-            "pattern-offset": "{% if dirBackward %}2{% else %}18.5{% endif %}",
+            "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-weight": "0",
@@ -168,15 +168,15 @@
         "style:hover": {
             "pane": "hover",
             "width": "4",
-            "dashArray": "{% if hover == 'forward' or hover == 'backward' %}15,8{% endif %}",
-            "dashOffset": "{% if hover == 'backward' %}16{% else %}0{% 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": "23",
-            "pattern-offset": "{% if hover == 'backward' %}2{% else %}18.5{% endif %}",
+            "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-weight": "0",
@@ -186,15 +186,15 @@
         "style:selected": {
             "pane": "selected",
             "width": "4",
-            "dashArray": "{% if selected == 'forward' or selected == 'backward' %}15,8{% endif %}",
-            "dashOffset": "{% if selected == 'backward' %}16{% else %}0{% 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": "23",
-            "pattern-offset": "{% if selected == 'backward' %}2{% else %}18.5{% endif %}",
+            "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-path-weight": "0",

From ee8d4b21cb0123f937e3bb8b9cb82abbba6a2af7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 12 Nov 2018 22:03:19 +0100
Subject: [PATCH 14/32] pt: Show pointer on stops, when route hovered/selected

---
 pt.json | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/pt.json b/pt.json
index b1cdc2b..14d5b3c 100644
--- a/pt.json
+++ b/pt.json
@@ -135,14 +135,21 @@
             "{% endfor %}",
             "</ul>"
         ],
-        "styles": "{% if isStop and stopCount > 0 %}{% elseif isWay %}casing,way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
+        "styles": "{% if isStop and stopCount > 0 %}stop{% elseif isWay %}casing,way{% if hover %},hover{% endif %}{% if selected %},selected{% endif %}{% endif %}",
         "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 %}{{ markerCircle({ width: 0, fill: true, fillColor: hover ? '#000000' : '#3f3f3f', fillOpacity: '1', radius: 7 })|raw }}{% else %}{{ markerCircle({ width: 0, fill: true, fillColor: color, fillOpacity: '1', radius: 5 })|raw }}{% endif %}{% endif %}",
+        "markerSymbol": "{% if isStop and stopCount > 0 %}{% if hover or selected %}{{ markerPointer({ })|raw }}{% endif %}{% endif %}",
+        "markerSign": " ",
+        "style:stop": {
+            "color": "{{ color|default('#ff0000') }}",
+            "width": "4",
+            "radius": "3",
+            "zIndex": "1"
+        },
         "style:way": {
             "color": "{{ color|default('#ff0000') }}",
             "width": "4",

From ddd764584b6ec8531cd25a1ed243ef5bcf2389c0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 13 Nov 2018 21:36:40 +0100
Subject: [PATCH 15/32] pt, cycle_routes: use width for pattern paths

---
 cycle_routes.json | 6 +++---
 pt.json           | 6 +++---
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/cycle_routes.json b/cycle_routes.json
index 3e001bc..828dfaf 100644
--- a/cycle_routes.json
+++ b/cycle_routes.json
@@ -89,7 +89,7 @@
             "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "0",
+            "pattern-path-width": "0",
             "pattern-path-fillOpacity": "1",
             "pattern-path-color": "{{ const[network].color }}"
         },
@@ -107,7 +107,7 @@
             "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "0",
+            "pattern-path-width": "0",
             "pattern-path-fillOpacity": "1",
             "pattern-path-color": "black"
         },
@@ -125,7 +125,7 @@
             "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "0",
+            "pattern-path-width": "0",
             "pattern-path-fillOpacity": "1",
             "pattern-path-color": "#3f3f3f"
         }
diff --git a/pt.json b/pt.json
index 14d5b3c..6db6264 100644
--- a/pt.json
+++ b/pt.json
@@ -168,7 +168,7 @@
             "pattern-offset": "{% if dirBackward %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if dirBackward %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "0",
+            "pattern-path-width": "0",
             "pattern-path-fillOpacity": "1",
             "pattern-path-color": "{{ color|default('#ff0000') }}"
         },
@@ -186,7 +186,7 @@
             "pattern-offset": "{% if hover == 'backward' %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if hover == 'backward' %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "0",
+            "pattern-path-width": "0",
             "pattern-path-fillOpacity": "1",
             "pattern-path-color": "black"
         },
@@ -204,7 +204,7 @@
             "pattern-offset": "{% if selected == 'backward' %}4{% else %}30.5{% endif %}",
             "pattern-polygon": "true",
             "pattern-angleCorrection": "{% if selected == 'backward' %}180{% else %}0{% endif %}",
-            "pattern-path-weight": "0",
+            "pattern-path-width": "0",
             "pattern-path-fillOpacity": "1",
             "pattern-path-color": "#3f3f3f"
         }

From 02c6f8f7fed80d2fcc96df5a214eadd9a233c4ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 15 Nov 2018 13:57:34 +0100
Subject: [PATCH 16/32] pt: remove debug message

---
 pt.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pt.json b/pt.json
index 6db6264..a3d6eea 100644
--- a/pt.json
+++ b/pt.json
@@ -129,7 +129,7 @@
             "  <li data-object=\"{{ master.id }}\">",
             "    <span class='markerParent'><div class='marker'>{{ markerCircle({fillColor:const[master.tags.route].color})|raw }}</div><div class='icon'>{{ const[master.tags.route].sign|raw }}</div></span>",
             "    <span class='title'>{% if master.tags.ref and master.tags.name %}{{ master.tags.ref }} - {{ master.tags.name|default(master.tags.ref) }}{% elseif master.tags.ref %}{{ master.tags.ref }}{% elseif master.tags.name %}{{ master.tags.name }}{% else %}{{ trans('unnamed') }}{% endif %}</span>",
-            "    <span class='description'>{{ tagTrans('route', master.tags.route) }}{{ master.dir }}</span>",
+            "    <span class='description'>{{ tagTrans('route', master.tags.route) }}</span>",
             "  </li>",
             "  {% endif %}",
             "{% endfor %}",

From dddfeda3e8a19840fdf4e3c412e2d17994ec0a0a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Fri, 16 Nov 2018 11:18:16 +0100
Subject: [PATCH 17/32] bathing_swimming: new category

---
 index.json            |  3 +++
 swimming_bathing.json | 48 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)
 create mode 100644 swimming_bathing.json

diff --git a/index.json b/index.json
index d5c01b9..aebc34b 100644
--- a/index.json
+++ b/index.json
@@ -46,6 +46,9 @@
                 },
                 {
                     "id": "outdoor"
+                },
+                {
+                    "id": "swimming_bathing"
                 }
             ]
         },
diff --git a/swimming_bathing.json b/swimming_bathing.json
new file mode 100644
index 0000000..6a99877
--- /dev/null
+++ b/swimming_bathing.json
@@ -0,0 +1,48 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Swimming and bathing",
+        "de": "Schwimmen und Baden"
+    },
+    "query": {
+        "13": [
+            "(",
+            "nwr[leisure=swimming_area];",
+            "nwr[natural~\"^(water|beach)\"][sport~\"^(|.*;)swimming(.*|)$\"];",
+            "nwr[leisure~\"^(water_park|beach_resort)$\"];",
+            "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(.*|)$\"];",
+            "nwr[amenity=public_bath];",
+            "nwr[tourism=spa_resort];",
+            ")"
+        ],
+        "16": [
+            "(",
+            "nwr[leisure=swimming_area];",
+            "nwr[natural~\"^(water|beach)\"][sport~\"^(|.*;)swimming(;.*|)$\"];",
+            "nwr[leisure~\"^(water_park|beach_resort)$\"];",
+            "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(;.*|)$\"];",
+            "nwr[amenity=public_bath];",
+            "nwr[tourism=spa_resort];",
+            "",
+            "nwr[leisure=swimming_pool][access!=private];",
+            "nwr[leisure=sauna];",
+            ")"
+        ]
+    },
+    "feature": {
+        "pre": "",
+        "description": [
+            "{% if tags.amenity == 'public_path' %}",
+            "  {{ tagTrans('amenity', 'public_path') }}",
+            "  {% if attribute(tags, 'bath:type') %}({{ tagTrans('bath:type', attribute(tags, 'bath:type')) }}){% endif %}",
+            "{% elseif tags.tourism == 'spa_resort' %}",
+            "{{ tagTrans('tourism', tags.tourism ) }}",
+            "{% elseif tags.leisure %}",
+            "{{ tagTrans('leisure', tags.leisure) }}",
+            "{% elseif tags.natural %}",
+            "{{ tagTrans('natural', tags.natural) }}",
+            "{% endif %}"
+        ],
+        "priority": "{% if tags.name %}0{% else %}1{% endif %}"
+    }
+}

From 32a06ff946d3a22e46e01d14d9c68f5f975e89a7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Fri, 16 Nov 2018 13:13:33 +0100
Subject: [PATCH 18/32] bathing_swimming: show sauna type, small bugfixes

---
 swimming_bathing.json | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/swimming_bathing.json b/swimming_bathing.json
index 6a99877..0e090d3 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -32,11 +32,14 @@
     "feature": {
         "pre": "",
         "description": [
-            "{% if tags.amenity == 'public_path' %}",
-            "  {{ tagTrans('amenity', 'public_path') }}",
-            "  {% if attribute(tags, 'bath:type') %}({{ tagTrans('bath:type', attribute(tags, 'bath:type')) }}){% endif %}",
+            "{% if tags.amenity == 'public_bath' %}",
+            "{{ tagTrans('amenity', 'public_bath' ) }}",
+            "{% if attribute(tags, 'bath:type') %}({{ tagTrans('bath:type', attribute(tags, 'bath:type')) }}){% endif %}",
             "{% elseif tags.tourism == 'spa_resort' %}",
             "{{ tagTrans('tourism', tags.tourism ) }}",
+            "{% elseif tags.leisure == 'sauna' %}",
+            "  {{ tagTrans('leisure', 'sauna') }}",
+            "  {% if tags.sauna and tags.sauna != 'yes' %}({{ tagTransList('sauna', tags.sauna) }}){% endif %}",
             "{% elseif tags.leisure %}",
             "{{ tagTrans('leisure', tags.leisure) }}",
             "{% elseif tags.natural %}",

From b4d0a3517a350b14f98fe751211cde64682d87c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 25 Nov 2018 08:13:44 +0100
Subject: [PATCH 19/32] swimming_bathing: icons, map key

---
 swimming_bathing.json | 87 ++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 78 insertions(+), 9 deletions(-)

diff --git a/swimming_bathing.json b/swimming_bathing.json
index 0e090d3..5ae2e13 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -30,22 +30,91 @@
         ]
     },
     "feature": {
-        "pre": "",
-        "description": [
+        "pre": [
+            "{% set k = null %}{% set v = null %}{% set append = null %}",
             "{% if tags.amenity == 'public_bath' %}",
-            "{{ tagTrans('amenity', 'public_bath' ) }}",
-            "{% if attribute(tags, 'bath:type') %}({{ tagTrans('bath:type', attribute(tags, 'bath:type')) }}){% endif %}",
+            "  {% set k = 'amenity' %}",
+            "  {% set v = 'public_bath' %}",
+            "  {% if attribute(tags, 'bath:type') %}{% set append = tagTrans('bath:type', attribute(tags, 'bath:type')) %}{% endif %}",
             "{% elseif tags.tourism == 'spa_resort' %}",
-            "{{ tagTrans('tourism', tags.tourism ) }}",
+            "  {% set k = 'tourism' %}",
+            "  {% set v = tags.tourism %}",
             "{% elseif tags.leisure == 'sauna' %}",
-            "  {{ tagTrans('leisure', 'sauna') }}",
-            "  {% if tags.sauna and tags.sauna != 'yes' %}({{ tagTransList('sauna', tags.sauna) }}){% endif %}",
+            "  {% set k = 'leisure' %}",
+            "  {% set v = tags.leisure %}",
+            "  {% if tags.sauna and tags.sauna != 'yes' %}{% set append = tagTransList('sauna', tags.sauna) %}{% endif %}",
+            "{% elseif tags.leisure == 'sports_centre' %}",
+            "  {% set k = 'leisure' %}",
+            "  {% set v = tags.leisure %}",
+            "  {% set append = tagTrans('sport', 'swimming') %}",
             "{% elseif tags.leisure %}",
-            "{{ tagTrans('leisure', tags.leisure) }}",
+            "  {% set k = 'leisure' %}",
+            "  {% set v = tags.leisure %}",
             "{% elseif tags.natural %}",
-            "{{ tagTrans('natural', tags.natural) }}",
+            "  {% set k = 'natural' %}",
+            "  {% set v = tags.natural %}",
+            "  {% if tags.sport %}{% set append = tagTrans('sport', 'swimming') %}{% endif %}",
             "{% endif %}"
         ],
+        "description": [
+            "{{ tagTrans(k, v) }}",
+            "{% if append %}({{ append }}){% endif %}"
+        ],
+        "markerSign": "{{ const[k ~ '=' ~ v].sign|raw }}",
         "priority": "{% if tags.name %}0{% else %}1{% endif %}"
+    },
+    "info": [
+        "<table>",
+        "{% for value, data in const %}",
+        "{% if data.zoom <= map.zoom %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
+        "    <td>{{ keyTrans(value) }}</td>",
+        "  </tr>",
+        "{% endif %}",
+        "{% endfor %}",
+        "</table>"
+    ],
+    "const": {
+        "leisure=swimming_area": {
+          "zoom": 13,
+          "sign": "<img data-src='maki:swimming?size=11&fill=blue'>"
+        },
+        "leisure=water_park": {
+          "zoom": 13,
+          "sign": "<img data-src='maki:swimming'>"
+        },
+        "leisure=beach_resort": {
+          "zoom": 13,
+          "sign": "<img data-src='temaki:beach'>"
+        },
+        "leisure=sports_centre": {
+          "zoom": 13,
+          "sign": "<img data-src='maki:basketball'>"
+        },
+        "natural=water": {
+          "zoom": 13,
+          "sign": "<img data-src='maki:swimming?fill=blue'>"
+        },
+        "natural=beach": {
+          "zoom": 13,
+          "sign": "<img data-src='temaki:beach?fill=green'>"
+        },
+        "amenity=public_bath": {
+          "zoom": 13,
+          "sign": "<i class=\"fa fa-bath\" style='color: black' aria-hidden=\"true\"></i>"
+        },
+        "tourism=spa_resort": {
+          "zoom": 13,
+          "sign": "<i class=\"fa fa-bath\" style='color: blue' aria-hidden=\"true\"></i>"
+        },
+        "leisure=swimming_pool": {
+          "zoom": 16,
+          "sign": "<img data-src='maki:swimming?size=11'>"
+        },
+        "leisure=sauna": {
+          "zoom": 16,
+          "sign": "<i class=\"fa fa-thermometer-full\" aria-hidden=\"true\"></i>"
+        }
     }
 }

From 283f91a930f04367214d0792e0a8a2e25a1380a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 25 Nov 2018 08:23:40 +0100
Subject: [PATCH 20/32] swimming_bathing: append additional info, show all
 beaches

---
 swimming_bathing.json | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/swimming_bathing.json b/swimming_bathing.json
index 5ae2e13..76ce3e3 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -8,7 +8,8 @@
         "13": [
             "(",
             "nwr[leisure=swimming_area];",
-            "nwr[natural~\"^(water|beach)\"][sport~\"^(|.*;)swimming(.*|)$\"];",
+            "nwr[natural~\"^(water)\"][sport~\"^(|.*;)swimming(.*|)$\"];",
+            "nwr[natural~\"^(beach)\"];",
             "nwr[leisure~\"^(water_park|beach_resort)$\"];",
             "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(.*|)$\"];",
             "nwr[amenity=public_bath];",
@@ -18,7 +19,8 @@
         "16": [
             "(",
             "nwr[leisure=swimming_area];",
-            "nwr[natural~\"^(water|beach)\"][sport~\"^(|.*;)swimming(;.*|)$\"];",
+            "nwr[natural~\"^(water)\"][sport~\"^(|.*;)swimming(.*|)$\"];",
+            "nwr[natural~\"^(beach)\"];",
             "nwr[leisure~\"^(water_park|beach_resort)$\"];",
             "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(;.*|)$\"];",
             "nwr[amenity=public_bath];",
@@ -69,7 +71,7 @@
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ keyTrans(value) }}</td>",
+        "    <td>{{ keyTrans(value) }} {% if data.append %}({{ trans(data.append) }}){% endif %}</td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
@@ -90,10 +92,12 @@
         },
         "leisure=sports_centre": {
           "zoom": 13,
+          "append": "tag:sport=swimming",
           "sign": "<img data-src='maki:basketball'>"
         },
         "natural=water": {
           "zoom": 13,
+          "append": "tag:sport=swimming",
           "sign": "<img data-src='maki:swimming?fill=blue'>"
         },
         "natural=beach": {
@@ -110,6 +114,7 @@
         },
         "leisure=swimming_pool": {
           "zoom": 16,
+          "append": "tag:access!=private",
           "sign": "<img data-src='maki:swimming?size=11'>"
         },
         "leisure=sauna": {

From 749d637d4a01d3313d0c9af33ee2747b71101889 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 25 Nov 2018 08:32:43 +0100
Subject: [PATCH 21/32] swimming_bathing: show taginfo in map key on mouseover

---
 swimming_bathing.json | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/swimming_bathing.json b/swimming_bathing.json
index 76ce3e3..c252dc0 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -71,7 +71,10 @@
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
         "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
-        "    <td>{{ keyTrans(value) }} {% if data.append %}({{ trans(data.append) }}){% endif %}</td>",
+        "    <td title=\"{% if data.taginfo %}{{ data.taginfo }}{% else %}{{ value }}{% endif %}\">",
+        "      {{ keyTrans(value) }}",
+        "      {% if data.append %}({{ trans(data.append) }}){% endif %}",
+        "    </td>",
         "  </tr>",
         "{% endif %}",
         "{% endfor %}",
@@ -93,11 +96,13 @@
         "leisure=sports_centre": {
           "zoom": 13,
           "append": "tag:sport=swimming",
+          "taginfo": "leisure=swimming_area, sport=swimming",
           "sign": "<img data-src='maki:basketball'>"
         },
         "natural=water": {
           "zoom": 13,
           "append": "tag:sport=swimming",
+          "taginfo": "natural=water, sport=swimming",
           "sign": "<img data-src='maki:swimming?fill=blue'>"
         },
         "natural=beach": {
@@ -106,6 +111,7 @@
         },
         "amenity=public_bath": {
           "zoom": 13,
+          "taginfo": "amenity=public_bath, bath:type=*",
           "sign": "<i class=\"fa fa-bath\" style='color: black' aria-hidden=\"true\"></i>"
         },
         "tourism=spa_resort": {
@@ -115,10 +121,12 @@
         "leisure=swimming_pool": {
           "zoom": 16,
           "append": "tag:access!=private",
+          "taginfo": "leisure=swimming_pool, access!=private",
           "sign": "<img data-src='maki:swimming?size=11'>"
         },
         "leisure=sauna": {
           "zoom": 16,
+          "taginfo": "leisure=sauna, sauna:type=*",
           "sign": "<i class=\"fa fa-thermometer-full\" aria-hidden=\"true\"></i>"
         }
     }

From aa5f4ba259a991ee14c2d867a4a6290bc0da13df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 25 Nov 2018 19:10:15 +0100
Subject: [PATCH 22/32] swimming_bathing: use new Font Awesome icons

---
 swimming_bathing.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/swimming_bathing.json b/swimming_bathing.json
index c252dc0..5225d4b 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -103,7 +103,7 @@
           "zoom": 13,
           "append": "tag:sport=swimming",
           "taginfo": "natural=water, sport=swimming",
-          "sign": "<img data-src='maki:swimming?fill=blue'>"
+          "sign": "<i style='color: blue' class=\"fas fa-water\"></i>"
         },
         "natural=beach": {
           "zoom": 13,
@@ -122,7 +122,7 @@
           "zoom": 16,
           "append": "tag:access!=private",
           "taginfo": "leisure=swimming_pool, access!=private",
-          "sign": "<img data-src='maki:swimming?size=11'>"
+          "sign": "<i style='font-size: 80%; color: black;' class='fas fa-swimming-pool'></i>"
         },
         "leisure=sauna": {
           "zoom": 16,

From 697b102cdef93f87ffa4ea8f2ec6f89786a52c3a Mon Sep 17 00:00:00 2001
From: Cybereric <Cybereric@users.noreply.github.com>
Date: Mon, 26 Nov 2018 18:51:26 +0100
Subject: [PATCH 23/32] Categories FR update

I don't understand very well the difference between "Electric Power" and "Power Routes"  I have electric lines in the two categories.
I don't find the "Christmas" category
---
 lang/fr.json | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/lang/fr.json b/lang/fr.json
index fb9798c..1c4056d 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -7,9 +7,9 @@
     "category:car_amenities": "Équipements auto",
     "category:car_furniture": "Fournitures automobiles",
     "category:car_maxspeed": "Limites de vitesse",
-    "category:car_routes": "",
+    "category:car_routes": "Itinéraires auto",
     "category:children": "Équipements pour enfants",
-    "category:coal": "",
+    "category:coal": "Charbon",
     "category:communication": "Communication",
     "category:construction": "Constructions",
     "category:craft": "Artisanat",
@@ -18,9 +18,9 @@
     "category:cycle_amenities": "Équipements vélo",
     "category:cycle_routes": "Itinéraires vélo",
     "category:education": "Éducation",
-    "category:electric_power": "Énergie",
+    "category:electric_power": "Énergie électrique",
     "category:emergency": "Services d'urgence",
-    "category:energy": "",
+    "category:energy": "Énergie",
     "category:financial": "Finance",
     "category:gastro": "Restauration",
     "category:gastro-smoking": "Restauration sans tabac",
@@ -32,11 +32,11 @@
     "category:internet": "Internet",
     "category:leisure": "Loisirs",
     "category:leisure_sport_shopping": "Loisirs",
-    "category:memorial": "",
+    "category:memorial": "Mémoriaux",
     "category:military": "Militaire",
     "category:mtb-routes": "Itinéraires de VTT",
     "category:natural": "Éléments naturels",
-    "category:oil_gas": "",
+    "category:oil_gas": "Pétrole et gaz naturel",
     "category:other": "Autres",
     "category:outdoor": "Activités de plein air",
     "category:phone": "Téléphone",
@@ -45,7 +45,7 @@
     "category:playgrounds": "Jeux pour enfants",
     "category:post": "",
     "category:power_routes": "",
-    "category:pt": "",
+    "category:pt": "Carte des transports publics",
     "category:pt:routes": "Lignes",
     "category:pt:stops": "Arrêts/Stops, Stations",
     "category:pt_amenities": "Équipements",
@@ -56,7 +56,7 @@
     "category:railway-maxspeed": "Limites de vitesse",
     "category:railway-routes": "Lignes ferroviaires",
     "category:religion": "Religion",
-    "category:renewables": "",
+    "category:renewables": "Énergies renouvelables",
     "category:residential": "Zones résidentielles",
     "category:resources": "Extraction des ressources",
     "category:services": "Services",

From 55ad8a7c0e778a582bbf55ee13de63c3b284e4eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 26 Nov 2018 21:06:54 +0100
Subject: [PATCH 24/32] office: new category

---
 index.json  |  3 +++
 office.json | 13 +++++++++++++
 2 files changed, 16 insertions(+)
 create mode 100644 office.json

diff --git a/index.json b/index.json
index aebc34b..bf2c076 100644
--- a/index.json
+++ b/index.json
@@ -89,6 +89,9 @@
                 {
                     "id": "communication"
                 },
+                {
+                    "id": "office"
+                },
                 {
                     "id": "financial"
                 },
diff --git a/office.json b/office.json
new file mode 100644
index 0000000..4ae627a
--- /dev/null
+++ b/office.json
@@ -0,0 +1,13 @@
+{
+    "type": "overpass",
+    "name": {
+        "en": "Offices",
+        "de": "Büros"
+    },
+    "query": {
+        "14": "nwr[office]"
+    },
+    "feature": {
+        "description": "{{ tagTrans('office', tags.office) }}"
+    }
+}

From bff3d77ad7c72c6d7e0f0e57874b08821f72f36e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 26 Nov 2018 21:11:21 +0100
Subject: [PATCH 25/32] office: distingish office=government, government=*

---
 office.json | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/office.json b/office.json
index 4ae627a..5675114 100644
--- a/office.json
+++ b/office.json
@@ -8,6 +8,9 @@
         "14": "nwr[office]"
     },
     "feature": {
-        "description": "{{ tagTrans('office', tags.office) }}"
+        "description": [
+            "{{ tagTrans('office', tags.office) }}",
+            "{% if tags.office == 'government' and tags.government %}({{ tagTrans('government', tags.government) }}){% endif %}"
+        ]
     }
 }

From c62f8f6e79ac33ef5bb85c0131907cb2b2a57e08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 27 Nov 2018 22:21:26 +0100
Subject: [PATCH 26/32] Add new categories to language files

---
 lang/ast.json      | 4 +++-
 lang/ca.json       | 4 +++-
 lang/cs.json       | 4 +++-
 lang/de.json       | 4 +++-
 lang/el.json       | 4 +++-
 lang/en.json       | 4 +++-
 lang/es.json       | 4 +++-
 lang/et.json       | 4 +++-
 lang/fr.json       | 4 +++-
 lang/hu.json       | 4 +++-
 lang/it.json       | 4 +++-
 lang/ja.json       | 4 +++-
 lang/nl.json       | 4 +++-
 lang/pl.json       | 4 +++-
 lang/pt-br.json    | 4 +++-
 lang/pt.json       | 4 +++-
 lang/ro.json       | 4 +++-
 lang/ru.json       | 4 +++-
 lang/template.json | 4 +++-
 lang/uk.json       | 4 +++-
 20 files changed, 60 insertions(+), 20 deletions(-)

diff --git a/lang/ast.json b/lang/ast.json
index 0f66d31..5fa37e6 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -63,6 +63,7 @@
     "category:shop": "Compres",
     "category:special": "",
     "category:sport": "Deportes",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismu",
     "category:tourism_services": "Turismu",
     "category:transport": "Tresporte",
@@ -75,5 +76,6 @@
     "category:waste": "Basures",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Fábriques"
+    "category:works": "Fábriques",
+    "category:xmas": ""
 }
diff --git a/lang/ca.json b/lang/ca.json
index 3fd3e7d..96fa71a 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -63,6 +63,7 @@
     "category:shop": "",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "",
     "category:tourism_services": "",
     "category:transport": "",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/cs.json b/lang/cs.json
index b6e8cfe..f0b3706 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -63,6 +63,7 @@
     "category:shop": "Obchody",
     "category:special": "",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turistika",
     "category:tourism_services": "Turistika",
     "category:transport": "Doprava",
@@ -75,5 +76,6 @@
     "category:waste": "Nakládání s odpady",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Továrny"
+    "category:works": "Továrny",
+    "category:xmas": ""
 }
diff --git a/lang/de.json b/lang/de.json
index 467fec3..4ad4de7 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -63,6 +63,7 @@
     "category:shop": "Einkauf",
     "category:special": "Spezial",
     "category:sport": "Sport",
+    "category:swimming_bathing": "Schwimmen und Baden",
     "category:tourism_attractions": "Tourismus",
     "category:tourism_services": "Tourismus",
     "category:transport": "Transport",
@@ -75,5 +76,6 @@
     "category:waste": "Entsorgung",
     "category:water": "Gewässer",
     "category:wikipedia": "Wikipedia",
-    "category:works": "Fabriken"
+    "category:works": "Fabriken",
+    "category:xmas": ""
 }
diff --git a/lang/el.json b/lang/el.json
index ff8f645..0e3e53c 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -63,6 +63,7 @@
     "category:shop": "Αγορές",
     "category:special": "",
     "category:sport": "Άθληση",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Τουρισμός",
     "category:tourism_services": "Τουρισμός",
     "category:transport": "Μεταφορές",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/en.json b/lang/en.json
index 6966220..5d3ee21 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -63,6 +63,7 @@
     "category:shop": "Shopping",
     "category:special": "Special",
     "category:sport": "Sport",
+    "category:swimming_bathing": "Swimming and bathing",
     "category:tourism_attractions": "Tourism",
     "category:tourism_services": "Tourism",
     "category:transport": "Transportation",
@@ -75,5 +76,6 @@
     "category:waste": "Disposal",
     "category:water": "Waterbodies",
     "category:wikipedia": "Wikipedia",
-    "category:works": "Works"
+    "category:works": "Works",
+    "category:xmas": "Christmas"
 }
diff --git a/lang/es.json b/lang/es.json
index 4af85d5..3e5f459 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -63,6 +63,7 @@
     "category:shop": "",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "",
     "category:tourism_services": "",
     "category:transport": "",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/et.json b/lang/et.json
index 9bbb3c5..c36a0a5 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -63,6 +63,7 @@
     "category:shop": "Ostmine",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport": "Transport",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/fr.json b/lang/fr.json
index fb9798c..48701a7 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -63,6 +63,7 @@
     "category:shop": "Magasins/Boutiques",
     "category:special": "Catégories spéciales",
     "category:sport": "Sports",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Tourisme",
     "category:tourism_services": "Tourisme",
     "category:transport": "Transports",
@@ -75,5 +76,6 @@
     "category:waste": "Déchets/Recyclage",
     "category:water": "Hydrographie",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Zones industrielles"
+    "category:works": "Zones industrielles",
+    "category:xmas": ""
 }
diff --git a/lang/hu.json b/lang/hu.json
index 7239711..fbc2661 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -63,6 +63,7 @@
     "category:shop": "Vásárlás",
     "category:special": "Speciális",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Látnivalók",
     "category:tourism_services": "Turisztikai szolgáltatások",
     "category:transport": "Közlekedés",
@@ -75,5 +76,6 @@
     "category:waste": "Hulladék",
     "category:water": "Vizek",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Üzemek"
+    "category:works": "Üzemek",
+    "category:xmas": ""
 }
diff --git a/lang/it.json b/lang/it.json
index 69663bb..1151e1e 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -63,6 +63,7 @@
     "category:shop": "Acquisti",
     "category:special": "",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
     "category:transport": "Trasporti",
@@ -75,5 +76,6 @@
     "category:waste": "Smaltimento",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Fabbriche"
+    "category:works": "Fabbriche",
+    "category:xmas": ""
 }
diff --git a/lang/ja.json b/lang/ja.json
index 883490c..ffe1bee 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -63,6 +63,7 @@
     "category:shop": "ショッピング",
     "category:special": "",
     "category:sport": "スポーツ",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "観光",
     "category:tourism_services": "観光",
     "category:transport": "輸送",
@@ -75,5 +76,6 @@
     "category:waste": "処理場",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "工場"
+    "category:works": "工場",
+    "category:xmas": ""
 }
diff --git a/lang/nl.json b/lang/nl.json
index c1902e3..bbe5dba 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -63,6 +63,7 @@
     "category:shop": "Winkelen",
     "category:special": "",
     "category:sport": "Sport",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Toerisme",
     "category:tourism_services": "Toerisme",
     "category:transport": "Vervoer",
@@ -75,5 +76,6 @@
     "category:waste": "Afvalverwijdering",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Fabrieken"
+    "category:works": "Fabrieken",
+    "category:xmas": ""
 }
diff --git a/lang/pl.json b/lang/pl.json
index bf6258e..9fbc760 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -63,6 +63,7 @@
     "category:shop": "Zakupy",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turystyka",
     "category:tourism_services": "Turystyka",
     "category:transport": "Transport",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/pt-br.json b/lang/pt-br.json
index c71ed2b..6234ebc 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -63,6 +63,7 @@
     "category:shop": "Compras",
     "category:special": "Especial",
     "category:sport": "Esportes",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Serviços de turismo",
     "category:transport": "Mobilidade",
@@ -75,5 +76,6 @@
     "category:waste": "Lixo",
     "category:water": "Hidrografia",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Fábricas"
+    "category:works": "Fábricas",
+    "category:xmas": ""
 }
diff --git a/lang/pt.json b/lang/pt.json
index 9a16662..6ab52c2 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -63,6 +63,7 @@
     "category:shop": "Compras",
     "category:special": "Especial",
     "category:sport": "Desporto",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turismo",
     "category:tourism_services": "Turismo",
     "category:transport": "Transportes",
@@ -75,5 +76,6 @@
     "category:waste": "Lixo",
     "category:water": "Massas de água",
     "category:wikipedia": "Wikipédia",
-    "category:works": "Fábricas"
+    "category:works": "Fábricas",
+    "category:xmas": ""
 }
diff --git a/lang/ro.json b/lang/ro.json
index 4649196..96f9150 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -63,6 +63,7 @@
     "category:shop": "Cumpărături",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Turism",
     "category:tourism_services": "Turism",
     "category:transport": "Transport",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/ru.json b/lang/ru.json
index e4f125f..55da1a6 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -63,6 +63,7 @@
     "category:shop": "Покупки",
     "category:special": "",
     "category:sport": "Спорт",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport": "Транспорт",
@@ -75,5 +76,6 @@
     "category:waste": "Переработка отходов",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": "Промышленность"
+    "category:works": "Промышленность",
+    "category:xmas": ""
 }
diff --git a/lang/template.json b/lang/template.json
index fa309a5..a90e42e 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -63,6 +63,7 @@
     "category:shop": "",
     "category:special": "",
     "category:sport": "",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "",
     "category:tourism_services": "",
     "category:transport": "",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }
diff --git a/lang/uk.json b/lang/uk.json
index 96d8e03..d0d6c6c 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -63,6 +63,7 @@
     "category:shop": "Торгівля",
     "category:special": "",
     "category:sport": "Спорт. Інше.",
+    "category:swimming_bathing": "",
     "category:tourism_attractions": "Туризм",
     "category:tourism_services": "Туризм",
     "category:transport": "Транспорт",
@@ -75,5 +76,6 @@
     "category:waste": "",
     "category:water": "",
     "category:wikipedia": "",
-    "category:works": ""
+    "category:works": "",
+    "category:xmas": ""
 }

From 7f7b64af10e6d3759522c52531e43273ab76e4c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 28 Nov 2018 21:21:46 +0100
Subject: [PATCH 27/32] Copy french translations to category titles

---
 car_routes.json       | 1 +
 coal.json             | 1 +
 electric_power.json   | 2 +-
 index.json            | 3 ++-
 memorial.json         | 1 +
 oil_gas.json          | 1 +
 pt.json               | 1 +
 renewables.json       | 1 +
 swimming_bathing.json | 4 ++--
 9 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/car_routes.json b/car_routes.json
index a31247e..d1c7734 100644
--- a/car_routes.json
+++ b/car_routes.json
@@ -2,6 +2,7 @@
     "type": "overpass",
     "name": {
         "en": "Car routes",
+        "fr": "Itinéraires auto",
         "hu": "Főútvonalak",
         "pt-br": "Rotas rodoviárias"
     },
diff --git a/coal.json b/coal.json
index 325af1f..d084cae 100644
--- a/coal.json
+++ b/coal.json
@@ -3,6 +3,7 @@
     "name": {
         "de": "Kohle",
         "en": "Coal",
+        "fr": "Charbon",
         "pt-br": "Carvão"
     },
     "query": {
diff --git a/electric_power.json b/electric_power.json
index d77bbec..7a54e91 100644
--- a/electric_power.json
+++ b/electric_power.json
@@ -6,7 +6,7 @@
         "de": "Elektrischer Strom",
         "en": "Electric Power",
         "et": "Elekter",
-        "fr": "Énergie",
+        "fr": "Énergie électrique",
         "hu": "Áramellátás",
         "it": "Energia",
         "ja": "電力",
diff --git a/index.json b/index.json
index aebc34b..12a2451 100644
--- a/index.json
+++ b/index.json
@@ -258,7 +258,8 @@
                     "name": {
                         "en": "Energy",
                         "de": "Energie",
-                        "pt-br": "Energia"
+                        "pt-br": "Energia",
+                        "fr": "Énergie"
                     },
                     "subCategories": [
                         {
diff --git a/memorial.json b/memorial.json
index 50d2bc1..4095a13 100644
--- a/memorial.json
+++ b/memorial.json
@@ -3,6 +3,7 @@
     "name": {
         "de": "Denkmäler",
         "en": "Memorials",
+        "fr": "Mémoriaux",
         "pt-br": "Memoriais"
     },
     "query": {
diff --git a/oil_gas.json b/oil_gas.json
index 5c8fbdd..d74a1df 100644
--- a/oil_gas.json
+++ b/oil_gas.json
@@ -3,6 +3,7 @@
     "name": {
         "de": "Erdöl und Erdgas",
         "en": "Petroleum and natural gas",
+        "fr": "Pétrole et gaz naturel",
         "pt-br": "Petróleo e gás"
     },
     "query": {
diff --git a/pt.json b/pt.json
index a3d6eea..7ade18d 100644
--- a/pt.json
+++ b/pt.json
@@ -3,6 +3,7 @@
     "name": {
         "de": "ÖV Karte",
         "en": "Public transport map",
+        "fr": "Carte des transports publics",
         "hu": "Tömegközlekedési térkép",
         "pt-br": "Mapa de transporte público"
     },
diff --git a/renewables.json b/renewables.json
index f2eb805..6c32493 100644
--- a/renewables.json
+++ b/renewables.json
@@ -3,6 +3,7 @@
     "name": {
         "de": "Erneuerbare Energien",
         "en": "Renewables",
+        "fr": "Énergies renouvelables",
         "pt-br": "Renováveis"
     },
     "query": {
diff --git a/swimming_bathing.json b/swimming_bathing.json
index 5225d4b..00bcce6 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -1,8 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Swimming and bathing",
-        "de": "Schwimmen und Baden"
+        "de": "Schwimmen und Baden",
+        "en": "Swimming and bathing"
     },
     "query": {
         "13": [

From 81db894f32874f15a00c8f414b219452856a1c59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 28 Nov 2018 21:21:59 +0100
Subject: [PATCH 28/32] swimming_bathing: fix indentation

---
 swimming_bathing.json | 56 +++++++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/swimming_bathing.json b/swimming_bathing.json
index 00bcce6..84dc48e 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -82,52 +82,52 @@
     ],
     "const": {
         "leisure=swimming_area": {
-          "zoom": 13,
-          "sign": "<img data-src='maki:swimming?size=11&fill=blue'>"
+            "zoom": 13,
+            "sign": "<img data-src='maki:swimming?size=11&fill=blue'>"
         },
         "leisure=water_park": {
-          "zoom": 13,
-          "sign": "<img data-src='maki:swimming'>"
+            "zoom": 13,
+            "sign": "<img data-src='maki:swimming'>"
         },
         "leisure=beach_resort": {
-          "zoom": 13,
-          "sign": "<img data-src='temaki:beach'>"
+            "zoom": 13,
+            "sign": "<img data-src='temaki:beach'>"
         },
         "leisure=sports_centre": {
-          "zoom": 13,
-          "append": "tag:sport=swimming",
-          "taginfo": "leisure=swimming_area, sport=swimming",
-          "sign": "<img data-src='maki:basketball'>"
+            "zoom": 13,
+            "append": "tag:sport=swimming",
+            "taginfo": "leisure=swimming_area, sport=swimming",
+            "sign": "<img data-src='maki:basketball'>"
         },
         "natural=water": {
-          "zoom": 13,
-          "append": "tag:sport=swimming",
-          "taginfo": "natural=water, sport=swimming",
-          "sign": "<i style='color: blue' class=\"fas fa-water\"></i>"
+            "zoom": 13,
+            "append": "tag:sport=swimming",
+            "taginfo": "natural=water, sport=swimming",
+            "sign": "<i style='color: blue' class=\"fas fa-water\"></i>"
         },
         "natural=beach": {
-          "zoom": 13,
-          "sign": "<img data-src='temaki:beach?fill=green'>"
+            "zoom": 13,
+            "sign": "<img data-src='temaki:beach?fill=green'>"
         },
         "amenity=public_bath": {
-          "zoom": 13,
-          "taginfo": "amenity=public_bath, bath:type=*",
-          "sign": "<i class=\"fa fa-bath\" style='color: black' aria-hidden=\"true\"></i>"
+            "zoom": 13,
+            "taginfo": "amenity=public_bath, bath:type=*",
+            "sign": "<i class=\"fa fa-bath\" style='color: black' aria-hidden=\"true\"></i>"
         },
         "tourism=spa_resort": {
-          "zoom": 13,
-          "sign": "<i class=\"fa fa-bath\" style='color: blue' aria-hidden=\"true\"></i>"
+            "zoom": 13,
+            "sign": "<i class=\"fa fa-bath\" style='color: blue' aria-hidden=\"true\"></i>"
         },
         "leisure=swimming_pool": {
-          "zoom": 16,
-          "append": "tag:access!=private",
-          "taginfo": "leisure=swimming_pool, access!=private",
-          "sign": "<i style='font-size: 80%; color: black;' class='fas fa-swimming-pool'></i>"
+            "zoom": 16,
+            "append": "tag:access!=private",
+            "taginfo": "leisure=swimming_pool, access!=private",
+            "sign": "<i style='font-size: 80%; color: black;' class='fas fa-swimming-pool'></i>"
         },
         "leisure=sauna": {
-          "zoom": 16,
-          "taginfo": "leisure=sauna, sauna:type=*",
-          "sign": "<i class=\"fa fa-thermometer-full\" aria-hidden=\"true\"></i>"
+            "zoom": 16,
+            "taginfo": "leisure=sauna, sauna:type=*",
+            "sign": "<i class=\"fa fa-thermometer-full\" aria-hidden=\"true\"></i>"
         }
     }
 }

From 24b3e32fc761c65b0c3cb64483ea7177ed6a2704 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 28 Nov 2018 21:59:12 +0100
Subject: [PATCH 29/32] office: icons for common office types (+ german
 translation)

---
 office.json | 32 ++++++++++++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/office.json b/office.json
index 5675114..75bd828 100644
--- a/office.json
+++ b/office.json
@@ -2,7 +2,7 @@
     "type": "overpass",
     "name": {
         "en": "Offices",
-        "de": "Büros"
+        "de": "Ämter, Dienst- und Geschäftsstellen"
     },
     "query": {
         "14": "nwr[office]"
@@ -11,6 +11,34 @@
         "description": [
             "{{ tagTrans('office', tags.office) }}",
             "{% if tags.office == 'government' and tags.government %}({{ tagTrans('government', tags.government) }}){% endif %}"
-        ]
+        ],
+        "markerSign": "{{ const[tags.office]|raw }}"
+    },
+    "const": {
+        "government": "<i class='fas fa-landmark'></i>",
+        "company": "<i class='fas fa-building'></i>",
+        "estate_agent": "<i class='fas fa-home'></i>",
+        "insurance": "<i class='fas fa-file-signature'></i>",
+        "lawyer": "<i class='fas fa-gavel'></i>",
+        "educational_institution": "<i class='fas fa-school'></i>",
+        "administrative": "<i class='fas fa-landmark'></i>",
+        "telecommunication": "<i class='fas fa-phone'></i>",
+        "ngo": "<i class='fas fa-people-carry'></i>",
+        "quango": "<i class='fas fa-people-carry'></i>",
+        "association": "<i class='fas fa-people-carry'></i>",
+        "it": "<i class='fas fa-desktop'></i>",
+        "accountant": "<i class='fas fa-money-bill-alt'></i>",
+        "tax_advisor": "<i class='fas fa-money-bill-alt'></i>",
+        "employment_agency": "<i class='fas fa-user'></i>",
+        "research": "<i class='fas fa-flask'></i>",
+        "religion": "<i class='fas fa-pray'></i>",
+        "architect": "<i class='fas fa-torii-gate'></i>",
+        "financial": "<i class='fas fa-money-bill'></i>",
+        "newspaper": "<i class='fas fa-newspaper'></i>",
+        "political_party": "<i class='fas fa-flag'></i>",
+        "advertising_agency": "<i class='fas fa-ad'></i>",
+        "therapist": "<i class='fas fa-couch'></i>",
+        "travel_agent": "<i class='fas fa-plane-departure'></i>",
+        "publisher": "<i class='fas fa-book'></i>"
     }
 }

From 81fdc3ea6a407e249dea484cb3b2ebbb7b5858bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 28 Nov 2018 22:00:21 +0100
Subject: [PATCH 30/32] Make 'office' translateable

---
 lang/ast.json      | 1 +
 lang/ca.json       | 1 +
 lang/cs.json       | 1 +
 lang/de.json       | 1 +
 lang/el.json       | 1 +
 lang/en.json       | 1 +
 lang/es.json       | 1 +
 lang/et.json       | 1 +
 lang/fr.json       | 1 +
 lang/hu.json       | 1 +
 lang/it.json       | 1 +
 lang/ja.json       | 1 +
 lang/nl.json       | 1 +
 lang/pl.json       | 1 +
 lang/pt-br.json    | 1 +
 lang/pt.json       | 1 +
 lang/ro.json       | 1 +
 lang/ru.json       | 1 +
 lang/template.json | 1 +
 lang/uk.json       | 1 +
 20 files changed, 20 insertions(+)

diff --git a/lang/ast.json b/lang/ast.json
index 5fa37e6..5439d69 100644
--- a/lang/ast.json
+++ b/lang/ast.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "",
     "category:natural": "Formaciones naturales",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Otres",
     "category:outdoor": "",
diff --git a/lang/ca.json b/lang/ca.json
index 96fa71a..2b4a38d 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
diff --git a/lang/cs.json b/lang/cs.json
index f0b3706..ac91fbc 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -36,6 +36,7 @@
     "category:military": "Vojenské",
     "category:mtb-routes": "",
     "category:natural": "Přírodní úkazy",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Jiné",
     "category:outdoor": "",
diff --git a/lang/de.json b/lang/de.json
index 4ad4de7..8056518 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -36,6 +36,7 @@
     "category:military": "Militär",
     "category:mtb-routes": "",
     "category:natural": "Geographische Objekte",
+    "category:office": "Ämter, Dienst- und Geschäftsstellen",
     "category:oil_gas": "Erdöl und Erdgas",
     "category:other": "Andere",
     "category:outdoor": "Freiluftaktivitäten",
diff --git a/lang/el.json b/lang/el.json
index 0e3e53c..6daf1ec 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -36,6 +36,7 @@
     "category:military": "Στρατιωτικό",
     "category:mtb-routes": "",
     "category:natural": "Φυσικοί Σχηματισμοί",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
diff --git a/lang/en.json b/lang/en.json
index 5d3ee21..8d7fa63 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -36,6 +36,7 @@
     "category:military": "Military",
     "category:mtb-routes": "Mountain bike routes",
     "category:natural": "Natural Formations",
+    "category:office": "Offices",
     "category:oil_gas": "Petroleum and natural gas",
     "category:other": "Other",
     "category:outdoor": "Outdoor activities",
diff --git a/lang/es.json b/lang/es.json
index 3e5f459..75245e1 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
diff --git a/lang/et.json b/lang/et.json
index c36a0a5..e8985de 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Ülejäänud",
     "category:outdoor": "",
diff --git a/lang/fr.json b/lang/fr.json
index 139faf7..f5752b1 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -36,6 +36,7 @@
     "category:military": "Militaire",
     "category:mtb-routes": "Itinéraires de VTT",
     "category:natural": "Éléments naturels",
+    "category:office": "",
     "category:oil_gas": "Pétrole et gaz naturel",
     "category:other": "Autres",
     "category:outdoor": "Activités de plein air",
diff --git a/lang/hu.json b/lang/hu.json
index fbc2661..b188f7a 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -36,6 +36,7 @@
     "category:military": "Katonai objektumok",
     "category:mtb-routes": "Hegyikerékpáros útvonalak",
     "category:natural": "Természeti képződmények",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Egyéb",
     "category:outdoor": "Szabadtéri tevékenységek",
diff --git a/lang/it.json b/lang/it.json
index 1151e1e..75dff96 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -36,6 +36,7 @@
     "category:military": "Militare",
     "category:mtb-routes": "",
     "category:natural": "Natura",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Altri",
     "category:outdoor": "",
diff --git a/lang/ja.json b/lang/ja.json
index ffe1bee..01be546 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -36,6 +36,7 @@
     "category:military": "軍事",
     "category:mtb-routes": "",
     "category:natural": "自然地層",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "その他",
     "category:outdoor": "",
diff --git a/lang/nl.json b/lang/nl.json
index bbe5dba..39911ad 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -36,6 +36,7 @@
     "category:military": "Militair",
     "category:mtb-routes": "",
     "category:natural": "Natuurlijke Formaties",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Andere",
     "category:outdoor": "",
diff --git a/lang/pl.json b/lang/pl.json
index 9fbc760..b470971 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index 6234ebc..04af446 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "Rotas de mountain bike",
     "category:natural": "Formações naturais",
+    "category:office": "",
     "category:oil_gas": "Petróleo e gás",
     "category:other": "Outros",
     "category:outdoor": "Atividades ao ar livre",
diff --git a/lang/pt.json b/lang/pt.json
index 6ab52c2..ac5a8aa 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "",
     "category:natural": "Formações naturais",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Outros",
     "category:outdoor": "",
diff --git a/lang/ro.json b/lang/ro.json
index 96f9150..857f9e0 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -36,6 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Altele",
     "category:outdoor": "",
diff --git a/lang/ru.json b/lang/ru.json
index 55da1a6..0d2c78d 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -36,6 +36,7 @@
     "category:military": "Вооружённые силы",
     "category:mtb-routes": "",
     "category:natural": "Природные образования",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Прочее",
     "category:outdoor": "",
diff --git a/lang/template.json b/lang/template.json
index a90e42e..135ff39 100644
--- a/lang/template.json
+++ b/lang/template.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "",
     "category:outdoor": "",
diff --git a/lang/uk.json b/lang/uk.json
index d0d6c6c..cb3d073 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -36,6 +36,7 @@
     "category:military": "",
     "category:mtb-routes": "",
     "category:natural": "Природне середовище",
+    "category:office": "",
     "category:oil_gas": "",
     "category:other": "Інше",
     "category:outdoor": "",

From e081492023ef50b8008e8470d95830509c51bf66 Mon Sep 17 00:00:00 2001
From: Cybereric <Cybereric@users.noreply.github.com>
Date: Thu, 29 Nov 2018 02:08:42 +0100
Subject: [PATCH 31/32] Update fr.json

---
 lang/fr.json | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/lang/fr.json b/lang/fr.json
index f5752b1..5902679 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -18,7 +18,7 @@
     "category:cycle_amenities": "Équipements vélo",
     "category:cycle_routes": "Itinéraires vélo",
     "category:education": "Éducation",
-    "category:electric_power": "Énergie électrique",
+    "category:electric_power": "Production/transport électrique",
     "category:emergency": "Services d'urgence",
     "category:energy": "Énergie",
     "category:financial": "Finance",
@@ -36,7 +36,7 @@
     "category:military": "Militaire",
     "category:mtb-routes": "Itinéraires de VTT",
     "category:natural": "Éléments naturels",
-    "category:office": "",
+    "category:office": "Bureaux",
     "category:oil_gas": "Pétrole et gaz naturel",
     "category:other": "Autres",
     "category:outdoor": "Activités de plein air",
@@ -45,7 +45,7 @@
     "category:places_geo": "Lieux",
     "category:playgrounds": "Jeux pour enfants",
     "category:post": "",
-    "category:power_routes": "",
+    "category:power_routes": "Réseaux électriques",
     "category:pt": "Carte des transports publics",
     "category:pt:routes": "Lignes",
     "category:pt:stops": "Arrêts/Stops, Stations",
@@ -64,7 +64,7 @@
     "category:shop": "Magasins/Boutiques",
     "category:special": "Catégories spéciales",
     "category:sport": "Sports",
-    "category:swimming_bathing": "",
+    "category:swimming_bathing": "Natation/Baignade/Bains",
     "category:tourism_attractions": "Tourisme",
     "category:tourism_services": "Tourisme",
     "category:transport": "Transports",
@@ -78,5 +78,5 @@
     "category:water": "Hydrographie",
     "category:wikipedia": "Wikipédia",
     "category:works": "Zones industrielles",
-    "category:xmas": ""
+    "category:xmas": "Noël"
 }

From 2bcf2bd9174e72ceaae4be3645fa3301c02448ed 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 13:50:53 +0100
Subject: [PATCH 32/32] Import fr translations to categories

---
 electric_power.json   | 2 +-
 office.json           | 3 ++-
 power_routes.json     | 3 ++-
 swimming_bathing.json | 3 ++-
 xmas.json             | 3 ++-
 5 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/electric_power.json b/electric_power.json
index 7a54e91..e2cee97 100644
--- a/electric_power.json
+++ b/electric_power.json
@@ -6,7 +6,7 @@
         "de": "Elektrischer Strom",
         "en": "Electric Power",
         "et": "Elekter",
-        "fr": "Énergie électrique",
+        "fr": "Production/transport électrique",
         "hu": "Áramellátás",
         "it": "Energia",
         "ja": "電力",
diff --git a/office.json b/office.json
index 75bd828..c66872f 100644
--- a/office.json
+++ b/office.json
@@ -1,8 +1,9 @@
 {
     "type": "overpass",
     "name": {
+        "de": "Ämter, Dienst- und Geschäftsstellen",
         "en": "Offices",
-        "de": "Ämter, Dienst- und Geschäftsstellen"
+        "fr": "Bureaux"
     },
     "query": {
         "14": "nwr[office]"
diff --git a/power_routes.json b/power_routes.json
index dd3c6f4..4405a20 100644
--- a/power_routes.json
+++ b/power_routes.json
@@ -1,7 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Power routes"
+        "en": "Power routes",
+        "fr": "Réseaux électriques"
     },
     "query": {
         "10": "relation[type=route][route=power]"
diff --git a/swimming_bathing.json b/swimming_bathing.json
index 84dc48e..eccb601 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "de": "Schwimmen und Baden",
-        "en": "Swimming and bathing"
+        "en": "Swimming and bathing",
+        "fr": "Natation/Baignade/Bains"
     },
     "query": {
         "13": [
diff --git a/xmas.json b/xmas.json
index 91adbfc..ab72802 100644
--- a/xmas.json
+++ b/xmas.json
@@ -1,7 +1,8 @@
 {
     "type": "overpass",
     "name": {
-        "en": "Christmas"
+        "en": "Christmas",
+        "fr": "Noël"
     },
     "query": {
         "14": [