From 1d5ade4d32525bdecd79ed1ebb70e99651a6d422 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Sat, 14 Nov 2020 00:00:44 +0100 Subject: [PATCH 01/24] Fix typo --- locales/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en.json b/locales/en.json index 89da476..28189a0 100644 --- a/locales/en.json +++ b/locales/en.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", From 1958f55f18aec00729cb6de56f10545ddfe65c85 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Fri, 13 Nov 2020 23:01:42 +0100 Subject: [PATCH 02/24] Update translations --- locales/ca.json | 278 +++++++++++++++++++++++++++++++++++++++++++++ locales/eo.json | 2 +- locales/es_ES.json | 2 +- locales/fa.json | 2 +- locales/fr.json | 92 +++++++-------- locales/gl.json | 2 +- locales/is.json | 2 +- locales/nb.json | 2 +- locales/nl.json | 2 +- locales/pl.json | 2 +- locales/pt.json | 2 +- locales/ru_RU.json | 2 +- locales/tr.json | 2 +- locales/zh-TW.json | 2 +- 14 files changed, 336 insertions(+), 58 deletions(-) create mode 100644 locales/ca.json diff --git a/locales/ca.json b/locales/ca.json new file mode 100644 index 0000000..f1f52e9 --- /dev/null +++ b/locales/ca.json @@ -0,0 +1,278 @@ +{ + "about": { + "bug-reports": "Informes d'errors i petició de funcionalitats:", + "bug-reports-back": "servidor / dorsal, motor d'itineraris, aplicació Android, web brouter.de", + "bug-reports-front": "client web / frontal.", + "chat": "Xat amb usuaris i desenvolupadors", + "contact": "Contacte:", + "contact-language": "L'idioma preferit és l'anglès, ja que tenim tant contribuïdors com usuaris d'arreu del món.", + "data": "Dades:", + "data-description": "Això està basat en OpenStreetMap. Normalment s'actualitza diàriament, veure les dates a fitxers de dades.", + "description": "Serveis en línia del motor d'itineraris BRouter. Per l'aplicació Android fora de línia i més informació, veure brouter.de", + "details": "Política de privacitat, \nCrèdits,\nRegistre de canvis i\nmés informació sobre el client.", + "support": "Debats generals/preguntes, suport", + "title": "Quant a", + "tooltip": "Mostra més informació sobre BRouter-Web" + }, + "credits": { + "brouter": "BRouter", + "brouter-license": "BRouter © Arndt Brenschede", + "elevation-data": "Dades d'elevació", + "esri-license": "Imatgeria del món © Esri, fonts: Esri, DigitalGlobe, Earthstar Geographics, CNES/Airbus DS, GeoEye, USDA FSA, USGS, Getmapping, Aerogrid, IGN, IGP, i la comunitat d'usuaris de SIG", + "esri-tiles": "Imatgeria del món d'Esri", + "map-data": "Dades del mapa", + "map-tiles": "Tessel·les del mapa", + "nominatim": "Cerca per Nominatim", + "openstreetmap": "© contribuïdors d'OpenStreetMap sota ODbL" + }, + "export": { + "format": "Format", + "format_csv": "CSV", + "format_geojson": "GeoJSON", + "format_gpx": "GPX", + "format_kml": "KML", + "include": "Inclou", + "include_waypoints": "Fites", + "route-from-to": "{{from}} -> {{to}} ({{distance}}km)", + "route-loop": "{{from}} ({{distance}}km)", + "title": "Exporta la ruta", + "trackname": "Nom" + }, + "footer": { + "ascend": "Desnivell acumulat", + "cost": "Cost", + "distance": "Distància", + "elevation-chart": "Commuta el gràfic d'elevació", + "energy-per-100km": "Energia per 100 km", + "hours": "hores", + "hours-abbrev": "h", + "kilometer": "kilòmetres", + "kilometer-abbrev": "km", + "kilowatthour": "kilowatts hora", + "kilowatthour-abbrev": "kWh", + "mean-cost-factor": "Factor de cost mitjà", + "meter": "metres", + "meter-abbrev": "m", + "plain-ascend": "Desnivell final", + "stats-info": "Comenceu a dibuixar una ruta per obtenir les estadístiques", + "total-energy": "Energia total", + "travel-time": "Temps de viatge" + }, + "keyboard": { + "backspace": "Retrocés", + "escape": "Esc", + "generic-shortcut": "{{action}} ({{key}} tecla)", + "shift": "Majúscules" + }, + "layers": { + "add-base": "Afegeix una capa base", + "add-overlay": "Afegeix superposició", + "customize": "Personalitza les capes", + "opacity-slider": "Control lliscant de l'opacitat", + "placeholder-layer-name": "Nom de la capa personalitzada. (eg: OpenStreetMap)", + "placeholder-layer-url": "URL de la capa personalitzada. (eg: https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png)", + "remove-selection": "Elimina la selecció" + }, + "loadNogos": { + "defaultProperties": "Propietats per defecte", + "file": "Fitxer (.geojson):", + "load": "Carrega", + "nogoBuffer": "Zona d'influència de les àrees omeses (en metres):", + "nogoRadius": "Radi de les àrees omeses per punts (en metres)", + "nogoWeight": "Pes de les àrees omeses (-1 vol dir inaccessible)", + "source": "Font", + "title": "Carrega les àrees omeses", + "url": "URL: " + }, + "map": { + "attribution-osm-long": "Contribuidors de l'OpenStreetMap", + "attribution-osm-short": "OpenStreetMap", + "clear-route": "Neteja les dades de la ruta", + "copyright": "Copyright", + "cycling": "Ciclisme", + "delete-last-point": "Esborra l'últim punt", + "delete-nogo-areas": "Esborra totes les àrees omeses", + "delete-pois": "Esborra tots els punts d'interès", + "delete-route": "Esborra la ruta", + "draw-poi-start": "Dibuixa punts d'interès", + "draw-poi-stop": "Para de dibuixar punts d'interès", + "draw-route-start": "Dibuixa una ruta", + "draw-route-stop": "Para de dibuixar la ruta", + "enter-poi-name": "Introdueix el nom del punt d'interès", + "geocoder": "Cerca", + "geocoder-placeholder": "Cerca...", + "hikebike-hillshading": "Ombreig del relleu ", + "hiking": "Excursionisme", + "layer": { + "bing": "Bing aeri", + "cycle": "OpenCycleMap (Thunderf.)", + "cycling": "Bici (camins marcats)", + "digitalglobe": "Imatgeria recent de DigitalGlobe", + "esri": "Imatgeria del món d'Esri", + "hikebike-hillshading": "Ombreig del relleu (mapa per caminades i bici)", + "hiking": "Caminada (camins marcats)", + "osm": "OpenStreetMap", + "osmde": "OpenStreetMap.de", + "outdoors": "Aire lliure (Thunderforest)", + "route-quality": "Codificació de la qualitat de la ruta", + "stamen-terrain": "Terreny (Stamen)", + "strava-segments": "Segments de Strava", + "topo": "OpenTopoMap" + }, + "loading": "Carregant...", + "locate-me": "Mostra'm on sóc", + "nogo": { + "cancel": "Cancel·la el dibuix d'àrees omeses", + "click-drag": "Cliqueu i arrossegueu per dibuixar un cercle", + "draw": "Dibuixa una àrea omesa circular", + "edit": "Cliqueu per editar", + "help": "□ = mou / redimensiona, = esborra,
clique al cercle per deixar d'editar" + }, + "opacity-slider": "Especifica la transparència de la ruta i els marcadors", + "opacity-slider-shortcut": "{{action}}\n(Mantén premuda la tecla {{key}} per silenciar temporalment)", + "preview": "Previsualitza", + "privacy": "Privacitat", + "reverse-route": "Capgira la ruta", + "route-quality-altitude": "Codificació de l'altitud", + "route-quality-cost": "Codificació del cost", + "route-quality-incline": "Codificació de la inclinació", + "route-quality-shortcut": "{{action}} ({{key}} tecla per commutar)", + "strava-biking": "Mostra els segments de bici de Strava", + "strava-running": "Mostra els segments de córrer de Strava", + "strava-shortcut": "{{action}}\n(tecla {{key}} per commutar les capes, cliqueu per recarregar l'àrea actual)", + "zoomInTitle": "Apropa", + "zoomOutTitle": "Allunya" + }, + "modal": { + "close": "Tanca" + }, + "navbar": { + "about": "Quant a", + "alternative": { + "first": "1a alternativa", + "original": "Original", + "second": "2a alternativa", + "third": "3a alternativa" + }, + "export": "Exporta", + "export-tooltip": "Exporta la ruta", + "load": { + "nogos": "Carrega les àrees omeses", + "title": "Carrega", + "tooltip": "{{tracksAction}} (tecla {{tracksKey}})\n{{nogosAction}} ({{nogosKey}})", + "tracks": "Carrega traces" + }, + "profile": { + "car-eco": "Cotxe (econòmic)", + "car-fast": "Cotxe (ràpid)", + "car-test": "Cotxe (test)", + "custom": "Personalitzat", + "fastbike": "Bici ràpida", + "fastbike-asia-pacific": "Bici ràpida (Àsia Pacífic)", + "fastbike-lowtraffic": "Bici ràpida (poc trànsit)", + "hiking-beta": "Excursionisme (beta)", + "moped": "Ciclomotor", + "rail": "Via", + "river": "Riu", + "safety": "Seguretat", + "shortest": "El més curt", + "trekking": "Trescar amb bici", + "trekking-ignore-cr": "Trescar amb bici (ignora les rutes de bici)", + "trekking-noferries": "Trescar amb bici (sense ferris)", + "trekking-nosteps": "Trescar amb bici (sense graons)", + "trekking-steep": "Trescar amb bici (dret)", + "vm-forum-liegerad-schnell": "Trescar amb bici (ràpid)", + "vm-forum-velomobil-schnell": "Velomobile (ràpid)" + }, + "profile-tooltip": "\n(tecla {{key}} per canviar)" + }, + "sidebar": { + "analysis": { + "header": { + "highway": "Autopista", + "smoothness": "Suavitat", + "surface": "Superfície" + }, + "table": { + "category": "Categoria", + "length": "Longitud", + "total_known": "Total conegut:", + "unknown": "Desconegut" + }, + "title": "Anàlisi", + "tooltip": "Analitza la ruta" + }, + "customize-profile": { + "title": "Personalitza el perfil", + "tooltip": "Personalitza el perfil" + }, + "data": { + "sync-map": "Sincronitza el mapa", + "title": "Dades", + "tooltip": "Mostra la taula de dades detallades de la ruta" + }, + "itinerary": { + "title": "Itinerari", + "tooltip": "Mostra l'itinerari" + }, + "layers": { + "category": { + "base-layers": "Capes base", + "country": "País", + "europe": "Europa", + "europe-monolingual": "Europa monolingüe", + "overlays": "Superposicions", + "worldwide": "Arreu del món", + "worldwide-international": "Arreu del món internacional", + "worldwide-monolingual": "Arreu del món monolígüe" + }, + "collapse": "Col·lapsa-ho tot", + "custom-layers": "Capes personalitzades", + "customize": "Afegeix o elimina capes personalitzades", + "expand": "Expandeix-ho tot", + "optional": "Afegeix o elimina capes opcionals", + "optional-layers": "Més", + "overlay-opacity": "Transparència de la superposició", + "table": { + "URL": "URL", + "empty": "Encara no hi ha cap capa personalitzada configurada.", + "name": "Nom", + "type": "Tipus" + }, + "title": "Capes", + "tooltip": "Seleccioneu capes" + }, + "profile": { + "apply": "Aplica", + "clear": "Neteja", + "help": "Ajuda", + "no_easy_configuration_warning": "No hi ha configuració fàcil per aquest perfil.", + "options": "Opcions", + "placeholder": "Escriviu el vostre propi perfil personalitzat aquí", + "profile": "Perfil" + }, + "tab-tooltip": "{{action}}\n(tecla {{toggleKey}} per commutar, {{switchKey}} per canviar a la pestanya següent)" + }, + "title": "Client web de BRouter", + "trackasroute": { + "explainpoi": "(mostra les fites com a PDI)", + "explaintracklayer": "(mostra traces com a capa separada)", + "file": "Fitxer de traça", + "fuzziness": "grau d'aproximació", + "pleasewait": "Espereu si us plau.", + "showpois": "PDI", + "title": "Carrega una traça com a ruta", + "tracklayer": "Capa de la traça", + "tuning": "Ajust" + }, + "warning": { + "cannot-get-route": "Error en obtenir l'URL de la ruta", + "no-response": "el servidor no respon", + "no-route-found": "Error: no es pot trobar una ruta pels punts donats. Podríeu provar de moure'ls més a prop de carreteres?", + "profile-error": "Error del perfil: cap resposta o resposta buida del servidor", + "strava-error": "Error en obtenir els segments de Strava: {{error}}", + "temporary-profile": "Nota: Els perfils personalitzats carregats només es desen temporalment al servidor.
Deseu les vostres edicions al vostre ordinador.", + "tracks-load-error": "Error en carregar les traces: {{error}}", + "upload-error": "Error de càrrega: {{error}}" + } +} diff --git a/locales/eo.json b/locales/eo.json index 2e8fa60..f4074ad 100644 --- a/locales/eo.json +++ b/locales/eo.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/es_ES.json b/locales/es_ES.json index 13d0174..42a0665 100644 --- a/locales/es_ES.json +++ b/locales/es_ES.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/fa.json b/locales/fa.json index bb80ba6..08b18c4 100644 --- a/locales/fa.json +++ b/locales/fa.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/fr.json b/locales/fr.json index 96c0c28..4e8cf81 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -5,14 +5,14 @@ "bug-reports-front": "client web.", "chat": "Discuter avec d'autres utilisateurs et développeurs", "contact": "Contact :", - "contact-language": "Preferred language is English, as we have both international contributors and users.", + "contact-language": "La langue privilégiée est l'anglais, car il y a des contributeurs et des utilisateurs du monde entier.", "data": "Données :", "data-description": "Les données reposent sur OpenStreetMap. La mise à jour est généralement quotidienne, voir les fichiers de données. ", "description": "Service web pour le moteur de routage BRouter. Pour l'appli Android et de plus amples informations, voir brouter.de.", "details": "Respect de la vie privée, \nCrédits,\nChangements et\nplus d'infos sur le client web.", "support": "Discussions/Questions générales, support ;", "title": "À propos", - "tooltip": "Show more information about BRouter-Web" + "tooltip": "Afficher plus d'informations à propos de BRouter-Web" }, "credits": { "brouter": "BRouter", @@ -42,7 +42,7 @@ "ascend": "Dénivelé cumulé", "cost": "Coût", "distance": "Distance", - "elevation-chart": "Toggle elevation chart", + "elevation-chart": "Inverser l'affichage du profil altimétrique", "energy-per-100km": "pour 100km", "hours": "heures", "hours-abbrev": "h", @@ -59,10 +59,10 @@ "travel-time": "Temps de trajet" }, "keyboard": { - "backspace": "Backspace", - "escape": "Escape", - "generic-shortcut": "{{action}} ({{key}} key)", - "shift": "Shift" + "backspace": "Retour chariot", + "escape": "Échap", + "generic-shortcut": "{{action}} (touche {{key}} )", + "shift": "Maj" }, "layers": { "add-base": "Ajouter un fond de carte ", @@ -94,13 +94,13 @@ "delete-nogo-areas": "Supprimer toutes les zones interdites", "delete-pois": "Supprimer tous les points d'intérêt ", "delete-route": "Supprimer l'itinéraire", - "draw-poi-start": "Draw points of interest", - "draw-poi-stop": "Stop drawing points of interest", - "draw-route-start": "Draw route", - "draw-route-stop": "Stop drawing route", + "draw-poi-start": "Ajouter des points d'intérêt", + "draw-poi-stop": "Arrêter l'ajout de points d'intérêt", + "draw-route-start": "Dessiner l'itinéraire", + "draw-route-stop": "Arrêter de dessiner l'itinéraire", "enter-poi-name": "Saisir le nom du point d'intérêt", - "geocoder": "Search", - "geocoder-placeholder": "Search…", + "geocoder": "Rechercher", + "geocoder-placeholder": "Rechercher…", "hikebike-hillshading": "Relief avec ombre", "hiking": "Randonnée", "layer": { @@ -124,22 +124,22 @@ "nogo": { "cancel": "Annuler la zone interdite", "click-drag": "Cliquer et faire glisser pour dessiner un cercle", - "draw": "Draw circular no-go area", + "draw": "Dessiner une zone interdite circulaire", "edit": "Cliquer pour éditer", "help": "□ = déplacer / redimensionner, = supprimer,
cliquer sur le cercle pour arrêter l'édition" }, - "opacity-slider": "Set transparency of route track and markers", - "opacity-slider-shortcut": "{{action}}\n(Hold {{key}} key to mute temporarily)", + "opacity-slider": "Définie l'opacité de l'itinéraire et des marqueurs", + "opacity-slider-shortcut": "{{action}}\n(Maintenir la touche {{key}} pour masquer temporairement)", "preview": "Prévisualiser", "privacy": "Vie privée", "reverse-route": "Inverse l'itinéraire", "route-quality-altitude": "Chiffrage de l'altitude", "route-quality-cost": "Chiffrage du coût", "route-quality-incline": "Chiffrage d'inclinaison", - "route-quality-shortcut": "{{action}} ({{key}} key to toggle)", + "route-quality-shortcut": "{{action}} (touche {{key}} pour basculer)", "strava-biking": "Afficher les segments Strava vélo", "strava-running": "Afficher les segments Strava à pied", - "strava-shortcut": "{{action}}\n({{key}} key to toggle layer, click to reload for current area)", + "strava-shortcut": "{{action}}\n(touche {{key}} pour basculer de calque, cliquer pour recharger la zone actuelle)", "zoomInTitle": "Zoomer", "zoomOutTitle": "Dézoomer" }, @@ -155,12 +155,12 @@ "third": "3ème alternative" }, "export": "Exporter", - "export-tooltip": "Export route", + "export-tooltip": "Exporter l'itinéraire", "load": { - "nogos": "Load no-go areas", + "nogos": "Charger des zones interdites", "title": "Charger", - "tooltip": "{{tracksAction}} ({{tracksKey}} key)\n{{nogosAction}} ({{nogosKey}})", - "tracks": "Load tracks" + "tooltip": "{{tracksAction}} (touche {{tracksKey}} )\n{{nogosAction}} ({{nogosKey}})", + "tracks": "Charger des traces" }, "profile": { "car-eco": "Voiture (économique)", @@ -184,36 +184,36 @@ "vm-forum-liegerad-schnell": "Vélo couché (rapide)", "vm-forum-velomobil-schnell": "Vélomobile (rapide)" }, - "profile-tooltip": "\n({{key}} key to switch)" + "profile-tooltip": "\n(touche {{key}} pour échanger)" }, "sidebar": { "analysis": { "header": { - "highway": "Highway", - "smoothness": "Smoothness", - "surface": "Surface" + "highway": "Grande route", + "smoothness": "Qualité de roulage", + "surface": "Revêtement" }, "table": { - "category": "Category", - "length": "Length", - "total_known": "Total Known:", - "unknown": "Unknown" + "category": "Catégorie", + "length": "Longueur", + "total_known": "Total connu :", + "unknown": "Inconnu" }, - "title": "Analysis", - "tooltip": "Analyse route" + "title": "Analyse", + "tooltip": "Analyse de l'itinéraire" }, "customize-profile": { "title": "Personnaliser le profil", - "tooltip": "Customize profile" + "tooltip": "Personnaliser le profil" }, "data": { "sync-map": "Synchroniser la carte", "title": "Données", - "tooltip": "Show detailed route data table" + "tooltip": "Afficher la table des données de l'itinéraire détaillé" }, "itinerary": { "title": "Itinéraire", - "tooltip": "Show itinerary" + "tooltip": "Afficher l'itinéraire" }, "layers": { "category": { @@ -240,7 +240,7 @@ "type": "Type" }, "title": "Calques", - "tooltip": "Select layers" + "tooltip": "Sélection des calques" }, "profile": { "apply": "Appliquer", @@ -251,19 +251,19 @@ "placeholder": "Saisissez votre profil personnalisé ici.", "profile": "Profil" }, - "tab-tooltip": "{{action}}\n({{toggleKey}} key to toggle, {{switchKey}} to switch to next tab)" + "tab-tooltip": "{{action}}\n(touche {{toggleKey}} pour basculer, {{switchKey}} pour passer à l'onglet suivant)" }, "title": "Client web BRouter", "trackasroute": { - "explainpoi": "(show waypoints as POI's)", - "explaintracklayer": "(show Track as separate Layer)", - "file": "Trackfile", - "fuzziness": "fuzzines", - "pleasewait": "Please wait!", - "showpois": "POI's", - "title": "Load Track as Route", - "tracklayer": "Track Layer", - "tuning": "Tuning" + "explainpoi": "(afficher les points de passage comme des PIs)", + "explaintracklayer": "(afficher la piste comme un calque distinct)", + "file": "Fichier de piste", + "fuzziness": "flou", + "pleasewait": "Merci de patienter !", + "showpois": "PIs", + "title": "Charger la trace comme itinéraire", + "tracklayer": "Calque de trace", + "tuning": "Réglages" }, "warning": { "cannot-get-route": "Erreur lors de la réception de l'itinéraire", diff --git a/locales/gl.json b/locales/gl.json index 362d81e..602c4f3 100644 --- a/locales/gl.json +++ b/locales/gl.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/is.json b/locales/is.json index e8e26ca..5019cb8 100644 --- a/locales/is.json +++ b/locales/is.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/nb.json b/locales/nb.json index 48eb791..38cd004 100644 --- a/locales/nb.json +++ b/locales/nb.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/nl.json b/locales/nl.json index 88a723d..f5e3979 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/pl.json b/locales/pl.json index 89c38ea..28a8baf 100644 --- a/locales/pl.json +++ b/locales/pl.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/pt.json b/locales/pt.json index d64bdd4..3f63182 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/ru_RU.json b/locales/ru_RU.json index 64ac57e..bc69a1b 100644 --- a/locales/ru_RU.json +++ b/locales/ru_RU.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/tr.json b/locales/tr.json index 22824ff..f8bdd7f 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 9dbfa1c..f33fe66 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -258,7 +258,7 @@ "explainpoi": "(show waypoints as POI's)", "explaintracklayer": "(show Track as separate Layer)", "file": "Trackfile", - "fuzziness": "fuzzines", + "fuzziness": "fuzziness", "pleasewait": "Please wait!", "showpois": "POI's", "title": "Load Track as Route", From 779c720b7d55574266fb61787033fb41c8e3d0c0 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Tue, 1 Dec 2020 20:56:14 +0100 Subject: [PATCH 03/24] Add 20km allowed zone icon (#347) Co-authored-by: Gautier P --- css/style.css | 3 + index.html | 1 + js/control/Export.js | 2 +- js/control/Message.js | 10 +- js/index.js | 64 ++++++++++--- js/plugin/CircleGoArea.js | 191 ++++++++++++++++++++++++++++++++++++++ js/plugin/NogoAreas.js | 6 +- js/plugin/POIMarkers.js | 11 ++- js/router/BRouter.js | 24 ++++- locales/en.json | 4 + locales/fr.json | 4 +- 11 files changed, 296 insertions(+), 24 deletions(-) create mode 100644 js/plugin/CircleGoArea.js diff --git a/css/style.css b/css/style.css index aeea5d3..1c41f9f 100644 --- a/css/style.css +++ b/css/style.css @@ -197,6 +197,9 @@ input#trackname:focus:invalid { .pois-draw-enabled { cursor: cell; } +.circlego-draw-enabled { + cursor: pointer; +} #map { /* center error message horizontally */ diff --git a/index.html b/index.html index 1d15611..27566fd 100644 --- a/index.html +++ b/index.html @@ -373,6 +373,7 @@ Source

+
or
diff --git a/js/control/Export.js b/js/control/Export.js index fd6b69c..31c6b0e 100644 --- a/js/control/Export.js +++ b/js/control/Export.js @@ -47,7 +47,7 @@ BR.Export = L.Class.extend({ var name = encodeURIComponent(exportForm['trackname'].value); var includeWaypoints = exportForm['include-waypoints'].checked; - var uri = this.router.getUrl(this.latLngs, this.pois.getMarkers(), format, name, includeWaypoints); + var uri = this.router.getUrl(this.latLngs, this.pois.getMarkers(), null, format, name, includeWaypoints); e.preventDefault(); diff --git a/js/control/Message.js b/js/control/Message.js index b71c5aa..426ebde 100644 --- a/js/control/Message.js +++ b/js/control/Message.js @@ -40,8 +40,16 @@ BR.Message = L.Class.extend({ }, showError: function(err) { - if (err == 'Error: target island detected for section 0\n') { + if (err && err.message) err = err.message; + + if (err == 'target island detected for section 0\n') { err = i18next.t('warning.no-route-found'); + } else if (err == 'no track found at pass=0\n') { + err = i18next.t('warning.no-route-found'); + } else if (err == 'to-position not mapped in existing datafile\n') { + err = i18next.t('warning.invalid-route-to'); + } else if (err == 'from-position not mapped in existing datafile\n') { + err = i18next.t('warning.invalid-route-from'); } this._show(err, 'error'); }, diff --git a/js/index.js b/js/index.js index 476e588..c964db4 100644 --- a/js/index.js +++ b/js/index.js @@ -34,6 +34,7 @@ drawButton, deleteRouteButton, pois, + circleGo, urlHash; // By default bootstrap-select use glyphicons @@ -74,7 +75,10 @@ routing.draw(true); control.state('deactivate-draw'); }, - title: i18next.t('keyboard.generic-shortcut', { action: '$t(map.draw-route-start)', key: 'D' }) + title: i18next.t('keyboard.generic-shortcut', { + action: '$t(map.draw-route-start)', + key: 'D' + }) } ] }); @@ -84,7 +88,10 @@ function() { routing.reverse(); }, - i18next.t('keyboard.generic-shortcut', { action: '$t(map.reverse-route)', key: 'R' }) + i18next.t('keyboard.generic-shortcut', { + action: '$t(map.reverse-route)', + key: 'R' + }) ); var deletePointButton = L.easyButton( @@ -92,7 +99,10 @@ function() { routing.deleteLastPoint(); }, - i18next.t('keyboard.generic-shortcut', { action: '$t(map.delete-last-point)', key: 'Z' }) + i18next.t('keyboard.generic-shortcut', { + action: '$t(map.delete-last-point)', + key: 'Z' + }) ); deleteRouteButton = L.easyButton( @@ -100,7 +110,10 @@ function() { clearRoute(); }, - i18next.t('keyboard.generic-shortcut', { action: '$t(map.clear-route)', key: '$t(keyboard.backspace)' }) + i18next.t('keyboard.generic-shortcut', { + action: '$t(map.clear-route)', + key: '$t(keyboard.backspace)' + }) ); L.DomEvent.addListener( @@ -181,7 +194,10 @@ profile.update(evt.options); }); - BR.NogoAreas.MSG_BUTTON = i18next.t('keyboard.generic-shortcut', { action: '$t(map.nogo.draw)', key: 'N' }); + BR.NogoAreas.MSG_BUTTON = i18next.t('keyboard.generic-shortcut', { + action: '$t(map.nogo.draw)', + key: 'N' + }); BR.NogoAreas.MSG_BUTTON_CANCEL = i18next.t('keyboard.generic-shortcut', { action: '$t(map.nogo.cancel)', key: '$t(keyboard.escape)' @@ -243,9 +259,9 @@ styles: BR.conf.routingStyles }); - pois = new BR.PoiMarkers({ - routing: routing - }); + pois = new BR.PoiMarkers(routing); + circleGo = new BR.CircleGoArea(routing, nogos, pois); + pois.circlego = circleGo; exportRoute = new BR.Export(router, pois); @@ -305,7 +321,22 @@ } nogos.addTo(map); - L.easyBar([drawButton, reverseRouteButton, nogos.getButton(), deletePointButton, deleteRouteButton]).addTo(map); + + var shouldAddCircleGo = false; + var lang = i18next.languages.length && i18next.languages[0]; + + if (lang.startsWith('fr')) { + circleGo.options.radius = 20000; + shouldAddCircleGo = true; + } + + if (shouldAddCircleGo) circleGo.addTo(map); + + var buttons = [drawButton, reverseRouteButton, nogos.getButton()]; + if (shouldAddCircleGo) buttons.push(circleGo.getButton()); + buttons.push(deletePointButton, deleteRouteButton); + + L.easyBar(buttons).addTo(map); nogos.preventRoutePointOnCreate(routing); if (BR.keys.strava) { @@ -322,7 +353,10 @@ map.addControl( new BR.OpacitySliderControl({ id: 'route', - title: i18next.t('map.opacity-slider-shortcut', { action: '$t(map.opacity-slider)', key: 'M' }), + title: i18next.t('map.opacity-slider-shortcut', { + action: '$t(map.opacity-slider)', + key: 'M' + }), muteKeyCode: 77, // m callback: L.bind(routing.setOpacity, routing) }) @@ -358,6 +392,11 @@ var opts = router.parseUrlParams(url2params(url)); router.setOptions(opts); routingOptions.setOptions(opts); + if (opts.circlego) { + // must be done before nogos! + circleGo.options.radius = opts.circlego[2]; + circleGo.setCircle([opts.circlego[0], opts.circlego[1]]); + } nogos.setOptions(opts); profile.update(opts); @@ -366,7 +405,6 @@ routing.clear(); routing.setWaypoints(opts.lonlats); } - if (opts.pois) { pois.setMarkers(opts.pois); } @@ -384,7 +422,9 @@ urlHash = new L.Hash(null, null); // this callback is used to append anything in URL after L.Hash wrote #map=zoom/lat/lng/layer urlHash.additionalCb = function() { - var url = router.getUrl(routing.getWaypoints(), pois.getMarkers(), null).substr('brouter?'.length + 1); + var url = router + .getUrl(routing.getWaypoints(), pois.getMarkers(), circleGo.getCircle(), null) + .substr('brouter?'.length + 1); // by default brouter use | as separator. To make URL more human-readable, we remplace them with ; for users url = url.replace(/\|/g, ';'); diff --git a/js/plugin/CircleGoArea.js b/js/plugin/CircleGoArea.js new file mode 100644 index 0000000..5fffebc --- /dev/null +++ b/js/plugin/CircleGoArea.js @@ -0,0 +1,191 @@ +BR.CircleGoArea = L.Control.extend({ + circleLayer: null, + + options: { + radius: 1000, // in meters + shortcut: { + draw: { + enable: 73, // char code for 'i' + disable: 27 // char code for 'ESC' + } + } + }, + initialize: function(routing, nogos, pois) { + this.routing = routing; + this.nogos = nogos; + this.pois = pois; + }, + + onAdd: function(map) { + var self = this; + + this.map = map; + this.circleLayer = L.layerGroup([]).addTo(map); + + var radiusKm = (this.options.radius / 1000).toFixed(); + this.drawButton = L.easyButton({ + states: [ + { + stateName: 'activate-circlego', + icon: 'fa-circle-o', + onClick: function() { + self.draw(true); + }, + title: i18next.t('keyboard.generic-shortcut', { + action: i18next.t('map.draw-circlego-start', { radius: radiusKm }), + key: 'I' + }) + }, + { + stateName: 'deactivate-circlego', + icon: 'fa-circle-o active', + onClick: function() { + self.draw(false); + }, + title: i18next.t('keyboard.generic-shortcut', { + action: i18next.t('map.draw-circlego-stop', { radius: radiusKm }), + key: '$t(keyboard.escape)' + }) + } + ] + }); + + map.on('routing:draw-start', function() { + self.draw(false); + }); + + L.DomEvent.addListener(document, 'keydown', this._keydownListener, this); + + var container = new L.DomUtil.create('div'); + return container; + }, + + draw: function(enable) { + this.drawButton.state(enable ? 'deactivate-circlego' : 'activate-circlego'); + if (enable) { + this.routing.draw(false); + this.pois.draw(false); + this.map.on('click', this.onMapClick, this); + L.DomUtil.addClass(this.map.getContainer(), 'circlego-draw-enabled'); + } else { + this.map.off('click', this.onMapClick, this); + L.DomUtil.removeClass(this.map.getContainer(), 'circlego-draw-enabled'); + } + }, + + _keydownListener: function(e) { + if (!BR.Util.keyboardShortcutsAllowed(e)) { + return; + } + if (e.keyCode === this.options.shortcut.draw.disable) { + this.draw(false); + } else if (e.keyCode === this.options.shortcut.draw.enable) { + this.draw(true); + } + }, + + setNogoCircle: function(center) { + if (center) { + var polygon = this.circleToPolygon(center, this.options.radius); + $('#nogoJSON').val(JSON.stringify(polygon)); + this.nogos.uploadNogos(); + } else { + this.nogos.clear(); + } + }, + + onMapClick: function(e) { + this.setCircle([e.latlng.lng, e.latlng.lat]); + }, + + setCircle: function(center) { + var self = this; + var icon = L.VectorMarkers.icon({ + icon: 'home', + markerColor: BR.conf.markerColors.circlego + }); + var marker = L.marker([center[1], center[0]], { icon: icon, draggable: true, name: name }) + .on('dragend', function(e) { + self.setNogoCircle([e.target.getLatLng().lng, e.target.getLatLng().lat]); + }) + .on('click', function() { + var drawing = self.drawButton.state() == 'deactivate-circlego'; + if (drawing) { + self.circleLayer.removeLayer(marker); + self.setNogoCircle(undefined); + } + }); + + this.clear(); + marker.addTo(this.circleLayer); + this.setNogoCircle(center); + this.draw(false); + }, + + clear: function() { + this.circleLayer.clearLayers(); + }, + + getButton: function() { + return this.drawButton; + }, + + getCircle: function() { + var circle = this.circleLayer.getLayers().map(function(it) { + return it.getLatLng(); + }); + if (circle && circle.length) { + return [circle[0].lng.toFixed(6), circle[0].lat.toFixed(6), this.options.radius].join(','); + } else { + return null; + } + }, + + toRadians: function(angleInDegrees) { + return (angleInDegrees * Math.PI) / 180; + }, + + toDegrees: function(angleInRadians) { + return (angleInRadians * 180) / Math.PI; + }, + + offset: function(c1, distance, bearing) { + var lon1 = this.toRadians(c1[0]); + var lat1 = this.toRadians(c1[1]); + var dByR = distance / 6378137; // distance divided by 6378137 (radius of the earth) wgs84 + var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing)); + var lon = + lon1 + + Math.atan2( + Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), + Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat) + ); + return [this.toDegrees(lon), this.toDegrees(lat)]; + }, + + circleToPolygon: function(center, radius, numberOfSegments) { + var n = numberOfSegments ? numberOfSegments : 64; + + var inner = []; + for (var i = 0; i < n; ++i) { + inner.push(this.offset(center, radius, (2 * Math.PI * -i) / n)); + } + inner.push(inner[0]); + + return { + type: 'FeatureCollection', + features: [ + { + type: 'Feature', + properties: {}, + geometry: { + type: 'LineString', + coordinates: inner + } + } + ] + }; + } +}); + +BR.CircleGoArea.include(L.Evented.prototype); diff --git a/js/plugin/NogoAreas.js b/js/plugin/NogoAreas.js index 6cff5ec..2c539bb 100644 --- a/js/plugin/NogoAreas.js +++ b/js/plugin/NogoAreas.js @@ -162,9 +162,13 @@ BR.NogoAreas = L.Control.extend({ var self = this; var geoJSONPromise; + var nogoJSON = $('#nogoJSON').val(); //hidden var nogoURL = $('#nogoURL').val(); var nogoFile = $('#nogoFile')[0].files[0]; - if (nogoURL) { + if (nogoJSON) { + geoJSONPromise = Promise.resolve(JSON.parse(nogoJSON)); + $('#nogoJSON').val(undefined); + } else if (nogoURL) { // TODO: Handle {{bbox}} geoJSONPromise = fetch(nogoURL).then(function(response) { response.json(); diff --git a/js/plugin/POIMarkers.js b/js/plugin/POIMarkers.js index c47990d..76d132a 100644 --- a/js/plugin/POIMarkers.js +++ b/js/plugin/POIMarkers.js @@ -1,8 +1,8 @@ BR.PoiMarkers = L.Control.extend({ markersLayer: null, + circlego: null, options: { - routing: null, shortcut: { draw: { enable: 80, // char code for 'p' @@ -10,6 +10,10 @@ BR.PoiMarkers = L.Control.extend({ } } }, + initialize: function(routing) { + this.routing = routing; + this.circlego = null; + }, onAdd: function(map) { var self = this; @@ -54,7 +58,8 @@ BR.PoiMarkers = L.Control.extend({ draw: function(enable) { this.drawButton.state(enable ? 'deactivate-poi' : 'activate-poi'); if (enable) { - this.options.routing.draw(false); + this.routing.draw(false); + this.circlego.draw(false); this.map.on('click', this.onMapClick, this); L.DomUtil.addClass(this.map.getContainer(), 'pois-draw-enabled'); } else { @@ -129,7 +134,7 @@ BR.PoiMarkers = L.Control.extend({ getMarkers: function() { return this.markersLayer.getLayers().map(function(it) { return { - latlng: it._latlng, + latlng: it.getLatLng(), name: it.options.name }; }); diff --git a/js/router/BRouter.js b/js/router/BRouter.js index d8985b1..f38ee1b 100644 --- a/js/router/BRouter.js +++ b/js/router/BRouter.js @@ -3,7 +3,7 @@ L.BRouter = L.Class.extend({ // NOTE: the routing API used here is not public! // /brouter?lonlats=1.1,1.2|2.1,2.2|3.1,3.2|4.1,4.2&nogos=-1.1,-1.2,1|-2.1,-2.2,2&profile=shortest&alternativeidx=1&format=kml URL_TEMPLATE: - '/brouter?lonlats={lonlats}&nogos={nogos}&polylines={polylines}&polygons={polygons}&profile={profile}&alternativeidx={alternativeidx}&format={format}', + '/brouter?lonlats={lonlats}&profile={profile}&alternativeidx={alternativeidx}&format={format}&nogos={nogos}&polylines={polylines}&polygons={polygons}', URL_PROFILE_UPLOAD: BR.conf.host + '/brouter/profile', PRECISION: 6, NUMBER_SEPARATOR: ',', @@ -42,7 +42,7 @@ L.BRouter = L.Class.extend({ L.setOptions(this, options); }, - getUrlParams: function(latLngs, pois, format) { + getUrlParams: function(latLngs, pois, circlego, format) { params = {}; if (this._getLonLatsString(latLngs) != null) params.lonlats = this._getLonLatsString(latLngs); @@ -59,6 +59,8 @@ L.BRouter = L.Class.extend({ if (pois && this._getLonLatsNameString(pois) != null) params.pois = this._getLonLatsNameString(pois); + if (circlego) params.circlego = circlego; + params.alternativeidx = this.options.alternative; if (format != null) { @@ -100,15 +102,27 @@ L.BRouter = L.Class.extend({ if (params.pois) { opts.pois = this._parseLonLatNames(params.pois); } + if (params.circlego) { + var circlego = params.circlego.split(','); + if (circlego.length == 3) { + circlego = [ + Number.parseFloat(circlego[0]), + Number.parseFloat(circlego[1]), + Number.parseInt(circlego[2]) + ]; + opts.circlego = circlego; + } + } return opts; }, - getUrl: function(latLngs, pois, format, trackname, exportWaypoints) { - var urlParams = this.getUrlParams(latLngs, pois, format); + getUrl: function(latLngs, pois, circlego, format, trackname, exportWaypoints) { + var urlParams = this.getUrlParams(latLngs, pois, circlego, format); var args = []; if (urlParams.lonlats != null && urlParams.lonlats.length > 0) args.push(L.Util.template('lonlats={lonlats}', urlParams)); if (urlParams.pois != null && urlParams.pois.length > 0) args.push(L.Util.template('pois={pois}', urlParams)); + if (urlParams.circlego != null) args.push(L.Util.template('circlego={circlego}', urlParams)); if (urlParams.nogos != null) args.push(L.Util.template('nogos={nogos}', urlParams)); if (urlParams.polylines != null) args.push(L.Util.template('polylines={polylines}', urlParams)); if (urlParams.polygons != null) args.push(L.Util.template('polygons={polygons}', urlParams)); @@ -129,7 +143,7 @@ L.BRouter = L.Class.extend({ }, getRoute: function(latLngs, cb) { - var url = this.getUrl(latLngs, null, 'geojson'), + var url = this.getUrl(latLngs, null, null, 'geojson'), xhr = new XMLHttpRequest(); if (!url) { diff --git a/locales/en.json b/locales/en.json index 28189a0..5374acc 100644 --- a/locales/en.json +++ b/locales/en.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error getting route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "no response from server", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/fr.json b/locales/fr.json index 4e8cf81..8a00f3c 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -61,7 +61,7 @@ "keyboard": { "backspace": "Retour chariot", "escape": "Échap", - "generic-shortcut": "{{action}} (touche {{key}} )", + "generic-shortcut": "{{action}} (touche {{key}})", "shift": "Maj" }, "layers": { @@ -94,6 +94,8 @@ "delete-nogo-areas": "Supprimer toutes les zones interdites", "delete-pois": "Supprimer tous les points d'intérêt ", "delete-route": "Supprimer l'itinéraire", + "draw-circlego-start": "Ajouter une zone limite de {{radius}} km", + "draw-circlego-stop": "Arrêter l'ajout d'une zone limit de {{radius}} km", "draw-poi-start": "Ajouter des points d'intérêt", "draw-poi-stop": "Arrêter l'ajout de points d'intérêt", "draw-route-start": "Dessiner l'itinéraire", From 5995e2e8797eeb029defc8639d1924bf973b9fe3 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Wed, 2 Dec 2020 20:53:02 +0100 Subject: [PATCH 04/24] Do not crash if circlego is not enabled (#349) --- js/index.js | 26 ++++++++++++++------------ js/plugin/POIMarkers.js | 2 +- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/js/index.js b/js/index.js index c964db4..2c75973 100644 --- a/js/index.js +++ b/js/index.js @@ -34,7 +34,7 @@ drawButton, deleteRouteButton, pois, - circleGo, + circlego, urlHash; // By default bootstrap-select use glyphicons @@ -260,8 +260,6 @@ }); pois = new BR.PoiMarkers(routing); - circleGo = new BR.CircleGoArea(routing, nogos, pois); - pois.circlego = circleGo; exportRoute = new BR.Export(router, pois); @@ -322,18 +320,22 @@ nogos.addTo(map); - var shouldAddCircleGo = false; + var circlegoRadius = null; var lang = i18next.languages.length && i18next.languages[0]; if (lang.startsWith('fr')) { - circleGo.options.radius = 20000; - shouldAddCircleGo = true; + circlegoRadius = 20000; } - if (shouldAddCircleGo) circleGo.addTo(map); + if (circlegoRadius != null) { + circlego = new BR.CircleGoArea(routing, nogos, pois); + circlego.options.radius = circlegoRadius; + pois.circlego = circlego; + circlego.addTo(map); + } var buttons = [drawButton, reverseRouteButton, nogos.getButton()]; - if (shouldAddCircleGo) buttons.push(circleGo.getButton()); + if (circlegoRadius) buttons.push(circlego.getButton()); buttons.push(deletePointButton, deleteRouteButton); L.easyBar(buttons).addTo(map); @@ -392,10 +394,10 @@ var opts = router.parseUrlParams(url2params(url)); router.setOptions(opts); routingOptions.setOptions(opts); - if (opts.circlego) { + if (circlego && opts.circlego) { // must be done before nogos! - circleGo.options.radius = opts.circlego[2]; - circleGo.setCircle([opts.circlego[0], opts.circlego[1]]); + circlego.options.radius = opts.circlego[2]; + circlego.setCircle([opts.circlego[0], opts.circlego[1]]); } nogos.setOptions(opts); profile.update(opts); @@ -423,7 +425,7 @@ // this callback is used to append anything in URL after L.Hash wrote #map=zoom/lat/lng/layer urlHash.additionalCb = function() { var url = router - .getUrl(routing.getWaypoints(), pois.getMarkers(), circleGo.getCircle(), null) + .getUrl(routing.getWaypoints(), pois.getMarkers(), circlego ? circlego.getCircle() : null, null) .substr('brouter?'.length + 1); // by default brouter use | as separator. To make URL more human-readable, we remplace them with ; for users diff --git a/js/plugin/POIMarkers.js b/js/plugin/POIMarkers.js index 76d132a..247da53 100644 --- a/js/plugin/POIMarkers.js +++ b/js/plugin/POIMarkers.js @@ -59,7 +59,7 @@ BR.PoiMarkers = L.Control.extend({ this.drawButton.state(enable ? 'deactivate-poi' : 'activate-poi'); if (enable) { this.routing.draw(false); - this.circlego.draw(false); + if (this.circlego) this.circlego.draw(false); this.map.on('click', this.onMapClick, this); L.DomUtil.addClass(this.map.getContainer(), 'pois-draw-enabled'); } else { From fde629fcb09fcfeda7fe6cd31b07d884ffab2c32 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Wed, 2 Dec 2020 21:01:33 +0100 Subject: [PATCH 05/24] Reduce circle segments count (#349) --- js/plugin/CircleGoArea.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/plugin/CircleGoArea.js b/js/plugin/CircleGoArea.js index 5fffebc..d44276d 100644 --- a/js/plugin/CircleGoArea.js +++ b/js/plugin/CircleGoArea.js @@ -88,6 +88,7 @@ BR.CircleGoArea = L.Control.extend({ if (center) { var polygon = this.circleToPolygon(center, this.options.radius); $('#nogoJSON').val(JSON.stringify(polygon)); + $('#nogoBuffer').val(0); this.nogos.uploadNogos(); } else { this.nogos.clear(); @@ -164,7 +165,7 @@ BR.CircleGoArea = L.Control.extend({ }, circleToPolygon: function(center, radius, numberOfSegments) { - var n = numberOfSegments ? numberOfSegments : 64; + var n = numberOfSegments ? numberOfSegments : 32; var inner = []; for (var i = 0; i < n; ++i) { From 8ca602575c8404313413fe5c4a8f4f3854d8f971 Mon Sep 17 00:00:00 2001 From: Gautier P Date: Wed, 2 Dec 2020 21:11:57 +0100 Subject: [PATCH 06/24] Do not override nogos on url load (#349) --- js/index.js | 9 ++++----- js/plugin/CircleGoArea.js | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/js/index.js b/js/index.js index 2c75973..722d2f0 100644 --- a/js/index.js +++ b/js/index.js @@ -394,11 +394,6 @@ var opts = router.parseUrlParams(url2params(url)); router.setOptions(opts); routingOptions.setOptions(opts); - if (circlego && opts.circlego) { - // must be done before nogos! - circlego.options.radius = opts.circlego[2]; - circlego.setCircle([opts.circlego[0], opts.circlego[1]]); - } nogos.setOptions(opts); profile.update(opts); @@ -410,6 +405,10 @@ if (opts.pois) { pois.setMarkers(opts.pois); } + if (circlego && opts.circlego) { + circlego.options.radius = opts.circlego[2]; + circlego.setCircle([opts.circlego[0], opts.circlego[1]], opts.polylines != null); + } }; var onInvalidHashChangeCb = function(params) { diff --git a/js/plugin/CircleGoArea.js b/js/plugin/CircleGoArea.js index d44276d..fe0c07f 100644 --- a/js/plugin/CircleGoArea.js +++ b/js/plugin/CircleGoArea.js @@ -96,10 +96,10 @@ BR.CircleGoArea = L.Control.extend({ }, onMapClick: function(e) { - this.setCircle([e.latlng.lng, e.latlng.lat]); + this.setCircle([e.latlng.lng, e.latlng.lat], false); }, - setCircle: function(center) { + setCircle: function(center, skipNogo) { var self = this; var icon = L.VectorMarkers.icon({ icon: 'home', @@ -119,7 +119,7 @@ BR.CircleGoArea = L.Control.extend({ this.clear(); marker.addTo(this.circleLayer); - this.setNogoCircle(center); + if (!skipNogo) this.setNogoCircle(center); this.draw(false); }, From 686e6d1a2faa1b0237bbab4d2afb637820978fc1 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Thu, 3 Dec 2020 10:11:35 +0100 Subject: [PATCH 07/24] Fix Dependabot alert for http-proxy --- package.json | 2 +- yarn.lock | 451 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 333 insertions(+), 120 deletions(-) diff --git a/package.json b/package.json index 015a18b..0a57668 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ }, "devDependencies": { "autoprefixer": "^8.1.0", - "browser-sync": "^2.26.7", + "browser-sync": "^2.26.13", "del": "^1.1.1", "eslint": "^6.6.0", "eslint-plugin-compat": "^3.3.0", diff --git a/yarn.lock b/yarn.lock index 3f448d4..65ffbee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1429,6 +1429,11 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -1441,6 +1446,13 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" @@ -1464,6 +1476,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + append-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" @@ -1827,6 +1847,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + binaryextensions@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-1.0.1.tgz#1e637488b35b58bda5f4774bf96a5212a8c90755" @@ -1892,20 +1917,27 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -browser-sync-client@^2.26.6: - version "2.26.6" - resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.26.6.tgz#e5201d3ace8aee88af17656b7b0c0620b6f8e4ab" - integrity sha512-mGrkZdNzttKdf/16I+y+2dTQxoMCIpKbVIMJ/uP8ZpnKu9f9qa/2CYVtLtbjZG8nsM14EwiCrjuFTGBEnT3Gjw== +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browser-sync-client@^2.26.13: + version "2.26.13" + resolved "https://registry.yarnpkg.com/browser-sync-client/-/browser-sync-client-2.26.13.tgz#ee5fa3ec36fe2a03f9887553cac6846751c8232d" + integrity sha512-p2VbZoYrpuDhkreq+/Sv1MkToHklh7T1OaIntDwpG6Iy2q/XkBcgwPcWjX+WwRNiZjN8MEehxIjEUh12LweLmQ== dependencies: etag "1.8.1" fresh "0.5.2" mitt "^1.1.3" rxjs "^5.5.6" -browser-sync-ui@^2.26.4: - version "2.26.4" - resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz#3772f13c6b93f2d7d333f4be0ca1ec02aae97dba" - integrity sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA== +browser-sync-ui@^2.26.13: + version "2.26.13" + resolved "https://registry.yarnpkg.com/browser-sync-ui/-/browser-sync-ui-2.26.13.tgz#7a0622df2c1cc4fb0dd8edd511f90737f84239b4" + integrity sha512-6NJ/pCnhCnBMzaty1opWo7ipDmFAIk8U71JMQGKJxblCUaGfdsbF2shf6XNZSkXYia1yS0vwKu9LIOzpXqQZCA== dependencies: async-each-series "0.1.1" connect-history-api-fallback "^1" @@ -1914,28 +1946,28 @@ browser-sync-ui@^2.26.4: socket.io-client "^2.0.4" stream-throttle "^0.1.3" -browser-sync@^2.26.7: - version "2.26.7" - resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.26.7.tgz#120287716eb405651a76cc74fe851c31350557f9" - integrity sha512-lY3emme0OyvA2ujEMpRmyRy9LY6gHLuTr2/ABxhIm3lADOiRXzP4dgekvnDrQqZ/Ec2Fz19lEjm6kglSG5766w== +browser-sync@^2.26.13: + version "2.26.13" + resolved "https://registry.yarnpkg.com/browser-sync/-/browser-sync-2.26.13.tgz#a74541c104aec7eda318a5d8abdb3317ae9eda3d" + integrity sha512-JPYLTngIzI+Dzx+StSSlMtF+Q9yjdh58HW6bMFqkFXuzQkJL8FCvp4lozlS6BbECZcsM2Gmlgp0uhEjvl18X4w== dependencies: - browser-sync-client "^2.26.6" - browser-sync-ui "^2.26.4" + browser-sync-client "^2.26.13" + browser-sync-ui "^2.26.13" bs-recipes "1.3.4" bs-snippet-injector "^2.0.1" - chokidar "^2.0.4" + chokidar "^3.4.1" connect "3.6.6" connect-history-api-fallback "^1" dev-ip "^1.0.1" easy-extender "^2.3.4" - eazy-logger "^3" + eazy-logger "3.1.0" etag "^1.8.1" fresh "^0.5.2" fs-extra "3.0.1" - http-proxy "1.15.2" + http-proxy "^1.18.1" immutable "^3" - localtunnel "1.9.2" - micromatch "^3.1.10" + localtunnel "^2.0.0" + micromatch "^4.0.2" opn "5.3.0" portscanner "2.1.1" qs "6.2.3" @@ -1947,8 +1979,8 @@ browser-sync@^2.26.7: serve-static "1.13.2" server-destroy "1.0.1" socket.io "2.1.1" - ua-parser-js "0.7.17" - yargs "6.4.0" + ua-parser-js "^0.7.18" + yargs "^15.4.1" browserslist@^1.7.6: version "1.7.7" @@ -2087,6 +2119,11 @@ camelcase@^3.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30001016" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001016.tgz#2712424b6667fbb5edea8a42fc5f4c9505271631" @@ -2173,24 +2210,20 @@ chokidar@^2.0.0: optionalDependencies: fsevents "^1.2.7" -chokidar@^2.0.4: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== +chokidar@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "^1.2.7" + fsevents "~2.1.2" chownr@^1.1.1: version "1.1.3" @@ -2254,6 +2287,24 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" @@ -2331,11 +2382,23 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" @@ -2634,7 +2697,7 @@ debug@^3.2.6: dependencies: ms "^2.1.1" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2762,6 +2825,11 @@ dev-ip@^1.0.1: resolved "https://registry.yarnpkg.com/dev-ip/-/dev-ip-1.0.1.tgz#a76a3ed1855be7a012bb8ac16cb80f3c00dc28f0" integrity sha1-p2o+0YVb56ASu4rBbLgPPADcKPA= +dlv@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" + integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -2819,12 +2887,12 @@ easy-extender@^2.3.4: dependencies: lodash "^4.17.10" -eazy-logger@^3: - version "3.0.2" - resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.0.2.tgz#a325aa5e53d13a2225889b2ac4113b2b9636f4fc" - integrity sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw= +eazy-logger@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eazy-logger/-/eazy-logger-3.1.0.tgz#b169eb56df714608fa114f164c8a2956bec9f0f3" + integrity sha512-/snsn2JqBtUSSstEl4R0RKjkisGHAhvYj89i7r3ytNUKW12y178KDZwXLXIgwDqLW6E/VRMT9qfld7wvFae8bQ== dependencies: - tfunk "^3.0.1" + tfunk "^4.0.0" ecc-jsbn@~0.1.1: version "0.1.2" @@ -3164,10 +3232,10 @@ event-stream@^3.1.0: stream-combiner "^0.2.2" through "^2.3.8" -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" - integrity sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg= +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== execa@^0.8.0: version "0.8.0" @@ -3332,6 +3400,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" @@ -3367,6 +3442,14 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + findup-sync@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" @@ -3439,6 +3522,11 @@ follow-redirects@1.5.10: dependencies: debug "=3.1.0" +follow-redirects@^1.0.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + font-awesome@4, font-awesome@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133" @@ -3529,6 +3617,11 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3574,6 +3667,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-closest@*: version "0.0.4" resolved "https://registry.yarnpkg.com/get-closest/-/get-closest-0.0.4.tgz#269ac776d1e6022aa0fd586dd708e8a7d32269af" @@ -3646,6 +3744,13 @@ glob-parent@^5.0.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" @@ -4166,13 +4271,14 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-proxy@1.15.2: - version "1.15.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.15.2.tgz#642fdcaffe52d3448d2bda3b0079e9409064da31" - integrity sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE= +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" http-signature@~1.2.0: version "1.2.0" @@ -4421,6 +4527,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -4528,7 +4641,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -4559,6 +4672,11 @@ is-number@^4.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -5024,15 +5142,15 @@ loader-utils@^0.2.14: json5 "^0.5.0" object-assign "^4.0.1" -localtunnel@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-1.9.2.tgz#0012fcabc29cf964c130a01858768aa2bb65b5af" - integrity sha512-NEKF7bDJE9U3xzJu3kbayF0WTvng6Pww7tzqNb/XtEARYwqw7CKEX7BvOMg98FtE9es2CRizl61gkV3hS8dqYg== +localtunnel@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/localtunnel/-/localtunnel-2.0.0.tgz#2ea71174fa80e34cce91b2a7ce416e6a57d9ff7c" + integrity sha512-g6E0aLgYYDvQDxIjIXkgJo2+pHj3sGg4Wz/XP3h2KtZnRsWPbOQY+hw1H8Z91jep998fkcVE9l+kghO+97vllg== dependencies: axios "0.19.0" debug "4.1.1" openurl "1.1.1" - yargs "6.6.0" + yargs "13.3.0" locate-path@^2.0.0: version "2.0.0" @@ -5050,6 +5168,13 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -5312,6 +5437,14 @@ micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.40.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" @@ -5569,7 +5702,7 @@ normalize-path@^2.0.1, normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -5678,11 +5811,6 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= -object-path@^0.9.0: - version "0.9.2" - resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.9.2.tgz#0fd9a74fc5fad1ae3968b586bda5c632bd6c05a5" - integrity sha1-D9mnT8X60a45aLWGvaXGMr1sBaU= - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -5839,6 +5967,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -5853,6 +5988,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -5950,6 +6092,11 @@ path-exists@^3.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" @@ -6003,6 +6150,11 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -6432,6 +6584,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + readline-sync@~1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" @@ -6596,7 +6755,12 @@ require-main-filename@^1.0.1: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= -requires-port@1.x.x: +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= @@ -7248,7 +7412,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: +string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== @@ -7266,6 +7430,15 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^5.2.0" +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -7314,13 +7487,20 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.1.0, strip-ansi@^5.2.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -7450,13 +7630,13 @@ textextensions@~1.0.0: resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-1.0.2.tgz#65486393ee1f2bb039a60cbba05b0b68bd9501d2" integrity sha1-ZUhjk+4fK7A5pgy7oFsLaL2VAdI= -tfunk@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-3.1.0.tgz#38e4414fc64977d87afdaa72facb6d29f82f7b5b" - integrity sha1-OORBT8ZJd9h6/apy+sttKfgve1s= +tfunk@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tfunk/-/tfunk-4.0.0.tgz#de9399feaf2060901d590b7faad80fcd5443077e" + integrity sha512-eJQ0dGfDIzWNiFNYFVjJ+Ezl/GmwHaFTBTjrtqNPW0S7cuVDBrZrmzUz6VkMeCR4DZFqhd4YtLwsw3i2wYHswQ== dependencies: - chalk "^1.1.1" - object-path "^0.9.0" + chalk "^1.1.3" + dlv "^1.1.3" through2-filter@^3.0.0: version "3.0.0" @@ -7563,6 +7743,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -7671,10 +7858,10 @@ typedarray@^0.0.6, typedarray@~0.0.5: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -ua-parser-js@0.7.17: - version "0.7.17" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" - integrity sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g== +ua-parser-js@^0.7.18: + version "0.7.22" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" + integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== uglify-js@2.6.4: version "2.6.4" @@ -7926,6 +8113,11 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + which@^1.2.14, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -7945,11 +8137,6 @@ window-size@0.1.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -7968,6 +8155,24 @@ wrap-ansi@^2.0.0: string-width "^1.0.1" strip-ansi "^3.0.1" +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -8028,6 +8233,11 @@ y18n@^3.2.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= +y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -8038,12 +8248,21 @@ yallist@^3.0.0, yallist@^3.0.3: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^4.1.0, yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw= +yargs-parser@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: - camelcase "^3.0.0" + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" yargs-parser@^5.0.0: version "5.0.0" @@ -8052,44 +8271,38 @@ yargs-parser@^5.0.0: dependencies: camelcase "^3.0.0" -yargs@6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.4.0.tgz#816e1a866d5598ccf34e5596ddce22d92da490d4" - integrity sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ= +yargs@13.3.0: + version "13.3.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" + integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^4.1.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.1" -yargs@6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg= +yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" require-directory "^2.1.1" - require-main-filename "^1.0.1" + require-main-filename "^2.0.0" set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" yargs@^7.1.0: version "7.1.0" From a2366a26bdf7c710e330c907e4fbc6929d77907c Mon Sep 17 00:00:00 2001 From: Gautier P Date: Thu, 3 Dec 2020 00:06:20 +0100 Subject: [PATCH 08/24] Split ring in two to avoid routing issue --- js/control/Message.js | 2 ++ js/plugin/CircleGoArea.js | 13 ++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/js/control/Message.js b/js/control/Message.js index 426ebde..fe1a213 100644 --- a/js/control/Message.js +++ b/js/control/Message.js @@ -50,6 +50,8 @@ BR.Message = L.Class.extend({ err = i18next.t('warning.invalid-route-to'); } else if (err == 'from-position not mapped in existing datafile\n') { err = i18next.t('warning.invalid-route-from'); + } else if (err && err.startsWith('null description for: ')) { + err = i18next.t('warning.no-route-found'); } this._show(err, 'error'); }, diff --git a/js/plugin/CircleGoArea.js b/js/plugin/CircleGoArea.js index fe0c07f..eeab771 100644 --- a/js/plugin/CircleGoArea.js +++ b/js/plugin/CircleGoArea.js @@ -173,6 +173,9 @@ BR.CircleGoArea = L.Control.extend({ } inner.push(inner[0]); + /* hack: it seems there is a bug when using a single closed ring line, + cf. https://github.com/nrenner/brouter-web/issues/349#issue-755514458 + so instead we use 2 half rings to ensure we properly close the area */ return { type: 'FeatureCollection', features: [ @@ -181,7 +184,15 @@ BR.CircleGoArea = L.Control.extend({ properties: {}, geometry: { type: 'LineString', - coordinates: inner + coordinates: inner.slice(n / 2 - 1) + } + }, + { + type: 'Feature', + properties: {}, + geometry: { + type: 'LineString', + coordinates: inner.slice(0, n / 2 + 1) } } ] From 1d78e03d0adfac686bfbf267ef3137f5469d655e Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Fri, 4 Dec 2020 18:16:13 +0100 Subject: [PATCH 09/24] Show inverted polygon for allowed zone --- css/style.css | 3 +++ js/plugin/CircleGoArea.js | 43 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/css/style.css b/css/style.css index 1c41f9f..213d6b3 100644 --- a/css/style.css +++ b/css/style.css @@ -200,6 +200,9 @@ input#trackname:focus:invalid { .circlego-draw-enabled { cursor: pointer; } +.circlego-outside { + cursor: not-allowed; +} #map { /* center error message horizontally */ diff --git a/js/plugin/CircleGoArea.js b/js/plugin/CircleGoArea.js index eeab771..f645df7 100644 --- a/js/plugin/CircleGoArea.js +++ b/js/plugin/CircleGoArea.js @@ -1,5 +1,6 @@ BR.CircleGoArea = L.Control.extend({ circleLayer: null, + outsideAreaRenderer: L.svg({ padding: 1 }), options: { radius: 1000, // in meters @@ -87,14 +88,47 @@ BR.CircleGoArea = L.Control.extend({ setNogoCircle: function(center) { if (center) { var polygon = this.circleToPolygon(center, this.options.radius); - $('#nogoJSON').val(JSON.stringify(polygon)); + var geoJson = JSON.stringify(polygon); + $('#nogoJSON').val(geoJson); $('#nogoBuffer').val(0); this.nogos.uploadNogos(); + + var polygonClone = JSON.parse(geoJson); + this.setOutsideArea(polygonClone); } else { this.nogos.clear(); + this.map.removeLayer(this.outsideArea); } }, + setOutsideArea: function(polygon) { + var inner = polygon.features[0].geometry.coordinates.concat(polygon.features[1].geometry.coordinates); + var world = [[180, 90], [-180, 90], [-180, -90], [180, -90], [180, 90]]; + polygon.features[0].geometry.coordinates = [world, inner]; + polygon.features[0].geometry.type = 'Polygon'; + polygon.features.pop(); + + if (this.outsideArea) { + this.map.removeLayer(this.outsideArea); + } + + this.outsideArea = L.geoJson(polygon, { + renderer: this.outsideAreaRenderer, + style: function(feature) { + return { + weight: 2, + color: 'black', + opacity: 0.4, + fillColor: 'black', + fillOpacity: 0.4, + className: 'circlego-outside' + }; + } + }) + .on('click', L.DomEvent.stop) + .addTo(this.map); + }, + onMapClick: function(e) { this.setCircle([e.latlng.lng, e.latlng.lat], false); }, @@ -119,7 +153,12 @@ BR.CircleGoArea = L.Control.extend({ this.clear(); marker.addTo(this.circleLayer); - if (!skipNogo) this.setNogoCircle(center); + if (!skipNogo) { + this.setNogoCircle(center); + } else { + var polygon = this.circleToPolygon(center, this.options.radius); + this.setOutsideArea(polygon); + } this.draw(false); }, From feec92dc171d3f84c0d9944176251f7434afaa25 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Fri, 4 Dec 2020 21:33:29 +0100 Subject: [PATCH 10/24] Update translations --- locales/ca.json | 4 ++++ locales/de.json | 4 ++++ locales/eo.json | 4 ++++ locales/es_ES.json | 4 ++++ locales/fa.json | 4 ++++ locales/fr.json | 10 ++++++---- locales/gl.json | 4 ++++ locales/hu.json | 4 ++++ locales/is.json | 4 ++++ locales/nb.json | 4 ++++ locales/nl.json | 4 ++++ locales/pl.json | 4 ++++ locales/pt.json | 4 ++++ locales/ru_RU.json | 4 ++++ locales/tr.json | 4 ++++ locales/zh-TW.json | 4 ++++ 16 files changed, 66 insertions(+), 4 deletions(-) diff --git a/locales/ca.json b/locales/ca.json index f1f52e9..91651ad 100644 --- a/locales/ca.json +++ b/locales/ca.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Esborra totes les àrees omeses", "delete-pois": "Esborra tots els punts d'interès", "delete-route": "Esborra la ruta", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Dibuixa punts d'interès", "draw-poi-stop": "Para de dibuixar punts d'interès", "draw-route-start": "Dibuixa una ruta", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error en obtenir l'URL de la ruta", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "el servidor no respon", "no-route-found": "Error: no es pot trobar una ruta pels punts donats. Podríeu provar de moure'ls més a prop de carreteres?", "profile-error": "Error del perfil: cap resposta o resposta buida del servidor", diff --git a/locales/de.json b/locales/de.json index e17e7fb..9703de0 100644 --- a/locales/de.json +++ b/locales/de.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Alle No-go-Areas löschen", "delete-pois": "Alle POI löschen", "delete-route": "Route löschen", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "POI einzeichnen", "draw-poi-stop": "Einzeichnen der POI beenden", "draw-route-start": "Route zeichnen", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Fehler beim Abrufen der Routen-URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "Keine Antwort vom Server", "no-route-found": "Fehler: kann für angegebene Punkte keine Route finden. Vielleicht die Punkte näher an Straßen verschieben?", "profile-error": "Profil-Fehler: keine oder leere Antwort vom Server", diff --git a/locales/eo.json b/locales/eo.json index f4074ad..d57d346 100644 --- a/locales/eo.json +++ b/locales/eo.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error getting route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "no response from server", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/es_ES.json b/locales/es_ES.json index 42a0665..d628c68 100644 --- a/locales/es_ES.json +++ b/locales/es_ES.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Eliminar todas las áreas prohibidas", "delete-pois": "Eliminar todos los Puntos de Interés", "delete-route": "Eliminar ruta", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error al obtener la URL de ruta", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "sin respuesta del servidor", "no-route-found": "Error: no se puede encontrar una ruta para los puntos dados. ¿Quizás intentando acercarlos a las carreteras?", "profile-error": "Error de perfil: no o respuesta vacía del servidor", diff --git a/locales/fa.json b/locales/fa.json index 08b18c4..d67a164 100644 --- a/locales/fa.json +++ b/locales/fa.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error getting route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "no response from server", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/fr.json b/locales/fr.json index 8a00f3c..7a22108 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -3,14 +3,14 @@ "bug-reports": "Rapporter un problème ou une amélioration :", "bug-reports-back": "serveur, moteur de routage, appli Android, profils, site brouter.de ;", "bug-reports-front": "client web.", - "chat": "Discuter avec d'autres utilisateurs et développeurs", + "chat": "Discuter avec d'autres utilisateurs et développeurs ;", "contact": "Contact :", - "contact-language": "La langue privilégiée est l'anglais, car il y a des contributeurs et des utilisateurs du monde entier.", + "contact-language": "L'anglais est à privilégier pour les échanges, car les développeurs et utilisateurs viennent du monde entier.", "data": "Données :", "data-description": "Les données reposent sur OpenStreetMap. La mise à jour est généralement quotidienne, voir les fichiers de données. ", "description": "Service web pour le moteur de routage BRouter. Pour l'appli Android et de plus amples informations, voir brouter.de.", "details": "Respect de la vie privée, \nCrédits,\nChangements et\nplus d'infos sur le client web.", - "support": "Discussions/Questions générales, support ;", + "support": "Discussions et questions générales, support ;", "title": "À propos", "tooltip": "Afficher plus d'informations à propos de BRouter-Web" }, @@ -95,7 +95,7 @@ "delete-pois": "Supprimer tous les points d'intérêt ", "delete-route": "Supprimer l'itinéraire", "draw-circlego-start": "Ajouter une zone limite de {{radius}} km", - "draw-circlego-stop": "Arrêter l'ajout d'une zone limit de {{radius}} km", + "draw-circlego-stop": "Arrêter l'ajout d'une zone limite de {{radius}} km", "draw-poi-start": "Ajouter des points d'intérêt", "draw-poi-stop": "Arrêter l'ajout de points d'intérêt", "draw-route-start": "Dessiner l'itinéraire", @@ -269,6 +269,8 @@ }, "warning": { "cannot-get-route": "Erreur lors de la réception de l'itinéraire", + "invalid-route-from": "Le départ est trop éloigné d'une route.", + "invalid-route-to": "L'arrivée est trop éloignée d'une route.", "no-response": "aucune réponse du serveur", "no-route-found": "Erreur : impossible de trouver un itinéraire correspondant aux points donnés. Essayez peut-être de rapprocher les points des routes ?", "profile-error": "Erreur de profil : pas de réponse ou réponse invalide du serveur", diff --git a/locales/gl.json b/locales/gl.json index 602c4f3..858e5d4 100644 --- a/locales/gl.json +++ b/locales/gl.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error getting route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "no response from server", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/hu.json b/locales/hu.json index 22a9385..ebb88a5 100644 --- a/locales/hu.json +++ b/locales/hu.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Minden elkerülendő terület törlése", "delete-pois": "Minden érdekes pont (POI) törlése", "delete-route": "Útvonal törlése", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Érdekes pontok (POI-k) rajzolása", "draw-poi-stop": "Érdekes pontok rajzolásának megszakítása", "draw-route-start": "Útvonal rajzolása", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Hiba történt az útvonal URL-jének beolvasásakor", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "a kiszolgáló nem válaszol", "no-route-found": "Hiba: az adott pontokhoz nem sikerül útvonalat találni. Esetleg próbálja meg közelebb tenni őket az utakhoz.", "profile-error": "Profilhiba: a kiszolgáló nem válaszol vagy üres választ küld", diff --git a/locales/is.json b/locales/is.json index 5019cb8..e0d235f 100644 --- a/locales/is.json +++ b/locales/is.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Eyða öllum bannsvæðum", "delete-pois": "Eyða öllum merkisstöðum", "delete-route": "Eyða leið", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Teikna leið", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Villa við að ná í URL-slóð leiðar", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "ekkert svar frá netþjóni", "no-route-found": "Villa: fann ekki leið fyrir uppgefna punkta. Kannski ættirðu að prófa að færa þá nær vegum?", "profile-error": "Villa í notkunarsniði: ekkert eða tómt svar frá netþjóni", diff --git a/locales/nb.json b/locales/nb.json index 38cd004..3c1e366 100644 --- a/locales/nb.json +++ b/locales/nb.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Slett alle no-go områder", "delete-pois": "Slett alle interessepunkter", "delete-route": "Slett rute", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Feil under mottak av rute-URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "ingen svar fra serveren", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/nl.json b/locales/nl.json index f5e3979..cc36b43 100644 --- a/locales/nl.json +++ b/locales/nl.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Verwijder alle no-go gebieden", "delete-pois": "Delete all points of interest", "delete-route": "Verwijder route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Teken route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Fout bij ophalen route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "geen antwoord van server", "no-route-found": "Fout: Kan geen route vinden voor de gegeven punten.\nProbeer de punten dichter bij wegen te plaatsen", "profile-error": "Profielfout: geen of leeg antwoord van server", diff --git a/locales/pl.json b/locales/pl.json index 28a8baf..05b76aa 100644 --- a/locales/pl.json +++ b/locales/pl.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Usuń wszystkie strefy no-go", "delete-pois": "Usuń wszystkie punkty zainteresowania", "delete-route": "Usunąć trasę?", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Błąd pobierania URL trasy", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "brak odpowiedzi z serwera", "no-route-found": "Błąd: nie można znaleźć trasy dla zadanych punktów. Spróbuj przesunąć je bliżej dróg.", "profile-error": "Błąd profilu: brak lub pusta odpowiedź z serwera", diff --git a/locales/pt.json b/locales/pt.json index 3f63182..2b99c27 100644 --- a/locales/pt.json +++ b/locales/pt.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error getting route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "no response from server", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/ru_RU.json b/locales/ru_RU.json index bc69a1b..06dcb66 100644 --- a/locales/ru_RU.json +++ b/locales/ru_RU.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Удалить все запретные зоны", "delete-pois": "Delete all points of interest", "delete-route": "Удалить маршрут", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Ошибка при получении URL маршрута", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "сервер не отвечает", "no-route-found": "Ошибка: не удается найти маршрут для заданных точек. Может быть, попытаться переместить их ближе к дорогам?", "profile-error": "Ошибка профиля: не удалось получить ответ сервера либо получен пустой ответ.", diff --git a/locales/tr.json b/locales/tr.json index f8bdd7f..6981624 100644 --- a/locales/tr.json +++ b/locales/tr.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "Error getting route URL", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "no response from server", "no-route-found": "Error: cannot find a route for given points. Maybe try to move them closer to roads?", "profile-error": "Profile error: no or empty response from server", diff --git a/locales/zh-TW.json b/locales/zh-TW.json index f33fe66..e82164a 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -94,6 +94,8 @@ "delete-nogo-areas": "Delete all no-go areas", "delete-pois": "Delete all points of interest", "delete-route": "Delete route", + "draw-circlego-start": "Draw limited {{radius}}km go-to zone", + "draw-circlego-stop": "Stop drawing limited {{radius}}km go-to zone", "draw-poi-start": "Draw points of interest", "draw-poi-stop": "Stop drawing points of interest", "draw-route-start": "Draw route", @@ -267,6 +269,8 @@ }, "warning": { "cannot-get-route": "取得路線URL時發生錯誤", + "invalid-route-from": "Start marker is too far from a route.", + "invalid-route-to": "Destination marker is too far from a route.", "no-response": "伺服器沒有回應", "no-route-found": "錯誤: 無法就給予的端點建立路線。或者嘗試將它們移近至道路附近?", "profile-error": "設定檔錯誤: 伺服器回傳空值或沒有回應", From b41d0e74838e9dd8cc8612df5a331cd2daf32e6a Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Fri, 4 Dec 2020 21:53:12 +0100 Subject: [PATCH 11/24] Update CHANGELOG.md --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1302b52..02955e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # BRouter-Web Changelog +## 0.14.0 (2020-12-04) + +### New Features [fr] + +- [French users only] New button to add 20km allowed zone - by [@bagage](https://github.com/bagage) ([#347](https://github.com/nrenner/brouter-web/pull/347), [#350](https://github.com/nrenner/brouter-web/pull/350), [#352](https://github.com/nrenner/brouter-web/pull/352)) + ## 0.13.0 (2020-08-04) See also [milestone 0.13.0](https://github.com/nrenner/brouter-web/milestone/14?closed=1) From c49b821db794ca3a0518ff1c52cf8f12f5bbd685 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Fri, 4 Dec 2020 22:09:04 +0100 Subject: [PATCH 12/24] release: 0.14.0 --- index.html | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 27566fd..10f425d 100644 --- a/index.html +++ b/index.html @@ -25,7 +25,7 @@ BRouter-Web 0.13.0BRouter-Web 0.14.0