diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index 9a0d7fd32..6fffdaa2b 100644 --- a/assets/layers/bench/bench.json +++ b/assets/layers/bench/bench.json @@ -934,7 +934,7 @@ "en": "This bench does (probably) not have an inscription", "nl": "Deze bank heeft (waarschijnlijk) geen inscriptie", "de": "Diese Bank hat (wahrscheinlich) keine Inschrift", - "fr": "Ce banc n'a(probablement) pas d'inscription", + "fr": "Ce banc n'a (probablement) pas d'inscription", "es": "Este banco (probablemente) no tiene inscripción", "ca": "Aquest banc (probablement) no té cap inscripció", "cs": "Tato lavička (pravděpodobně) nemá nápis", @@ -1020,7 +1020,8 @@ "cs": "Tato lavička pravděpodobně nemá integrované umělecké dílo", "pt_BR": "Esse banco provavelmente não tem uma obra de arte integrada", "es": "Este banco probablemente no tiene una obra de arte integrada", - "pt": "Este banco provavelmente não tem uma obra de arte integrada" + "pt": "Este banco provavelmente não tem uma obra de arte integrada", + "fr": "Ce banc ne comporte probablement pas d'œuvre d'art" }, "hideInAnswer": true } diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json index cd9069fda..dcfaad56b 100644 --- a/assets/layers/charging_station/charging_station.json +++ b/assets/layers/charging_station/charging_station.json @@ -2506,7 +2506,7 @@ "title": { "en": "charging station for cars", "nl": "oplaadstation voor elektrische auto's", - "de": "Ladestation für Elektrofahrräder" + "de": "Ladestation für Autos" } } ], diff --git a/assets/layers/elevator/elevator.json b/assets/layers/elevator/elevator.json index 61e4ad79d..469f2cf71 100644 --- a/assets/layers/elevator/elevator.json +++ b/assets/layers/elevator/elevator.json @@ -186,7 +186,8 @@ "alsoShowIf": "shape=", "then": { "en": "This elevator has a rectangular shape", - "de": "Dieser Aufzug hat eine rechteckige Form" + "de": "Dieser Aufzug hat eine rechteckige Form", + "fr": "Cet ascenseur est de forme rectangulaire" }, "icon": "./assets/svg/square.svg" }, diff --git a/assets/layers/indoors/indoors.json b/assets/layers/indoors/indoors.json index cb94e518f..3fe4f0ff7 100644 --- a/assets/layers/indoors/indoors.json +++ b/assets/layers/indoors/indoors.json @@ -352,7 +352,8 @@ "en": "This is a classroom", "de": "Dies ist ein Klassenzimmer", "ca": "Açò és una aula", - "cs": "Jedná se o učebnu" + "cs": "Jedná se o učebnu", + "fr": "C'est une salle de classe" }, "icon": "./assets/layers/indoors/room_class.svg" }, @@ -449,7 +450,8 @@ "en": "This is an office", "de": "Dies ist ein Büro", "ca": "Açò és una oficina", - "cs": "Jedná se o kancelář" + "cs": "Jedná se o kancelář", + "fr": "C'est un bureau" }, "icon": "./assets/layers/indoors/room_office.svg" }, diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json index 2ebfce4ba..9e119e077 100644 --- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json +++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json @@ -1,16 +1,13 @@ { "id": "mapcomplete-changes", "title": { - "en": "Changes made with MapComplete", - "de": "Änderungen mit MapComplete" + "en": "Changes made with MapComplete" }, "shortDescription": { - "en": "Shows changes made by MapComplete", - "de": "Änderungen von MapComplete anzeigen" + "en": "Shows changes made by MapComplete" }, "description": { - "en": "This maps shows all the changes made with MapComplete", - "de": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen" + "en": "This maps shows all the changes made with MapComplete" }, "icon": "./assets/svg/logo.svg", "hideFromOverview": true, @@ -21,8 +18,7 @@ { "id": "mapcomplete-changes", "name": { - "en": "Changeset centers", - "de": "Zentrum der Änderungssätze" + "en": "Changeset centers" }, "minzoom": 0, "source": { @@ -32,48 +28,41 @@ }, "title": { "render": { - "en": "Changeset for {theme}", - "de": "Änderungssatz für {theme}" + "en": "Changeset for {theme}" } }, "description": { - "en": "Shows all MapComplete changes", - "de": "Alle MapComplete-Änderungen anzeigen" + "en": "Shows all MapComplete changes" }, "tagRenderings": [ { "id": "show_changeset_id", "render": { - "en": "Changeset {id}", - "de": "Änderungssatz {id}" + "en": "Changeset {id}" } }, { "id": "contributor", "question": { - "en": "What contributor did make this change?", - "de": "Welcher Mitwirkende hat diese Änderung vorgenommen?" + "en": "What contributor did make this change?" }, "freeform": { "key": "user" }, "render": { - "en": "Change made by {user}", - "de": "Änderung vorgenommen von {user}" + "en": "Change made by {user}" } }, { "id": "theme-id", "question": { - "en": "What theme was used to make this change?", - "de": "Welches Thema wurde für die Änderung verwendet?" + "en": "What theme was used to make this change?" }, "freeform": { "key": "theme" }, "render": { - "en": "Change with theme {theme}", - "de": "Geändert mit Thema {theme}" + "en": "Change with theme {theme}" } }, { @@ -82,23 +71,19 @@ "key": "locale" }, "question": { - "en": "What locale (language) was this change made in?", - "de": "In welcher Benutzersprache wurde die Änderung vorgenommen?" + "en": "What locale (language) was this change made in?" }, "render": { - "en": "User locale is {locale}", - "de": "Benutzersprache {locale}" + "en": "User locale is {locale}" } }, { "id": "host", "render": { - "en": "Change with with {host}", - "de": "Änderung über {host}" + "en": "Change with with {host}" }, "question": { - "en": "What host (website) was this change made with?", - "de": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?" + "en": "What host (website) was this change made with?" }, "freeform": { "key": "host" @@ -119,12 +104,10 @@ { "id": "version", "question": { - "en": "What version of MapComplete was used to make this change?", - "de": "Mit welcher MapComplete Version wurde die Änderung vorgenommen?" + "en": "What version of MapComplete was used to make this change?" }, "render": { - "en": "Made with {editor}", - "de": "Erstellt mit {editor}" + "en": "Made with {editor}" }, "freeform": { "key": "editor" @@ -506,8 +489,7 @@ } ], "question": { - "en": "Themename contains {search}", - "de": "Themenname enthält {search}" + "en": "Themename contains {search}" } } ] @@ -523,8 +505,7 @@ } ], "question": { - "en": "Themename does not contain {search}", - "de": "Themename enthält not {search}" + "en": "Themename does not contain {search}" } } ] @@ -540,8 +521,7 @@ } ], "question": { - "en": "Made by contributor {search}", - "de": "Erstellt vom Mitwirkenden {search}" + "en": "Made by contributor {search}" } } ] @@ -557,8 +537,7 @@ } ], "question": { - "en": "Not made by contributor {search}", - "de": "Nicht erstellt von Mitwirkendem {search}" + "en": "Not made by contributor {search}" } } ] @@ -575,8 +554,7 @@ } ], "question": { - "en": "Made before {search}", - "de": "Erstellt vor {search}" + "en": "Made before {search}" } } ] @@ -593,8 +571,7 @@ } ], "question": { - "en": "Made after {search}", - "de": "Erstellt nach {search}" + "en": "Made after {search}" } } ] @@ -610,8 +587,7 @@ } ], "question": { - "en": "User language (iso-code) {search}", - "de": "Benutzersprache (ISO-Code) {search}" + "en": "User language (iso-code) {search}" } } ] @@ -627,8 +603,7 @@ } ], "question": { - "en": "Made with host {search}", - "de": "Erstellt mit Host {search}" + "en": "Made with host {search}" } } ] @@ -639,8 +614,7 @@ { "osmTags": "add-image>0", "question": { - "en": "Changeset added at least one image", - "de": "Änderungssatz hat mindestens ein Bild hinzugefügt" + "en": "Changeset added at least one image" } } ] @@ -651,8 +625,7 @@ { "osmTags": "theme!=grb", "question": { - "en": "Exclude GRB theme", - "de": "GRB-Thema ausschließen" + "en": "Exclude GRB theme" } } ] @@ -663,8 +636,7 @@ { "osmTags": "theme!=etymology", "question": { - "en": "Exclude etymology theme", - "de": "Etymologie-Thema ausschließen" + "en": "Exclude etymology theme" } } ] @@ -679,8 +651,7 @@ { "id": "link_to_more", "render": { - "en": "More statistics can be found here", - "de": "Weitere Statistiken gibt es hier" + "en": "More statistics can be found here" } }, { diff --git a/assets/themes/velopark/velopark.json b/assets/themes/velopark/velopark.json index 7a1aa1ba7..4bfcc87cd 100644 --- a/assets/themes/velopark/velopark.json +++ b/assets/themes/velopark/velopark.json @@ -72,6 +72,18 @@ } } }, + { + "id": "show-data-velopark", + "render": { + "special": { + "type": "linked_data_from_website", + "key": "ref:velopark", + "useProxy": "no", + "host": "https://data.velopark.be", + "mode": "readonly" + } + } + }, { "id": "closest_parkings", "render": { @@ -90,7 +102,7 @@ "type": "multi", "key": "_nearby_bicycle_parkings:props", "classes": "p-2 m-1 my-4 border-2 border-dashed border-black", - "tagrendering": "{id} ({_distance}m, {_velopark:id}) {minimap(20)} {tag_apply(ref:velopark=$_ref,Link this object.,link,id,_mr_id)}" + "tagrendering": "{id} ({_distance}m, {_velopark:id}, place for {capacity}, covered: {covered}) {minimap(20,id,_mr_id)} {tag_apply(ref:velopark=$_ref,Link this object.,link,id,_mr_id)}" } } }, @@ -120,7 +132,7 @@ "id": "title_manually_copy", "render": { "en": "

Manually link

Does the bicycle parking exist in OpenStreetMap but is it further then 25m away? Then:
  1. Copy the following URL: {ref:velopark}
  2. Select the correct bicycle parking on the map
  3. Paste the URL into the question What is the URL of the data path in Velopark?
  4. Mark this item as handled with the button below:
  5. ", - "nl": "

    Manueel linken

    " + "nl": "

    Manueel linken

    Bestaat de fietsenstalling in OpenStreetMap maar is staat deze meer dan 25m verder?In dit geval:
    1. Kopieer de volgende URL: {ref:velopark}
    2. Selecteer de juiste fietsenstalling op de kaart
    3. Plak de URL in de vraag Wat is de data-url van deze fietsenstalling in Velopark.be?
    4. Open deze fietsenstalling opnieuw en markeer deze als gelinkt met onderstaande knop:
    5. " } }, { @@ -168,18 +180,6 @@ "nl": "

      Extra informatie

      " } }, - { - "id": "show-data-velopark", - "render": { - "special": { - "type": "linked_data_from_website", - "key": "ref:velopark", - "useProxy": "no", - "host": "https://data.velopark.be", - "mode": "readonly" - } - } - }, { "id": "velopark-data-link", "render": { @@ -319,7 +319,21 @@ } ], "+tagRenderings": [ - "questions" + { + "id": "questions-intro", + "render": { + "en": "The question(s) below inquiry about attributes that are not yet known in OpenStreetMap", + "nl": "De vragen hieronder zijn attributen die nog niet gekend zijn in OpenStreetMap" + } + }, + "questions", + { + "id": "osm-block-title", + "render": { + "en": "

      Attributes from OpenStreetMap

      Editing below will make changes directly in OpenStreetMap", + "nl": "

      Attributen uit OpenStreetMap

      Als je hieronder wijzigingen maakt, dan worden die direct in OpenStreetMap opgeslaan" + } + } ], "tagRenderings+": [ "images" @@ -338,7 +352,14 @@ "doCount": false, "minzoom": 14, "+tagRenderings": [ - "questions" + "questions", + { + "id": "osm-block-title", + "render": { + "en": "

      Attributes from OpenStreetMap

      Editing below will make changes directly in OpenStreetMap", + "nl": "

      Attributen uit OpenStreetMap

      Als je hieronder wijzigingen maakt, dan worden die direct in OpenStreetMap opgeslaan" + } + } ], "tagRenderings+": [ "images" diff --git a/langs/de.json b/langs/de.json index 5a163c0f1..3d6b5f6fd 100644 --- a/langs/de.json +++ b/langs/de.json @@ -60,7 +60,7 @@ "error": "Fehler", "loadedFrom": "Die folgenden Daten werden von {source} unter Verwendung des eingebetteten JSON-LD geladen", "noDataLoaded": "Die externe Website hat keine verlinkten Daten, die geladen werden könnten", - "overwrite": "Überschreiben" + "overwrite": "In OpenStreetMap überschreiben" }, "favourite": { "loginNeeded": "

      Anmelden

      Ein persönliches Layout ist nur für OpenStreetMap-Benutzer verfügbar", diff --git a/langs/fr.json b/langs/fr.json index 2502cd539..d541a5ca7 100644 --- a/langs/fr.json +++ b/langs/fr.json @@ -194,6 +194,7 @@ }, "morescreen": { "createYourOwnTheme": "Créez votre propre thème MapComplete à partir de zéro", + "enterToOpen": "Appuyez sur Entrée pour ouvrir le thème", "hiddenExplanation": "Ces thèmes sont seulement accessibles par lien. Vous avez découvert {hidden_discovered} des {total_hidden} thèmes cachés.", "intro": "

      Plus de thèmes ?

      Vous aimez collecter des données géographiques ?
      Il y a plus de thèmes disponibles.", "noMatchingThemes": "Aucun thème ne correspond à vos critères de recherche", @@ -212,6 +213,7 @@ "number": "nombre", "openStreetMapIntro": "

      Une carte ouverte

      Utilisable et éditable librement. Une seule et unique plateforme regroupant toutes les informations géographiques ? Toutes ces différentes cartes isolées, incompatibles et obsolètes ne sont plus utiles.

      OpenStreetMap n’est pas un énième concurrent. Toutes les données de cette carte peuvent être utilisé librement (avec attribution et publication des changements de données). De plus tout le monde est libre d'ajouter de nouvelles données et corriger les erreurs. Ce site utilise également OpenStreetMap. Toutes les données en proviennent et tous les ajouts et modifications y seront également ajoutés.

      De nombreux individus et applications utilisent déjà OpenStreetMap : Maps.me, OsmAnd, mais aussi les cartes de Facebook, Instagram, Apple Maps et Bing Maps sont (en partie) alimentées par OpenStreetMap

      ", "openTheMap": "Ouvrir la carte", + "openTheMapAtGeolocation": "Zoom sur votre position", "opening_hours": { "closed_permanently": "Fermé", "closed_until": "Fermé jusqu'au {date}", @@ -324,6 +326,7 @@ "born": "Né·e le : {value}", "died": "Décédé·e le : {value}" }, + "readMore": "Lire le reste de l'article", "searchToShort": "Votre requête est trop courte, entrez un texte plus long.", "searchWikidata": "Rechercher sur Wikidata", "wikipediaboxTitle": "Wikipédia" @@ -344,6 +347,11 @@ "doDelete": "Supprimer l'image", "dontDelete": "Annuler", "isDeleted": "Supprimé", + "nearby": { + "link": "Cette photo montre l'objet", + "seeNearby": "Parcourez et associez des photos à proximité", + "title": "Imagerie StreetView à proximité" + }, "pleaseLogin": "Connectez-vous pour téléverser une photo", "respectPrivacy": "Ne photographiez ni les personnes ni les plaques d'immatriculation. Ne téléversez rien issu de Google Maps, Google Streetview ou d'autre sources soumises à des droits d'auteurs.", "toBig": "Votre image est trop large car elle est de {actual_size}. Veuillez utiliser des images d'au maximum {max_size}", @@ -403,6 +411,7 @@ "warnAnonymous": "Vous n'êtes pas connecté. Nous ne pourrons pas vous contacter pour résoudre ce problème." }, "plantDetection": { + "button": "Détecter automatiquement les espèces végétales à l'aide de l'IA de Plantnet.org", "error": "Une erreur est survenue lors de la détection de l'espèce de l'arbre : {error}", "howTo": { "intro": "Pour de résultats optimaux,", @@ -415,6 +424,7 @@ "matchPercentage": "Correspondance {match} %", "overviewIntro": "L'IA de PlantNet.org pense que les images représentes les espèces ci-dessous.", "overviewTitle": "Espèces détectées automatiquement", + "overviewVerify": "Vérifiez que l'espèce est correcte avant de la relier à l'arbre", "poweredByPlantnet": "Propulsé par plantnet.org", "seeInfo": "Voir plus d'informations sur les espèces", "takeImages": "Prenez des photos de l'arbre pour détecter automatiquement de quel type il s'agit" diff --git a/langs/layers/de.json b/langs/layers/de.json index 86544b2c8..fa1cc5f0a 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -2166,7 +2166,7 @@ "title": "Ladestation für Elektrofahrräder" }, "1": { - "title": "Ladestation für Elektrofahrräder" + "title": "Ladestation für Autos" } }, "tagRenderings": { diff --git a/langs/layers/fr.json b/langs/layers/fr.json index 16ea867be..b8a63b930 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -595,6 +595,9 @@ }, "1": { "then": "Ce banc n'a pas d'oeuvre d'art intégrée" + }, + "2": { + "then": "Ce banc ne comporte probablement pas d'œuvre d'art" } }, "question": "Est-ce que ce banc inclut un élément artistique ?", @@ -654,7 +657,7 @@ "then": "Ce banc n'a pas d'inscription" }, "1": { - "then": "Ce banc n'a(probablement) pas d'inscription" + "then": "Ce banc n'a (probablement) pas d'inscription" } }, "question": "Est-ce que ce banc possède une inscription ?", @@ -2960,6 +2963,13 @@ "question": "Quelle est la profondeur de cet ascenseur ?", "render": "Cet ascenseur a une profondeur de {canonical(length)}" }, + "elevator-shape": { + "mappings": { + "0": { + "then": "Cet ascenseur est de forme rectangulaire" + } + } + }, "elevator-width": { "question": "Quelle est la largeur de cet ascenseur ?", "render": "Cet ascenseur a une largeur de {canonical(width)}" @@ -3765,6 +3775,16 @@ }, "ref": { "question": "Quel est le numéro de référence de cette pièce ?" + }, + "room-type": { + "mappings": { + "4": { + "then": "C'est une salle de classe" + }, + "14": { + "then": "C'est un bureau" + } + } } } }, diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css index dbf2c11d7..ebb916a76 100644 --- a/public/css/index-tailwind-output.css +++ b/public/css/index-tailwind-output.css @@ -2265,6 +2265,7 @@ video { --alert-color: #fee4d1; --alert-foreground-color: var(--foreground-color); --low-interaction-background: #eeeeee; + --low-interaction-background-50: #eeeeee90; --low-interaction-foreground: black; --low-interaction-contrast: #ff00ff; --interactive-background: #dddddd; @@ -2491,6 +2492,10 @@ button.primary:not(.no-image-background) svg path, .button.primary:not(.no-image transition: all 250ms; } +button.disabled.low-interaction, .button.disabled.low-interaction { + background-color: var(--low-interaction-background-50); +} + button.disabled, .button.disabled { cursor: default; border: 2px dashed var(--button-background); diff --git a/scripts/hetzner/deployHetzner.sh b/scripts/hetzner/deployHetzner.sh index f3df27b9c..1f790078f 100755 --- a/scripts/hetzner/deployHetzner.sh +++ b/scripts/hetzner/deployHetzner.sh @@ -1,5 +1,6 @@ #! /bin/bash -### To be run from the root of the repository +### To be run from the root of the repository +### Prepares and builds MapComplete, uploads it to hetzner for hosted.mapcomplete.org. Will upload about 500MB to this computer # Some pointers to get started: # apt install npm @@ -20,5 +21,5 @@ scp ./Docs/ServerConfig/hetzner/* hetzner:/root/ && rsync -rzh --progress dist.zip hetzner:/root/ && echo "Upload completed, deploying config and booting" && ssh hetzner -t "unzip dist.zip && rm dist.zip && rm -rf public/ && mv dist public && caddy stop && caddy start" && -# rm dist.zip +rm dist.zip npm run clean diff --git a/src/Models/ThemeConfig/Json/LayoutConfigJson.ts b/src/Models/ThemeConfig/Json/LayoutConfigJson.ts index 12f00d858..1763cdfac 100644 --- a/src/Models/ThemeConfig/Json/LayoutConfigJson.ts +++ b/src/Models/ThemeConfig/Json/LayoutConfigJson.ts @@ -362,7 +362,7 @@ export interface LayoutConfigJson { /** * question: Should the 'download as CSV'- and 'download as Geojson'-buttons be enabled? * iftrue: Enable the option to download the map as CSV and GeoJson - * iffalse: Enable the option to download the map as CSV and GeoJson + * iffalse: Disable the option to download the map as CSV and GeoJson * ifunset: MapComplete default: Enable the option to download the map as CSV and GeoJson * group: feature_switches */ diff --git a/src/UI/Popup/AllTagsPanel.svelte b/src/UI/Popup/AllTagsPanel.svelte index dd1d88592..c718f5e64 100644 --- a/src/UI/Popup/AllTagsPanel.svelte +++ b/src/UI/Popup/AllTagsPanel.svelte @@ -38,11 +38,13 @@ {#if !allCalculatedTags.has(key)} {key} - + {#if $tags[key] === undefined} undefined {:else if $tags[key] === ""} Empty string + {:else if typeof $tags[key] === "object"} +
      {JSON.stringify($tags[key])}
      {:else} {$tags[key]} {/if} diff --git a/src/UI/ThemeViewGUI.svelte b/src/UI/ThemeViewGUI.svelte index 8c9672e3f..243c23aa6 100644 --- a/src/UI/ThemeViewGUI.svelte +++ b/src/UI/ThemeViewGUI.svelte @@ -287,7 +287,7 @@ {#if state.layout.hasPresets() || state.layout.hasNoteLayer()}