diff --git a/assets/layers/bike_cleaning/bike_cleaning.json b/assets/layers/bike_cleaning/bike_cleaning.json
index fedd79d62..fe85d1ecc 100644
--- a/assets/layers/bike_cleaning/bike_cleaning.json
+++ b/assets/layers/bike_cleaning/bike_cleaning.json
@@ -34,8 +34,7 @@
"or": [
"service:bicycle:cleaning=yes",
"service:bicycle:cleaning=diy",
- "amenity=bicycle_wash",
- "amenity=bike_wash"
+ "amenity=bicycle_wash"
]
}
},
@@ -83,7 +82,6 @@
"if": {
"and": [
"service:bicycle:cleaning~*",
- "amenity!=bike_wash",
"amenity!=bicycle_wash"
]
},
@@ -106,7 +104,6 @@
]
}
],
- "lineRendering": [],
"presets": [
{
"title": {
@@ -158,7 +155,6 @@
},
"condition": {
"and": [
- "amenity!=bike_wash",
"amenity!=bicycle_wash",
"service:bicycle:cleaning!=no",
"service:bicycle:cleaning!="
@@ -169,7 +165,7 @@
"addExtraTags": [
"service:bicycle:cleaning:fee=yes"
],
- "inline": true
+ "inline": false
},
"mappings": [
{
@@ -241,7 +237,6 @@
},
"condition": {
"or": [
- "amenity=bike_wash",
"amenity=bicycle_wash"
]
},
@@ -285,6 +280,54 @@
}
],
"id": "bike_cleaning-charge"
+ },
+ {
+ "question": {
+ "en": "Is this bicycle cleaning service automated?",
+ "nl": "Is dit fietsschoonmaakpunt geautomatiseerd?"
+ },
+ "id": "automated",
+ "mappings": [
+ {
+ "if": "automated=no",
+ "then": {
+ "en": "This is a manual bike washing station",
+ "nl": "Dit is een handmatig fietsschoonmaakpunt"
+ }
+ },
+ {
+ "if": "automated=yes",
+ "then": {
+ "en": "This is an automated bike wash",
+ "nl": "Dit is een automatisch fietsschoonmaakpunt"
+ }
+ }
+ ],
+ "condition": "amenity=bicycle_wash"
+ },
+ {
+ "question": {
+ "nl": "Is dit fietsschoonmaakpunt zelfbediening?",
+ "en": "Is this cleaning service self-service?"
+ },
+ "id": "self_service",
+ "mappings": [
+ {
+ "if": "self_service=yes",
+ "then": {
+ "nl": "Dit fietsschoonmaakpunt is zelfbediening",
+ "en": "This cleaning service is self-service"
+ }
+ },
+ {
+ "if": "self_service=no",
+ "then": {
+ "nl": "Dit fietsschoonmaakpunt wordt bediend door aanwezig personeel",
+ "en": "This cleaning service is operated by an employee"
+ }
+ }
+ ],
+ "condition": "amenity=bicycle_wash"
}
],
"deletion": {
@@ -300,4 +343,4 @@
"enableRelocation": false,
"enableImproveAccuracy": true
}
-}
+}
\ No newline at end of file
diff --git a/assets/layers/clock/clock.json b/assets/layers/clock/clock.json
index 5c159a579..20a91e0e6 100644
--- a/assets/layers/clock/clock.json
+++ b/assets/layers/clock/clock.json
@@ -97,8 +97,8 @@
"support=wall_mounted"
],
"title": {
- "en": "a wall-mounted clock",
- "nl": "een klok aan een muur",
+ "en": "a wall-mounted clock, mounted using a support perpendicular to the wall",
+ "nl": "een klok aan een muur, bevestigd met een steun loodrecht op de muur",
"de": "eine an der Wand montierte Uhr",
"ca": "un rellotge muntat en un paret",
"fr": "une horloge fixée au mur",
@@ -117,6 +117,23 @@
"snapToLayer": [
"walls_and_buildings"
]
+ },
+ {
+ "tags": [
+ "amenity=clock",
+ "support=wall"
+ ],
+ "title": {
+ "en": "a wall-mounted clock, mounted directly on a wall",
+ "nl": "een klok aan een muur, rechtstreeks bevestigd aan een muur"
+ },
+ "description": {
+ "en": "A publicly visible clock mounted directly on a wall",
+ "nl": "Een publiekelijk zichtbare klok rechtstreeks bevestigd aan een muur"
+ },
+ "snapToLayer": [
+ "walls_and_buildings"
+ ]
}
],
"tagRenderings": [
@@ -148,8 +165,8 @@
{
"if": "support=wall_mounted",
"then": {
- "en": "This clock is mounted on a wall",
- "nl": "Deze klok is bevestigd aan een muur",
+ "en": "This clock is mounted on a wall, usually through a support perpendicular to the wall",
+ "nl": "Deze klok is bevestigd aan een muur, meestal met een steun loodrecht op de muur",
"de": "Diese Uhr ist an einer Wand montiert",
"ca": "Aquest rellotge està muntat en una paret",
"fr": "Cette horloge est fixée sur un mur",
@@ -157,6 +174,13 @@
"cs": "Tyto hodiny jsou namontovány na stěně"
}
},
+ {
+ "if": "support=wall",
+ "then": {
+ "en": "This clock is mounted directly on a wall",
+ "nl": "Deze klok is rechtstreeks aan een muur bevestigd"
+ }
+ },
{
"if": "support=billboard",
"then": {
@@ -245,6 +269,30 @@
}
]
},
+ {
+ "builtin": "indoor",
+ "override": {
+ "question": {
+ "en": "Is this clock indoors?",
+ "nl": "Is deze klok binnen?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "This clock is indoors",
+ "nl": "Deze klok is binnen"
+ }
+ },
+ {
+ "if": "indoor=no",
+ "then": {
+ "en": "This clock is outdoors",
+ "nl": "Deze klok is buiten"
+ }
+ }
+ ]
+ }
+ },
{
"id": "visibility",
"question": {
@@ -293,7 +341,8 @@
"cs": "Tyto hodiny jsou viditelné ze vzdálenosti větší než 20 metrů (např. kostelní nebo nádražní hodiny)"
}
}
- ]
+ ],
+ "condition": "indoor!=yes"
},
{
"id": "date",
@@ -572,4 +621,4 @@
],
"deletion": true,
"allowMove": true
-}
+}
\ No newline at end of file
diff --git a/assets/layers/crossings/crossing_unmarked.png b/assets/layers/crossings/crossing_unmarked.png
new file mode 100644
index 000000000..629009d32
Binary files /dev/null and b/assets/layers/crossings/crossing_unmarked.png differ
diff --git a/assets/layers/crossings/crossing_unmarked.png.license b/assets/layers/crossings/crossing_unmarked.png.license
new file mode 100644
index 000000000..8bbbce063
--- /dev/null
+++ b/assets/layers/crossings/crossing_unmarked.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: StenSoft
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/crossings.json b/assets/layers/crossings/crossings.json
index 2cd743b98..57d7f554d 100644
--- a/assets/layers/crossings/crossings.json
+++ b/assets/layers/crossings/crossings.json
@@ -91,7 +91,8 @@
],
"location": [
"point"
- ]
+ ],
+ "anchor": "center"
}
],
"lineRendering": [
@@ -222,49 +223,181 @@
"fr": "Passage piéton sans marquages",
"ca": "Creuament sense senyalitzar",
"cs": "Přechod bez označení přechodu"
- }
+ },
+ "hideInAnswer": true
}
]
},
{
- "id": "crossing-is-zebra",
+ "id": "markings",
"question": {
- "en": "Is this is a zebra crossing?",
- "nl": "Is dit een zebrapad?",
- "de": "Ist das ein Zebrastreifen?",
- "es": "¿Esto es un paso de cebra?",
- "fr": "Est-ce un passage piéton ?",
- "ca": "Açò és un pas de vianants?",
- "pl": "Czy to jest przejście dla pieszych typu \"zebra\"?",
- "cs": "Jedná se o zebra přechod?"
+ "en": "What kind of markings does this crossing have?",
+ "nl": "Wat voor markering heeft deze oversteekplaats?"
},
- "condition": "crossing=uncontrolled",
"mappings": [
{
- "if": "crossing_ref=zebra",
+ "if": "crossing:markings=no",
"then": {
- "en": "This is a zebra crossing",
- "nl": "Dit is een zebrapad",
- "de": "Dies ist ein Zebrastreifen",
- "es": "Esto es un paso de cebra",
- "fr": "C'est un passage piéton",
- "ca": "Açò és un pas de vianants",
- "cs": "Toto je zebra přechod"
+ "en": "This crossing has no markings",
+ "nl": "Deze oversteekplaats heeft geen markeringen"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/crossing_unmarked.png"
}
},
{
- "if": "crossing_ref=",
+ "if": "crossing:markings=zebra",
"then": {
- "en": "This is not a zebra crossing",
- "nl": "Dit is geen zebrapad",
- "de": "Dies ist kein Zebrastreifen",
- "es": "Esto no es un paso de cebra",
- "fr": "Ce n'est pas un passage piéton",
- "ca": "Açò no és un pas de vianants",
- "cs": "Tohle není zebra přechod"
+ "en": "This crossing has zebra markings",
+ "nl": "Deze oversteekplaats heeft een zebramarkering"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_zebra.png"
+ }
+ },
+ {
+ "hideInAnswer": true,
+ "then": {
+ "en": "This crossing has markings of an unknown type",
+ "nl": "Deze oversteekplaats heeft markeringen van een onbekend type"
+ },
+ "if": "crossing:markings=yes"
+ },
+ {
+ "if": "crossing:markings=lines",
+ "then": {
+ "en": "This crossings has lines on either side of the crossing",
+ "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_lines.png"
+ }
+ },
+ {
+ "if": "crossing:markings=ladder",
+ "then": {
+ "en": "This crossing has lines on either side of the crossing, along with bars connecting them",
+ "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met strepen die ze verbinden"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_ladder.png"
+ }
+ },
+ {
+ "if": "crossing:markings=dashes",
+ "then": {
+ "en": "This crossing has dashed lines on either sides of the crossing",
+ "nl": "Deze oversteekplaats heeft onderbroken lijnen aan beide kanten van de oversteekplaats"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_dashes.png"
+ }
+ },
+ {
+ "if": "crossing:markings=dots",
+ "then": {
+ "en": "This crossing has dotted lines on either sides of the crossing",
+ "nl": "Deze oversteekplaats heeft stippellijnen aan beide kanten van de oversteekplaats"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_dots.png"
+ }
+ },
+ {
+ "if": "crossing:markings=surface",
+ "then": {
+ "en": "This crossing is marked by using a different coloured surface",
+ "nl": "Deze oversteekplaats is gemarkeerd door een anders gekleurd wegdek"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_surface.png"
+ }
+ },
+ {
+ "if": "crossing:markings=ladder:skewed",
+ "then": {
+ "en": "This crossing has lines on either side of the crossing, along with angled bars connecting them",
+ "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met schuine strepen die ze verbinden"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_ladder_skewed.png"
+ }
+ },
+ {
+ "if": "crossing:markings=zebra:paired",
+ "then": {
+ "en": "This crossing has zebra markings with an interruption in every bar",
+ "nl": "Deze oversteekplaats heeft zebramarkeringen met een onderbreking van elke streep"
+ }
+ },
+ {
+ "if": "crossing:markings=zebra:bicolour",
+ "then": {
+ "en": "This crossing has zebra markings in alternating colours",
+ "nl": "Deze oversteekplaats heeft een zebramarkering in afwisselende kleuren"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_zebra_bicolour.png"
+ }
+ },
+ {
+ "if": "crossing:markings=zebra:double",
+ "then": {
+ "en": "This crossing has double zebra markings",
+ "nl": "Deze oversteekplaats heeft een dubbele zebramarkering"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_zebra_double.png"
+ }
+ },
+ {
+ "if": "crossing:markings=pictograms",
+ "then": {
+ "en": "This crossing has pictograms on the road",
+ "nl": "Deze oversteekplaats heeft pictogrammen op de weg"
+ }
+ },
+ {
+ "if": "crossing:markings=ladder:paired",
+ "then": {
+ "en": "This crossing has lines on either side of the crossing, along with bars connecting them, with an interruption in every bar",
+ "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met strepen die ze verbinden, met een onderbreking van elke streep"
+ }
+ },
+ {
+ "if": "crossing:markings=lines:paired",
+ "then": {
+ "en": "This crossing has double lines on either side of the crossing",
+ "nl": "Deze oversteekplaats heeft dubbele lijnen aan beide kanten van de oversteekplaats"
+ },
+ "icon": {
+ "class": "large",
+ "path": "./assets/layers/crossings/markings_lines_paired.png"
}
}
- ]
+ ],
+ "render": {
+ "en": "This crossing has {crossing:markings} markings",
+ "nl": "Deze oversteekplaats heeft {crossing:markings} markeringen"
+ },
+ "freeform": {
+ "key": "crossing:markings",
+ "type": "string",
+ "addExtraTags": [
+ "fixme=Free-form value used in MapComplete for crossing:markings"
+ ]
+ },
+ "multiAnswer": true
},
{
"id": "crossing-bicycle-allowed",
@@ -732,4 +865,4 @@
"enableImproveAccuracy": true,
"enableRelocation": false
}
-}
+}
\ No newline at end of file
diff --git a/assets/layers/crossings/license_info.json b/assets/layers/crossings/license_info.json
index 22105ed13..cfed79075 100644
--- a/assets/layers/crossings/license_info.json
+++ b/assets/layers/crossings/license_info.json
@@ -39,6 +39,116 @@
"https://wiki.openstreetmap.org/wiki/File:Vibrating_button_illustration.jpg"
]
},
+ {
+ "path": "crossing_unmarked.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "StenSoft"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Crossing_without_markings.png"
+ ]
+ },
+ {
+ "path": "markings_dashes.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_dashes.png"
+ ]
+ },
+ {
+ "path": "markings_dots.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_dots.png"
+ ]
+ },
+ {
+ "path": "markings_ladder.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_ladder.png"
+ ]
+ },
+ {
+ "path": "markings_ladder_skewed.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_adder_skewed.png"
+ ]
+ },
+ {
+ "path": "markings_lines.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_lines.png"
+ ]
+ },
+ {
+ "path": "markings_lines_paired.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_lines_paired.png"
+ ]
+ },
+ {
+ "path": "markings_surface.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Surface_crossing_markings.png"
+ ]
+ },
+ {
+ "path": "markings_zebra.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_zebra.png"
+ ]
+ },
+ {
+ "path": "markings_zebra_bicolour.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Markings_zebra_bicolour.png"
+ ]
+ },
+ {
+ "path": "markings_zebra_double.png",
+ "license": "CC0 1.0",
+ "authors": [
+ "Popball"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Crossing_markings_zebra_double.png"
+ ]
+ },
{
"path": "pedestrian_crossing.svg",
"license": "CC-BY-SA-4.0",
diff --git a/assets/layers/crossings/markings_dashes.png b/assets/layers/crossings/markings_dashes.png
new file mode 100644
index 000000000..e562679c1
Binary files /dev/null and b/assets/layers/crossings/markings_dashes.png differ
diff --git a/assets/layers/crossings/markings_dashes.png.license b/assets/layers/crossings/markings_dashes.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_dashes.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_dots.png b/assets/layers/crossings/markings_dots.png
new file mode 100644
index 000000000..afd399b52
Binary files /dev/null and b/assets/layers/crossings/markings_dots.png differ
diff --git a/assets/layers/crossings/markings_dots.png.license b/assets/layers/crossings/markings_dots.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_dots.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_ladder.png b/assets/layers/crossings/markings_ladder.png
new file mode 100644
index 000000000..0cee129af
Binary files /dev/null and b/assets/layers/crossings/markings_ladder.png differ
diff --git a/assets/layers/crossings/markings_ladder.png.license b/assets/layers/crossings/markings_ladder.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_ladder.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_ladder_skewed.png b/assets/layers/crossings/markings_ladder_skewed.png
new file mode 100644
index 000000000..a9d717d42
Binary files /dev/null and b/assets/layers/crossings/markings_ladder_skewed.png differ
diff --git a/assets/layers/crossings/markings_ladder_skewed.png.license b/assets/layers/crossings/markings_ladder_skewed.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_ladder_skewed.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_lines.png b/assets/layers/crossings/markings_lines.png
new file mode 100644
index 000000000..cbd7a9ec6
Binary files /dev/null and b/assets/layers/crossings/markings_lines.png differ
diff --git a/assets/layers/crossings/markings_lines.png.license b/assets/layers/crossings/markings_lines.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_lines.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_lines_paired.png b/assets/layers/crossings/markings_lines_paired.png
new file mode 100644
index 000000000..f33af47db
Binary files /dev/null and b/assets/layers/crossings/markings_lines_paired.png differ
diff --git a/assets/layers/crossings/markings_lines_paired.png.license b/assets/layers/crossings/markings_lines_paired.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_lines_paired.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_surface.png b/assets/layers/crossings/markings_surface.png
new file mode 100644
index 000000000..f0048c67c
Binary files /dev/null and b/assets/layers/crossings/markings_surface.png differ
diff --git a/assets/layers/crossings/markings_surface.png.license b/assets/layers/crossings/markings_surface.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_surface.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_zebra.png b/assets/layers/crossings/markings_zebra.png
new file mode 100644
index 000000000..6588af96f
Binary files /dev/null and b/assets/layers/crossings/markings_zebra.png differ
diff --git a/assets/layers/crossings/markings_zebra.png.license b/assets/layers/crossings/markings_zebra.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_zebra.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_zebra_bicolour.png b/assets/layers/crossings/markings_zebra_bicolour.png
new file mode 100644
index 000000000..2e77a1996
Binary files /dev/null and b/assets/layers/crossings/markings_zebra_bicolour.png differ
diff --git a/assets/layers/crossings/markings_zebra_bicolour.png.license b/assets/layers/crossings/markings_zebra_bicolour.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_zebra_bicolour.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/crossings/markings_zebra_double.png b/assets/layers/crossings/markings_zebra_double.png
new file mode 100644
index 000000000..6ab4c3a0b
Binary files /dev/null and b/assets/layers/crossings/markings_zebra_double.png differ
diff --git a/assets/layers/crossings/markings_zebra_double.png.license b/assets/layers/crossings/markings_zebra_double.png.license
new file mode 100644
index 000000000..09b78e137
--- /dev/null
+++ b/assets/layers/crossings/markings_zebra_double.png.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Popball
+SPDX-License-Identifier: CC0 1.0
\ No newline at end of file
diff --git a/assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json b/assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json
new file mode 100644
index 000000000..eb6ab3ea3
--- /dev/null
+++ b/assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json
@@ -0,0 +1,148 @@
+{
+ "credits": "Robin van der Linde",
+ "pointRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "marker": [
+ {
+ "icon": "pin",
+ "color": "#538EE8"
+ },
+ {
+ "icon": "./assets/layers/cyclist_waiting_aid/waiting_aid.svg"
+ }
+ ],
+ "anchor": "bottom"
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "What kind of components does this waiting aid have?"
+ },
+ "id": "type",
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "footrest=yes",
+ "then": {
+ "en": "There is a board or peg to rest your foot on here"
+ },
+ "ifnot": "footrest="
+ },
+ {
+ "if": "handrest=yes",
+ "then": {
+ "en": "There is a rail or a handle to hold on to here"
+ },
+ "ifnot": "handrest="
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "On what side of the road is this located?"
+ },
+ "id": "side",
+ "mappings": [
+ {
+ "if": "side=left",
+ "then": {
+ "en": "This waiting aid is located on the left side"
+ }
+ },
+ {
+ "if": "side=right",
+ "then": {
+ "en": "This waiting aid is located on the right side"
+ }
+ },
+ {
+ "if": "side=both",
+ "then": {
+ "en": "There are waiting aids on both sides of the road"
+ }
+ }
+ ]
+ },
+ {
+ "condition": "direction~*",
+ "id": "direction",
+ "mappings": [
+ {
+ "if": "direction=forward",
+ "then": {
+ "en": "This waiting aid can be used when going forward on this way"
+ }
+ },
+ {
+ "if": "direction=backward",
+ "then": {
+ "en": "This waiting aid can be used when going backward on this way"
+ }
+ }
+ ],
+ "render": {
+ "en": "This waiting aid can be used when going in {direction} direction"
+ }
+ }
+ ],
+ "lineRendering": [
+ {
+ "width": 1,
+ "color": "blue"
+ }
+ ],
+ "credits:uid": 5093765,
+ "id": "cyclist_waiting_aid",
+ "description": {
+ "en": "Various pieces of infrastructure that aid cyclists while they wait at a traffic light."
+ },
+ "source": {
+ "osmTags": "highway=cyclist_waiting_aid"
+ },
+ "name": {
+ "en": "Cyclist Waiting Aids"
+ },
+ "title": {
+ "render": {
+ "en": "Cyclist Waiting Aid"
+ }
+ },
+ "deletion": {
+ "softDeletionTags": {
+ "and": [
+ "highway=",
+ "side=",
+ "footrest=",
+ "handrest=",
+ "material=",
+ "height=",
+ "support=",
+ "count=",
+ "capacity="
+ ]
+ }
+ },
+ "allowMove": false,
+ "presets": [
+ {
+ "title": {
+ "en": "a cyclist waiting aid"
+ },
+ "tags": [
+ "highway=cyclist_waiting_aid"
+ ],
+ "description": {
+ "en": "A footrest, handrail or other aid, to improve comfort while waiting at traffic lights"
+ },
+ "snapToLayer": [
+ "cycleways_and_roads"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/cyclist_waiting_aid/license_info.json b/assets/layers/cyclist_waiting_aid/license_info.json
new file mode 100644
index 000000000..45b87f4de
--- /dev/null
+++ b/assets/layers/cyclist_waiting_aid/license_info.json
@@ -0,0 +1,10 @@
+[
+ {
+ "path": "waiting_aid.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/cyclist_waiting_aid/waiting_aid.svg b/assets/layers/cyclist_waiting_aid/waiting_aid.svg
new file mode 100644
index 000000000..f154e0c64
--- /dev/null
+++ b/assets/layers/cyclist_waiting_aid/waiting_aid.svg
@@ -0,0 +1,21 @@
+
diff --git a/assets/layers/cyclist_waiting_aid/waiting_aid.svg.license b/assets/layers/cyclist_waiting_aid/waiting_aid.svg.license
new file mode 100644
index 000000000..75299f884
--- /dev/null
+++ b/assets/layers/cyclist_waiting_aid/waiting_aid.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/item_with_image/item_with_image.json b/assets/layers/item_with_image/item_with_image.json
index c752b6ec7..193a9eadd 100644
--- a/assets/layers/item_with_image/item_with_image.json
+++ b/assets/layers/item_with_image/item_with_image.json
@@ -69,4 +69,4 @@
"images"
],
"allowMove": false
-}
+}
\ No newline at end of file
diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json
index 5c3f92532..63029e2a5 100644
--- a/assets/layers/questions/questions.json
+++ b/assets/layers/questions/questions.json
@@ -2972,7 +2972,30 @@
}
}
]
+ },
+ {
+ "id": "indoor",
+ "question": {
+ "en": "Is this object located indoors?",
+ "nl": "Bevindt dit object zich binnen?"
+ },
+ "mappings": [
+ {
+ "if": "indoor=yes",
+ "then": {
+ "en": "This object is located indoors",
+ "nl": "Dit object bevindt zich binnen"
+ }
+ },
+ {
+ "if": "indoor=no",
+ "then": {
+ "en": "This object is located outdoors",
+ "nl": "Dit object bevindt zich buiten"
+ }
+ }
+ ]
}
],
"allowMove": false
-}
+}
\ No newline at end of file
diff --git a/assets/layers/tactile_map/tactile_map.json b/assets/layers/tactile_map/tactile_map.json
new file mode 100644
index 000000000..f8fb216ac
--- /dev/null
+++ b/assets/layers/tactile_map/tactile_map.json
@@ -0,0 +1,146 @@
+{
+ "id": "tactile_map",
+ "name": {
+ "en": "Tactile Maps"
+ },
+ "description": {
+ "en": "Layer showing tactile maps, which can be used by visually impaired people to navigate the city."
+ },
+ "source": {
+ "osmTags": "information=tactile_map"
+ },
+ "title": {
+ "en": "Tactile Map"
+ },
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=tactile_map"
+ ],
+ "title": {
+ "en": "a tactile map"
+ },
+ "description": {
+ "en": "A tactile map that can be read using touch. Unlike a tactile model, this is relatively flat and does not feature three-dimensional buildings and such."
+ }
+ }
+ ],
+ "deletion": true,
+ "allowMove": true,
+ "minzoom": 10,
+ "pointRendering": [
+ {
+ "marker": [
+ {
+ "icon": "circle",
+ "color": "white"
+ },
+ {
+ "icon": "./assets/themes/maps/logo.svg"
+ }
+ ],
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "id": "description",
+ "question": {
+ "en": "What does this tactile map show?"
+ },
+ "freeform": {
+ "key": "blind:description:en",
+ "placeholder": {
+ "en": "e.g. Tactile map of the city center"
+ }
+ },
+ "render": {
+ "en": "Description: {blind:description:en}."
+ }
+ },
+ {
+ "id": "braille",
+ "question": {
+ "en": "Is there braille text on this tactile map?"
+ },
+ "mappings": [
+ {
+ "if": "braille=yes",
+ "then": {
+ "en": "This tactile map has braille text."
+ }
+ },
+ {
+ "if": "braille=no",
+ "then": {
+ "en": "This tactile map does not have braille text."
+ }
+ }
+ ]
+ },
+ {
+ "id": "braille_languages",
+ "condition": "braille=yes",
+ "render": {
+ "special": {
+ "type": "language_chooser",
+ "key": "tactile_writing:braille",
+ "question": {
+ "en": "In which languages is the braille text on this tactile map?"
+ },
+ "render_list_item": {
+ "en": "This map has braille text in {language}"
+ },
+ "render_single_language": {
+ "en": "This map has braille text in {language}"
+ }
+ }
+ }
+ },
+ {
+ "id": "embossed_letters",
+ "question": {
+ "en": "Are there embossed letters on this tactile map?"
+ },
+ "mappings": [
+ {
+ "if": "embossed_letters=yes",
+ "then": {
+ "en": "This tactile map has embossed letters."
+ }
+ },
+ {
+ "if": "embossed_letters=no",
+ "then": {
+ "en": "This tactile map does not have embossed letters."
+ }
+ }
+ ]
+ },
+ {
+ "id": "embossed_letters_languages",
+ "condition": "embossed_letters=yes",
+ "render": {
+ "special": {
+ "type": "language_chooser",
+ "key": "tactile_writing:embossed",
+ "question": {
+ "en": "In which languages are the embossed letters on this tactile map?"
+ },
+ "render_list_item": {
+ "en": "This map has embossed letters in {language}"
+ },
+ "render_single_language": {
+ "en": "This map has embossed letters in {language}"
+ }
+ }
+ }
+ },
+ "website"
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/tactile_model/license_info.json b/assets/layers/tactile_model/license_info.json
new file mode 100644
index 000000000..8bf12a33c
--- /dev/null
+++ b/assets/layers/tactile_model/license_info.json
@@ -0,0 +1,10 @@
+[
+ {
+ "path": "tactile_model.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/tactile_model/tactile_model.json b/assets/layers/tactile_model/tactile_model.json
new file mode 100644
index 000000000..98d98ead3
--- /dev/null
+++ b/assets/layers/tactile_model/tactile_model.json
@@ -0,0 +1,157 @@
+{
+ "id": "tactile_model",
+ "name": {
+ "en": "Tactile Models"
+ },
+ "description": {
+ "en": "Layer showing tactile models, three-dimensional models of the surrounding area."
+ },
+ "source": {
+ "osmTags": "information=tactile_model"
+ },
+ "title": {
+ "en": "Tactile Model"
+ },
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=tactile_model"
+ ],
+ "title": {
+ "en": "a tactile model"
+ },
+ "description": {
+ "en": "A tactile model is a three-dimensional model of an area, allowing people to explore/see an area by touch."
+ }
+ }
+ ],
+ "deletion": true,
+ "allowMove": true,
+ "minzoom": 10,
+ "pointRendering": [
+ {
+ "marker": [
+ {
+ "icon": "./assets/layers/tactile_model/tactile_model.svg"
+ }
+ ],
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "id": "description",
+ "question": {
+ "en": "What does this tactile model show?"
+ },
+ "freeform": {
+ "key": "blind:description:en",
+ "placeholder": {
+ "en": "e.g. Tactile model of the city center"
+ }
+ },
+ "render": {
+ "en": "Description: {blind:description:en}."
+ }
+ },
+ {
+ "id": "braille",
+ "question": {
+ "en": "Is there a braille description?"
+ },
+ "mappings": [
+ {
+ "if": "braille=yes",
+ "then": {
+ "en": "There is a braille description."
+ }
+ },
+ {
+ "if": "braille=no",
+ "then": {
+ "en": "There is no braille description."
+ }
+ }
+ ]
+ },
+ {
+ "id": "braille_languages",
+ "condition": "braille=yes",
+ "render": {
+ "special": {
+ "type": "language_chooser",
+ "key": "tactile_writing:braille",
+ "question": {
+ "en": "In which languages is there a braille description?"
+ },
+ "render_list_item": {
+ "en": "This model has a braille description in {language()}"
+ },
+ "render_single_language": {
+ "en": "This model has a braille description in {language}"
+ }
+ }
+ }
+ },
+ {
+ "id": "embossed_letters",
+ "question": {
+ "en": "Are there embossed letters describing the model?"
+ },
+ "mappings": [
+ {
+ "if": "embossed_letters=yes",
+ "then": {
+ "en": "There are embossed letters describing the model."
+ }
+ },
+ {
+ "if": "embossed_letters=no",
+ "then": {
+ "en": "There are no embossed letters describing the model."
+ }
+ }
+ ]
+ },
+ {
+ "id": "embossed_letters_languages",
+ "condition": "embossed_letters=yes",
+ "render": {
+ "special": {
+ "type": "language_chooser",
+ "key": "tactile_writing:embossed_letters",
+ "question": {
+ "en": "In which languages are there embossed letters?"
+ },
+ "render_list_item": {
+ "en": "This model has embossed letters in {language()}"
+ },
+ "render_single_language": {
+ "en": "This model has embossed letters in {language}"
+ }
+ }
+ }
+ },
+ {
+ "id": "scale",
+ "question": {
+ "en": "What scale is the model?"
+ },
+ "freeform": {
+ "key": "scale",
+ "placeholder": {
+ "en": "e.g. 1:1000"
+ }
+ },
+ "render": {
+ "en": "The scale of this model is {scale}."
+ }
+ },
+ "website"
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/tactile_model/tactile_model.svg b/assets/layers/tactile_model/tactile_model.svg
new file mode 100644
index 000000000..e565a43ec
--- /dev/null
+++ b/assets/layers/tactile_model/tactile_model.svg
@@ -0,0 +1,26 @@
+
diff --git a/assets/layers/tactile_model/tactile_model.svg.license b/assets/layers/tactile_model/tactile_model.svg.license
new file mode 100644
index 000000000..2c50b6981
--- /dev/null
+++ b/assets/layers/tactile_model/tactile_model.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0
\ No newline at end of file
diff --git a/assets/themes/blind_osm/blind_osm.json b/assets/themes/blind_osm/blind_osm.json
index ab98fa5da..b45f9a4fc 100644
--- a/assets/themes/blind_osm/blind_osm.json
+++ b/assets/themes/blind_osm/blind_osm.json
@@ -117,6 +117,8 @@
"minzoom": 17
}
},
- "stairs"
+ "stairs",
+ "tactile_map",
+ "tactile_model"
]
-}
+}
\ No newline at end of file
diff --git a/assets/themes/cycle_infra/cycle_infra.json b/assets/themes/cycle_infra/cycle_infra.json
index 638efa2ab..4e50ccfec 100644
--- a/assets/themes/cycle_infra/cycle_infra.json
+++ b/assets/themes/cycle_infra/cycle_infra.json
@@ -56,13 +56,18 @@
"startLon": 3.75,
"hideFromOverview": false,
"layers": [
- "cycleways_and_roads",
- "barrier",
- "crossings",
- "bicycle_counter"
+ {
+ "builtin": [
+ "cycleways_and_roads",
+ "barrier",
+ "crossings",
+ "bicycle_counter",
+ "cyclist_waiting_aid"
+ ],
+ "override": {
+ "minzoom": 16
+ }
+ }
],
- "overrideAll": {
- "minzoom": 16
- },
"enableDownload": true
-}
+}
\ No newline at end of file
diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json
index 5c5795e4e..c3ac9effa 100644
--- a/assets/themes/rainbow_crossings/rainbow_crossings.json
+++ b/assets/themes/rainbow_crossings/rainbow_crossings.json
@@ -47,12 +47,18 @@
}
}
},
- "rainbow_crossings",
+ {
+ "builtin": "rainbow_crossings",
+ "override": {
+ "isCounted": false
+ }
+ },
{
"builtin": "cycleways_and_roads",
"override": {
"minzoom": 18,
- "name": null
+ "name": null,
+ "isCounted": false
}
}
],
diff --git a/langs/layers/ca.json b/langs/layers/ca.json
index e6a5d6c34..dd5b6f42e 100644
--- a/langs/layers/ca.json
+++ b/langs/layers/ca.json
@@ -2398,10 +2398,10 @@
"1": {
"then": "Aquest rellotge està muntat en una paret"
},
- "2": {
+ "3": {
"then": "Aquest rellotge està muntat en una tanca publicitària"
},
- "3": {
+ "4": {
"then": "Aquest rellotge està al sòl"
}
},
@@ -2512,17 +2512,6 @@
},
"question": "Aquest creuament té una illa al mig?"
},
- "crossing-is-zebra": {
- "mappings": {
- "0": {
- "then": "Açò és un pas de vianants"
- },
- "1": {
- "then": "Açò no és un pas de vianants"
- }
- },
- "question": "Açò és un pas de vianants?"
- },
"crossing-minimap": {
"mappings": {
"0": {
diff --git a/langs/layers/cs.json b/langs/layers/cs.json
index 2d7870173..bfe44f4dc 100644
--- a/langs/layers/cs.json
+++ b/langs/layers/cs.json
@@ -2752,10 +2752,10 @@
"1": {
"then": "Tyto hodiny jsou namontovány na stěně"
},
- "2": {
+ "3": {
"then": "Tyto hodiny jsou součástí billboardu"
},
- "3": {
+ "4": {
"then": "Tyto hodiny jsou na zemi"
}
},
@@ -10198,4 +10198,4 @@
"render": "větrná turbína"
}
}
-}
+}
\ No newline at end of file
diff --git a/langs/layers/de.json b/langs/layers/de.json
index eb37d7a5f..fbad2cede 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -3296,10 +3296,10 @@
"1": {
"then": "Diese Uhr ist an einer Wand montiert"
},
- "2": {
+ "3": {
"then": "Diese Uhr ist Teil einer Werbetafel"
},
- "3": {
+ "4": {
"then": "Diese Uhr befindet sich auf dem Boden"
}
},
@@ -12502,4 +12502,4 @@
"render": "Windrad"
}
}
-}
+}
\ No newline at end of file
diff --git a/langs/layers/en.json b/langs/layers/en.json
index 40a36590c..17e217655 100644
--- a/langs/layers/en.json
+++ b/langs/layers/en.json
@@ -3294,12 +3294,15 @@
"then": "This clock is mounted on a pole"
},
"1": {
- "then": "This clock is mounted on a wall"
+ "then": "This clock is mounted on a wall, usually through a support perpendicular to the wall"
},
"2": {
- "then": "This clock is part of a billboard"
+ "then": "This clock is mounted directly on a wall"
},
"3": {
+ "then": "This clock is part of a billboard"
+ },
+ "4": {
"then": "This clock is on the ground"
}
},
diff --git a/langs/layers/fr.json b/langs/layers/fr.json
index 9884fee7b..11acf1a16 100644
--- a/langs/layers/fr.json
+++ b/langs/layers/fr.json
@@ -2272,10 +2272,10 @@
"1": {
"then": "Cette horloge est fixée sur un mur"
},
- "2": {
+ "3": {
"then": "Cette horloge fait partie d'un panneau publicitaire"
},
- "3": {
+ "4": {
"then": "Cette horloge est posée au sol"
}
},
@@ -7567,4 +7567,4 @@
"render": "éolienne"
}
}
-}
+}
\ No newline at end of file
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index a385b3b2e..50f911246 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -2748,12 +2748,15 @@
"then": "Deze klok is bevestigd aan een paal"
},
"1": {
- "then": "Deze klok is bevestigd aan een muur"
+ "then": "Deze klok is bevestigd aan een muur, meestal met een steun loodrecht op de muur"
},
"2": {
- "then": "Deze klok is onderdeel van een reclamebord"
+ "then": "Deze klok is rechtstreeks aan een muur bevestigd"
},
"3": {
+ "then": "Deze klok is onderdeel van een reclamebord"
+ },
+ "4": {
"then": "Deze klok staat op de grond"
}
},
diff --git a/langs/layers/pl.json b/langs/layers/pl.json
index e7ae159ec..218dd4664 100644
--- a/langs/layers/pl.json
+++ b/langs/layers/pl.json
@@ -1356,10 +1356,10 @@
"1": {
"then": "Ten zegar jest zamontowany na ścianie"
},
- "2": {
+ "3": {
"then": "Ten zegar jest częścią bilbordu"
},
- "3": {
+ "4": {
"then": "Ten zegar jest na ziemi"
}
},
diff --git a/langs/layers/uk.json b/langs/layers/uk.json
index 3a3482d49..7e1437b5c 100644
--- a/langs/layers/uk.json
+++ b/langs/layers/uk.json
@@ -479,7 +479,7 @@
"tagRenderings": {
"support": {
"mappings": {
- "2": {
+ "3": {
"then": "Цей годинник є частиною білборду"
}
}
@@ -1338,4 +1338,4 @@
"render": "Утилізація відходів"
}
}
-}
+}
\ No newline at end of file
diff --git a/scripts/moveImage.ts b/scripts/moveImage.ts
new file mode 100644
index 000000000..989883eee
--- /dev/null
+++ b/scripts/moveImage.ts
@@ -0,0 +1,91 @@
+import { existsSync, renameSync, readFileSync, writeFileSync } from "fs"
+import SmallLicense from "../src/Models/smallLicense"
+
+/**
+ * Script to move/rename image files
+ * Useful after downloading images from wikimedia commons
+ * Apart from moving the image files, this will also update the license file
+ *
+ * This will NOT update any images in the theme
+ */
+
+function main(args: string[]) {
+ // Check if the correct number of arguments are passed
+ if (args.length != 2) {
+ console.log("Usage: moveImage.ts oldPath newPath")
+ console.log("You passed in the arguments: " + args.join(","))
+ console.log("Example: npx vite-node scripts/moveImage.ts images/old.jpg images/new.jpg")
+ return
+ }
+ const [oldPath, newPath] = args
+
+ // Check if the oldPath exists
+ if (!existsSync(oldPath)) {
+ console.log("The oldPath does not exist: " + oldPath)
+ return
+ }
+
+ // Move file
+ renameSync(oldPath, newPath)
+
+ // If it exists also move the .license file
+ const oldLicensePath = oldPath + ".license"
+ if (existsSync(oldLicensePath)) {
+ const newLicensePath = newPath + ".license"
+ renameSync(oldLicensePath, newLicensePath)
+ }
+
+ console.log("Moved file from " + oldPath + " to " + newPath)
+
+ // Open license_info.json in the same directory as the old file
+ const licensePath = oldPath.replace(/\/[^/]+$/, "/license_info.json")
+ if (!existsSync(licensePath)) {
+ console.log(
+ "The license file does not exist: " +
+ licensePath +
+ ". Skipping writing to license file."
+ )
+ return
+ }
+
+ // Read license file
+ const licenseFile = readFileSync(licensePath, "utf8")
+ const licenseInfo = JSON.parse(licenseFile) as SmallLicense[]
+
+ // Find correct license item
+ const licenseItem = licenseInfo.find((item) => item.path === oldPath.replace(/.*\//, ""))
+
+ // Filter out license item
+ const newLicenseInfo = licenseInfo.filter((item) => item.path !== oldPath.replace(/.*\//, ""))
+ const newLicenseFile = JSON.stringify(newLicenseInfo, null, 2)
+
+ // Write new license file
+ writeFileSync(licensePath, newLicenseFile)
+
+ // Look for a license_info.json file in the new path
+ const newLicensePath = newPath.replace(/\/[^/]+$/, "/license_info.json")
+ if (!existsSync(newLicensePath) && licenseItem) {
+ console.log("License file doesn't exist yet, creating new one: " + newLicensePath)
+
+ // Create new license item
+ const newLicenseItem = licenseItem
+ newLicenseItem.path = newPath.replace(/.*\//, "")
+
+ // Create file
+ writeFileSync(newLicensePath, JSON.stringify([newLicenseItem], null, 2))
+ } else if (licenseItem) {
+ console.log("Appending to existing license file: " + newLicensePath)
+
+ // Create new license item
+ const newLicenseItem = licenseItem
+ newLicenseItem.path = newPath.replace(/.*\//, "")
+
+ // Append to existing file
+ const newLicenseFile = readFileSync(newLicensePath, "utf8")
+ const newLicenseInfo = JSON.parse(newLicenseFile) as SmallLicense[]
+ newLicenseInfo.push(newLicenseItem)
+ writeFileSync(newLicensePath, JSON.stringify(newLicenseInfo, null, 2))
+ }
+}
+
+main(process.argv.slice(2))