From 6d7b4430f8df3168dc503512a3a4e37f47492db1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 12 Dec 2022 22:12:47 +0100
Subject: [PATCH 01/26] culture-media: description for buildings

---
 culture-media.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/culture-media.yaml b/culture-media.yaml
index bffbb72..6232bdf 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -54,6 +54,8 @@ feature:
       {{ tagTransList('tourism', tags.tourism) }}
     {% elseif tags.amenity %}
       {{ tagTrans('amenity', tags.amenity) }}
+    {% elseif tags.building %}
+      {{ tags.building == 'yes' ? keyTrans('building') : tagTrans('building', tags.building) }}
     {% elseif tags.heritage %}
       {{ keyTrans('heritage') }}
     {% endif %}

From db2d0d39a7a160471aba4c941cc1cde1227e4bc1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Mon, 12 Dec 2022 22:16:59 +0100
Subject: [PATCH 02/26] footways: support sidewalk=separate

---
 footways.yaml | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/footways.yaml b/footways.yaml
index 4b3ca59..b938ac3 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -6,7 +6,7 @@ query:
     way[footway];
     way["area:highway"~"^(footway|pedestrian|steps|path|platform|sidewalk)$"];
     relation["area:highway"~"^(footway|pedestrian|steps|path|platform|sidewalk)$"];
-    way[sidewalk~"^(yes|both|left|right|no|none)$"];
+    way[sidewalk~"^(yes|both|left|right|no|separate|none)$"];
     way["sidewalk:left"~"(yes|no|separate)$"];
     way["sidewalk:right"~"(yes|no|separate)$"];
     way["sidewalk:both"~"(yes|no|separate)$"];
@@ -56,6 +56,12 @@ feature:
       {% set sides = sides|merge(['leftr', 'rightr']) %}
     {% endif %}
 
+    {% if tags.sidewalk == 'separate' %}
+      {% set sidewalk_left = 'separate' %}
+      {% set sidewalk_right = 'separate' %}
+      {% set sides = sides|merge(['leftr', 'rightr']) %}
+    {% endif %}
+
     {% if attribute(tags, 'sidewalk:both') %}
       {% set sidewalk_left = attribute(tags, 'sidewalk:both') %}
       {% set sides = sides|merge(['leftr', 'rightr']) %}

From 3ee0925ddfc5d153337ae1cf497c6f9f9feee7aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 13 Dec 2022 22:16:01 +0100
Subject: [PATCH 03/26] footways: add an 'access' filter

---
 footways.yaml | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/footways.yaml b/footways.yaml
index b938ac3..aeea342 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -444,6 +444,29 @@ info: |
   </tr>
   {% endfor %}
   </table>
+filter:
+  access:
+    name: '{{ keyTrans("access") }}'
+    type: select
+    placeholder: '{{ trans("any value") }}'
+    valueName: '{{ tagTrans("access", value) }}'
+    values:
+      'yes': {}
+      private: {}
+      permissive: {}
+      customers: {}
+      discouraged: {}
+      unknown:
+        name: '{{ trans("unknown") }}'
+        query: nwr["access"="unknown"]
+      '!':
+        name: <{{ trans('empty value') }}>
+        query: nwr[!access]
+        weight: 1
+      '?':
+        name: <{{ trans("other") }}>
+        query: nwr[access]["access"!~"^(public|private|permissive|customers|discouraged|unknown|yes)$"]
+        weight: 2
 const:
   categories:
     sidewalk:

From f924be09bddc2d956a2cf184d5cebe5453484f45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 15 Dec 2022 09:30:47 +0100
Subject: [PATCH 04/26] footways: add a 'surface' filter

---
 footways.yaml | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)

diff --git a/footways.yaml b/footways.yaml
index aeea342..3798b04 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -467,6 +467,72 @@ filter:
         name: <{{ trans("other") }}>
         query: nwr[access]["access"!~"^(public|private|permissive|customers|discouraged|unknown|yes)$"]
         weight: 2
+  surface:
+    name: '{{ keyTrans("surface") }}'
+    type: select
+    placeholder: '<{{ trans("any value") }}>'
+    valueName: '{{ tagTrans("surface", value) }}'
+    query: '(nwr[surface="{{ value }}"];nwr[~"sidewalk:(left|right|both):surface"~"{{ value }}"];)'
+    values:
+      acrylic: {}
+      artificial_turf: {}
+      asphalt: {}
+      carpet: {}
+      chipseal: {}
+      clay: {}
+      cobblestone: {}
+      compacted: {}
+      concrete: {}
+      concrete:lanes: {}
+      concrete:plates: {}
+      dirt: {}
+      earth: {}
+      fine_gravel: {}
+      grass: {}
+      grass_paver: {}
+      gravel: {}
+      ground: {}
+      ice: {}
+      metal: {}
+      metal_grid: {}
+      mud: {}
+      paved: {}
+      paving_stones: {}
+      pebblestone: {}
+      rock: {}
+      rubber: {}
+      salt: {}
+      sand: {}
+      sett: {}
+      snow: {}
+      stepping_stones: {}
+      tartan: {}
+      unhewn_cobblestone: {}
+      unpaved: {}
+      wood: {}
+      woodchips: {}
+      '!':
+        name: <{{ trans('empty value') }}>
+        query: |
+          (
+          nwr[!"surface"];
+          nwr["sidewalk:left"="yes"][!"sidewalk:left:surface"];
+          nwr["sidewalk:right"="yes"][!"sidewalk:right:surface"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:left:surface"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:right:surface"];
+          nwr["sidewalk"="left"][!"sidewalk:left:surface"];
+          nwr["sidewalk"="right"][!"sidewalk:right:surface"];
+          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:left:surface"];
+          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:right:surface"];
+          )
+        weight: -3
+      '?':
+        name: <{{ trans("other") }}>
+        query: nwr[surface]["surface"!~"^(acrylic|artificial_turf|asphalt|carpet|chipseal|clay|cobblestone|compacted|concrete|concrete:lanes|concrete:plates|dirt|earth|fine_gravel|grass|grass_paver|gravel|ground|ice|metal|metal_grid|mud|paved|paving_stones|pebblestone|rock|rubber|salt|sand|sett|snow|stepping_stones|tartan|unhewn_cobblestone|unpaved|wood|woodchips)$"]
+        weight: -2
+      unknown:
+        name: '<{{ trans("unknown") }}>'
+        weight: -1
 const:
   categories:
     sidewalk:

From ec100aa36b1dfb21eaa6e8a7b7b6b55047fd216c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 15 Dec 2022 09:35:26 +0100
Subject: [PATCH 05/26] footways: add a smoothness filter

---
 footways.yaml | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/footways.yaml b/footways.yaml
index 3798b04..22f72b5 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -533,6 +533,43 @@ filter:
       unknown:
         name: '<{{ trans("unknown") }}>'
         weight: -1
+  smoothness:
+    name: '{{ keyTrans("smoothness") }}'
+    type: select
+    placeholder: '<{{ trans("any value") }}>'
+    valueName: '{{ tagTrans("smoothness", value) }}'
+    query: '(nwr[smoothness="{{ value }}"];nwr[~"sidewalk:(left|right|both):smoothness"~"{{ value }}"];)'
+    values:
+      bad: {}
+      excellent: {}
+      good: {}
+      horrible: {}
+      impassable: {}
+      intermediate: {}
+      very_bad: {}
+      very_horrible: {}
+      '!':
+        name: <{{ trans('empty value') }}>
+        query: |
+          (
+          nwr[!"smoothness"];
+          nwr["sidewalk:left"="yes"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk:right"="yes"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk"="left"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk"="right"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:right:smoothness"];
+          )
+        weight: -3
+      '?':
+        name: <{{ trans("other") }}>
+        query: nwr[smoothness]["smoothness"!~"^(bad|excellent|good|horrible|impassable|intermediate|very_bad|very_horrible)$"]
+        weight: -2
+      unknown:
+        name: '<{{ trans("unknown") }}>'
+        weight: -1
 const:
   categories:
     sidewalk:

From 4c97eb67f2f5d1197c292fa67ebc42501c5ef4f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 15 Dec 2022 09:52:48 +0100
Subject: [PATCH 06/26] footways: reorder 'access' filter

---
 footways.yaml | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index 22f72b5..a60707d 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -448,7 +448,7 @@ filter:
   access:
     name: '{{ keyTrans("access") }}'
     type: select
-    placeholder: '{{ trans("any value") }}'
+    placeholder: '<{{ trans("any value") }}>'
     valueName: '{{ tagTrans("access", value) }}'
     values:
       'yes': {}
@@ -456,17 +456,18 @@ filter:
       permissive: {}
       customers: {}
       discouraged: {}
-      unknown:
-        name: '{{ trans("unknown") }}'
-        query: nwr["access"="unknown"]
       '!':
         name: <{{ trans('empty value') }}>
         query: nwr[!access]
-        weight: 1
+        weight: -3
       '?':
         name: <{{ trans("other") }}>
         query: nwr[access]["access"!~"^(public|private|permissive|customers|discouraged|unknown|yes)$"]
-        weight: 2
+        weight: -2
+      unknown:
+        name: '<{{ trans("unknown") }}>'
+        query: nwr["access"="unknown"]
+        weight: -1
   surface:
     name: '{{ keyTrans("surface") }}'
     type: select

From 07ccd34262d87731926e52d57e6e92f19a741d9d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 17 Dec 2022 13:04:50 +0100
Subject: [PATCH 07/26] footways: reverse logic of combined cycleways to remove
 bugs

---
 footways.yaml | 60 ++++++++++++++++++++++++++-------------------------
 1 file changed, 31 insertions(+), 29 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index a60707d..4c1c8ce 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -17,6 +17,7 @@ feature:
   pre: |
     {% set sides = ['default'] %}
     {% set sidewalk_left = null %}{% set sidewalk_right = null %}
+    {% set cycleway = false %}
     {% set category = tags.highway %}
 
     {% if attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['yes', 'both', 'left', 'both', 'right'] or tags.footway == 'sidewalk' %}
@@ -27,6 +28,16 @@ feature:
       {% set sides = sides|merge(['main']) %}
     {% endif %}
 
+    {% if tags.highway in ['cycleway'] %}
+      {% set category = 'footway' %}
+      {% set cycleway = true %}
+      {% set sides = sides|merge(['cycleway']) %}
+    {% endif %}
+    {% if tags.bicycle in ['yes', 'designated'] %}
+      {% set cycleway = true %}
+      {% set sides = sides|merge(['cycleway']) %}
+    {% endif %}
+
     {% if attribute(tags, 'area:highway') in ['footway'] %}
       {% set sides = sides|merge(['main']) %}
       {% set category = attribute(tags, 'area:highway') %}
@@ -37,15 +48,6 @@ feature:
       {% set category = 'platform' %}
     {% endif %}
 
-    {% set foot = false %}
-    {% if tags.highway not in ['pedestrian', 'footway'] and tags.foot in ['yes', 'designated'] %}
-      {% set foot = tags.foot %}
-      {% set sides = sides|merge(['foot']) %}
-    {% endif %}
-    {% if tags.highway == 'path' and tags.bicycle in ['yes', 'designated'] %}
-      {% set category = 'cycleway' %}
-    {% endif %}
-
     {% if tags.footway == 'crossing' %}
       {% set category = 'crossing' %}
     {% endif %}
@@ -210,20 +212,20 @@ feature:
       {{ markerLine({
            'styles': sides|join(','),
            'style:main': {
-              width: foot and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3),
+              width: cycleway and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3),
               color: const.categories[category].color,
-              dashArray: tags.highway == 'steps' or (foot and tags.segregated != 'yes') ? '3,3' : '',
-              lineCap: tags.highway == 'steps' or (foot and tags.segregated != 'yes') ? 'butt' : 'round',
-              offset: foot and tags.segregated == 'yes' ? 1 : 0
+              dashArray: tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') ? '3,3' : '',
+              lineCap: tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') ? 'butt' : 'round',
+              offset: cycleway and tags.segregated == 'yes' ? 1 : 0
             },
-            'style:foot': {
+            'style:cycleway': {
               fill: false,
-              width: foot and tags.segregated == 'yes' ? 2 : 3,
-              color: const.categories.footway.color,
-              dashArray: foot and tags.segregated != 'yes' ? '3,3' : '',
+              width: cycleway and tags.segregated == 'yes' ? 2 : 3,
+              color: const.categories.cycleway.color,
+              dashArray: cycleway and tags.segregated != 'yes' ? '3,3' : '',
               dashOffset: 3,
-              lineCap: foot and tags.segregated != 'yes' ? 'butt' : 'round',
-              offset: foot and tags.segregated == 'yes' ? -1 : 0
+              lineCap: cycleway and tags.segregated != 'yes' ? 'butt' : 'round',
+              offset: cycleway and tags.segregated == 'yes' ? -1 : 0
             },
             'style:left': {
               width: 3,
@@ -272,7 +274,7 @@ feature:
       0
       {% elseif tags.area == 'yes' %}
       1
-      {% elseif foot and tags.segregated == 'yes' %}
+      {% elseif cycleway and tags.segregated == 'yes' %}
       2
       {% else %}
       {{ const.categories[category].width|default(3) }}
@@ -280,32 +282,32 @@ feature:
     color: |
       {{ const.categories[category].color }}
     dashArray: |
-      {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}
+      {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}
       3,3
       {% endif %}
     lineCap: |
-      {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
+      {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
     offset: |
-      {% if foot and tags.segregated == 'yes' %}1{% else %}0{% endif %}
-  style:foot:
+      {% if cycleway and tags.segregated == 'yes' %}1{% else %}0{% endif %}
+  style:cycleway:
     fill: false
     width: |
-      {% if foot and tags.segregated == 'yes' %}
+      {% if cycleway and tags.segregated == 'yes' %}
       2
       {% else %}
       3
       {% endif %}
     color: |
-      {{ const.categories.footway.color }}
+      {{ const.categories.cycleway.color }}
     dashArray: |
-      {% if foot and tags.segregated != 'yes' %}
+      {% if cycleway and tags.segregated != 'yes' %}
       3,3
       {% endif %}
     dashOffset: 3
     lineCap: |
-      {% if foot and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
+      {% if cycleway and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
     offset: |
-      {% if foot and tags.segregated == 'yes' %}-1{% else %}0{% endif %}
+      {% if cycleway and tags.segregated == 'yes' %}-1{% else %}0{% endif %}
   style:left:
     fill: false
     width: 3

From c5d2052a4b5921ef15ab0087a14409fb8f226b44 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 17 Dec 2022 13:12:57 +0100
Subject: [PATCH 08/26] footways: longer dashes for non-segregated
 cycleway/footways

---
 footways.yaml | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index 4c1c8ce..e595f4d 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -214,7 +214,9 @@ feature:
            'style:main': {
               width: cycleway and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3),
               color: const.categories[category].color,
-              dashArray: tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') ? '3,3' : '',
+              dashArray: tags.highway == 'steps' ? '3,3' :
+                cycleway and tags.segregated != 'yes' ? '8,8' :
+                '',
               lineCap: tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') ? 'butt' : 'round',
               offset: cycleway and tags.segregated == 'yes' ? 1 : 0
             },
@@ -222,8 +224,8 @@ feature:
               fill: false,
               width: cycleway and tags.segregated == 'yes' ? 2 : 3,
               color: const.categories.cycleway.color,
-              dashArray: cycleway and tags.segregated != 'yes' ? '3,3' : '',
-              dashOffset: 3,
+              dashArray: cycleway and tags.segregated != 'yes' ? '8,8' : '',
+              dashOffset: 8,
               lineCap: cycleway and tags.segregated != 'yes' ? 'butt' : 'round',
               offset: cycleway and tags.segregated == 'yes' ? -1 : 0
             },
@@ -282,8 +284,10 @@ feature:
     color: |
       {{ const.categories[category].color }}
     dashArray: |
-      {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}
+      {% if tags.highway == 'steps' %}
       3,3
+      {% elseif cycleway and tags.segregated != 'yes' %}
+      8,8
       {% endif %}
     lineCap: |
       {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
@@ -301,9 +305,9 @@ feature:
       {{ const.categories.cycleway.color }}
     dashArray: |
       {% if cycleway and tags.segregated != 'yes' %}
-      3,3
+      8,8
       {% endif %}
-    dashOffset: 3
+    dashOffset: 8
     lineCap: |
       {% if cycleway and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
     offset: |
@@ -397,13 +401,13 @@ info: |
       style: {
         width: 4,
         color: const.categories.cycleway.color,
-        dashArray: '3,3'
+        dashArray: '8,8'
       },
       'style:foot': {
         width: 4,
         color: const.categories.footway.color,
-        dashArray: '3,3',
-        dashOffset: 3
+        dashArray: '8,8',
+        dashOffset: 8
       }
     }) }}</td>
     <td>{{ tagTrans('highway', 'cycleway segregated=no') }}</td>

From b8edc3a1a6cae6d289cef2b31b2a61162fd82298 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 17 Dec 2022 13:23:37 +0100
Subject: [PATCH 09/26] footways: thicker symbol for segregated
 cycleway/footway

---
 footways.yaml | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index e595f4d..8d9525f 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -277,7 +277,7 @@ feature:
       {% elseif tags.area == 'yes' %}
       1
       {% elseif cycleway and tags.segregated == 'yes' %}
-      2
+      3
       {% else %}
       {{ const.categories[category].width|default(3) }}
       {% endif %}
@@ -292,15 +292,10 @@ feature:
     lineCap: |
       {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}butt{% else %}round{% endif %}
     offset: |
-      {% if cycleway and tags.segregated == 'yes' %}1{% else %}0{% endif %}
+      {% if cycleway and tags.segregated == 'yes' %}1.5{% else %}0{% endif %}
   style:cycleway:
     fill: false
-    width: |
-      {% if cycleway and tags.segregated == 'yes' %}
-      2
-      {% else %}
-      3
-      {% endif %}
+    width: 3
     color: |
       {{ const.categories.cycleway.color }}
     dashArray: |
@@ -311,7 +306,7 @@ feature:
     lineCap: |
       {% if cycleway and tags.segregated != 'yes' %}butt{% else %}round{% endif %}
     offset: |
-      {% if cycleway and tags.segregated == 'yes' %}-1{% else %}0{% endif %}
+      {% if cycleway and tags.segregated == 'yes' %}-1.5{% else %}0{% endif %}
   style:left:
     fill: false
     width: 3
@@ -416,14 +411,14 @@ info: |
     <td>{{ markerLine({
       styles: 'default,foot',
       style: {
-        width: 2,
+        width: 3,
         color: const.categories.cycleway.color,
-        offset: -1
+        offset: -1.5
       },
       'style:foot': {
-        width: 2,
+        width: 3,
         color: const.categories.footway.color,
-        offset: 1
+        offset: 1.5
       }
     }) }}</td>
     <td>{{ tagTrans('highway', 'cycleway segregated=yes') }}</td>

From 450a2603822e9700906e751e6b2e8b585cb3413f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sat, 17 Dec 2022 13:36:49 +0100
Subject: [PATCH 10/26] footways: bugfix

---
 footways.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/footways.yaml b/footways.yaml
index 8d9525f..9b7ed98 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -33,7 +33,7 @@ feature:
       {% set cycleway = true %}
       {% set sides = sides|merge(['cycleway']) %}
     {% endif %}
-    {% if tags.bicycle in ['yes', 'designated'] %}
+    {% if tags.highway in ['path'] and tags.bicycle in ['yes', 'designated'] %}
       {% set cycleway = true %}
       {% set sides = sides|merge(['cycleway']) %}
     {% endif %}

From 9406950930546887085c31ae0fe9091c38a7f68e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 18 Dec 2022 07:29:16 +0100
Subject: [PATCH 11/26] footways: accept tags with 'sidewalk:' prefix instead
 of 'sidewalk:both'

- sidewalk:both:surface -> sidewalk:surface
- sidewalk:both:smoothness -> sidewalk:smoothness
---
 footways.yaml | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index 9b7ed98..94b38fd 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -151,17 +151,17 @@ feature:
           <span class='key'>{{ keyTrans('wheelchair') }}:</span>
           <span class='value'>{{ tagTrans('wheelchair', attribute(tags, 'sidewalk:left:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface')) %}<li>
+        {% if attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface')) %}<li>
           <span class='key'>{{ keyTrans('surface') }}:</span>
-          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))) }}</span>
+          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface'))) }}</span>
         </li>{% endif %}
         {% if attribute(tags, 'sidewalk:left:tactile_paving') %}<li>
           <span class='key'>{{ keyTrans('tactile_paving') }}:</span>
           <span class='value'>{{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:left:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness')) %}<li>
+        {% if attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness')) %}<li>
           <span class='key'>{{ keyTrans('smoothness') }}:</span>
-          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))) }}</span>
+          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness'))) }}</span>
         </li>{% endif %}
         {% set v = attribute(tags, 'sidewalk:left:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %}
         {% if v %}<li>
@@ -182,17 +182,17 @@ feature:
           <span class='key'>{{ keyTrans('wheelchair') }}:</span>
           <span class='value'>{{ tagTrans('wheelchair', attribute(tags, 'sidewalk:right:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface')) %}<li>
+        {% if attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface')) %}<li>
           <span class='key'>{{ keyTrans('surface') }}:</span>
-          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))) }}</span>
+          <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface'))) }}</span>
         </li>{% endif %}
         {% if attribute(tags, 'sidewalk:right:tactile_paving') %}<li>
           <span class='key'>{{ keyTrans('tactile_paving') }}:</span>
           <span class='value'>{{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:right:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}</span>
         </li>{% endif %}
-        {% if attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness')) %}<li>
+        {% if attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness')) %}<li>
           <span class='key'>{{ keyTrans('smoothness') }}:</span>
-          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))) }}</span>
+          <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness'))) }}</span>
         </li>{% endif %}
         {% set v = attribute(tags, 'sidewalk:right:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %}
         {% if i %}<li>
@@ -520,12 +520,12 @@ filter:
           nwr[!"surface"];
           nwr["sidewalk:left"="yes"][!"sidewalk:left:surface"];
           nwr["sidewalk:right"="yes"][!"sidewalk:right:surface"];
-          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:left:surface"];
-          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:right:surface"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"];
           nwr["sidewalk"="left"][!"sidewalk:left:surface"];
           nwr["sidewalk"="right"][!"sidewalk:right:surface"];
-          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:left:surface"];
-          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:right:surface"];
+          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"];
+          nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"];
           )
         weight: -3
       '?':
@@ -557,12 +557,12 @@ filter:
           nwr[!"smoothness"];
           nwr["sidewalk:left"="yes"][!"sidewalk:left:smoothness"];
           nwr["sidewalk:right"="yes"][!"sidewalk:right:smoothness"];
-          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:left:smoothness"];
-          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:right:smoothness"];
           nwr["sidewalk"="left"][!"sidewalk:left:smoothness"];
           nwr["sidewalk"="right"][!"sidewalk:right:smoothness"];
-          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:left:smoothness"];
-          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:right:smoothness"];
+          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:left:smoothness"];
+          nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:right:smoothness"];
           )
         weight: -3
       '?':

From ad5a322fbd4a76e64647967c97eaf2c21fe7952a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 18 Dec 2022 07:59:58 +0100
Subject: [PATCH 12/26] footways: add surface filters for 'all_paved' and
 'all_paved'

---
 footways.yaml | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index 94b38fd..41517df 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -474,8 +474,21 @@ filter:
     type: select
     placeholder: '<{{ trans("any value") }}>'
     valueName: '{{ tagTrans("surface", value) }}'
-    query: '(nwr[surface="{{ value }}"];nwr[~"sidewalk:(left|right|both):surface"~"{{ value }}"];)'
+    query: |
+      {% if value == 'all_paved' %}
+      {% set value = "(paved|asphalt|chipseal|concrete|concrete:lanes|concrete|plates|paving_stones|sett|unhewn_cobblestone|cobblestone|metal|wood|stepping_stones|rubber)" %}
+      {% elseif value == 'all_unpaved' %}
+      {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt)" %}
+      {% endif %}
+
+      (nwr[surface~"^{{ value }}$"];nwr[~"sidewalk:(left|right|both):surface"~"^{{ value }}$"];)
     values:
+      all_paved:
+        name: "<{{ tagTrans('surface', 'paved') }}>"
+        weight: -1
+      all_unpaved:
+        name: "<{{ tagTrans('surface', 'unpaved') }}>"
+        weight: -1
       acrylic: {}
       artificial_turf: {}
       asphalt: {}
@@ -527,14 +540,14 @@ filter:
           nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"];
           nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"];
           )
-        weight: -3
+        weight: -4
       '?':
         name: <{{ trans("other") }}>
         query: nwr[surface]["surface"!~"^(acrylic|artificial_turf|asphalt|carpet|chipseal|clay|cobblestone|compacted|concrete|concrete:lanes|concrete:plates|dirt|earth|fine_gravel|grass|grass_paver|gravel|ground|ice|metal|metal_grid|mud|paved|paving_stones|pebblestone|rock|rubber|salt|sand|sett|snow|stepping_stones|tartan|unhewn_cobblestone|unpaved|wood|woodchips)$"]
-        weight: -2
+        weight: -3
       unknown:
         name: '<{{ trans("unknown") }}>'
-        weight: -1
+        weight: -2
   smoothness:
     name: '{{ keyTrans("smoothness") }}'
     type: select

From 13351823e88e79238d202a756e5e876296f06fab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 18 Dec 2022 08:02:46 +0100
Subject: [PATCH 13/26] footways: surface filter also checks sidewalk:surface

---
 footways.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/footways.yaml b/footways.yaml
index 41517df..8da48e7 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -481,7 +481,7 @@ filter:
       {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt)" %}
       {% endif %}
 
-      (nwr[surface~"^{{ value }}$"];nwr[~"sidewalk:(left|right|both):surface"~"^{{ value }}$"];)
+      (nwr[surface~"^{{ value }}$"];nwr[~"sidewalk(:left|:right|:both|):surface"~"^{{ value }}$"];)
     values:
       all_paved:
         name: "<{{ tagTrans('surface', 'paved') }}>"

From 6aa1d1a11231eda20564e7540400880fbc0e05f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 20 Dec 2022 22:34:07 +0100
Subject: [PATCH 14/26] footways: for sidewalk=*, do not use 'surface' tag

---
 footways.yaml | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index 8da48e7..f2df254 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -481,7 +481,10 @@ filter:
       {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt)" %}
       {% endif %}
 
-      (nwr[surface~"^{{ value }}$"];nwr[~"sidewalk(:left|:right|:both|):surface"~"^{{ value }}$"];)
+      (
+        nwr[!sidewalk][!"sidewalk:both"][!"sidewalk:right"][!"sidewalk:left"][surface~"^{{ value }}$"];
+        nwr[~"sidewalk(:left|:right|:both|):surface"~"^{{ value }}$"];
+      )
     values:
       all_paved:
         name: "<{{ tagTrans('surface', 'paved') }}>"
@@ -530,7 +533,7 @@ filter:
         name: <{{ trans('empty value') }}>
         query: |
           (
-          nwr[!"surface"];
+          nwr[!sidewalk][!"sidewalk:both"][!"sidewalk:right"][!"sidewalk:left"][!"surface"];
           nwr["sidewalk:left"="yes"][!"sidewalk:left:surface"];
           nwr["sidewalk:right"="yes"][!"sidewalk:right:surface"];
           nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"];

From 4f78539d53453b62d9cf8cbf11c9ed9faad32e64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 29 Dec 2022 07:05:42 +0100
Subject: [PATCH 15/26] culture-media: filter 'category' for those who don't
 need the wikidata result

---
 culture-media.yaml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/culture-media.yaml b/culture-media.yaml
index 6232bdf..ab0ecd2 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -87,6 +87,15 @@ filter:
         <option value='{{ kv }}' query='nwr[{{ d.query|default(kv) }}]'>{% if d.trans %}{{ trans(d.trans) }}{% elseif not v %}{{ keyTrans(k) }}{% else %}{{ tagTrans(k, v) }}{% endif %}</option>
       {% endfor %}
     op: "has"
+  category:
+    name: "{{ trans('category') }}"
+    show_default: "true"
+    type: "select"
+    values: |
+      <option value='no' query='nwr[!image][!wikimedia_commons][!wikidata][!wikipedia]'>No image, wikimedia_commons or wikidata</option>
+      <option value='wikipedia_no_wikidata' query='nwr[!wikidata][wikipedia]'>wikipedia tag found without corresponding wikidata tag</option>
+      <option value='has_image' query='(nwr[!wikidata][image];nwr[!wikidata][wikimedia_commons];)'>image or wikimedia_commons tag but no wikidata</option>
+      <option value='wikidata' query='nwr[wikidata]'>has wikidata tag</option>
 info: |
   <table>
       <tr>

From 714c56e52d2ac055e628bf2b9013e364e7937555 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Thu, 29 Dec 2022 07:33:54 +0100
Subject: [PATCH 16/26] footways: update the surface's <paved> and <unpaved>
 lists

---
 footways.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/footways.yaml b/footways.yaml
index f2df254..098b62a 100644
--- a/footways.yaml
+++ b/footways.yaml
@@ -476,9 +476,9 @@ filter:
     valueName: '{{ tagTrans("surface", value) }}'
     query: |
       {% if value == 'all_paved' %}
-      {% set value = "(paved|asphalt|chipseal|concrete|concrete:lanes|concrete|plates|paving_stones|sett|unhewn_cobblestone|cobblestone|metal|wood|stepping_stones|rubber)" %}
+      {% set value = "(paved|asphalt|chipseal|concrete|concrete:lanes|concrete:plates|paving_stones|sett|unhewn_cobblestone|cobblestone|metal|wood|rubber)" %}
       {% elseif value == 'all_unpaved' %}
-      {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt)" %}
+      {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt|clay)" %}
       {% endif %}
 
       (

From 2c5a517366e1823b930629d74f9d08b4002e7124 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Wed, 28 Dec 2022 21:41:56 +0100
Subject: [PATCH 17/26] culture-media: add category filter values which need
 the wikidata object

---
 culture-media.yaml | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/culture-media.yaml b/culture-media.yaml
index ab0ecd2..04469fa 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -37,6 +37,13 @@ feature:
 
     {% endif %}
 
+  exclude: |
+    {% if filter.category == 'wikidata_no_image' %}
+      {{ (not wikidata) or (wikidata.claims.P18|length != 0) }}
+    {% elseif filter.category == 'wikidata_human' %}
+      {{ wikidata.claims.P31[0].mainsnak.datavalue.value.id not in ['Q5'] }}
+    {% endif %}
+
   body: |
     {{ str }}
 
@@ -96,6 +103,8 @@ filter:
       <option value='wikipedia_no_wikidata' query='nwr[!wikidata][wikipedia]'>wikipedia tag found without corresponding wikidata tag</option>
       <option value='has_image' query='(nwr[!wikidata][image];nwr[!wikidata][wikimedia_commons];)'>image or wikimedia_commons tag but no wikidata</option>
       <option value='wikidata' query='nwr[wikidata]'>has wikidata tag</option>
+      <option value='wikidata_no_image' query='nwr[wikidata]'>has wikidata tag, but wikidata object does not have an image</option>
+      <option value='wikidata_human' query='nwr[wikidata]'>wikidata tag points to a human, should most likely be 'subject:wikidata'</option>
 info: |
   <table>
       <tr>

From 8abe30b4aea78ade81a3ce91f38ad9dc20a5acb0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 1 Jan 2023 08:54:00 +0100
Subject: [PATCH 18/26] kerbs: remove wheelchair config (unused)

---
 kerbs.yaml | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/kerbs.yaml b/kerbs.yaml
index f21b7d7..d883ea4 100644
--- a/kerbs.yaml
+++ b/kerbs.yaml
@@ -21,7 +21,7 @@ feature:
     {% if type == 'way' %}
     line
     {% else %}
-    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb], color: const.wheelchair[wheelchair] }) }}
+    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb], color: 'black' }) }}
     {% endif %}
   details: |
     {% if tags.kerb and tags.kerb != 'yes' %}{{ tagTrans('kerb', tags.kerb) }}{% endif %}
@@ -55,7 +55,6 @@ feature:
     fillOpacity: 1
     width: 1
     color: black
-      {{ const.wheelchair[wheelchair] }}
 info: |
   {{ tagTrans('barrier', 'kerb') }}:
   <table>
@@ -77,9 +76,3 @@ const:
     raised: '#af0000'
     rolled: '#af7f00'
     unknown: '#7f7f7f'
-  wheelchair:
-    designated: '#00ff7f'
-    yes: '#00ff00'
-    no: '#ff0000'
-    limited: '#ffff00'
-    unknown: '#ffffff'

From 7c6030591a458444446d733e2b4677638e02dfe1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 1 Jan 2023 09:03:52 +0100
Subject: [PATCH 19/26] kerbs: showing height with units; bugfix: show height
 in body

---
 kerbs.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kerbs.yaml b/kerbs.yaml
index d883ea4..4ae0512 100644
--- a/kerbs.yaml
+++ b/kerbs.yaml
@@ -14,7 +14,7 @@ feature:
     <li>{{ keyTrans('kerb') }}: {{ tags.kerb ? tagTrans('kerb', tags.kerb) : trans('unknown') }}</li>
     <li>{{ keyTrans('wheelchair') }}: {{ tags.wheelchair ? tagTrans('wheelchair', tags.wheelchair) : trans('unknown') }}</li>
     <li>{{ keyTrans('tactile_paving') }}: {{ tags.tactile_paving ? tagTrans('tactile_paving', tags.tactile_paving) : trans('unknown') }}</li>
-    <li>{{ keyTrans('height') }}: {{ 'height' in tags ? tags.height : trans('unknown') }}</li>
+    <li>{{ keyTrans('height') }}: {{ tags.height ? tags.height|formatUnit('distance') : trans('unknown') }}</li>
     </ul>
   markerSymbol:
   listMarkerSymbol: |
@@ -25,7 +25,7 @@ feature:
     {% endif %}
   details: |
     {% if tags.kerb and tags.kerb != 'yes' %}{{ tagTrans('kerb', tags.kerb) }}{% endif %}
-    {% if tags.height %}({{ tags.height }}){% endif %}
+    {% if tags.height %}({{ tags.height|formatUnit('distance') }}){% endif %}
   styles: |
     {% if type == 'way' %}
       default,marker

From e1f812d6bd8bd982af9552fa32a888cb9cad6cd7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 1 Jan 2023 09:03:03 +0100
Subject: [PATCH 20/26] kerbs: make thickness of lines configurable

---
 kerbs.yaml | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/kerbs.yaml b/kerbs.yaml
index 4ae0512..2e28833 100644
--- a/kerbs.yaml
+++ b/kerbs.yaml
@@ -39,14 +39,19 @@ feature:
       {{ type == 'way' ? false : true }}
     radius: 4
     fillOpacity: 1
-    width: 2
+    width: |
+      {{ config.thickness|default(2) }}
   style:marker:
     color: |
       {{ const.kerb[kerb] }}
-    offset: 2
-    width: 2
+    offset: |
+      {{ config.thickness|default(2) }}
+    width: |
+      {{ config.thickness|default(2) }}
     fill: false
-    dashArray: '2,9'
+    dashArray: |
+      {{ config.thickness|default(2) }},{{ config.thickness|default(2) * 4 }}
+    lineCap: butt
   style:node:
     fillColor: |
       {{ const.kerb[kerb] }}
@@ -68,6 +73,17 @@ info: |
     </tr>
   {% endfor %}
   </table>
+config:
+  thickness:
+    name: "{{ trans('thickness') }}"
+    type: select
+    default: 2
+    placeholder: false
+    values:
+      1: "{{ trans('thickness:thin') }}"
+      2: "{{ trans('thickness:normal') }}"
+      3: "{{ trans('thickness:tick') }}"
+      5: "{{ trans('thickness:very_thick') }}"
 const:
   kerb:
     flush: '#00af00'

From 404d30e2acba9b1d4d25c1fa61fa57ebdd0e6294 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Sun, 1 Jan 2023 16:34:08 +0100
Subject: [PATCH 21/26] kerbs: different color schemes

---
 kerbs.yaml | 50 ++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 36 insertions(+), 14 deletions(-)

diff --git a/kerbs.yaml b/kerbs.yaml
index 2e28833..145431e 100644
--- a/kerbs.yaml
+++ b/kerbs.yaml
@@ -21,7 +21,7 @@ feature:
     {% if type == 'way' %}
     line
     {% else %}
-    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb], color: 'black' }) }}
+    {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb][config.color_scheme|default('color1')], color: 'black' }) }}
     {% endif %}
   details: |
     {% if tags.kerb and tags.kerb != 'yes' %}{{ tagTrans('kerb', tags.kerb) }}{% endif %}
@@ -34,7 +34,7 @@ feature:
     {% endif %}
   style:
     color: |
-      {{ const.kerb[kerb] }}
+      {{ const.kerb[kerb][config.color_scheme|default('color1')] }}
     fill: |
       {{ type == 'way' ? false : true }}
     radius: 4
@@ -43,7 +43,7 @@ feature:
       {{ config.thickness|default(2) }}
   style:marker:
     color: |
-      {{ const.kerb[kerb] }}
+      {{ const.kerb[kerb][config.color_scheme|default('color1')] }}
     offset: |
       {{ config.thickness|default(2) }}
     width: |
@@ -54,7 +54,7 @@ feature:
     lineCap: butt
   style:node:
     fillColor: |
-      {{ const.kerb[kerb] }}
+      {{ const.kerb[kerb][config.color_scheme|default('color1')] }}
     fill: true
     radius: 6
     fillOpacity: 1
@@ -63,11 +63,11 @@ feature:
 info: |
   {{ tagTrans('barrier', 'kerb') }}:
   <table>
-  {% for v, color in const.kerb %}
+  {% for v, def in const.kerb %}
     <tr>
       <td>
-        {{ markerLine({ styles: 'default,marker', style: { width: 2, color: color }, 'style:marker': { width: 2, offset: 2, color: color, dashArray: '2,9'} } ) }}
-        {{ markerCircle({ radius: 4, width: 1, fillOpacity: 1, fillColor: color, color: 'black' }) }}
+        {{ markerLine({ styles: 'default,marker', style: { width: 2, color: def[config.color_scheme|default('color1')] }, 'style:marker': { width: 2, offset: 2, color: def[config.color_scheme|default('color1')], dashArray: '2,9'} } ) }}
+        {{ markerCircle({ radius: 4, width: 1, fillOpacity: 1, fillColor: def[config.color_scheme|default('color1')], color: 'black' }) }}
       </td>
       <td>{{ v == 'unknown' ? trans('unknown') : tagTrans('kerb', v) }}</td>
     </tr>
@@ -79,16 +79,38 @@ config:
     type: select
     default: 2
     placeholder: false
+    show_default: true
     values:
       1: "{{ trans('thickness:thin') }}"
       2: "{{ trans('thickness:normal') }}"
-      3: "{{ trans('thickness:tick') }}"
+      3: "{{ trans('thickness:thick') }}"
       5: "{{ trans('thickness:very_thick') }}"
+  color_scheme:
+    name: "{{ trans('color_scheme') }}"
+    type: select
+    default: color1
+    placeholder: false
+    show_default: true
+    values:
+      color1: "1"
+      color2: "2"
 const:
   kerb:
-    flush: '#00af00'
-    lowered: '#007f7f'
-    no: '#000000'
-    raised: '#af0000'
-    rolled: '#af7f00'
-    unknown: '#7f7f7f'
+    flush:
+      color1: '#00af00'
+      color2: '#ff007f'
+    lowered:
+      color1: '#007f7f'
+      color2: '#00ffff'
+    no:
+      color1: '#000000'
+      color2: '#ff0000'
+    raised:
+      color1: '#af0000'
+      color2: '#7f00ff'
+    rolled:
+      color1: '#af7f00'
+      color2: '#00af00'
+    unknown:
+      color1: '#7f7f7f'
+      color2: '#0000ff'

From ace40195a1c16fa89e197cc9f64845711281aa5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 3 Jan 2023 17:14:18 +0100
Subject: [PATCH 22/26] culture-media: add a filter for 'no
 image/wikimedia_commons OR wikidata without image'

---
 culture-media.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/culture-media.yaml b/culture-media.yaml
index 04469fa..c66e3c6 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -40,6 +40,8 @@ feature:
   exclude: |
     {% if filter.category == 'wikidata_no_image' %}
       {{ (not wikidata) or (wikidata.claims.P18|length != 0) }}
+    {% elseif filter.category == 'no_image_or_wikidata_no_image' %}
+      {{ (tags.wikidata and not wikidata) or (wikidata.claims.P18|length != 0) }}
     {% elseif filter.category == 'wikidata_human' %}
       {{ wikidata.claims.P31[0].mainsnak.datavalue.value.id not in ['Q5'] }}
     {% endif %}
@@ -104,6 +106,7 @@ filter:
       <option value='has_image' query='(nwr[!wikidata][image];nwr[!wikidata][wikimedia_commons];)'>image or wikimedia_commons tag but no wikidata</option>
       <option value='wikidata' query='nwr[wikidata]'>has wikidata tag</option>
       <option value='wikidata_no_image' query='nwr[wikidata]'>has wikidata tag, but wikidata object does not have an image</option>
+      <option value='no_image_or_wikidata_no_image' query='(nwr[!image][!wikimedia_commons][!wikidata][!wikipedia];nwr[wikidata];)'>no image/wikimedia_commons OR wikidata without image</option>
       <option value='wikidata_human' query='nwr[wikidata]'>wikidata tag points to a human, should most likely be 'subject:wikidata'</option>
 info: |
   <table>

From c23d925fce9b044a8c3dae385ce17c6cf7d48dbc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 3 Jan 2023 17:33:57 +0100
Subject: [PATCH 23/26] culture-media: use categories instead of text

---
 culture-media.yaml | 83 ++++++++++++++++++++--------------------------
 1 file changed, 36 insertions(+), 47 deletions(-)

diff --git a/culture-media.yaml b/culture-media.yaml
index c66e3c6..6550a7d 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -9,34 +9,32 @@ query:
     )
 feature: 
   pre: |
-    {% set color = 'red' %}
-    {% set str = 'No image, wikimedia_commons or wikidata' %}
+    {% set cat = 'no' %}
+    {% set str = null %}
 
     {% if tags.wikidata %}
-      {% set color = 'blue' %}
-      {% set str = 'has wikidata tag' %}
+      {% set cat = 'wikidata' %}
       {% set wikidata = tags.wikidata|wikidataEntity %}
 
       {% if wikidata and wikidata.claims.P18|length == 0 %}
-        {% set color = '#007fff' %}
-        {% set str = 'has wikidata tag, but wikidata object does not have an image' %}
+        {% set cat = 'wikidata_no_image' %}
       {% endif %}
 
       {% if wikidata.claims.P31[0].mainsnak.datavalue.value.id in ['Q5'] %}
-        {% set color = 'magenta' %}
-        {% set str = "wikidata points to a human, should most likely be 'subject:wikidata'" %}
+        {% set cat = 'wikidata_human' %}
       {% endif %}
 
     {% elseif tags.wikipedia %}
-      {% set color = '#af00ff' %}
-      {% set str = 'wikipedia tag found without corresponding wikidata tag' %}
+      {% set cat = 'wikipedia_no_wikidata' %}
 
     {% elseif tags.wikimedia_commons or tags.image %}
-      {% set color = 'cyan' %}
+      {% set cat = 'has_image' %}
       {% set str = tags.wikimedia_commons ? 'has wikimedia_commons tag' : 'has image tag' %}
 
     {% endif %}
 
+    {% set def = const.categories[cat] %}
+
   exclude: |
     {% if filter.category == 'wikidata_no_image' %}
       {{ (not wikidata) or (wikidata.claims.P18|length != 0) }}
@@ -47,11 +45,11 @@ feature:
     {% endif %}
 
   body: |
-    {{ str }}
+    {{ str|default(def.text) }}
 
   style:
     color: |
-      {{ color }}
+      {{ def.color }}
 
   description: |
     {% if tags.historic and tags.historic != 'yes' %}
@@ -68,8 +66,8 @@ feature:
     {% elseif tags.heritage %}
       {{ keyTrans('heritage') }}
     {% endif %}
-  markerSymbol: "{{ markerPointer({ fillColor: color })|raw }}"
-  listMarkerSymbol: "{{ markerCircle({ fillColor: color })|raw }}"
+  markerSymbol: "{{ markerPointer({ fillColor: def.color })|raw }}"
+  listMarkerSymbol: "{{ markerCircle({ fillColor: def.color })|raw }}"
 
   markerSign: |
     {% set icon = '' %}
@@ -110,42 +108,14 @@ filter:
       <option value='wikidata_human' query='nwr[wikidata]'>wikidata tag points to a human, should most likely be 'subject:wikidata'</option>
 info: |
   <table>
+    {% for k, def in const.categories %}
       <tr>
         <td>
-          {{ markerCircle({ fillColor: 'red' })|raw }}
-        </td>
-        <td>No image, wikimedia_commons or wikidata</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: 'magenta' })|raw }}
-        </td>
-        <td>wikidata tag points to a human, should most likely be 'subject:wikidata'</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: '#af00ff' })|raw }}
-        </td>
-        <td>wikipedia tag found without corresponding wikidata tag</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: 'cyan' })|raw }}
-        </td>
-        <td>image or wikimedia_commons tag but no wikidata</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: '#007fff' })|raw }}
+          {{ markerCircle({ fillColor: def.color })|raw }}
         </td>
-        <td>has wikidata tag, but wikidata object does not have an image</td>
-      </tr>
-      <tr>
-        <td>
-          {{ markerCircle({ fillColor: 'blue' })|raw }}
-        </td>
-        <td>has wikidata tag</td>
+        <td>{{ def.text }}</td>
       </tr>
+    {% endfor %}
   </table>
 
   This category lists artwork, memorials, historic and heritage protected objects. These should have an <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Key:image">image</a> or <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Key:wikimedia_commons">wikimedia_commons</a> tag, or (even better) a <a target="_blank" href="https://wiki.openstreetmap.org/wiki/Key:wikidata">wikidata</a> tag pointing to the object's entry.<br>
@@ -178,3 +148,22 @@ const:
     other:
       query: 'nwr[historic][historic!~"^(memorial|monument|wayside_cross|wayside_shrine|building)$"]'
       trans: 'other'
+  categories:
+    'no':
+      color: red
+      text: No image, wikimedia_commons or wikidata
+    wikidata_human:
+      color: magenta
+      text: wikidata tag points to a human, should most likely be 'subject:wikidata'
+    wikipedia_no_wikidata:
+      color: '#af00ff'
+      text: wikipedia tag found without corresponding wikidata tag
+    has_image:
+      color: cyan
+      text: image or wikimedia_commons tag but no wikidata
+    wikidata_no_image:
+      color: '#007fff'
+      text: has wikidata tag, but wikidata object does not have an image
+    wikidata:
+      color: blue
+      text: has wikidata tag

From 348aec10af5c68985b1f1259ab4abb64d8b75c5b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 3 Jan 2023 17:40:37 +0100
Subject: [PATCH 24/26] culture-media: re-order categories

---
 culture-media.yaml | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/culture-media.yaml b/culture-media.yaml
index 6550a7d..a31785c 100644
--- a/culture-media.yaml
+++ b/culture-media.yaml
@@ -152,12 +152,6 @@ const:
     'no':
       color: red
       text: No image, wikimedia_commons or wikidata
-    wikidata_human:
-      color: magenta
-      text: wikidata tag points to a human, should most likely be 'subject:wikidata'
-    wikipedia_no_wikidata:
-      color: '#af00ff'
-      text: wikipedia tag found without corresponding wikidata tag
     has_image:
       color: cyan
       text: image or wikimedia_commons tag but no wikidata
@@ -167,3 +161,9 @@ const:
     wikidata:
       color: blue
       text: has wikidata tag
+    wikidata_human:
+      color: magenta
+      text: wikidata tag points to a human, should most likely be 'subject:wikidata'
+    wikipedia_no_wikidata:
+      color: '#af00ff'
+      text: wikipedia tag found without corresponding wikidata tag

From db0653d3674b2e3187ea286e8f4f54998f9f4e57 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@xover.mud.at>
Date: Tue, 3 Jan 2023 19:14:34 +0100
Subject: [PATCH 25/26] kerbs: bugfix (label of kerb=no)

---
 kerbs.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kerbs.yaml b/kerbs.yaml
index 145431e..3c6fd42 100644
--- a/kerbs.yaml
+++ b/kerbs.yaml
@@ -102,7 +102,7 @@ const:
     lowered:
       color1: '#007f7f'
       color2: '#00ffff'
-    no:
+    'no':
       color1: '#000000'
       color2: '#ff0000'
     raised:

From 63594dfc07280a1e2be63be82896dac20f87a33f Mon Sep 17 00:00:00 2001
From: Igor Eliezer <igor.eliezer@gmail.com>
Date: Fri, 16 Dec 2022 18:54:36 +0000
Subject: [PATCH 26/26] Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (104 of 104 strings)

Translation: OpenStreetBrowser/Main Categories
Translate-URL: http://weblate.openstreetbrowser.org/projects/openstreetbrowser/main-categories/pt_BR/
---
 lang/pt-br.json | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lang/pt-br.json b/lang/pt-br.json
index 9847aa5..cf4be38 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -100,5 +100,7 @@
     "deprecated": "Etiqueta %s é obsoleta. Ver <a target='_blank' href=\"%s\">aqui</a> para detalhes.",
     "category:culture-media": "Cultura - Imagem e Wikidata",
     "category:fixme": "Corrija-me",
-    "category:osm-qa": "Controle de Qualidade OSM"
+    "category:osm-qa": "Controle de Qualidade OSM",
+    "category:footways": "Calçadas",
+    "category:kerbs": "Meios-fios"
 }