diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json index 9a0d7fd320..6fffdaa2b5 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 cd9069fda1..dcfaad56bb 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 61e4ad79d7..469f2cf711 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 cb94e518f8..3fe4f0ff71 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 2ebfce4bab..9e119e077d 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 7a1aa1ba76..4bfcc87cd8 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 5a163c0f1f..3d6b5f6fd9 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 2502cd5395..d541a5ca7b 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 86544b2c8d..fa1cc5f0a7 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 16ea867be2..b8a63b9305 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 dbf2c11d7f..ebb916a768 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 f3df27b9c3..1f790078f9 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 12f00d8587..1763cdfac8 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 dd1d885929..c718f5e643 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 8c9672e3f3..243c23aa6e 100644 --- a/src/UI/ThemeViewGUI.svelte +++ b/src/UI/ThemeViewGUI.svelte @@ -287,7 +287,7 @@ {#if state.layout.hasPresets() || state.layout.hasNoteLayer()}