From 4340a38dd2a50fc47fe7149f0153266bd0611394 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Mon, 3 Dec 2018 21:49:00 +0100
Subject: [PATCH 01/13] xmas: show features from z13

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

diff --git a/xmas.json b/xmas.json
index ab72802..89049a8 100644
--- a/xmas.json
+++ b/xmas.json
@@ -5,7 +5,7 @@
         "fr": "Noël"
     },
     "query": {
-        "14": [
+        "13": [
             "(",
             "node[\"xmas:feature\"];",
             "way[\"xmas:feature\"];",

From 059abb67d7bcc89cc3fdfd48295c46812d4aef0c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Mon, 3 Dec 2018 22:11:57 +0100
Subject: [PATCH 02/13] xmas: show outdated features in red

---
 xmas.json | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/xmas.json b/xmas.json
index 89049a8..5f698b9 100644
--- a/xmas.json
+++ b/xmas.json
@@ -14,9 +14,17 @@
         ]
     },
     "feature": {
+        "pre": [
+            "{% set isCurrent = meta.timestamp > now|date_modify('-1 month')|date('Y') %}",
+            "{% set bgColor = isCurrent ? '#f2756a' : 'red' %}"
+        ],
         "title": "{{ attribute(tags, \"xmas:name\")|default(trans(\"unnamed\")) }}",
         "description": "{{ tagTransList(\"xmas:feature\", attribute(tags, \"xmas:feature\")) }}",
         "body": [
+            "{% if not isCurrent %}",
+            "<div style='border: 1px solid red; padding: 2px; margin-bottom: 2px;'>Feature has not been updated for the current season! Please check and set the tag 'xmas:lastcheck' to the current date.</div>",
+            "{% endif %}",
+            "",
             "{% if attribute(tags, 'xmas:location') %}",
             "<li class='hasSymbol'>",
             "  <i class=\"fa fa-globe\" aria-hidden=\"true\"></i>",
@@ -60,7 +68,9 @@
         "markerSign": [
             "{{ attribute(const, attribute(tags, 'xmas:feature'))|raw }}",
             ""
-        ]
+        ],
+        "markerSymbol": "{{ markerPointer({\"fillColor\":bgColor})|raw }}",
+        "listMarkerSymbol": "{{ markerCircle({\"fillColor\":bgColor})|raw }}"
     },
     "const": {
         "market": "<img src='maki:commercial'>",

From 643a607701ead913a13bdab4a7b7664270f46646 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Mon, 3 Dec 2018 22:26:11 +0100
Subject: [PATCH 03/13] xmas: add outdated feature to map key;

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

diff --git a/xmas.json b/xmas.json
index 5f698b9..f285e1c 100644
--- a/xmas.json
+++ b/xmas.json
@@ -86,6 +86,10 @@
         "    <td>{{ tagTrans('xmas:feature', value) }}</td>",
         "  </tr>",
         "{% endfor %}",
+        "  <tr>",
+        "    <td>{{ markerCircle({\"fillColor\":\"red\"})|raw }}</td>",
+        "    <td>outdated feature</td>",
+        "  </tr>",
         "</table>"
     ]
 }

From 0cb5b80235679a4f1ea8e6d8a99c296d592f5a23 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Mon, 3 Dec 2018 22:36:48 +0100
Subject: [PATCH 04/13] xmas: lint, german title

---
 xmas.json | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/xmas.json b/xmas.json
index f285e1c..3bc95f9 100644
--- a/xmas.json
+++ b/xmas.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "en": "Christmas",
-        "fr": "Noël"
+        "fr": "Noël",
+        "de": "Weihnachten"
     },
     "query": {
         "13": [
@@ -65,18 +66,15 @@
             "</li>",
             "{% endif %}"
         ],
-        "markerSign": [
-            "{{ attribute(const, attribute(tags, 'xmas:feature'))|raw }}",
-            ""
-        ],
+        "markerSign": "{{ attribute(const, attribute(tags, 'xmas:feature'))|raw }}",
         "markerSymbol": "{{ markerPointer({\"fillColor\":bgColor})|raw }}",
         "listMarkerSymbol": "{{ markerCircle({\"fillColor\":bgColor})|raw }}"
     },
     "const": {
-        "market": "<img src='maki:commercial'>",
+        "market": "<img data-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'>"
+        "event": "<img data-src='maki:amusement-park'>"
     },
     "info": [
         "<table>",

From 27752f8cf7998aac33d3b36a58a1c502e6339015 Mon Sep 17 00:00:00 2001
From: Igor Eliezer <IgorEliezer@users.noreply.github.com>
Date: Wed, 5 Dec 2018 04:54:55 -0200
Subject: [PATCH 05/13] Update pt-br.json

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

diff --git a/lang/pt-br.json b/lang/pt-br.json
index 04af446..cbafd23 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -36,7 +36,7 @@
     "category:military": "Militar",
     "category:mtb-routes": "Rotas de mountain bike",
     "category:natural": "Formações naturais",
-    "category:office": "",
+    "category:office": "Escritórios e agências",
     "category:oil_gas": "Petróleo e gás",
     "category:other": "Outros",
     "category:outdoor": "Atividades ao ar livre",
@@ -45,12 +45,12 @@
     "category:places_geo": "Lugares",
     "category:playgrounds": "Parquinhos",
     "category:post": "Correios",
-    "category:power_routes": "",
+    "category:power_routes": "Rotas de energia",
     "category:pt": "Mapa de transporte público",
     "category:pt:routes": "Rotas",
     "category:pt:stops": "Paradas e estações",
     "category:pt_amenities": "Equipamentos",
-    "category:public": "Serviços públicos",
+    "category:public": "Utilidade pública",
     "category:railway": "Ferrovia",
     "category:railway-electrification": "Eletrificação ferroviária",
     "category:railway-infrastructure": "Infraestrutura ferroviária",
@@ -64,9 +64,9 @@
     "category:shop": "Compras",
     "category:special": "Especial",
     "category:sport": "Esportes",
-    "category:swimming_bathing": "",
+    "category:swimming_bathing": "Natação e banho",
     "category:tourism_attractions": "Turismo",
-    "category:tourism_services": "Serviços de turismo",
+    "category:tourism_services": "Serviços turísticos",
     "category:transport": "Mobilidade",
     "category:transport_alternative": "Transporte alternativo",
     "category:transport_car": "Tráfego individual",
@@ -78,5 +78,5 @@
     "category:water": "Hidrografia",
     "category:wikipedia": "Wikipédia",
     "category:works": "Fábricas",
-    "category:xmas": ""
+    "category:xmas": "Natal"
 }

From 3d9fa74b08a5da0baae309e1b9cdc53d2298cd00 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@cg.tuwien.ac.at>
Date: Wed, 5 Dec 2018 09:15:44 +0100
Subject: [PATCH 06/13] Import pt-br translations to categories

---
 office.json           | 3 ++-
 power_routes.json     | 3 ++-
 public.json           | 2 +-
 swimming_bathing.json | 3 ++-
 tourism_services.json | 2 +-
 xmas.json             | 3 ++-
 6 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/office.json b/office.json
index c66872f..b0166cd 100644
--- a/office.json
+++ b/office.json
@@ -3,7 +3,8 @@
     "name": {
         "de": "Ämter, Dienst- und Geschäftsstellen",
         "en": "Offices",
-        "fr": "Bureaux"
+        "fr": "Bureaux",
+        "pt-br": "Escritórios e agências"
     },
     "query": {
         "14": "nwr[office]"
diff --git a/power_routes.json b/power_routes.json
index 4405a20..3912272 100644
--- a/power_routes.json
+++ b/power_routes.json
@@ -2,7 +2,8 @@
     "type": "overpass",
     "name": {
         "en": "Power routes",
-        "fr": "Réseaux électriques"
+        "fr": "Réseaux électriques",
+        "pt-br": "Rotas de energia"
     },
     "query": {
         "10": "relation[type=route][route=power]"
diff --git a/public.json b/public.json
index cf28f62..4fad62c 100644
--- a/public.json
+++ b/public.json
@@ -13,7 +13,7 @@
         "ja": "公共サービス",
         "nl": "Openbare diensten",
         "pt": "Serviços públicos",
-        "pt-br": "Serviços públicos",
+        "pt-br": "Utilidade pública",
         "ro": "Servicii publice",
         "ru": "Общественные места",
         "uk": "Громадські місця"
diff --git a/swimming_bathing.json b/swimming_bathing.json
index eccb601..7b735be 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -3,7 +3,8 @@
     "name": {
         "de": "Schwimmen und Baden",
         "en": "Swimming and bathing",
-        "fr": "Natation/Baignade/Bains"
+        "fr": "Natation/Baignade/Bains",
+        "pt-br": "Natação e banho"
     },
     "query": {
         "13": [
diff --git a/tourism_services.json b/tourism_services.json
index 721916e..7a2182f 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -14,7 +14,7 @@
         "nl": "Toerisme",
         "pl": "Turystyka",
         "pt": "Turismo",
-        "pt-br": "Serviços de turismo",
+        "pt-br": "Serviços turísticos",
         "ro": "Turism",
         "ru": "Туризм",
         "uk": "Туризм"
diff --git a/xmas.json b/xmas.json
index 3bc95f9..d3ad2fd 100644
--- a/xmas.json
+++ b/xmas.json
@@ -1,9 +1,10 @@
 {
     "type": "overpass",
     "name": {
+        "de": "Weihnachten",
         "en": "Christmas",
         "fr": "Noël",
-        "de": "Weihnachten"
+        "pt-br": "Natal"
     },
     "query": {
         "13": [

From 3e0d9e69537379bb3b91e069b16396914fe7ce1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?=
 <plepe@noreply.openstreetbrowser.org>
Date: Thu, 6 Dec 2018 20:53:52 +0100
Subject: [PATCH 07/13] swimming_bathing: add amenity=shower (from z16)

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

diff --git a/swimming_bathing.json b/swimming_bathing.json
index 7b735be..645b613 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -25,7 +25,7 @@
             "nwr[natural~\"^(beach)\"];",
             "nwr[leisure~\"^(water_park|beach_resort)$\"];",
             "nwr[leisure=sports_centre][sport~\"^(|.*;)swimming(;.*|)$\"];",
-            "nwr[amenity=public_bath];",
+            "nwr[amenity~\"^(public_bath|shower)$\"];",
             "nwr[tourism=spa_resort];",
             "",
             "nwr[leisure=swimming_pool][access!=private];",
@@ -40,6 +40,9 @@
             "  {% set k = 'amenity' %}",
             "  {% set v = 'public_bath' %}",
             "  {% if attribute(tags, 'bath:type') %}{% set append = tagTrans('bath:type', attribute(tags, 'bath:type')) %}{% endif %}",
+            "{% elseif tags.amenity == 'shower' %}",
+            "  {% set k = 'amenity' %}",
+            "  {% set v = 'shower' %}",
             "{% elseif tags.tourism == 'spa_resort' %}",
             "  {% set k = 'tourism' %}",
             "  {% set v = tags.tourism %}",
@@ -130,6 +133,10 @@
             "zoom": 16,
             "taginfo": "leisure=sauna, sauna:type=*",
             "sign": "<i class=\"fa fa-thermometer-full\" aria-hidden=\"true\"></i>"
+        },
+        "amenity=shower": {
+            "zoom": 16,
+            "sign": "🚿 "
         }
     }
 }

From 313c608f1bee98510a843d5d2fcec487b1d0c2ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@cg.tuwien.ac.at>
Date: Wed, 2 Jan 2019 10:31:20 +0100
Subject: [PATCH 08/13] emergency: include highway=emergency_access_point

---
 emergency.json | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/emergency.json b/emergency.json
index 64ef840..7023b49 100644
--- a/emergency.json
+++ b/emergency.json
@@ -34,6 +34,7 @@
             "way[amenity~\"^(fire_station|hospital|police)$\"];",
             "relation[amenity~\"^(fire_station|hospital|police)$\"];",
             "node[emergency~\"^(phone)$\"];",
+            "node[highway=emergency_access_point];",
             ")"
         ]
     },
@@ -45,6 +46,9 @@
             "{% elseif tags.emergency %}",
             "{% set key = 'emergency' %}",
             "{% set value = tags.emergency %}",
+            "{% elseif tags.highway == 'emergency_access_point' %}",
+            "{% set key = 'highway' %}",
+            "{% set value = tags.highway %}",
             "{% endif %}",
             "{% set kv = key ~ \"=\" ~ value %}"
         ],
@@ -52,9 +56,11 @@
         "markerSign": [
             "{% set data = const[kv] %}",
             "{% if data %}",
-            "{{ data.sign }}",
+            "{{ data.sign|raw }}",
             "{% endif %}"
-        ]
+        ],
+        "markerSymbol": "{{ markerPointer({ fillColor: data.background|default('#f27f6a') })|raw }}",
+        "listMarkerSymbol": "{{ markerCircle({ fillColor: data.background|default('#f27f6a') })|raw }}"
     },
     "info": [
         "<table>",
@@ -84,6 +90,11 @@
         "emergency=phone": {
             "zoom": "13",
             "sign": "📞"
+        },
+        "highway=emergency_access_point": {
+            "zoom": "13",
+            "sign": "<img data-src='maki:hospital?fill=white'>",
+            "background": "#009262"
         }
     }
 }

From 778ef88445e85ccf767b60604209c2a2982c49d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@cg.tuwien.ac.at>
Date: Wed, 2 Jan 2019 10:38:18 +0100
Subject: [PATCH 09/13] emergency: fix info

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

diff --git a/emergency.json b/emergency.json
index 7023b49..73b606d 100644
--- a/emergency.json
+++ b/emergency.json
@@ -67,7 +67,7 @@
         "{% for value, data in const %}",
         "{% if data.zoom <= map.zoom %}",
         "  <tr>",
-        "    <td>{{ markerCircle({})|raw }}<div class='sign'>{{ data.sign }}</div></td>",
+        "    <td>{{ markerCircle({ fillColor: data.background|default('#f27f6a') })|raw }}<div class='sign'>{{ data.sign|raw }}</div></td>",
         "    <td>{{ tagTrans(value|split('=')[0], value|split('=')[1]) }}</td>",
         "  </tr>",
         "{% endif %}",

From 4b941f294420f59de2e819f155762ca6db30de90 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 4 Jan 2019 20:29:40 +0100
Subject: [PATCH 10/13] car_maxspeed: handle maxspeed:forward and
 maxspeed:backward

---
 car_maxspeed.json | 81 +++++++++++++++++++++++++++++++++++++----------
 1 file changed, 65 insertions(+), 16 deletions(-)

diff --git a/car_maxspeed.json b/car_maxspeed.json
index b2249f3..6c11f5a 100644
--- a/car_maxspeed.json
+++ b/car_maxspeed.json
@@ -16,36 +16,67 @@
     },
     "feature": {
         "pre": [
-            "{% if tags.maxspeed is not defined %}",
             "{% set maxspeedKmh = null %}",
             "{% set maxspeed = null %}",
             "{% set unit = null %}",
-            "{% else %}",
             "",
-            "{% if tags.maxspeed|matches(\"^[0-9]+$\") %}",
-            "{% set maxspeedKmh = tags.maxspeed %}",
-            "{% set maxspeed = tags.maxspeed %}",
-            "{% set unit = \"km/h\" %}",
+            "{% if tags.maxspeed is defined %}",
+            "  {% if tags.maxspeed|matches(\"^[0-9]+$\") %}",
+            "    {% set maxspeedKmh = tags.maxspeed %}",
+            "    {% set maxspeed = tags.maxspeed %}",
+            "    {% set unit = \"km/h\" %}",
+            "  {% elseif tags.maxspeed|matches( \"(^[0-9]+) mph$\") %}",
+            "    {% set m = tags.maxspeed|matches(\"(^[0-9]+) mph$\") %}",
+            "    {% set maxspeedKmh = m[1] * 1.60934 %}",
+            "    {% set maxspeed = m[1] %}",
+            "    {% set unit = \"mph\" %}",
+            "  {% endif %}",
             "{% endif %}",
             "",
-            "",
-            "{% set m = tags.maxspeed|matches(\"(^[0-9]+) mph$\") %}",
-            "{% if m %}",
-            "{% set maxspeedKmh = m[1] * 1.60934 %}",
-            "{% set maxspeed = m[1] %}",
-            "{% set unit = \"mph\" %}",
+            "{% if attribute(tags, 'maxspeed:forward') is defined %}",
+            "  {% if attribute(tags, 'maxspeed:forward')|matches(\"^[0-9]+$\") %}",
+            "    {% set maxspeedFKmh = attribute(tags, 'maxspeed:forward') %}",
+            "    {% set maxspeedF = attribute(tags, 'maxspeed:forward') %}",
+            "    {% set unit = \"km/h\" %}",
+            "  {% elseif attribute(tags, 'maxspeed:forward')|matches(\"^[0-9]+ mph$\") %}",
+            "    {% set m = attribute(tags, 'maxspeed:forward')|matches(\"(^[0-9]+) mph$\") %}",
+            "    {% set maxspeedFKmh = m[1] * 1.60934 %}",
+            "    {% set maxspeedF = m[1] %}",
+            "    {% set unit = \"mph\" %}",
+            "  {% endif %}",
             "{% endif %}",
             "",
+            "{% if attribute(tags, 'maxspeed:backward') is defined %}",
+            "  {% if attribute(tags, 'maxspeed:backward')|matches(\"^[0-9]+$\") %}",
+            "    {% set maxspeedBKmh = attribute(tags, 'maxspeed:backward') %}",
+            "    {% set maxspeedB = attribute(tags, 'maxspeed:backward') %}",
+            "    {% set unit = \"km/h\" %}",
+            "  {% elseif attribute(tags, 'maxspeed:backward')|matches(\"^[0-9]+ mph$\") %}",
+            "    {% set m = attribute(tags, 'maxspeed:backward')|matches(\"(^[0-9]+) mph$\") %}",
+            "    {% set maxspeedBKmh = m[1] * 1.60934 %}",
+            "    {% set maxspeedB = m[1] %}",
+            "    {% set unit = \"mph\" %}",
+            "  {% endif %}",
             "{% endif %}",
             "",
             "{% if not maxspeedKmh %}",
             "{% set color = \"#404040\" %}",
             "{% else %}",
             "{% set color = colorInterpolate(const.colorMap, (maxspeedKmh - const.offsetColorSpeed) / const.highestColorSpeed) %}",
+            "{% endif %}",
+            "",
+            "{% if maxspeedFKmh %}",
+            "{% set colorF = colorInterpolate(const.colorMap, (maxspeedFKmh - const.offsetColorSpeed) / const.highestColorSpeed) %}",
+            "{% endif %}",
+            "",
+            "{% if maxspeedBKmh %}",
+            "{% set colorB = colorInterpolate(const.colorMap, (maxspeedBKmh - const.offsetColorSpeed) / const.highestColorSpeed) %}",
             "{% endif %}"
         ],
         "description": [
-            "{% if maxspeed %}",
+            "{% if maxspeedF or maxspeedB %}",
+            "<span style='color: {{ colorB }}'>{{ maxspeedB|default(trans('unknown')) }}</span> / <span style='color: {{ colorF }}'>{{ maxspeedF|default(trans('unknown')) }}</span> {{ unit }}",
+            "{% elseif maxspeed %}",
             "<span style='color: {{ color }}'>{{ maxspeed }} {{ unit }}</span>",
             "{% elseif tags.maxspeed %}",
             "{{ tags.maxspeed }}",
@@ -53,14 +84,32 @@
             "{{ trans('unknown') }}",
             "{% endif %}"
         ],
-        "markerSymbol": null,
+        "markerSymbol": "",
         "listMarkerSymbol": "line",
+        "styles": "{% if maxspeedB or maxspeedF %}left,right,default{% else %}default{% endif %}",
         "style": {
-            "width": "3",
+            "width": "{% if maxspeedB or maxspeedF %}0{% else %}4{% endif %}",
             "color": "{{ color }}",
-            "text": "{{ maxspeed }}           ",
+            "text": [
+                "{% if maxspeedB or maxspeedF %}",
+                "  {% if maxspeedB %}🡸 {{ maxspeedB }} {% endif %}|{% if maxspeedF %} {{ maxspeedF }} 🡺{% endif %}       ",
+                "{% else %}",
+                "  {{ maxspeed }}         ",
+                "{% endif %}"
+            ],
             "textRepeat": "1",
+            "textOffset": "4",
             "textFontWeight": "bold"
+        },
+        "style:left": {
+            "width": "2",
+            "color": "{{ colorB|default('#404040') }}",
+            "offset": "-1"
+        },
+        "style:right": {
+            "width": "2",
+            "color": "{{ colorF|default('#404040') }}",
+            "offset": "1"
         }
     },
     "const": {

From 41853b5bf5b1419d486c542e0f6e3b81935fcd5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Fri, 4 Jan 2019 20:43:00 +0100
Subject: [PATCH 11/13] railway-maxspeed: handle maxspeed:forward and
 maxspeed:backward

---
 railway-maxspeed.json | 79 +++++++++++++++++++++++++++++++++++--------
 1 file changed, 64 insertions(+), 15 deletions(-)

diff --git a/railway-maxspeed.json b/railway-maxspeed.json
index 10fb8a4..1c756f2 100644
--- a/railway-maxspeed.json
+++ b/railway-maxspeed.json
@@ -14,36 +14,67 @@
     },
     "feature": {
         "pre": [
-            "{% if tags.maxspeed is not defined %}",
             "{% set maxspeedKmh = null %}",
             "{% set maxspeed = null %}",
             "{% set unit = null %}",
-            "{% else %}",
             "",
-            "{% if tags.maxspeed|matches(\"^[0-9]+$\") %}",
-            "{% set maxspeedKmh = tags.maxspeed %}",
-            "{% set maxspeed = tags.maxspeed %}",
-            "{% set unit = \"km/h\" %}",
+            "{% if tags.maxspeed is defined %}",
+            "  {% if tags.maxspeed|matches(\"^[0-9]+$\") %}",
+            "    {% set maxspeedKmh = tags.maxspeed %}",
+            "    {% set maxspeed = tags.maxspeed %}",
+            "    {% set unit = \"km/h\" %}",
+            "  {% elseif tags.maxspeed|matches( \"(^[0-9]+) mph$\") %}",
+            "    {% set m = tags.maxspeed|matches(\"(^[0-9]+) mph$\") %}",
+            "    {% set maxspeedKmh = m[1] * 1.60934 %}",
+            "    {% set maxspeed = m[1] %}",
+            "    {% set unit = \"mph\" %}",
+            "  {% endif %}",
             "{% endif %}",
             "",
-            "",
-            "{% set m = tags.maxspeed|matches(\"(^[0-9]+) mph$\") %}",
-            "{% if m %}",
-            "{% set maxspeedKmh = m[1] * 1.60934 %}",
-            "{% set maxspeed = m[1] %}",
-            "{% set unit = \"mph\" %}",
+            "{% if attribute(tags, 'maxspeed:forward') is defined %}",
+            "  {% if attribute(tags, 'maxspeed:forward')|matches(\"^[0-9]+$\") %}",
+            "    {% set maxspeedFKmh = attribute(tags, 'maxspeed:forward') %}",
+            "    {% set maxspeedF = attribute(tags, 'maxspeed:forward') %}",
+            "    {% set unit = \"km/h\" %}",
+            "  {% elseif attribute(tags, 'maxspeed:forward')|matches(\"^[0-9]+ mph$\") %}",
+            "    {% set m = attribute(tags, 'maxspeed:forward')|matches(\"(^[0-9]+) mph$\") %}",
+            "    {% set maxspeedFKmh = m[1] * 1.60934 %}",
+            "    {% set maxspeedF = m[1] %}",
+            "    {% set unit = \"mph\" %}",
+            "  {% endif %}",
             "{% endif %}",
             "",
+            "{% if attribute(tags, 'maxspeed:backward') is defined %}",
+            "  {% if attribute(tags, 'maxspeed:backward')|matches(\"^[0-9]+$\") %}",
+            "    {% set maxspeedBKmh = attribute(tags, 'maxspeed:backward') %}",
+            "    {% set maxspeedB = attribute(tags, 'maxspeed:backward') %}",
+            "    {% set unit = \"km/h\" %}",
+            "  {% elseif attribute(tags, 'maxspeed:backward')|matches(\"^[0-9]+ mph$\") %}",
+            "    {% set m = attribute(tags, 'maxspeed:backward')|matches(\"(^[0-9]+) mph$\") %}",
+            "    {% set maxspeedBKmh = m[1] * 1.60934 %}",
+            "    {% set maxspeedB = m[1] %}",
+            "    {% set unit = \"mph\" %}",
+            "  {% endif %}",
             "{% endif %}",
             "",
             "{% if not maxspeedKmh %}",
             "{% set color = \"#404040\" %}",
             "{% else %}",
             "{% set color = colorInterpolate(const.colorMap, (maxspeedKmh - const.offsetColorSpeed) / const.highestColorSpeed) %}",
+            "{% endif %}",
+            "",
+            "{% if maxspeedFKmh %}",
+            "{% set colorF = colorInterpolate(const.colorMap, (maxspeedFKmh - const.offsetColorSpeed) / const.highestColorSpeed) %}",
+            "{% endif %}",
+            "",
+            "{% if maxspeedBKmh %}",
+            "{% set colorB = colorInterpolate(const.colorMap, (maxspeedBKmh - const.offsetColorSpeed) / const.highestColorSpeed) %}",
             "{% endif %}"
         ],
         "description": [
-            "{% if maxspeed %}",
+            "{% if maxspeedF or maxspeedB %}",
+            "<span style='color: {{ colorB }}'>{{ maxspeedB|default(trans('unknown')) }}</span> / <span style='color: {{ colorF }}'>{{ maxspeedF|default(trans('unknown')) }}</span> {{ unit }}",
+            "{% elseif maxspeed %}",
             "<span style='color: {{ color }}'>{{ maxspeed }} {{ unit }}</span>",
             "{% elseif tags.maxspeed %}",
             "{{ tags.maxspeed }}",
@@ -53,12 +84,30 @@
         ],
         "markerSymbol": null,
         "listMarkerSymbol": "line",
+        "styles": "{% if maxspeedB or maxspeedF %}left,right,default{% else %}default{% endif %}",
         "style": {
-            "width": "3",
+            "width": "{% if maxspeedB or maxspeedF %}0{% else %}4{% endif %}",
             "color": "{{ color }}",
-            "text": "{{ maxspeed }}          ",
+            "text": [
+                "{% if maxspeedB or maxspeedF %}",
+                "  {% if maxspeedB %}🡸 {{ maxspeedB }} {% endif %}|{% if maxspeedF %} {{ maxspeedF }} 🡺{% endif %}       ",
+                "{% else %}",
+                "  {{ maxspeed }}         ",
+                "{% endif %}"
+            ],
             "textRepeat": "1",
+            "textOffset": "4",
             "textFontWeight": "bold"
+        },
+        "style:left": {
+            "width": "2",
+            "color": "{{ colorB|default('#404040') }}",
+            "offset": "-1"
+        },
+        "style:right": {
+            "width": "2",
+            "color": "{{ colorF|default('#404040') }}",
+            "offset": "1"
         }
     },
     "const": {

From 2294d17acd0b6a6b85fd3346665897005326f440 Mon Sep 17 00:00:00 2001
From: debyos <gabor.babos@gmail.com>
Date: Sun, 6 Jan 2019 22:57:59 +0100
Subject: [PATCH 12/13] Translation into Hungarian

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

diff --git a/lang/hu.json b/lang/hu.json
index b188f7a..f4f5e7f 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -9,7 +9,7 @@
     "category:car_maxspeed": "Sebességkorlátozás",
     "category:car_routes": "Főútvonalak",
     "category:children": "Gyermekek",
-    "category:coal": "",
+    "category:coal": "Kőszén",
     "category:communication": "Kommunikácó",
     "category:construction": "Építési terület",
     "category:craft": "Műhelyek",
@@ -20,7 +20,7 @@
     "category:education": "Oktatás",
     "category:electric_power": "Áramellátás",
     "category:emergency": "Vészhelyzet",
-    "category:energy": "",
+    "category:energy": "Energiaellátás",
     "category:financial": "Pénzügyek",
     "category:gastro": "Vendéglátás",
     "category:gastro-smoking": "Nem dohányzó vendéglátóhelyek",
@@ -32,12 +32,12 @@
     "category:internet": "Internetcsatlakozás",
     "category:leisure": "Szabadidő",
     "category:leisure_sport_shopping": "Szabadidő, sport és vásárlás",
-    "category:memorial": "",
+    "category:memorial": "Emlékművek",
     "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:office": "Irodák, hivatalok",
+    "category:oil_gas": "Kőolaj, földgáz",
     "category:other": "Egyéb",
     "category:outdoor": "Szabadtéri tevékenységek",
     "category:phone": "Telefon",
@@ -45,7 +45,7 @@
     "category:places_geo": "Helyek",
     "category:playgrounds": "Játszóterek",
     "category:post": "Posta",
-    "category:power_routes": "",
+    "category:power_routes": "Távvezetékek",
     "category:pt": "Tömegközlekedési térkép",
     "category:pt:routes": "Útvonalak",
     "category:pt:stops": "Megállók és állomások",
@@ -57,16 +57,16 @@
     "category:railway-maxspeed": "Sebességkorlátozás",
     "category:railway-routes": "Vasútvonalak",
     "category:religion": "Vallás",
-    "category:renewables": "",
+    "category:renewables": "Megújuló energia",
     "category:residential": "Lakóövezetek",
     "category:resources": "Bányászat",
     "category:services": "Szolgáltatások",
     "category:shop": "Vásárlás",
     "category:special": "Speciális",
     "category:sport": "Sport",
-    "category:swimming_bathing": "",
+    "category:swimming_bathing": "Fürdőzés, úszás",
     "category:tourism_attractions": "Látnivalók",
-    "category:tourism_services": "Turisztikai szolgáltatások",
+    "category:tourism_services": "Szálláshelyek, turisztikai információk",
     "category:transport": "Közlekedés",
     "category:transport_alternative": "Alternatív (Kerékpár, Túra)",
     "category:transport_car": "Autós közlekedés",
@@ -78,5 +78,5 @@
     "category:water": "Vizek",
     "category:wikipedia": "Wikipédia",
     "category:works": "Üzemek",
-    "category:xmas": ""
+    "category:xmas": "Karácsony"
 }

From d9c0c788fcde09217f58359f4f1c4bc9deff47c5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@cg.tuwien.ac.at>
Date: Mon, 7 Jan 2019 09:33:17 +0100
Subject: [PATCH 13/13] Import hungarian translations

---
 coal.json             | 1 +
 index.json            | 3 ++-
 memorial.json         | 1 +
 office.json           | 1 +
 oil_gas.json          | 1 +
 power_routes.json     | 1 +
 renewables.json       | 1 +
 swimming_bathing.json | 1 +
 tourism_services.json | 2 +-
 xmas.json             | 1 +
 10 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/coal.json b/coal.json
index d084cae..3b044d0 100644
--- a/coal.json
+++ b/coal.json
@@ -4,6 +4,7 @@
         "de": "Kohle",
         "en": "Coal",
         "fr": "Charbon",
+        "hu": "Kőszén",
         "pt-br": "Carvão"
     },
     "query": {
diff --git a/index.json b/index.json
index 77bd73e..c2be5f1 100644
--- a/index.json
+++ b/index.json
@@ -262,7 +262,8 @@
                         "en": "Energy",
                         "de": "Energie",
                         "pt-br": "Energia",
-                        "fr": "Énergie"
+                        "fr": "Énergie",
+                        "hu": "Energiaellátás"
                     },
                     "subCategories": [
                         {
diff --git a/memorial.json b/memorial.json
index 4095a13..143b72e 100644
--- a/memorial.json
+++ b/memorial.json
@@ -4,6 +4,7 @@
         "de": "Denkmäler",
         "en": "Memorials",
         "fr": "Mémoriaux",
+        "hu": "Emlékművek",
         "pt-br": "Memoriais"
     },
     "query": {
diff --git a/office.json b/office.json
index b0166cd..b92ba34 100644
--- a/office.json
+++ b/office.json
@@ -4,6 +4,7 @@
         "de": "Ämter, Dienst- und Geschäftsstellen",
         "en": "Offices",
         "fr": "Bureaux",
+        "hu": "Irodák, hivatalok",
         "pt-br": "Escritórios e agências"
     },
     "query": {
diff --git a/oil_gas.json b/oil_gas.json
index d74a1df..0f9acee 100644
--- a/oil_gas.json
+++ b/oil_gas.json
@@ -4,6 +4,7 @@
         "de": "Erdöl und Erdgas",
         "en": "Petroleum and natural gas",
         "fr": "Pétrole et gaz naturel",
+        "hu": "Kőolaj, földgáz",
         "pt-br": "Petróleo e gás"
     },
     "query": {
diff --git a/power_routes.json b/power_routes.json
index 3912272..61c088e 100644
--- a/power_routes.json
+++ b/power_routes.json
@@ -3,6 +3,7 @@
     "name": {
         "en": "Power routes",
         "fr": "Réseaux électriques",
+        "hu": "Távvezetékek",
         "pt-br": "Rotas de energia"
     },
     "query": {
diff --git a/renewables.json b/renewables.json
index 6c32493..19e9f42 100644
--- a/renewables.json
+++ b/renewables.json
@@ -4,6 +4,7 @@
         "de": "Erneuerbare Energien",
         "en": "Renewables",
         "fr": "Énergies renouvelables",
+        "hu": "Megújuló energia",
         "pt-br": "Renováveis"
     },
     "query": {
diff --git a/swimming_bathing.json b/swimming_bathing.json
index 645b613..f525711 100644
--- a/swimming_bathing.json
+++ b/swimming_bathing.json
@@ -4,6 +4,7 @@
         "de": "Schwimmen und Baden",
         "en": "Swimming and bathing",
         "fr": "Natation/Baignade/Bains",
+        "hu": "Fürdőzés, úszás",
         "pt-br": "Natação e banho"
     },
     "query": {
diff --git a/tourism_services.json b/tourism_services.json
index 7a2182f..d48a470 100644
--- a/tourism_services.json
+++ b/tourism_services.json
@@ -8,7 +8,7 @@
         "en": "Tourism",
         "et": "Turism",
         "fr": "Tourisme",
-        "hu": "Turisztikai szolgáltatások",
+        "hu": "Szálláshelyek, turisztikai információk",
         "it": "Turismo",
         "ja": "観光",
         "nl": "Toerisme",
diff --git a/xmas.json b/xmas.json
index d3ad2fd..2baa128 100644
--- a/xmas.json
+++ b/xmas.json
@@ -4,6 +4,7 @@
         "de": "Weihnachten",
         "en": "Christmas",
         "fr": "Noël",
+        "hu": "Karácsony",
         "pt-br": "Natal"
     },
     "query": {