Merge branch 'develop' of github.com:pietervdvn/MapComplete into develop
|  | @ -34,8 +34,7 @@ | ||||||
|       "or": [ |       "or": [ | ||||||
|         "service:bicycle:cleaning=yes", |         "service:bicycle:cleaning=yes", | ||||||
|         "service:bicycle:cleaning=diy", |         "service:bicycle:cleaning=diy", | ||||||
|         "amenity=bicycle_wash", |         "amenity=bicycle_wash" | ||||||
|         "amenity=bike_wash" |  | ||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|  | @ -83,7 +82,6 @@ | ||||||
|           "if": { |           "if": { | ||||||
|             "and": [ |             "and": [ | ||||||
|               "service:bicycle:cleaning~*", |               "service:bicycle:cleaning~*", | ||||||
|               "amenity!=bike_wash", |  | ||||||
|               "amenity!=bicycle_wash" |               "amenity!=bicycle_wash" | ||||||
|             ] |             ] | ||||||
|           }, |           }, | ||||||
|  | @ -106,7 +104,6 @@ | ||||||
|       ] |       ] | ||||||
|     } |     } | ||||||
|   ], |   ], | ||||||
|   "lineRendering": [], |  | ||||||
|   "presets": [ |   "presets": [ | ||||||
|     { |     { | ||||||
|       "title": { |       "title": { | ||||||
|  | @ -158,7 +155,6 @@ | ||||||
|       }, |       }, | ||||||
|       "condition": { |       "condition": { | ||||||
|         "and": [ |         "and": [ | ||||||
|           "amenity!=bike_wash", |  | ||||||
|           "amenity!=bicycle_wash", |           "amenity!=bicycle_wash", | ||||||
|           "service:bicycle:cleaning!=no", |           "service:bicycle:cleaning!=no", | ||||||
|           "service:bicycle:cleaning!=" |           "service:bicycle:cleaning!=" | ||||||
|  | @ -169,7 +165,7 @@ | ||||||
|         "addExtraTags": [ |         "addExtraTags": [ | ||||||
|           "service:bicycle:cleaning:fee=yes" |           "service:bicycle:cleaning:fee=yes" | ||||||
|         ], |         ], | ||||||
|         "inline": true |         "inline": false | ||||||
|       }, |       }, | ||||||
|       "mappings": [ |       "mappings": [ | ||||||
|         { |         { | ||||||
|  | @ -241,7 +237,6 @@ | ||||||
|       }, |       }, | ||||||
|       "condition": { |       "condition": { | ||||||
|         "or": [ |         "or": [ | ||||||
|           "amenity=bike_wash", |  | ||||||
|           "amenity=bicycle_wash" |           "amenity=bicycle_wash" | ||||||
|         ] |         ] | ||||||
|       }, |       }, | ||||||
|  | @ -285,6 +280,54 @@ | ||||||
|         } |         } | ||||||
|       ], |       ], | ||||||
|       "id": "bike_cleaning-charge" |       "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": { |   "deletion": { | ||||||
|  |  | ||||||
|  | @ -97,8 +97,8 @@ | ||||||
|         "support=wall_mounted" |         "support=wall_mounted" | ||||||
|       ], |       ], | ||||||
|       "title": { |       "title": { | ||||||
|         "en": "a wall-mounted clock", |         "en": "a wall-mounted clock, mounted using a support perpendicular to the wall", | ||||||
|         "nl": "een klok aan een muur", |         "nl": "een klok aan een muur, bevestigd met een steun loodrecht op de muur", | ||||||
|         "de": "eine an der Wand montierte Uhr", |         "de": "eine an der Wand montierte Uhr", | ||||||
|         "ca": "un rellotge muntat en un paret", |         "ca": "un rellotge muntat en un paret", | ||||||
|         "fr": "une horloge fixée au mur", |         "fr": "une horloge fixée au mur", | ||||||
|  | @ -117,6 +117,23 @@ | ||||||
|       "snapToLayer": [ |       "snapToLayer": [ | ||||||
|         "walls_and_buildings" |         "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": [ |   "tagRenderings": [ | ||||||
|  | @ -148,8 +165,8 @@ | ||||||
|         { |         { | ||||||
|           "if": "support=wall_mounted", |           "if": "support=wall_mounted", | ||||||
|           "then": { |           "then": { | ||||||
|             "en": "This clock is mounted on a wall", |             "en": "This clock is mounted on a wall, usually through a support perpendicular to the wall", | ||||||
|             "nl": "Deze klok is bevestigd aan een muur", |             "nl": "Deze klok is bevestigd aan een muur, meestal met een steun loodrecht op de muur", | ||||||
|             "de": "Diese Uhr ist an einer Wand montiert", |             "de": "Diese Uhr ist an einer Wand montiert", | ||||||
|             "ca": "Aquest rellotge està muntat en una paret", |             "ca": "Aquest rellotge està muntat en una paret", | ||||||
|             "fr": "Cette horloge est fixée sur un mur", |             "fr": "Cette horloge est fixée sur un mur", | ||||||
|  | @ -157,6 +174,13 @@ | ||||||
|             "cs": "Tyto hodiny jsou namontovány na stěně" |             "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", |           "if": "support=billboard", | ||||||
|           "then": { |           "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", |       "id": "visibility", | ||||||
|       "question": { |       "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)" |             "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", |       "id": "date", | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/crossing_unmarked.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 2.9 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/crossing_unmarked.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: StenSoft | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
|  | @ -91,7 +91,8 @@ | ||||||
|       ], |       ], | ||||||
|       "location": [ |       "location": [ | ||||||
|         "point" |         "point" | ||||||
|       ] |       ], | ||||||
|  |       "anchor": "center" | ||||||
|     } |     } | ||||||
|   ], |   ], | ||||||
|   "lineRendering": [ |   "lineRendering": [ | ||||||
|  | @ -222,49 +223,181 @@ | ||||||
|             "fr": "Passage piéton sans marquages", |             "fr": "Passage piéton sans marquages", | ||||||
|             "ca": "Creuament sense senyalitzar", |             "ca": "Creuament sense senyalitzar", | ||||||
|             "cs": "Přechod bez označení přechodu" |             "cs": "Přechod bez označení přechodu" | ||||||
|           } |           }, | ||||||
|  |           "hideInAnswer": true | ||||||
|         } |         } | ||||||
|       ] |       ] | ||||||
|     }, |     }, | ||||||
|     { |     { | ||||||
|       "id": "crossing-is-zebra", |       "id": "markings", | ||||||
|       "question": { |       "question": { | ||||||
|         "en": "Is this is a zebra crossing?", |         "en": "What kind of markings does this crossing have?", | ||||||
|         "nl": "Is dit een zebrapad?", |         "nl": "Wat voor markering heeft deze oversteekplaats?" | ||||||
|         "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?" |  | ||||||
|       }, |       }, | ||||||
|       "condition": "crossing=uncontrolled", |  | ||||||
|       "mappings": [ |       "mappings": [ | ||||||
|         { |         { | ||||||
|           "if": "crossing_ref=zebra", |           "if": "crossing:markings=no", | ||||||
|           "then": { |           "then": { | ||||||
|             "en": "This is a zebra crossing", |             "en": "This crossing has no markings", | ||||||
|             "nl": "Dit is een zebrapad", |             "nl": "Deze oversteekplaats heeft geen markeringen" | ||||||
|             "de": "Dies ist ein Zebrastreifen", |           }, | ||||||
|             "es": "Esto es un paso de cebra", |           "icon": { | ||||||
|             "fr": "C'est un passage piéton", |             "class": "large", | ||||||
|             "ca": "Açò és un pas de vianants", |             "path": "./assets/layers/crossings/crossing_unmarked.png" | ||||||
|             "cs": "Toto je zebra přechod" |  | ||||||
|           } |           } | ||||||
|         }, |         }, | ||||||
|         { |         { | ||||||
|           "if": "crossing_ref=", |           "if": "crossing:markings=zebra", | ||||||
|           "then": { |           "then": { | ||||||
|             "en": "This is not a zebra crossing", |             "en": "This crossing has zebra markings", | ||||||
|             "nl": "Dit is geen zebrapad", |             "nl": "Deze oversteekplaats heeft een zebramarkering" | ||||||
|             "de": "Dies ist kein Zebrastreifen", |           }, | ||||||
|             "es": "Esto no es un paso de cebra", |           "icon": { | ||||||
|             "fr": "Ce n'est pas un passage piéton", |             "class": "large", | ||||||
|             "ca": "Açò no és un pas de vianants", |             "path": "./assets/layers/crossings/markings_zebra.png" | ||||||
|             "cs": "Tohle není zebra přechod" |           } | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           "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", |       "id": "crossing-bicycle-allowed", | ||||||
|  |  | ||||||
|  | @ -39,6 +39,116 @@ | ||||||
|       "https://wiki.openstreetmap.org/wiki/File:Vibrating_button_illustration.jpg" |       "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", |     "path": "pedestrian_crossing.svg", | ||||||
|     "license": "CC-BY-SA-4.0", |     "license": "CC-BY-SA-4.0", | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_dashes.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.1 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/markings_dashes.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_dots.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.7 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/markings_dots.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_ladder.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/markings_ladder.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_ladder_skewed.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.7 KiB | 
|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_lines.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.3 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/markings_lines.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_lines_paired.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.6 KiB | 
|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_surface.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/markings_surface.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_zebra.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.1 KiB | 
							
								
								
									
										2
									
								
								assets/layers/crossings/markings_zebra.png.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_zebra_bicolour.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.2 KiB | 
|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										
											BIN
										
									
								
								assets/layers/crossings/markings_zebra_double.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.3 KiB | 
|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Popball | ||||||
|  | SPDX-License-Identifier: CC0 1.0 | ||||||
							
								
								
									
										148
									
								
								assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -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" | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								assets/layers/cyclist_waiting_aid/license_info.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,10 @@ | ||||||
|  | [ | ||||||
|  |   { | ||||||
|  |     "path": "waiting_aid.svg", | ||||||
|  |     "license": "CC0-1.0", | ||||||
|  |     "authors": [ | ||||||
|  |       "Robin van der Linde" | ||||||
|  |     ], | ||||||
|  |     "sources": [] | ||||||
|  |   } | ||||||
|  | ] | ||||||
							
								
								
									
										21
									
								
								assets/layers/cyclist_waiting_aid/waiting_aid.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,21 @@ | ||||||
|  | <svg width="314" height="374" viewBox="0 0 314 374" fill="none" xmlns="http://www.w3.org/2000/svg"> | ||||||
|  | <g clip-path="url(#clip0_1_2)"> | ||||||
|  | <path d="M157 0C70.2969 0 0.0117188 70.1211 0.0117188 156.621C0.0117188 231.017 52.0255 293.253 121.742 309.223L147.246 364.684C152.957 377.105 170.652 377.105 176.367 364.684L203.199 306.334C267.352 286.654 313.988 227.075 313.988 156.621C313.988 70.1211 243.703 0 157 0Z" fill="#538EE8"/> | ||||||
|  | <line x1="48.5355" y1="202.464" x2="90.9619" y2="244.891" stroke="white" stroke-width="10"/> | ||||||
|  | <line x1="90.9619" y1="167.536" x2="48.5355" y2="209.962" stroke="white" stroke-width="10"/> | ||||||
|  | <line x1="200.536" y1="216.464" x2="242.962" y2="258.891" stroke="white" stroke-width="10"/> | ||||||
|  | <line x1="242.962" y1="181.536" x2="200.536" y2="223.962" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M59 197L213 210" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M84 74L246 85" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M89 172V72" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M241 185V85" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M66 190L220 203" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M73 184L227 197" stroke="white" stroke-width="10"/> | ||||||
|  | <path d="M81 177L235 190" stroke="white" stroke-width="10"/> | ||||||
|  | </g> | ||||||
|  | <defs> | ||||||
|  | <clipPath id="clip0_1_2"> | ||||||
|  | <rect width="314" height="374" fill="white"/> | ||||||
|  | </clipPath> | ||||||
|  | </defs> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 1.3 KiB | 
|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Robin van der Linde | ||||||
|  | SPDX-License-Identifier: CC0-1.0 | ||||||
|  | @ -2972,6 +2972,29 @@ | ||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       ] |       ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       "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 |   "allowMove": false | ||||||
|  |  | ||||||
							
								
								
									
										146
									
								
								assets/layers/tactile_map/tactile_map.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -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" | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										10
									
								
								assets/layers/tactile_model/license_info.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,10 @@ | ||||||
|  | [ | ||||||
|  |   { | ||||||
|  |     "path": "tactile_model.svg", | ||||||
|  |     "license": "CC0-1.0", | ||||||
|  |     "authors": [ | ||||||
|  |       "Robin van der Linde" | ||||||
|  |     ], | ||||||
|  |     "sources": [] | ||||||
|  |   } | ||||||
|  | ] | ||||||
							
								
								
									
										157
									
								
								assets/layers/tactile_model/tactile_model.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -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" | ||||||
|  |   ] | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								assets/layers/tactile_model/tactile_model.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,26 @@ | ||||||
|  | <svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg"> | ||||||
|  | <circle cx="250" cy="250" r="250" fill="#555555"/> | ||||||
|  | <ellipse cx="250" cy="288" rx="200" ry="150" fill="#977A59"/> | ||||||
|  | <rect x="201.286" y="259.14" width="97.4286" height="92.8598" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="226" y="167" width="48" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="249" y="92" width="2" height="28" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="243" y="103" width="14" height="2" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M202.165 257.818L250 209.423L297.835 257.818H202.165Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M225.654 166.818L250 119.197L274.346 166.818H225.654Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="96" y="301" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M96.7832 299.5L125 264.591L153.217 299.5H96.7832Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="161" y="291" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M161.783 289.5L190 254.591L218.217 289.5H161.783Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="131" y="326" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M131.783 324.5L160 289.591L188.217 324.5H131.783Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="178" y="341" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M178.783 339.5L207 304.591L235.217 339.5H178.783Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 409 300)" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M409.217 299.5L381 264.591L352.783 299.5H409.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 344 290)" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M344.217 289.5L316 254.591L287.783 289.5H344.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 374 325)" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M374.217 324.5L346 289.591L317.783 324.5H374.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 327 340)" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | <path d="M327.217 339.5L299 304.591L270.783 339.5H327.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/> | ||||||
|  | </svg> | ||||||
| After Width: | Height: | Size: 2.6 KiB | 
							
								
								
									
										2
									
								
								assets/layers/tactile_model/tactile_model.svg.license
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | ||||||
|  | SPDX-FileCopyrightText: Robin van der Linde | ||||||
|  | SPDX-License-Identifier: CC0 | ||||||
|  | @ -117,6 +117,8 @@ | ||||||
|         "minzoom": 17 |         "minzoom": 17 | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "stairs" |     "stairs", | ||||||
|  |     "tactile_map", | ||||||
|  |     "tactile_model" | ||||||
|   ] |   ] | ||||||
| } | } | ||||||
|  | @ -56,13 +56,18 @@ | ||||||
|   "startLon": 3.75, |   "startLon": 3.75, | ||||||
|   "hideFromOverview": false, |   "hideFromOverview": false, | ||||||
|   "layers": [ |   "layers": [ | ||||||
|     "cycleways_and_roads", |     { | ||||||
|     "barrier", |       "builtin": [ | ||||||
|     "crossings", |         "cycleways_and_roads", | ||||||
|     "bicycle_counter" |         "barrier", | ||||||
|  |         "crossings", | ||||||
|  |         "bicycle_counter", | ||||||
|  |         "cyclist_waiting_aid" | ||||||
|  |       ], | ||||||
|  |       "override": { | ||||||
|  |         "minzoom": 16 | ||||||
|  |       } | ||||||
|  |     } | ||||||
|   ], |   ], | ||||||
|   "overrideAll": { |  | ||||||
|     "minzoom": 16 |  | ||||||
|   }, |  | ||||||
|   "enableDownload": true |   "enableDownload": true | ||||||
| } | } | ||||||
|  | @ -47,12 +47,18 @@ | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "rainbow_crossings", |     { | ||||||
|  |       "builtin": "rainbow_crossings", | ||||||
|  |       "override": { | ||||||
|  |         "isCounted": false | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|       "builtin": "cycleways_and_roads", |       "builtin": "cycleways_and_roads", | ||||||
|       "override": { |       "override": { | ||||||
|         "minzoom": 18, |         "minzoom": 18, | ||||||
|         "name": null |         "name": null, | ||||||
|  |         "isCounted": false | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   ], |   ], | ||||||
|  |  | ||||||
|  | @ -2398,10 +2398,10 @@ | ||||||
|                     "1": { |                     "1": { | ||||||
|                         "then": "Aquest rellotge està muntat en una paret" |                         "then": "Aquest rellotge està muntat en una paret" | ||||||
|                     }, |                     }, | ||||||
|                     "2": { |                     "3": { | ||||||
|                         "then": "Aquest rellotge està muntat en una tanca publicitària" |                         "then": "Aquest rellotge està muntat en una tanca publicitària" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "4": { | ||||||
|                         "then": "Aquest rellotge està al sòl" |                         "then": "Aquest rellotge està al sòl" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  | @ -2512,17 +2512,6 @@ | ||||||
|                 }, |                 }, | ||||||
|                 "question": "Aquest creuament té una illa al mig?" |                 "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": { |             "crossing-minimap": { | ||||||
|                 "mappings": { |                 "mappings": { | ||||||
|                     "0": { |                     "0": { | ||||||
|  |  | ||||||
|  | @ -2752,10 +2752,10 @@ | ||||||
|                     "1": { |                     "1": { | ||||||
|                         "then": "Tyto hodiny jsou namontovány na stěně" |                         "then": "Tyto hodiny jsou namontovány na stěně" | ||||||
|                     }, |                     }, | ||||||
|                     "2": { |                     "3": { | ||||||
|                         "then": "Tyto hodiny jsou součástí billboardu" |                         "then": "Tyto hodiny jsou součástí billboardu" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "4": { | ||||||
|                         "then": "Tyto hodiny jsou na zemi" |                         "then": "Tyto hodiny jsou na zemi" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -3296,10 +3296,10 @@ | ||||||
|                     "1": { |                     "1": { | ||||||
|                         "then": "Diese Uhr ist an einer Wand montiert" |                         "then": "Diese Uhr ist an einer Wand montiert" | ||||||
|                     }, |                     }, | ||||||
|                     "2": { |                     "3": { | ||||||
|                         "then": "Diese Uhr ist Teil einer Werbetafel" |                         "then": "Diese Uhr ist Teil einer Werbetafel" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "4": { | ||||||
|                         "then": "Diese Uhr befindet sich auf dem Boden" |                         "then": "Diese Uhr befindet sich auf dem Boden" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -3294,12 +3294,15 @@ | ||||||
|                         "then": "This clock is mounted on a pole" |                         "then": "This clock is mounted on a pole" | ||||||
|                     }, |                     }, | ||||||
|                     "1": { |                     "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": { |                     "2": { | ||||||
|                         "then": "This clock is part of a billboard" |                         "then": "This clock is mounted directly on a wall" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "3": { | ||||||
|  |                         "then": "This clock is part of a billboard" | ||||||
|  |                     }, | ||||||
|  |                     "4": { | ||||||
|                         "then": "This clock is on the ground" |                         "then": "This clock is on the ground" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -2272,10 +2272,10 @@ | ||||||
|                     "1": { |                     "1": { | ||||||
|                         "then": "Cette horloge est fixée sur un mur" |                         "then": "Cette horloge est fixée sur un mur" | ||||||
|                     }, |                     }, | ||||||
|                     "2": { |                     "3": { | ||||||
|                         "then": "Cette horloge fait partie d'un panneau publicitaire" |                         "then": "Cette horloge fait partie d'un panneau publicitaire" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "4": { | ||||||
|                         "then": "Cette horloge est posée au sol" |                         "then": "Cette horloge est posée au sol" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -2748,12 +2748,15 @@ | ||||||
|                         "then": "Deze klok is bevestigd aan een paal" |                         "then": "Deze klok is bevestigd aan een paal" | ||||||
|                     }, |                     }, | ||||||
|                     "1": { |                     "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": { |                     "2": { | ||||||
|                         "then": "Deze klok is onderdeel van een reclamebord" |                         "then": "Deze klok is rechtstreeks aan een muur bevestigd" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "3": { | ||||||
|  |                         "then": "Deze klok is onderdeel van een reclamebord" | ||||||
|  |                     }, | ||||||
|  |                     "4": { | ||||||
|                         "then": "Deze klok staat op de grond" |                         "then": "Deze klok staat op de grond" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -1356,10 +1356,10 @@ | ||||||
|                     "1": { |                     "1": { | ||||||
|                         "then": "Ten zegar jest zamontowany na ścianie" |                         "then": "Ten zegar jest zamontowany na ścianie" | ||||||
|                     }, |                     }, | ||||||
|                     "2": { |                     "3": { | ||||||
|                         "then": "Ten zegar jest częścią bilbordu" |                         "then": "Ten zegar jest częścią bilbordu" | ||||||
|                     }, |                     }, | ||||||
|                     "3": { |                     "4": { | ||||||
|                         "then": "Ten zegar jest na ziemi" |                         "then": "Ten zegar jest na ziemi" | ||||||
|                     } |                     } | ||||||
|                 }, |                 }, | ||||||
|  |  | ||||||
|  | @ -479,7 +479,7 @@ | ||||||
|         "tagRenderings": { |         "tagRenderings": { | ||||||
|             "support": { |             "support": { | ||||||
|                 "mappings": { |                 "mappings": { | ||||||
|                     "2": { |                     "3": { | ||||||
|                         "then": "Цей годинник є частиною білборду" |                         "then": "Цей годинник є частиною білборду" | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  |  | ||||||
							
								
								
									
										91
									
								
								scripts/moveImage.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -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)) | ||||||