';Zo=window.L.marker(e.latlng,{icon:window.L.divIcon({iconSize:[20,20],iconAnchor:[10,20],html:t,className:"TravelNotes-Map-WayPointStyle"}),draggable:!0}),(-1===y.route.showDragTooltip||qo<=y.route.showDragTooltip)&&(qo++,Zo.bindTooltip(E.getText("MapEditor - Drag and drop to add a waypoint")),Zo.getTooltip().options.offset=[0,0]),Zo.addTo(he.map),window.L.DomEvent.on(Zo,"mouseout",Go),window.L.DomEvent.on(Zo,"dragstart",Jo),window.L.DomEvent.on(Zo,"dragend",$o),window.L.DomEvent.on(Zo,"contextmenu",Yo)}}function la(e){window.L.DomEvent.stopPropagation(e),Uo(e).show()}function sa(e){(function(e){let t=e.target.objId;return lt(e,function(){let e=he.travel.editedRoute.wayPoints.first.objId!==t&&he.travel.editedRoute.wayPoints.last.objId!==t;return[{context:ko,name:E.getText("WayPointContextMenu - Delete this waypoint"),action:e?ko.removeWayPoint:null,param:t},{context:ko,name:E.getText("WayPointContextMenu - Modify properties"),action:ko.wayPointProperties,param:t}]}())})(e).show()}function da(e){he.travel.editedRoute.wayPoints.getAt(e.target.objId).latLng=[e.target.getLatLng().lat,e.target.getLatLng().lng],ko.wayPointDragEnd(e.target.objId)}function ca(e,t){t.objId=e,t.addTo(he.map),he.mapObjects.set(e,t)}function ua(e){let t=he.mapObjects.get(e);t&&(window.L.DomEvent.off(t),he.map.removeLayer(t),he.mapObjects.delete(e))}function ga(e,t){if(r.defaultValue===e.lat&&r.defaultValue===e.lng)return;let o='
'+t+"
",a=window.L.marker(e.latLng,{icon:window.L.divIcon({iconSize:[20,20],iconAnchor:[10,20],html:o,className:"TravelNotes-Map-WayPointStyle"}),draggable:!0});a.bindTooltip(e=>ze.getWayPoint(e.objId).fullName),a.getTooltip().options.offset=[10,-10],window.L.DomEvent.on(a,"contextmenu",sa),a.objId=e.objId,ca(e.objId,a),window.L.DomEvent.on(a,"dragend",da)}const va=new class{constructor(){Object.freeze(this)}updateRoute(e,t){-1!==e&&function(e){let t=ze.getRoute(e);ua(t.objId);let o=t.notes.iterator;for(;!o.done;)ua(o.value.objId);let a=t.wayPoints.iterator;for(;!a.done;)ua(a.value.objId)}(e),-1!==t&&function(e){let t=_o.addRoute(e),o=he.mapObjects.get(e);if(!he.travel.readOnly){window.L.DomEvent.on(o,"contextmenu",la),window.L.DomEvent.on(o,"mouseover",ia);let e=t.notes.iterator;for(;!e.done;){let t=he.mapObjects.get(e.value.objId),o=t.getLayer(t.markerId),a=t.getLayer(t.bulletId);window.L.DomEvent.on(a,"dragend",Qo),window.L.DomEvent.on(a,"drag",ea),window.L.DomEvent.on(a,"mouseenter",ta),window.L.DomEvent.on(a,"mouseleave",oa),window.L.DomEvent.on(o,"contextmenu",aa),window.L.DomEvent.on(o,"dragend",na),window.L.DomEvent.on(o,"drag",ra)}}if(!he.travel.readOnly&&i.notEdited!==t.editionStatus){let e=he.travel.editedRoute.wayPoints.iterator;for(;!e.done;)ga(e.value,e.first?"A":e.last?"B":e.index)}}(t)}updateRouteProperties(e){let t=he.mapObjects.get(e),o=ze.getRoute(e);t.setStyle({color:o.color,weight:o.width,dashArray:_o.getDashArray(o)})}updateNote(e,t){let o=!1;if(-1!==e){let t=he.mapObjects.get(e);t&&(o=t.getLayer(t.markerId).isPopupOpen()),ua(e)}-1!==t&&function(e,t){let o=_o.addNote(e);t&&o.marker.openPopup(),he.travel.readOnly||(window.L.DomEvent.on(o.bullet,"dragend",Qo),window.L.DomEvent.on(o.bullet,"drag",ea),window.L.DomEvent.on(o.bullet,"mouseenter",ta),window.L.DomEvent.on(o.bullet,"mouseleave",oa),window.L.DomEvent.on(o.marker,"contextmenu",aa),window.L.DomEvent.on(o.marker,"dragend",na),window.L.DomEvent.on(o.marker,"drag",ra))}(t,o)}removeObject(e){ua(e)}removeAllObjects(){he.mapObjects.forEach(e=>{window.L.DomEvent.off(e),he.map.removeLayer(e)}),he.mapObjects.clear()}addWayPoint(e,t){ga(e,t)}addItineraryPointMarker(e,t){ca(e,window.L.circleMarker(t,y.itineraryPoint.marker))}addSearchPointMarker(e,t,o){let a=!1;if(o){let e=[];o.forEach(t=>{e=e.concat(t)});let t=me.getLatLngBounds(e),n=he.map.getBounds();a=(t.getEast()-t.getWest())/(n.getEast()-n.getWest())>.01&&(t.getNorth()-t.getSouth())/(n.getNorth()-n.getSouth())>.01}ca(e,a?window.L.polyline(o,y.osmSearch.searchPointPolyline):window.L.circleMarker(t,y.osmSearch.searchPointMarker))}addRectangle(e,t,o){ca(e,window.L.rectangle(t,o))}setLayer(e){let t=Be.getUrl(e);t&&_o.setLayer(e,t)}};function ha(e){return Math.floor(Math.abs(e)+.5)*(0<=e?1:-1)}const ma=new class{constructor(){Object.freeze(this)}encode(e,t){if(!e.length)return"";let o=t.length,a=Array.from(t,e=>Math.pow(10,e));function n(e,t,o){let a=ha(e*o),n=ha(t*o),r=a-n;r<<=1,0>a-n&&(r=~r);let i="";for(;32<=r;)i+=String.fromCharCode(63+(32|31&r)),r>>=5;return i+=String.fromCharCode(r+63),i}let r="";for(let t=0;tMath.pow(10,e)),i=new Array(o).fill(0);function l(){let t=null,o=0,n=0;do{t=e.charCodeAt(a++)-63,n|=(31&t)<>1):n>>1}for(;a{a.push([e.lat,e.lng,e.distance,e.elev,e.objId])}),o.values=ma.encode(a,[r.fixed,r.fixed,2,2,0]),e.itinerary.itineraryPoints=o}function o(e){let o=[];if(e.itinerary.itineraryPoints.values)ma.decode(e.itinerary.itineraryPoints.values,[r.fixed,r.fixed,2,2,0]).forEach(a=>{let i={lat:r.defaultValue,lng:r.defaultValue,distance:t.defaultValue,elev:n.defaultValue,objId:-1};[i.lat,i.lng,i.distance,i.elev,i.objId]=a,i.objType=e.itinerary.itineraryPoints.objType,o.push(i)});else{e.itinerary.itineraryPoints.latLngs=ma.decode(e.itinerary.itineraryPoints.latLngs,[r.fixed,r.fixed]);let t=0;e.itinerary.itineraryPoints.latLngs.forEach(a=>{let r={};r.lat=a[0],r.lng=a[1],r.distance=e.itinerary.itineraryPoints.distances[t],e.itinerary.itineraryPoints.elevs?r.elev=e.itinerary.itineraryPoints.elevs[t]:r.elev=n.defaultValue,r.objId=e.itinerary.itineraryPoints.objIds[t],r.objType=e.itinerary.itineraryPoints.objType,o.push(r),t++})}e.itinerary.itineraryPoints=o}function a(e){e.routes.forEach(o),e.editedRoute&&o(e.editedRoute)}return new class{constructor(){Object.freeze(this)}decompress(e){a(e),he.travel.jsonObject=e,he.editedRouteObjId=-1,he.travel.routes.forEach(e=>{i.notEdited!==e.editionStatus&&(he.editedRouteObjId=e.objId)})}decompressMerge(e){a(e);let t=de();t.jsonObject=e;let o=t.routes.iterator;for(;!o.done;)he.travel.routes.add(o.value);let n=t.notes.iterator;for(;!n.done;)he.travel.notes.add(n.value)}compress(){let t=he.travel.jsonObject;return t.routes.forEach(e),e(t.editedRoute),t}}}let fa=null,ba=null,ya=null,wa=e.saved,Na=null;function Ta(){fa&&(fa.textContent=wa+" "+ba+" - Zoom : "+ya)}function xa(t){e.modified===t&&e.notSaved===wa||(wa=t,e.modified!==t||Na||(Na=setTimeout(xa,3e5,e.notSaved)),e.saved===t&&Na&&(clearTimeout(Na),Na=null),Ta())}function La(e){ba=j.formatLatLng([e.latlng.lat,e.latlng.lng]),Ta()}function Ia(){ya=String(he.map.getZoom()),Ta()}const Ea=new class{constructor(){Object.freeze(this)}set saveStatus(e){xa(e)}createUI(){ya=he.map.getZoom(),ba=j.formatLat(y.map.center.lat)+" - "+j.formatLng(y.map.center.lng),fa=w.create("span",null,w.create("div",{id:"TravelNotes-MouseUI"},document.querySelector("body"))),he.map.on("mousemove",La),he.map.on("zoomend",Ia)}};const ja=new class{constructor(){Object.freeze(this)}routeDropped(e,t,o){he.travel.routes.moveTo(e,t,o),Oo.chainRoutes(),De.dispatch("setrouteslist"),De.dispatch("roadbookupdate")}saveTravel(){let t=he.travel.routes.iterator;for(;!t.done;)t.value.hidden=!1;let o=pa().compress(he.travel);j.saveFile(o.name+".trv",JSON.stringify(o)),Ea.saveStatus=e.saved}clear(){y.travelNotes.haveBeforeUnloadWarning&&!window.confirm(E.getText("TravelEditor - This page ask to close; data are perhaps not saved."))||(no.deleteAllProfiles(),De.dispatch("removeallobjects"),he.travel.editedRoute=ne(),he.editedRouteObjId=-1,he.travel=de(),he.travel.routes.add(ne()),De.dispatch("setrouteslist"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate"),De.dispatch("travelnameupdated"),y.travelEditor.startupRouteEdition&&Oo.editRoute(he.travel.routes.first.objId),Ea.saveStatus=e.saved)}};function Pa(){return new class{constructor(){Object.freeze(this)}openDistantFile(e){pa().decompress(e),he.travel.readOnly=!0,this.display()}display(){document.title="Travel & Notes"+(""===he.travel.name?"":" - "+he.travel.name);let e=he.travel.routes.iterator;for(;!e.done;)i.notEdited===e.value.editionStatus&&De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e.value.objId});-1!==he.editedRouteObjId&&De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:he.travel.editedRoute.objId});let t=he.travel.notes.iterator;for(;!t.done;)De.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:t.value.objId});_e().zoomToTravel()}}}function Da(){function t(t,o){let a=new FileReader;a.onload=function(){let t={};try{t=JSON.parse(a.result)}catch(e){return void(e instanceof Error&&console.error(e))}o?pa().decompressMerge(t):(no.deleteAllProfiles(),pa().decompress(t)),function(){if(De.dispatch("removeallobjects"),Pa().display(),Eo.setLayer(he.travel.layerName),De.dispatch("setrouteslist"),-1!==he.editedRouteObjId){let e=he.travel.editedRoute.itinerary.provider;if(e&&""!==e&&!he.providers.get(e.toLowerCase()))je.showError(E.getText("FileLoader - Not possible to select as provider",{provider:e}));else{let t=he.travel.editedRoute.itinerary.transitMode;De.dispatch("setprovider",{provider:e}),t&&""!==t&&De.dispatch("settransitmode",{transitMode:t})}}Oo.chainRoutes(),De.dispatch("travelnameupdated"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate")}(),o||(Ea.saveStatus=e.saved)},a.readAsText(t.target.files[0])}return new class{constructor(){Object.freeze(this)}openLocalFile(e){t(e,!1)}mergeLocalFile(e){t(e,!0)}}}let Ca=null,Ra=null,Ma=null,Sa=0,Oa=null,Aa=null,ka=null,Ua=null;function Ba(e){e.deltaY&&(e.target.scrollTop+=e.deltaY*c[e.deltaMode]),e.stopPropagation()}function za(e){he.travel.name=f.sanitizeToJsString(e.target.value),document.title="Travel & Notes"+(""===he.travel.name?"":" - "+he.travel.name),De.dispatch("roadbookupdate")}function Ha(e){e.stopPropagation(),ja.clear(),document.title="Travel & Notes"+(""===he.travel.name?"":" - "+he.travel.name)}function Fa(e){e.stopPropagation(),""===he.travel.name?je.showError(E.getText("TravelUI - Gives a name to the travel")):ja.saveTravel()}function Va(e){e.stopPropagation(),Da().openLocalFile(e)}function Wa(){y.travelNotes.haveBeforeUnloadWarning&&!window.confirm(E.getText("TravelEditor - This page ask to close; data are perhaps not saved."))||Aa.click()}function Ka(e){e.stopPropagation(),Da().mergeLocalFile(e)}function _a(){-1===he.editedRouteObjId?ka.click():je.showError(E.getText("TravelUI - Not possible to merge a travel when a route is edited"))}function Za(){Oa=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},Ma),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Cancel travel"),textContent:"❌"},Oa).addEventListener("click",Ha,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Save travel"),textContent:"💾"},Oa).addEventListener("click",Fa,!1),Aa=w.create("input",{className:"TravelNotes-TravelUI-OpenFileInput",type:"file",accept:".trv"},Oa),Aa.addEventListener("change",Va,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Open travel"),textContent:"📂"},Oa).addEventListener("click",Wa,!1),ka=w.create("input",{className:"TravelNotes-TravelUI-OpenFileInput",type:"file",accept:".trv,.map"},Oa),ka.addEventListener("change",Ka,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Import travel"),textContent:"🌏"},Oa).addEventListener("click",_a,!1),w.create("text",{value:"📋"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:"TravelNotesRoadbook.html?lng="+y.language+"&page="+he.UUID,target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Open travel roadbook")},Oa)))}function Xa(e){e.stopPropagation(),Ca.classList.toggle("TravelNotes-Hidden");let t=Ca.classList.contains("TravelNotes-Hidden");e.target.textContent=t?"▶":"▼",e.target.title=t?E.getText("TravelUI - Show"):E.getText("TravelUI - Hide")}function qa(e){e.stopPropagation(),Oo.addRoute()}function Ga(){Ua=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},Ma),w.create("div",{textContent:"▼",className:"TravelNotes-TravelUI-RouteList-ExpandButton"},Ua).addEventListener("click",Xa,!1),w.create("span",{textContent:E.getText("TravelUI - Travel routes")},Ua),w.create("div",{className:"TravelNotes-UI-Button TravelNotes-UI-FlexRow-RightButton",title:E.getText("TravelUI - Add a route"),textContent:"+"},Ua).addEventListener("click",qa,!1)}function Ja(e){e.stopPropagation();try{e.dataTransfer.setData("Text",e.target.objId),e.dataTransfer.dropEffect="move",e.dataTransfer.routeObjId=e.target.objId}catch(e){e instanceof Error&&console.error(e)}Sa=e.target.objId}function Ya(e){e.preventDefault()}function $a(e){e.preventDefault();let t=e.target;for(;!t.objId;)t=t.parentElement;let o=t.getBoundingClientRect();ja.routeDropped(Sa,t.objId,e.clientY-o.top{e.paneId===tn?e.classList.add("TravelNotes-PanesManagerUI-ActivePaneButton"):e.classList.remove("TravelNotes-PanesManagerUI-ActivePaneButton")})}function ln(e){rn(e.target.paneId)}function sn(e){e.deltaY&&(e.target.scrollTop+=e.deltaY*c[e.deltaMode]),e.stopPropagation()}const dn=new class{constructor(){Object.freeze(this)}createUI(e){if(an)return;let t=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},e);nn=w.create("div",{id:"TravelNotes-PanesManagerUI-PaneControlsDiv"},e),an=w.create("div",{id:"TravelNotes-PanesManagerUI-PaneDataDiv"},e),an.addEventListener("wheel",sn,!1),on.forEach(e=>{w.create("div",{textContent:e.getButtonText(),className:"TravelNotes-PanesManagerUI-PaneButton",paneId:e.getId()},t).addEventListener("click",ln,!1),e.setPaneDivs(an,nn)})}addPane(e){on.set(e.getId(),e)}showPane(e){rn(e)}updatePane(e){e===tn&&rn(e)}},cn=["bike","pedestrian","car","train","line","circle"],un={bike:'data:image/svg+xml;utf8,',pedestrian:'data:image/svg+xml;utf8,',car:'data:image/svg+xml;utf8,',train:'data:image/svg+xml;utf8,',line:'data:image/svg+xml;utf8,',circle:'data:image/svg+xml;utf8,'};let gn=null,vn=!1,hn={bike:null,pedestrian:null,car:null,train:null,line:null,circle:null};function mn(e){he.routing.transitMode=e;let t=document.querySelector(".TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton");t&&t.classList.remove("TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton"),document.getElementById("TravelNotes-ProvidersToolbarUI-"+e+"ImgButton").classList.add("TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton")}function pn(e){e.stopPropagation(),mn(e.target.transitMode),Oo.startRouting()}function fn(e){he.routing.provider=e;let t=document.querySelector(".TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton");t&&t.classList.remove("TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton"),document.getElementById("TravelNotes-ProvidersToolbarUI-"+e+"ImgButton").classList.add("TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton");let o=he.providers.get(e.toLowerCase());if(cn.forEach(e=>{o.transitModes[e]?hn[e].classList.remove("TravelNotes-ProvidersToolbarUI-InactiveImgButton"):hn[e].classList.add("TravelNotes-ProvidersToolbarUI-InactiveImgButton")}),!o.transitModes[he.routing.transitMode]){let e=null;cn.forEach(t=>{o.transitModes[t]&&(e=e||t)}),mn(e)}}function bn(e){e.stopPropagation(),fn(e.target.provider),Oo.startRouting()}function yn(e){if(0===e.providerKey)return;let t=w.create("img",{src:e.icon,id:"TravelNotes-ProvidersToolbarUI-"+e.name+"ImgButton",className:"TravelNotes-ProvidersToolbarUI-ImgButton",title:e.name,provider:e.name},gn);if(t.addEventListener("click",bn,!1),!vn){t.classList.add("TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton"),he.routing.provider=t.provider,vn=!0;let o=null;cn.forEach(t=>{e.transitModes[t]&&(o=o||t)}),hn[o].classList.add("TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton"),he.routing.transitMode=o,cn.forEach(t=>{e.transitModes[t]||hn[t].classList.add("TravelNotes-ProvidersToolbarUI-InactiveImgButton")})}}function wn(){he.providers&&(vn=!1,he.providers.forEach(yn))}function Nn(){cn.forEach(e=>{hn[e]=w.create("img",{src:un[e],id:"TravelNotes-ProvidersToolbarUI-"+e+"ImgButton",className:"TravelNotes-ProvidersToolbarUI-ImgButton",title:E.getText("ProvidersToolbarUI - "+e),transitMode:e},gn),hn[e].addEventListener("click",pn,!1)})}const Tn=new class{constructor(){Object.freeze(this)}createUI(e){gn=w.create("div",{className:"TravelNotes-UI-FlexRowDiv TravelNotes-ProvidersToolbarUI-ImgButtonsDiv"},e),Nn(),wn()}set provider(e){fn(e)}set transitMode(e){mn(e)}providersAdded(){for(;gn.firstChild;)gn.removeChild(gn.firstChild);Nn(),wn()}};let xn="geolocation"in navigator?o.inactive:o.disabled,Ln=null;function In(e){De.dispatch("geolocationpositionchanged",{position:e})}function En(){o.active===xn&&(xn=o.inactive),De.dispatch("geolocationstatuschanged",{status:xn}),navigator.geolocation.clearWatch(Ln),Ln=null}function jn(e){1===e.code&&(xn=o.refusedByUser),En()}const Pn=new class{constructor(){Object.freeze(this)}get status(){return xn}switch(){switch(xn){case o.inactive:xn=o.active,De.dispatch("geolocationstatuschanged",{status:xn}),navigator.geolocation.getCurrentPosition(In,jn,y.geoLocation.options),Ln=navigator.geolocation.watchPosition(In,jn,y.geoLocation.options);break;case o.active:En()}return xn}};let Dn=null,Cn=null,Rn=null;function Mn(e){e.stopPropagation(),Be.setKeysFromDialog()}function Sn(e){e.stopPropagation(),Pn.switch()}function On(e){e.target.textContent="📌"===e.target.textContent?"❌":"📌",Rn.pin()}const An=new class{constructor(){Object.freeze(this)}createUI(e){Rn=e,Cn=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},e),w.create("text",{value:"🏠"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:window.location.origin,target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:"Home"},Cn))),w.create("text",{value:"?"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:"https://github.com/wwwouaiebe/leaflet.TravelNotes/tree/gh-pages/TravelNotesGuides",target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:"Help"},Cn))),w.create("text",{value:"@"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:y.travelNotesToolbarUI.contactMail.url||window.location.origin,target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:"Contact"},Cn))),y.APIKeysDialog.showButton&&w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelNotesToolbarUI - API keys"),textContent:"🔑"},Cn).addEventListener("click",Mn,!1),o.disabled{e.classList.toggle("TravelNotes-Hidden")})}function h(e){t=e.target.checked,document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.classList.toggle("TravelNotes-Hidden")})}return new class{constructor(){Object.freeze(this)}remove(){!function(){document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Notes-Row, .TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.removeEventListener("contextmenu",c,!1),e.removeEventListener("mouseenter",u,!1),e.removeEventListener("mouseleave",g,!1)});let e=document.querySelector(".TravelNotes-ItineraryPaneUI-Route-ManeuversAndNotes");e&&o.removeChild(e)}(),i&&(d&&(d.removeEventListener("click",h,!1),i.removeChild(d),d=null),s&&(s.removeEventListener("click",v,!1),i.removeChild(s),s=null),n.removeChild(i),i=null),l&&(n.removeChild(l),l=null)}add(){-1!==he.editedRouteObjId&&(i=w.create("div",null,n),w.create("text",{value:E.getText("ItineraryPaneUI - Show notes")},i),s=w.create("input",{type:"checkbox",id:"TravelNotes-ItineraryPane-ShowNotesInput",checked:e},i),s.addEventListener("click",v,!1),w.create("text",{value:E.getText("ItineraryPaneUI - Show maneuvers")},i),d=w.create("input",{type:"checkbox",id:"TravelNotes-ItineraryPane-ShowManeuversInput",checked:t},i),d.addEventListener("click",h,!1),l=Wt.getRouteHeaderHTML("TravelNotes-ItineraryPaneUI-",he.travel.editedRoute),n.appendChild(l),o.appendChild(Wt.getEditedRouteManeuversAndNotesHTML("TravelNotes-ItineraryPaneUI-")),document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Notes-Row, .TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.addEventListener("contextmenu",c,!1),e.addEventListener("mouseenter",u,!1),e.addEventListener("mouseleave",g,!1)}),e||document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Notes-Row").forEach(e=>{e.classList.toggle("TravelNotes-Hidden")}),t||document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.classList.toggle("TravelNotes-Hidden")}))}getId(){return a.itineraryPane}getButtonText(){return E.getText("PanesManagerUI - Itinerary")}setPaneDivs(e,t){o=e,n=t}}}let Un=-1,Bn=-1,zn=!1;let Hn=null,Fn=null,Vn=null,Wn=[];class Kn{constructor(e,t){this.name=f.sanitizeToJsString(e),this.items=[],this.filterTagsArray=[],this.elementTypes=["node","way","relation"],this.isSelected=!1,this.isExpanded=!1,this.isRoot=!1,t&&(this.isExpanded=!0,this.isRoot=!0)}}function _n(){-1===Bn?Bn=T():De.dispatch("removeobject",{objId:Bn});let e=he.map.getCenter();Fn=he.map.getBounds();let t=me.getSquareBoundingBox([e.lat,e.lng],5e3);Fn.getSouthWest().lat=Math.max(Fn.getSouthWest().lat,t.getSouthWest().lat),Fn.getSouthWest().lng=Math.max(Fn.getSouthWest().lng,t.getSouthWest().lng),Fn.getNorthEast().lat=Math.min(Fn.getNorthEast().lat,t.getNorthEast().lat),Fn.getNorthEast().lng=Math.min(Fn.getNorthEast().lng,t.getNorthEast().lng),De.dispatch("addrectangle",{objId:Bn,bounds:Fn,properties:y.osmSearch.nextSearchLimit})}function Zn(e){e.isSelected&&0{o.filterTagsArray.forEach(a=>{(function(e,t){let o=!0;return t.forEach(t=>{let[a,n]=Object.entries(t)[0];o=o&&e.tags[a]&&(!n||e.tags[a]===n)}),o})(e,a)&&(e.description=o.name,t.set(e.id,e))})})}function qn(e){let t=new Map,o=new Map,a=new Map,n=new Map;function i(e){e.geometry=[[]],e.lat=r.defaultValue,e.lon=r.defaultValue;let t=0;e.nodes.forEach(a=>{let n=o.get(a);e.geometry[0].push([n.lat,n.lon]),e.lat+=n.lat,e.lon+=n.lon,t++}),0!==t&&(e.lat/=t,e.lon/=t)}e.forEach(e=>{switch(e.type){case"node":o.set(e.id,e);break;case"way":a.set(e.id,e);break;case"relation":n.set(e.id,e)}e.tags&&Xn(e,t)}),t.forEach(e=>{switch(e.type){case"way":i(e);break;case"relation":!function(e){e.geometry=[[]],e.lat=r.defaultValue,e.lon=r.defaultValue;let t=0;e.members.forEach(o=>{if("way"===o.type){let n=a.get(o.ref);i(n),e.geometry.push(n.geometry[0]),e.lat+=n.lat,e.lon+=n.lon,t++}}),0!==t&&(e.lat/=t,e.lon/=t)}(e)}}),he.searchData=Array.from(t.values()).sort((e,t)=>e.description>t.description?1:e.description{e.filterTagsArray.forEach(o=>{let[a,n]=Object.entries(o[0])[0],r=t.get(a);r||(r={values:new Map,elements:new Map},t.set(a,r)),r.values.set(n,n),e.elementTypes.forEach(e=>{r.elements.set(e,e)})})});let o="("+Fn.getSouthWest().lat.toFixed(r.fixed)+","+Fn.getSouthWest().lng.toFixed(r.fixed)+","+Fn.getNorthEast().lat.toFixed(r.fixed)+","+Fn.getNorthEast().lng.toFixed(r.fixed)+")";return t.forEach((t,a)=>{let n='"'+a+'"';if(1===t.values.size){let e=t.values.values().next().value;e&&(n+='="'+e+'"')}else 1{n+=e+"|"}),n=n.substr(0,n.length-1)+'"');let r=1===t.elements.size?t.elements.values().next().value:"nwr",i=y.overpassApi.url+"?data=[out:json][timeout:"+y.overpassApi.timeOut+"];"+r+"["+n+"]"+o+";"+("node"===r?"":"(._;>;);")+"out;";e.push(fetch(i))}),e}()).then(Gn))}show(){he.map.on("zoom",_n),he.map.on("move",_n),_n(),Hn&&(-1===Un?Un=T():De.dispatch("removeobject",{objId:Un}),De.dispatch("addrectangle",{objId:Un,bounds:[[Hn.getSouthWest().lat,Hn.getSouthWest().lng],[Hn.getNorthEast().lat,Hn.getNorthEast().lng]],properties:y.osmSearch.previousSearchLimit}))}hide(){let e=De;he.map.off("zoom",_n),he.map.off("move",_n),-1!==Bn&&(e.dispatch("removeobject",{objId:Bn}),Bn=-1),-1!==Un&&(e.dispatch("removeobject",{objId:Un}),Un=-1)}parseDictionary(e){Vn=new Kn("All",!0);let t=[Vn.items],o=null,a=null;e.split(/\r\n|\r|\n/).forEach(e=>{""!==e&&function(e){let n=e.split(";");for(;""===n[n.length-1];)n.pop();let r=0,i=null;n.forEach(e=>{if(""!==e)if(-1===e.indexOf("="))a=new Kn(e),t[r].push(a),t[r+1]=a.items,o=a.filterTagsArray;else{let t=e.split("=");if("element"===t[0])a.elementTypes=[t[1]];else{let e={};e[t[0]]="*"===t[1]?null:t[1],i=i||[],i.push(e)}}r++}),i&&o.push(i)}(e)})}};function Yn(){let e=null,t=null,o=null,n=null,i=null,l=-1,s=0;function d(t){t.stopPropagation(),t.preventDefault();let o=t.target;for(;!o.osmElement;)o=o.parentNode;t.latlng={lat:r.defaultValue,lng:r.defaultValue},t.fromUI=!0,t.originalEvent={clientX:t.clientX,clientY:t.clientY,latLng:[o.osmElement.lat,o.osmElement.lon],osmElement:o.osmElement,geometry:o.osmElement.geometry},function(e,t){let o=_e();return lt(e,function(){let t=e.originalEvent.latLng;return[{context:ko,name:E.getText("MapContextMenu - Select this point as start point"),action:-1!==he.editedRouteObjId&&r.defaultValue===he.travel.editedRoute.wayPoints.first.lat?ko.setStartPoint:null,param:t},{context:ko,name:E.getText("MapContextMenu - Select this point as way point"),action:-1===he.editedRouteObjId?null:ko.addWayPoint,param:t},{context:ko,name:E.getText("MapContextMenu - Select this point as end point"),action:-1!==he.editedRouteObjId&&r.defaultValue===he.travel.editedRoute.wayPoints.last.lat?ko.setEndPoint:null,param:t},{context:eo,name:E.getText("OsmSearchContextMenu - Create a route note with this result"),action:eo.newSearchNote,param:{osmElement:e.originalEvent.osmElement,isTravelNote:!1}},{context:eo,name:E.getText("OsmSearchContextMenu - Create a travel note with this result"),action:eo.newSearchNote,param:{osmElement:e.originalEvent.osmElement,isTravelNote:!0}},{context:eo,name:eo.osmSearchNoteDialog?E.getText("OsmSearchContextMenu - Hide note dialog"):E.getText("OsmSearchContextMenu - Show note dialog"),action:eo.changeOsmSearchNoteDialog},{context:o,name:E.getText("OsmSearchContextMenu - Zoom to this result"),action:o.zoomToPoi,param:{latLng:e.originalEvent.latLng,geometry:e.originalEvent.geometry}}]}(),t)}(t,e).show()}function u(e){e.stopPropagation(),l=e.target.objId,De.dispatch("addsearchpointmarker",{objId:e.target.objId,latLng:[e.target.osmElement.lat,e.target.osmElement.lon],geometry:e.target.osmElement.geometry})}function g(e){e.stopPropagation(),De.dispatch("removeobject",{objId:e.target.objId})}function v(){document.querySelectorAll(".TravelNotes-OsmSearchPaneUI-SearchResult").forEach(t=>{t.removeEventListener("contextmenu",d,!1),t.removeEventListener("mouseenter",u,!1),t.removeEventListener("mouseleave",g,!1),e.removeChild(t)})}function h(e){s++;let t=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchItem TravelNotes-OsmSearchPaneUI-SearchItemMargin"+s,dictItem:e},i);if(!e.isRoot){w.create("input",{type:"checkbox",checked:e.isSelected},t).addEventListener("change",(function(e){!function e(t,o){t.isSelected=o,t.items.forEach(t=>{e(t,o)})}(e.target.parentNode.dictItem,e.target.checked),i.textContent="",h(Jn.dictionary)}),!1)}if(0===e.filterTagsArray.length){w.create("div",{className:"TravelNotes-UI-Button TravelNotes-OsmSearchPaneUI-TreeArrow",textContent:e.isExpanded?"▼":"▶"},t).addEventListener("click",(function(e){e.target.parentNode.dictItem.isExpanded=!e.target.parentNode.dictItem.isExpanded,i.textContent="",h(Jn.dictionary)}),!1)}w.create("text",{value:e.name},t),e.isExpanded&&e.items.forEach(h),s--}function m(){v(),Jn.dictionary.isExpanded=!1,i.textContent="",h(Jn.dictionary),n=w.create("div",{className:"TravelNotes-WaitAnimation"},t),w.create("div",{className:"TravelNotes-WaitAnimationBullet"},n),Jn.search()}function p(e){e.items.forEach(p),e.isSelected=!1}function b(){p(Jn.dictionary),i.textContent="",h(Jn.dictionary)}function y(e){e.items.forEach(y),e.isExpanded=!0}function N(){y(Jn.dictionary),i.textContent="",h(Jn.dictionary)}function x(e){e.items.forEach(x),e.isRoot||(e.isExpanded=!1)}function L(){x(Jn.dictionary),i.textContent="",h(Jn.dictionary)}function I(e){e.deltaY&&(e.target.scrollTop+=e.deltaY*c[e.deltaMode]),e.stopPropagation()}function j(e,t){t&&w.create("div",{textContent:t},e)}function P(t){let o=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchResult-Row",osmElement:t,objId:T()},e),a="";a=t.tags.rcn_ref?"":It.getIconDataFromName(t.description)||"";let n=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchResult-IconCell"},o);f.sanitizeToHtmlElement(a,n);let r=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchResult-Cell"},o);j(r,t.description),j(r,t.tags.name),j(r,t.tags.rcn_ref),j(r,function(e){let t=(e.tags["addr:street"]?(e.tags["addr:housenumber"]?e.tags["addr:housenumber"]+" ":"")+e.tags["addr:street"]+" ":"")+(e.tags["addr:city"]?(e.tags["addr:postcode"]?e.tags["addr:postcode"]+" ":"")+e.tags["addr:city"]:"");return""===t?null:t}(t)),t.tags.phone&&j(r,"☎️ : "+t.tags.phone),t.tags.email&&w.create("a",{href:"mailto:"+t.tags.email,textContent:t.tags.email},w.create("div",{textContent:"📧 : "},r)),t.tags.website&&w.create("a",{href:t.tags.website,target:"_blank",textContent:t.tags.website},w.create("div",null,r)),o.title="";for(const[e,a]of Object.entries(t.tags))o.title+=e+"="+a+"\n";o.addEventListener("contextmenu",d,!1),o.addEventListener("mouseenter",u,!1),o.addEventListener("mouseleave",g,!1)}return new class{constructor(){Object.freeze(this)}remove(){Jn.hide(),v(),i&&(t.removeChild(i),i=null),o&&t.removeChild(o),n&&(t.removeChild(n),n=null),De.dispatch("removeobject",{objId:l})}add(){Jn.show(),o=w.create("div",null,t),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Search OpenStreetMap"),textContent:"🔎"},o).addEventListener("click",m,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Expand tree"),textContent:"▼"},o).addEventListener("click",N,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Collapse tree"),textContent:"▶"},o).addEventListener("click",L,!1),w.create("div",{id:"TravelNotes-OsmSearchPaneUI-ClearAllButton",className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Clear tree"),textContent:"❌"},o).addEventListener("click",b,!1),i=w.create("div",{id:"TravelNotes-OsmSearchPaneUI-SearchTree"},t),i.addEventListener("wheel",I,!1),Jn.dictionary.name="",h(Jn.dictionary),he.searchData.forEach(P)}getId(){return a.searchPane}getButtonText(){return E.getText("PanesManagerUI - Search")}setPaneDivs(o,a){e=o,t=a}}}let $n=null,Qn=!1,er=null,tr=null;function or(){er&&(clearTimeout(er),er=null),$n.classList.remove("TravelNotes-UI-Minimized"),tr.classList.add("TravelNotes-Hidden");let e=$n.childNodes;for(let t=1;t{e.removeEventListener("contextmenu",s,!1),e.removeEventListener("dragstart",n,!1)}),t.removeChild(o)),o=null}add(){o=Wt.getTravelNotesHTML("TravelNotes-TravelNotesPaneUI-"),o.addEventListener("drop",l,!1),o.addEventListener("dragover",i,!1),t.appendChild(o),o.childNodes.forEach(e=>{e.draggable=!0,e.addEventListener("contextmenu",s,!1),e.addEventListener("dragstart",n,!1),e.classList.add("TravelNotes-UI-MoveCursor")})}getId(){return a.travelNotesPane}getButtonText(){return E.getText("PanesManagerUI - Travel notes")}setPaneDivs(e){t=e}}}()),dn.addPane(Yn()),dn.createUI($n),Tn.createUI($n),y.travelEditor.startMinimized){$n.addEventListener("mouseenter",or,!1),$n.addEventListener("mouseleave",nr,!1),$n.classList.add("TravelNotes-UI-Minimized");let e=$n.childNodes;for(let t=1;ten.setTravelName(),!1),$n.addEventListener("setrouteslist",()=>en.setRoutesList(),!1),$n.addEventListener("showitinerary",()=>dn.showPane(a.itineraryPane),!1),$n.addEventListener("updateitinerary",()=>dn.updatePane(a.itineraryPane),!1),$n.addEventListener("showtravelnotes",()=>dn.showPane(a.travelNotesPane),!1),$n.addEventListener("updatetravelnotes",()=>dn.updatePane(a.travelNotesPane),!1),$n.addEventListener("showsearch",()=>dn.showPane(a.searchPane),!1),$n.addEventListener("updatesearch",()=>dn.updatePane(a.searchPane),!1),$n.addEventListener("providersadded",()=>Tn.providersAdded(),!1),$n.addEventListener("setprovider",e=>{e.data&&e.data.provider&&(Tn.provider=e.data.provider)},!1),$n.addEventListener("settransitmode",e=>{e.data&&e.data.provider&&(Tn.transitMode=e.data.transitMode)},!1),document.addEventListener("geolocationstatuschanged",e=>{An.geoLocationStatusChanged(e.data.status)},!1),$n.addEventListener("click",e=>{e.target.id&&"TravelNotes-UI-MainDiv"===e.target.id&&(e.stopPropagation(),e.preventDefault())},!1),$n.addEventListener("dblclick",e=>{e.stopPropagation(),e.preventDefault()},!1),$n.addEventListener("contextmenu",e=>{e.stopPropagation(),e.preventDefault()},!1),$n.addEventListener("wheel",e=>{e.stopPropagation(),e.preventDefault()},!1)}}};function lr(){let e=pe();e.title=E.getText("AboutDialog - About Travel & Notes");f.sanitizeToHtmlElement('
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version.
';Zo=window.L.marker(e.latlng,{icon:window.L.divIcon({iconSize:[20,20],iconAnchor:[10,20],html:t,className:"TravelNotes-Map-WayPointStyle"}),draggable:!0}),(-1===y.route.showDragTooltip||qo<=y.route.showDragTooltip)&&(qo++,Zo.bindTooltip(E.getText("MapEditor - Drag and drop to add a waypoint")),Zo.getTooltip().options.offset=[0,0]),Zo.addTo(he.map),window.L.DomEvent.on(Zo,"mouseout",Go),window.L.DomEvent.on(Zo,"dragstart",Jo),window.L.DomEvent.on(Zo,"dragend",$o),window.L.DomEvent.on(Zo,"contextmenu",Yo)}}function la(e){window.L.DomEvent.stopPropagation(e),Uo(e).show()}function sa(e){(function(e){let t=e.target.objId;return lt(e,function(){let e=he.travel.editedRoute.wayPoints.first.objId!==t&&he.travel.editedRoute.wayPoints.last.objId!==t;return[{context:ko,name:E.getText("WayPointContextMenu - Delete this waypoint"),action:e?ko.removeWayPoint:null,param:t},{context:ko,name:E.getText("WayPointContextMenu - Modify properties"),action:ko.wayPointProperties,param:t}]}())})(e).show()}function da(e){he.travel.editedRoute.wayPoints.getAt(e.target.objId).latLng=[e.target.getLatLng().lat,e.target.getLatLng().lng],ko.wayPointDragEnd(e.target.objId)}function ca(e,t){t.objId=e,t.addTo(he.map),he.mapObjects.set(e,t)}function ua(e){let t=he.mapObjects.get(e);t&&(window.L.DomEvent.off(t),he.map.removeLayer(t),he.mapObjects.delete(e))}function ga(e,t){if(r.defaultValue===e.lat&&r.defaultValue===e.lng)return;let o='
'+t+"
",a=window.L.marker(e.latLng,{icon:window.L.divIcon({iconSize:[20,20],iconAnchor:[10,20],html:o,className:"TravelNotes-Map-WayPointStyle"}),draggable:!0});a.bindTooltip(e=>He.getWayPoint(e.objId).fullName),a.getTooltip().options.offset=[10,-10],window.L.DomEvent.on(a,"contextmenu",sa),a.objId=e.objId,ca(e.objId,a),window.L.DomEvent.on(a,"dragend",da)}const va=new class{constructor(){Object.freeze(this)}updateRoute(e,t){-1!==e&&function(e){let t=He.getRoute(e);ua(t.objId);let o=t.notes.iterator;for(;!o.done;)ua(o.value.objId);let a=t.wayPoints.iterator;for(;!a.done;)ua(a.value.objId)}(e),-1!==t&&function(e){let t=_o.addRoute(e),o=he.mapObjects.get(e);if(!he.travel.readOnly){window.L.DomEvent.on(o,"contextmenu",la),window.L.DomEvent.on(o,"mouseover",ia);let e=t.notes.iterator;for(;!e.done;){let t=he.mapObjects.get(e.value.objId),o=t.getLayer(t.markerId),a=t.getLayer(t.bulletId);window.L.DomEvent.on(a,"dragend",Qo),window.L.DomEvent.on(a,"drag",ea),window.L.DomEvent.on(a,"mouseenter",ta),window.L.DomEvent.on(a,"mouseleave",oa),window.L.DomEvent.on(o,"contextmenu",aa),window.L.DomEvent.on(o,"dragend",na),window.L.DomEvent.on(o,"drag",ra)}}if(!he.travel.readOnly&&i.notEdited!==t.editionStatus){let e=he.travel.editedRoute.wayPoints.iterator;for(;!e.done;)ga(e.value,e.first?"A":e.last?"B":e.index)}}(t)}updateRouteProperties(e){let t=he.mapObjects.get(e),o=He.getRoute(e);t.setStyle({color:o.color,weight:o.width,dashArray:_o.getDashArray(o)})}updateNote(e,t){let o=!1;if(-1!==e){let t=he.mapObjects.get(e);t&&(o=t.getLayer(t.markerId).isPopupOpen()),ua(e)}-1!==t&&function(e,t){let o=_o.addNote(e);t&&o.marker.openPopup(),he.travel.readOnly||(window.L.DomEvent.on(o.bullet,"dragend",Qo),window.L.DomEvent.on(o.bullet,"drag",ea),window.L.DomEvent.on(o.bullet,"mouseenter",ta),window.L.DomEvent.on(o.bullet,"mouseleave",oa),window.L.DomEvent.on(o.marker,"contextmenu",aa),window.L.DomEvent.on(o.marker,"dragend",na),window.L.DomEvent.on(o.marker,"drag",ra))}(t,o)}removeObject(e){ua(e)}removeAllObjects(){he.mapObjects.forEach(e=>{window.L.DomEvent.off(e),he.map.removeLayer(e)}),he.mapObjects.clear()}addWayPoint(e,t){ga(e,t)}addItineraryPointMarker(e,t){ca(e,window.L.circleMarker(t,y.itineraryPoint.marker))}addSearchPointMarker(e,t,o){let a=!1;if(o){let e=[];o.forEach(t=>{e=e.concat(t)});let t=me.getLatLngBounds(e),n=he.map.getBounds();a=(t.getEast()-t.getWest())/(n.getEast()-n.getWest())>.01&&(t.getNorth()-t.getSouth())/(n.getNorth()-n.getSouth())>.01}ca(e,a?window.L.polyline(o,y.osmSearch.searchPointPolyline):window.L.circleMarker(t,y.osmSearch.searchPointMarker))}addRectangle(e,t,o){ca(e,window.L.rectangle(t,o))}setLayer(e){let t=Be.getUrl(e);t&&_o.setLayer(e,t)}};function ha(e){return Math.floor(Math.abs(e)+.5)*(0<=e?1:-1)}const ma=new class{constructor(){Object.freeze(this)}encode(e,t){if(!e.length)return"";let o=t.length,a=Array.from(t,e=>Math.pow(10,e));function n(e,t,o){let a=ha(e*o),n=ha(t*o),r=a-n;r<<=1,0>a-n&&(r=~r);let i="";for(;32<=r;)i+=String.fromCharCode(63+(32|31&r)),r>>=5;return i+=String.fromCharCode(r+63),i}let r="";for(let t=0;tMath.pow(10,e)),i=new Array(o).fill(0);function l(){let t=null,o=0,n=0;do{t=e.charCodeAt(a++)-63,n|=(31&t)<>1):n>>1}for(;a{a.push([e.lat,e.lng,e.distance,e.elev,e.objId])}),o.values=ma.encode(a,[r.fixed,r.fixed,2,2,0]),e.itinerary.itineraryPoints=o}function o(e){let o=[];if(e.itinerary.itineraryPoints.values)ma.decode(e.itinerary.itineraryPoints.values,[r.fixed,r.fixed,2,2,0]).forEach(a=>{let i={lat:r.defaultValue,lng:r.defaultValue,distance:t.defaultValue,elev:n.defaultValue,objId:-1};[i.lat,i.lng,i.distance,i.elev,i.objId]=a,i.objType=e.itinerary.itineraryPoints.objType,o.push(i)});else{e.itinerary.itineraryPoints.latLngs=ma.decode(e.itinerary.itineraryPoints.latLngs,[r.fixed,r.fixed]);let t=0;e.itinerary.itineraryPoints.latLngs.forEach(a=>{let r={};r.lat=a[0],r.lng=a[1],r.distance=e.itinerary.itineraryPoints.distances[t],e.itinerary.itineraryPoints.elevs?r.elev=e.itinerary.itineraryPoints.elevs[t]:r.elev=n.defaultValue,r.objId=e.itinerary.itineraryPoints.objIds[t],r.objType=e.itinerary.itineraryPoints.objType,o.push(r),t++})}e.itinerary.itineraryPoints=o}function a(e){e.routes.forEach(o),e.editedRoute&&o(e.editedRoute)}return new class{constructor(){Object.freeze(this)}decompress(e){a(e),he.travel.jsonObject=e,he.editedRouteObjId=-1,he.travel.routes.forEach(e=>{i.notEdited!==e.editionStatus&&(he.editedRouteObjId=e.objId)})}decompressMerge(e){a(e);let t=de();t.jsonObject=e;let o=t.routes.iterator;for(;!o.done;)he.travel.routes.add(o.value);let n=t.notes.iterator;for(;!n.done;)he.travel.notes.add(n.value)}compress(t){let o=t.jsonObject;return o.routes.forEach(e),e(o.editedRoute),o}}}let fa=null,ba=null,ya=null,wa=e.saved,Na=null;function Ta(){fa&&(fa.textContent=wa+" "+ba+" - Zoom : "+ya)}function xa(t){e.modified===t&&e.notSaved===wa||(wa=t,e.modified!==t||Na||(Na=setTimeout(xa,3e5,e.notSaved)),e.saved===t&&Na&&(clearTimeout(Na),Na=null),Ta())}function La(e){ba=j.formatLatLng([e.latlng.lat,e.latlng.lng]),Ta()}function Ia(){ya=String(he.map.getZoom()),Ta()}const Ea=new class{constructor(){Object.freeze(this)}set saveStatus(e){xa(e)}createUI(){ya=he.map.getZoom(),ba=j.formatLat(y.map.center.lat)+" - "+j.formatLng(y.map.center.lng),fa=w.create("span",null,w.create("div",{id:"TravelNotes-MouseUI"},document.querySelector("body"))),he.map.on("mousemove",La),he.map.on("zoomend",Ia)}};const ja=new class{constructor(){Object.freeze(this)}routeDropped(e,t,o){he.travel.routes.moveTo(e,t,o),Oo.chainRoutes(),De.dispatch("setrouteslist"),De.dispatch("roadbookupdate")}saveAsTravel(){if(""===he.travel.name)return void je.showError(E.getText("TravelEditor - Gives a name to the travel"));if(-1!==he.editedRouteObjId)return void je.showError(E.getText("TravelEditor - Not possible to partial save when a route is edited."));(function(){let e=null,t=null,o=null,a=null,n=null;function r(){return Object.freeze({removeTravelNotes:o.checked,removeRoutesNotes:a.checked,removeManeuvers:n.checked})}function i(e){let o=w.create("div",null,t),a=w.create("input",{type:"checkbox",checked:!1},o);return w.create("text",{value:e},o),a}return e=pe(),e.title=E.getText("SaveAsDialog - SaveAs"),e.okButtonListener=r,t=w.create("div",null,e.content),o=i(E.getText("SaveAsDialog - Remove Travel Notes")),a=i(E.getText("SaveAsDialog - Remove Routes Notes")),n=i(E.getText("SaveAsDialog - Remove Maneuvers")),e})().show().then(e=>function(e){let t=de();t.jsonObject=he.travel.jsonObject,t.name+="-partial";let o=t.routes.iterator;for(;!o.done;)o.value.hidden=!1;if(e.removeTravelNotes&&t.notes.removeAll(),e.removeRoutesNotes)for(o=t.routes.iterator;!o.done;)o.value.notes.removeAll();if(e.removeManeuvers)for(o=t.routes.iterator;!o.done;)o.value.itinerary.maneuvers.removeAll();let a=pa().compress(t);j.saveFile(a.name+".trv",JSON.stringify(a))}(e)).catch(e=>{e instanceof Error&&console.error(e)})}saveTravel(){if(""===he.travel.name)return void je.showError(E.getText("TravelEditor - Gives a name to the travel"));let t=he.travel.routes.iterator;for(;!t.done;)t.value.hidden=!1;let o=pa().compress(he.travel);j.saveFile(o.name+".trv",JSON.stringify(o)),Ea.saveStatus=e.saved}clear(){y.travelNotes.haveBeforeUnloadWarning&&!window.confirm(E.getText("TravelEditor - This page ask to close; data are perhaps not saved."))||(no.deleteAllProfiles(),De.dispatch("removeallobjects"),he.travel.editedRoute=ne(),he.editedRouteObjId=-1,he.travel=de(),he.travel.routes.add(ne()),De.dispatch("setrouteslist"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate"),De.dispatch("travelnameupdated"),y.travelEditor.startupRouteEdition&&Oo.editRoute(he.travel.routes.first.objId),Ea.saveStatus=e.saved)}};function Pa(){return new class{constructor(){Object.freeze(this)}openDistantFile(e){pa().decompress(e),he.travel.readOnly=!0,this.display()}display(){document.title="Travel & Notes"+(""===he.travel.name?"":" - "+he.travel.name);let e=he.travel.routes.iterator;for(;!e.done;)i.notEdited===e.value.editionStatus&&De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e.value.objId});-1!==he.editedRouteObjId&&De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:he.travel.editedRoute.objId});let t=he.travel.notes.iterator;for(;!t.done;)De.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:t.value.objId});_e().zoomToTravel()}}}function Da(){function t(t,o){let a=new FileReader;a.onload=function(){let t={};try{t=JSON.parse(a.result)}catch(e){return void(e instanceof Error&&console.error(e))}o?pa().decompressMerge(t):(no.deleteAllProfiles(),pa().decompress(t)),function(){if(De.dispatch("removeallobjects"),Pa().display(),Eo.setLayer(he.travel.layerName),De.dispatch("setrouteslist"),-1!==he.editedRouteObjId){let e=he.travel.editedRoute.itinerary.provider;if(e&&""!==e&&!he.providers.get(e.toLowerCase()))je.showError(E.getText("FileLoader - Not possible to select as provider",{provider:e}));else{let t=he.travel.editedRoute.itinerary.transitMode;De.dispatch("setprovider",{provider:e}),t&&""!==t&&De.dispatch("settransitmode",{transitMode:t})}}Oo.chainRoutes(),De.dispatch("travelnameupdated"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate")}(),o||(Ea.saveStatus=e.saved)},a.readAsText(t.target.files[0])}return new class{constructor(){Object.freeze(this)}openLocalFile(e){t(e,!1)}mergeLocalFile(e){t(e,!0)}}}let Ca=null,Ra=null,Ma=null,Sa=0,Oa=null,Aa=null,ka=null,Ua=null;function Ba(e){e.deltaY&&(e.target.scrollTop+=e.deltaY*c[e.deltaMode]),e.stopPropagation()}function Ha(e){he.travel.name=f.sanitizeToJsString(e.target.value),document.title="Travel & Notes"+(""===he.travel.name?"":" - "+he.travel.name),De.dispatch("roadbookupdate")}function za(e){e.stopPropagation(),ja.clear(),document.title="Travel & Notes"+(""===he.travel.name?"":" - "+he.travel.name)}function Fa(e){e.stopPropagation(),ja.saveTravel()}function Va(e){e.stopPropagation(),ja.saveAsTravel()}function Wa(e){e.stopPropagation(),Da().openLocalFile(e)}function Ka(){y.travelNotes.haveBeforeUnloadWarning&&!window.confirm(E.getText("TravelEditor - This page ask to close; data are perhaps not saved."))||Aa.click()}function _a(e){e.stopPropagation(),Da().mergeLocalFile(e)}function Za(){-1===he.editedRouteObjId?ka.click():je.showError(E.getText("TravelUI - Not possible to merge a travel when a route is edited"))}function Xa(){Oa=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},Ma),w.create("div",{className:"TravelNotes-UI-Button TravelNotes-TravelUI-SaveAsButton",title:E.getText("TravelUI - Save as travel"),textContent:"💾"},Oa).addEventListener("click",Va,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Cancel travel"),textContent:"❌"},Oa).addEventListener("click",za,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Save travel"),textContent:"💾"},Oa).addEventListener("click",Fa,!1),Aa=w.create("input",{className:"TravelNotes-TravelUI-OpenFileInput",type:"file",accept:".trv"},Oa),Aa.addEventListener("change",Wa,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Open travel"),textContent:"📂"},Oa).addEventListener("click",Ka,!1),ka=w.create("input",{className:"TravelNotes-TravelUI-OpenFileInput",type:"file",accept:".trv,.map"},Oa),ka.addEventListener("change",_a,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Import travel"),textContent:"🌏"},Oa).addEventListener("click",Za,!1),w.create("text",{value:"📋"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:"TravelNotesRoadbook.html?lng="+y.travelNotes.language+"&page="+he.UUID,target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelUI - Open travel roadbook")},Oa)))}function qa(e){e.stopPropagation(),Ca.classList.toggle("TravelNotes-Hidden");let t=Ca.classList.contains("TravelNotes-Hidden");e.target.textContent=t?"▶":"▼",e.target.title=t?E.getText("TravelUI - Show"):E.getText("TravelUI - Hide")}function Ga(e){e.stopPropagation(),Oo.addRoute()}function Ja(){Ua=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},Ma),w.create("div",{textContent:"▼",className:"TravelNotes-TravelUI-RouteList-ExpandButton"},Ua).addEventListener("click",qa,!1),w.create("span",{textContent:E.getText("TravelUI - Travel routes")},Ua),w.create("div",{className:"TravelNotes-UI-Button TravelNotes-UI-FlexRow-RightButton",title:E.getText("TravelUI - Add a route"),textContent:"+"},Ua).addEventListener("click",Ga,!1)}function Ya(e){e.stopPropagation();try{e.dataTransfer.setData("Text",e.target.objId),e.dataTransfer.dropEffect="move",e.dataTransfer.routeObjId=e.target.objId}catch(e){e instanceof Error&&console.error(e)}Sa=e.target.objId}function $a(e){e.preventDefault()}function Qa(e){e.preventDefault();let t=e.target;for(;!t.objId;)t=t.parentElement;let o=t.getBoundingClientRect();ja.routeDropped(Sa,t.objId,e.clientY-o.top{e.paneId===on?e.classList.add("TravelNotes-PanesManagerUI-ActivePaneButton"):e.classList.remove("TravelNotes-PanesManagerUI-ActivePaneButton")})}function sn(e){ln(e.target.paneId)}function dn(e){e.deltaY&&(e.target.scrollTop+=e.deltaY*c[e.deltaMode]),e.stopPropagation()}const cn=new class{constructor(){Object.freeze(this)}createUI(e){if(nn)return;let t=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},e);rn=w.create("div",{id:"TravelNotes-PanesManagerUI-PaneControlsDiv"},e),nn=w.create("div",{id:"TravelNotes-PanesManagerUI-PaneDataDiv"},e),nn.addEventListener("wheel",dn,!1),an.forEach(e=>{w.create("div",{textContent:e.getButtonText(),className:"TravelNotes-PanesManagerUI-PaneButton",paneId:e.getId()},t).addEventListener("click",sn,!1),e.setPaneDivs(nn,rn)})}addPane(e){an.set(e.getId(),e)}showPane(e){ln(e)}updatePane(e){e===on&&ln(e)}},un=["bike","pedestrian","car","train","line","circle"],gn={bike:'data:image/svg+xml;utf8,',pedestrian:'data:image/svg+xml;utf8,',car:'data:image/svg+xml;utf8,',train:'data:image/svg+xml;utf8,',line:'data:image/svg+xml;utf8,',circle:'data:image/svg+xml;utf8,'};let vn=null,hn=!1,mn={bike:null,pedestrian:null,car:null,train:null,line:null,circle:null};function pn(e){he.routing.transitMode=e;let t=document.querySelector(".TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton");t&&t.classList.remove("TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton"),document.getElementById("TravelNotes-ProvidersToolbarUI-"+e+"ImgButton").classList.add("TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton")}function fn(e){e.stopPropagation(),pn(e.target.transitMode),Oo.startRouting()}function bn(e){he.routing.provider=e;let t=document.querySelector(".TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton");t&&t.classList.remove("TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton"),document.getElementById("TravelNotes-ProvidersToolbarUI-"+e+"ImgButton").classList.add("TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton");let o=he.providers.get(e.toLowerCase());if(un.forEach(e=>{o.transitModes[e]?mn[e].classList.remove("TravelNotes-ProvidersToolbarUI-InactiveImgButton"):mn[e].classList.add("TravelNotes-ProvidersToolbarUI-InactiveImgButton")}),!o.transitModes[he.routing.transitMode]){let e=null;un.forEach(t=>{o.transitModes[t]&&(e=e||t)}),pn(e)}}function yn(e){e.stopPropagation(),bn(e.target.provider),Oo.startRouting()}function wn(e){if(0===e.providerKey)return;let t=w.create("img",{src:e.icon,id:"TravelNotes-ProvidersToolbarUI-"+e.name+"ImgButton",className:"TravelNotes-ProvidersToolbarUI-ImgButton",title:e.name,provider:e.name},vn);if(t.addEventListener("click",yn,!1),!hn){t.classList.add("TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton"),he.routing.provider=t.provider,hn=!0;let o=null;un.forEach(t=>{e.transitModes[t]&&(o=o||t)}),mn[o].classList.add("TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton"),he.routing.transitMode=o,un.forEach(t=>{e.transitModes[t]||mn[t].classList.add("TravelNotes-ProvidersToolbarUI-InactiveImgButton")})}}function Nn(){he.providers&&(hn=!1,he.providers.forEach(wn))}function Tn(){un.forEach(e=>{mn[e]=w.create("img",{src:gn[e],id:"TravelNotes-ProvidersToolbarUI-"+e+"ImgButton",className:"TravelNotes-ProvidersToolbarUI-ImgButton",title:E.getText("ProvidersToolbarUI - "+e),transitMode:e},vn),mn[e].addEventListener("click",fn,!1)})}const xn=new class{constructor(){Object.freeze(this)}createUI(e){vn=w.create("div",{className:"TravelNotes-UI-FlexRowDiv TravelNotes-ProvidersToolbarUI-ImgButtonsDiv"},e),Tn(),Nn()}set provider(e){bn(e)}set transitMode(e){pn(e)}providersAdded(){for(;vn.firstChild;)vn.removeChild(vn.firstChild);Tn(),Nn()}};let Ln="geolocation"in navigator?o.inactive:o.disabled,In=null;function En(e){De.dispatch("geolocationpositionchanged",{position:e})}function jn(){o.active===Ln&&(Ln=o.inactive),De.dispatch("geolocationstatuschanged",{status:Ln}),navigator.geolocation.clearWatch(In),In=null}function Pn(e){1===e.code&&(Ln=o.refusedByUser),jn()}const Dn=new class{constructor(){Object.freeze(this)}get status(){return Ln}switch(){switch(Ln){case o.inactive:Ln=o.active,De.dispatch("geolocationstatuschanged",{status:Ln}),navigator.geolocation.getCurrentPosition(En,Pn,y.geoLocation.options),In=navigator.geolocation.watchPosition(En,Pn,y.geoLocation.options);break;case o.active:jn()}return Ln}};let Cn=null,Rn=null,Mn=null;function Sn(e){e.stopPropagation(),Be.setKeysFromDialog()}function On(e){e.stopPropagation(),Dn.switch()}function An(e){e.target.textContent="📌"===e.target.textContent?"❌":"📌",Mn.pin()}const kn=new class{constructor(){Object.freeze(this)}createUI(e){Mn=e,Rn=w.create("div",{className:"TravelNotes-UI-FlexRowDiv"},e),w.create("text",{value:"🏠"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:window.location.origin,target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:"Home"},Rn))),w.create("text",{value:"?"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:"https://github.com/wwwouaiebe/leaflet.TravelNotes/tree/gh-pages/TravelNotesGuides",target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:"Help"},Rn))),w.create("text",{value:"@"},w.create("a",{className:"TravelNotes-UI-LinkButton",href:y.travelNotesToolbarUI.contactMail.url||window.location.origin,target:"_blank"},w.create("div",{className:"TravelNotes-UI-Button",title:"Contact"},Rn))),y.APIKeysDialog.showButton&&w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("TravelNotesToolbarUI - API keys"),textContent:"🔑"},Rn).addEventListener("click",Sn,!1),o.disabled{e.classList.toggle("TravelNotes-Hidden")})}function h(e){t=e.target.checked,document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.classList.toggle("TravelNotes-Hidden")})}return new class{constructor(){Object.freeze(this)}remove(){!function(){document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Notes-Row, .TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.removeEventListener("contextmenu",c,!1),e.removeEventListener("mouseenter",u,!1),e.removeEventListener("mouseleave",g,!1)});let e=document.querySelector(".TravelNotes-ItineraryPaneUI-Route-ManeuversAndNotes");e&&o.removeChild(e)}(),i&&(d&&(d.removeEventListener("click",h,!1),i.removeChild(d),d=null),s&&(s.removeEventListener("click",v,!1),i.removeChild(s),s=null),n.removeChild(i),i=null),l&&(n.removeChild(l),l=null)}add(){-1!==he.editedRouteObjId&&(i=w.create("div",null,n),w.create("text",{value:E.getText("ItineraryPaneUI - Show notes")},i),s=w.create("input",{type:"checkbox",id:"TravelNotes-ItineraryPane-ShowNotesInput",checked:e},i),s.addEventListener("click",v,!1),w.create("text",{value:E.getText("ItineraryPaneUI - Show maneuvers")},i),d=w.create("input",{type:"checkbox",id:"TravelNotes-ItineraryPane-ShowManeuversInput",checked:t},i),d.addEventListener("click",h,!1),l=Wt.getRouteHeaderHTML("TravelNotes-ItineraryPaneUI-",he.travel.editedRoute),n.appendChild(l),o.appendChild(Wt.getEditedRouteManeuversAndNotesHTML("TravelNotes-ItineraryPaneUI-")),document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Notes-Row, .TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.addEventListener("contextmenu",c,!1),e.addEventListener("mouseenter",u,!1),e.addEventListener("mouseleave",g,!1)}),e||document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Notes-Row").forEach(e=>{e.classList.toggle("TravelNotes-Hidden")}),t||document.querySelectorAll(".TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row").forEach(e=>{e.classList.toggle("TravelNotes-Hidden")}))}getId(){return a.itineraryPane}getButtonText(){return E.getText("PanesManagerUI - Itinerary")}setPaneDivs(e,t){o=e,n=t}}}let Bn=-1,Hn=-1,zn=!1;let Fn=null,Vn=null,Wn=null,Kn=[];class _n{constructor(e,t){this.name=f.sanitizeToJsString(e),this.items=[],this.filterTagsArray=[],this.elementTypes=["node","way","relation"],this.isSelected=!1,this.isExpanded=!1,this.isRoot=!1,t&&(this.isExpanded=!0,this.isRoot=!0)}}function Zn(){-1===Hn?Hn=T():De.dispatch("removeobject",{objId:Hn});let e=he.map.getCenter();Vn=he.map.getBounds();let t=me.getSquareBoundingBox([e.lat,e.lng],5e3);Vn.getSouthWest().lat=Math.max(Vn.getSouthWest().lat,t.getSouthWest().lat),Vn.getSouthWest().lng=Math.max(Vn.getSouthWest().lng,t.getSouthWest().lng),Vn.getNorthEast().lat=Math.min(Vn.getNorthEast().lat,t.getNorthEast().lat),Vn.getNorthEast().lng=Math.min(Vn.getNorthEast().lng,t.getNorthEast().lng),De.dispatch("addrectangle",{objId:Hn,bounds:Vn,properties:y.osmSearch.nextSearchLimit})}function Xn(e){e.isSelected&&0{o.filterTagsArray.forEach(a=>{(function(e,t){let o=!0;return t.forEach(t=>{let[a,n]=Object.entries(t)[0];o=o&&e.tags[a]&&(!n||e.tags[a]===n)}),o})(e,a)&&(e.description=o.name,t.set(e.id,e))})})}function Gn(e){let t=new Map,o=new Map,a=new Map,n=new Map;function i(e){e.geometry=[[]],e.lat=r.defaultValue,e.lon=r.defaultValue;let t=0;e.nodes.forEach(a=>{let n=o.get(a);e.geometry[0].push([n.lat,n.lon]),e.lat+=n.lat,e.lon+=n.lon,t++}),0!==t&&(e.lat/=t,e.lon/=t)}e.forEach(e=>{switch(e.type){case"node":o.set(e.id,e);break;case"way":a.set(e.id,e);break;case"relation":n.set(e.id,e)}e.tags&&qn(e,t)}),t.forEach(e=>{switch(e.type){case"way":i(e);break;case"relation":!function(e){e.geometry=[[]],e.lat=r.defaultValue,e.lon=r.defaultValue;let t=0;e.members.forEach(o=>{if("way"===o.type){let n=a.get(o.ref);i(n),e.geometry.push(n.geometry[0]),e.lat+=n.lat,e.lon+=n.lon,t++}}),0!==t&&(e.lat/=t,e.lon/=t)}(e)}}),he.searchData=Array.from(t.values()).sort((e,t)=>e.description>t.description?1:e.description{e.filterTagsArray.forEach(o=>{let[a,n]=Object.entries(o[0])[0],r=t.get(a);r||(r={values:new Map,elements:new Map},t.set(a,r)),r.values.set(n,n),e.elementTypes.forEach(e=>{r.elements.set(e,e)})})});let o="("+Vn.getSouthWest().lat.toFixed(r.fixed)+","+Vn.getSouthWest().lng.toFixed(r.fixed)+","+Vn.getNorthEast().lat.toFixed(r.fixed)+","+Vn.getNorthEast().lng.toFixed(r.fixed)+")";return t.forEach((t,a)=>{let n='"'+a+'"';if(1===t.values.size){let e=t.values.values().next().value;e&&(n+='="'+e+'"')}else 1{n+=e+"|"}),n=n.substr(0,n.length-1)+'"');let r=1===t.elements.size?t.elements.values().next().value:"nwr",i=y.overpassApi.url+"?data=[out:json][timeout:"+y.overpassApi.timeOut+"];"+r+"["+n+"]"+o+";"+("node"===r?"":"(._;>;);")+"out;";e.push(fetch(i))}),e}()).then(Jn))}show(){he.map.on("zoom",Zn),he.map.on("move",Zn),Zn(),Fn&&(-1===Bn?Bn=T():De.dispatch("removeobject",{objId:Bn}),De.dispatch("addrectangle",{objId:Bn,bounds:[[Fn.getSouthWest().lat,Fn.getSouthWest().lng],[Fn.getNorthEast().lat,Fn.getNorthEast().lng]],properties:y.osmSearch.previousSearchLimit}))}hide(){let e=De;he.map.off("zoom",Zn),he.map.off("move",Zn),-1!==Hn&&(e.dispatch("removeobject",{objId:Hn}),Hn=-1),-1!==Bn&&(e.dispatch("removeobject",{objId:Bn}),Bn=-1)}parseDictionary(e){Wn=new _n("All",!0);let t=[Wn.items],o=null,a=null;e.split(/\r\n|\r|\n/).forEach(e=>{""!==e&&function(e){let n=e.split(";");for(;""===n[n.length-1];)n.pop();let r=0,i=null;n.forEach(e=>{if(""!==e)if(-1===e.indexOf("="))a=new _n(e),t[r].push(a),t[r+1]=a.items,o=a.filterTagsArray;else{let t=e.split("=");if("element"===t[0])a.elementTypes=[t[1]];else{let e={};e[t[0]]="*"===t[1]?null:t[1],i=i||[],i.push(e)}}r++}),i&&o.push(i)}(e)})}};function $n(){let e=null,t=null,o=null,n=null,i=null,l=-1,s=0;function d(t){t.stopPropagation(),t.preventDefault();let o=t.target;for(;!o.osmElement;)o=o.parentNode;t.latlng={lat:r.defaultValue,lng:r.defaultValue},t.fromUI=!0,t.originalEvent={clientX:t.clientX,clientY:t.clientY,latLng:[o.osmElement.lat,o.osmElement.lon],osmElement:o.osmElement,geometry:o.osmElement.geometry},function(e,t){let o=_e();return lt(e,function(){let t=e.originalEvent.latLng;return[{context:ko,name:E.getText("MapContextMenu - Select this point as start point"),action:-1!==he.editedRouteObjId&&r.defaultValue===he.travel.editedRoute.wayPoints.first.lat?ko.setStartPoint:null,param:t},{context:ko,name:E.getText("MapContextMenu - Select this point as way point"),action:-1===he.editedRouteObjId?null:ko.addWayPoint,param:t},{context:ko,name:E.getText("MapContextMenu - Select this point as end point"),action:-1!==he.editedRouteObjId&&r.defaultValue===he.travel.editedRoute.wayPoints.last.lat?ko.setEndPoint:null,param:t},{context:eo,name:E.getText("OsmSearchContextMenu - Create a route note with this result"),action:eo.newSearchNote,param:{osmElement:e.originalEvent.osmElement,isTravelNote:!1}},{context:eo,name:E.getText("OsmSearchContextMenu - Create a travel note with this result"),action:eo.newSearchNote,param:{osmElement:e.originalEvent.osmElement,isTravelNote:!0}},{context:eo,name:eo.osmSearchNoteDialog?E.getText("OsmSearchContextMenu - Hide note dialog"):E.getText("OsmSearchContextMenu - Show note dialog"),action:eo.changeOsmSearchNoteDialog},{context:o,name:E.getText("OsmSearchContextMenu - Zoom to this result"),action:o.zoomToPoi,param:{latLng:e.originalEvent.latLng,geometry:e.originalEvent.geometry}}]}(),t)}(t,e).show()}function u(e){e.stopPropagation(),l=e.target.objId,De.dispatch("addsearchpointmarker",{objId:e.target.objId,latLng:[e.target.osmElement.lat,e.target.osmElement.lon],geometry:e.target.osmElement.geometry})}function g(e){e.stopPropagation(),De.dispatch("removeobject",{objId:e.target.objId})}function v(){document.querySelectorAll(".TravelNotes-OsmSearchPaneUI-SearchResult").forEach(t=>{t.removeEventListener("contextmenu",d,!1),t.removeEventListener("mouseenter",u,!1),t.removeEventListener("mouseleave",g,!1),e.removeChild(t)})}function h(e){s++;let t=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchItem TravelNotes-OsmSearchPaneUI-SearchItemMargin"+s,dictItem:e},i);if(!e.isRoot){w.create("input",{type:"checkbox",checked:e.isSelected},t).addEventListener("change",(function(e){!function e(t,o){t.isSelected=o,t.items.forEach(t=>{e(t,o)})}(e.target.parentNode.dictItem,e.target.checked),i.textContent="",h(Yn.dictionary)}),!1)}if(0===e.filterTagsArray.length){w.create("div",{className:"TravelNotes-UI-Button TravelNotes-OsmSearchPaneUI-TreeArrow",textContent:e.isExpanded?"▼":"▶"},t).addEventListener("click",(function(e){e.target.parentNode.dictItem.isExpanded=!e.target.parentNode.dictItem.isExpanded,i.textContent="",h(Yn.dictionary)}),!1)}w.create("text",{value:e.name},t),e.isExpanded&&e.items.forEach(h),s--}function m(){v(),Yn.dictionary.isExpanded=!1,i.textContent="",h(Yn.dictionary),n=w.create("div",{className:"TravelNotes-WaitAnimation"},t),w.create("div",{className:"TravelNotes-WaitAnimationBullet"},n),Yn.search()}function p(e){e.items.forEach(p),e.isSelected=!1}function b(){p(Yn.dictionary),i.textContent="",h(Yn.dictionary)}function y(e){e.items.forEach(y),e.isExpanded=!0}function N(){y(Yn.dictionary),i.textContent="",h(Yn.dictionary)}function x(e){e.items.forEach(x),e.isRoot||(e.isExpanded=!1)}function L(){x(Yn.dictionary),i.textContent="",h(Yn.dictionary)}function I(e){e.deltaY&&(e.target.scrollTop+=e.deltaY*c[e.deltaMode]),e.stopPropagation()}function j(e,t){t&&w.create("div",{textContent:t},e)}function P(t){let o=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchResult-Row",osmElement:t,objId:T()},e),a="";a=t.tags.rcn_ref?"":It.getIconDataFromName(t.description)||"";let n=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchResult-IconCell"},o);f.sanitizeToHtmlElement(a,n);let r=w.create("div",{className:"TravelNotes-OsmSearchPaneUI-SearchResult-Cell"},o);j(r,t.description),j(r,t.tags.name),j(r,t.tags.rcn_ref),j(r,function(e){let t=(e.tags["addr:street"]?(e.tags["addr:housenumber"]?e.tags["addr:housenumber"]+" ":"")+e.tags["addr:street"]+" ":"")+(e.tags["addr:city"]?(e.tags["addr:postcode"]?e.tags["addr:postcode"]+" ":"")+e.tags["addr:city"]:"");return""===t?null:t}(t)),t.tags.phone&&j(r,"☎️ : "+t.tags.phone),t.tags.email&&w.create("a",{href:"mailto:"+t.tags.email,textContent:t.tags.email},w.create("div",{textContent:"📧 : "},r)),t.tags.website&&w.create("a",{href:t.tags.website,target:"_blank",textContent:t.tags.website},w.create("div",null,r)),o.title="";for(const[e,a]of Object.entries(t.tags))o.title+=e+"="+a+"\n";o.addEventListener("contextmenu",d,!1),o.addEventListener("mouseenter",u,!1),o.addEventListener("mouseleave",g,!1)}return new class{constructor(){Object.freeze(this)}remove(){Yn.hide(),v(),i&&(t.removeChild(i),i=null),o&&t.removeChild(o),n&&(t.removeChild(n),n=null),De.dispatch("removeobject",{objId:l})}add(){Yn.show(),o=w.create("div",null,t),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Search OpenStreetMap"),textContent:"🔎"},o).addEventListener("click",m,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Expand tree"),textContent:"▼"},o).addEventListener("click",N,!1),w.create("div",{className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Collapse tree"),textContent:"▶"},o).addEventListener("click",L,!1),w.create("div",{id:"TravelNotes-OsmSearchPaneUI-ClearAllButton",className:"TravelNotes-UI-Button",title:E.getText("OsmSearchPaneUI - Clear tree"),textContent:"❌"},o).addEventListener("click",b,!1),i=w.create("div",{id:"TravelNotes-OsmSearchPaneUI-SearchTree"},t),i.addEventListener("wheel",I,!1),Yn.dictionary.name="",h(Yn.dictionary),he.searchData.forEach(P)}getId(){return a.searchPane}getButtonText(){return E.getText("PanesManagerUI - Search")}setPaneDivs(o,a){e=o,t=a}}}let Qn=null,er=!1,tr=null,or=null;function ar(){tr&&(clearTimeout(tr),tr=null),Qn.classList.remove("TravelNotes-UI-Minimized"),or.classList.add("TravelNotes-Hidden");let e=Qn.childNodes;for(let t=1;t{e.removeEventListener("contextmenu",s,!1),e.removeEventListener("dragstart",n,!1)}),t.removeChild(o)),o=null}add(){o=Wt.getTravelNotesHTML("TravelNotes-TravelNotesPaneUI-"),o.addEventListener("drop",l,!1),o.addEventListener("dragover",i,!1),t.appendChild(o),o.childNodes.forEach(e=>{e.draggable=!0,e.addEventListener("contextmenu",s,!1),e.addEventListener("dragstart",n,!1),e.classList.add("TravelNotes-UI-MoveCursor")})}getId(){return a.travelNotesPane}getButtonText(){return E.getText("PanesManagerUI - Travel notes")}setPaneDivs(e){t=e}}}()),cn.addPane($n()),cn.createUI(Qn),xn.createUI(Qn),y.travelEditor.startMinimized){Qn.addEventListener("mouseenter",ar,!1),Qn.addEventListener("mouseleave",rr,!1),Qn.classList.add("TravelNotes-UI-Minimized");let e=Qn.childNodes;for(let t=1;ttn.setTravelName(),!1),Qn.addEventListener("setrouteslist",()=>tn.setRoutesList(),!1),Qn.addEventListener("showitinerary",()=>cn.showPane(a.itineraryPane),!1),Qn.addEventListener("updateitinerary",()=>cn.updatePane(a.itineraryPane),!1),Qn.addEventListener("showtravelnotes",()=>cn.showPane(a.travelNotesPane),!1),Qn.addEventListener("updatetravelnotes",()=>cn.updatePane(a.travelNotesPane),!1),Qn.addEventListener("showsearch",()=>cn.showPane(a.searchPane),!1),Qn.addEventListener("updatesearch",()=>cn.updatePane(a.searchPane),!1),Qn.addEventListener("providersadded",()=>xn.providersAdded(),!1),Qn.addEventListener("setprovider",e=>{e.data&&e.data.provider&&(xn.provider=e.data.provider)},!1),Qn.addEventListener("settransitmode",e=>{e.data&&e.data.provider&&(xn.transitMode=e.data.transitMode)},!1),document.addEventListener("geolocationstatuschanged",e=>{kn.geoLocationStatusChanged(e.data.status)},!1),Qn.addEventListener("click",e=>{e.target.id&&"TravelNotes-UI-MainDiv"===e.target.id&&(e.stopPropagation(),e.preventDefault())},!1),Qn.addEventListener("dblclick",e=>{e.stopPropagation(),e.preventDefault()},!1),Qn.addEventListener("contextmenu",e=>{e.stopPropagation(),e.preventDefault()},!1),Qn.addEventListener("wheel",e=>{e.stopPropagation(),e.preventDefault()},!1)}}};function sr(){let e=pe();e.title=E.getText("AboutDialog - About Travel & Notes");f.sanitizeToHtmlElement('
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or any later version.
',e.content),e.show().then().catch(e=>{e instanceof Error&&console.error(e)})}let dr=null;const cr=new class{constructor(){Object.freeze(this)}getOpenPromise(){return new Promise((function(e,t){if(dr)return void e();let o=window.indexedDB.open("TravelNotesDb",1);o.onerror=function(){dr=null,t(new Error("Not possible to open the db"))},o.onsuccess=function(t){dr=t.target.result,e()},o.onupgradeneeded=function(e){dr=e.target.result,dr.createObjectStore("Travels",{keyPath:"UUID"})}}))}getReadPromise(e){return new Promise((function(t,o){if(!dr)return void o(new Error("Database not opened"));let a=dr.transaction(["Travels"],"readonly");a.onerror=function(){o(new Error("Transaction error"))},a.objectStore("Travels").get(e).onsuccess=function(e){t(e.target.result?e.target.result.data:null)}}))}getWritePromise(e,t){return new Promise((function(o,a){if(!dr)return void a(new Error("Database not opened"));let n=null;try{n=dr.transaction(["Travels"],"readwrite")}catch(e){return void a(e)}n.onerror=function(){a(new Error("Transaction error"))},n.objectStore("Travels").put({UUID:e,data:t}).onsuccess=function(){o()}}))}closeDb(e){if(!dr)return;if(!e)return dr.close(),void(dr=null);let t=dr.transaction(["Travels"],"readwrite");t.onerror=function(){};let o=t.objectStore("Travels").delete(e);o.onerror=function(){dr.close(),dr=null},o.onsuccess=function(){dr.close(),dr=null}}};let ur=!1;function gr(){document.addEventListener("routeupdated",e=>{e.data&&va.updateRoute(e.data.removedRouteObjId,e.data.addedRouteObjId)},!1),document.addEventListener("routepropertiesupdated",e=>{e.data&&va.updateRouteProperties(e.data.routeObjId)},!1),document.addEventListener("noteupdated",e=>{e.data&&va.updateNote(e.data.removedNoteObjId,e.data.addedNoteObjId)},!1),document.addEventListener("removeobject",e=>{e.data&&va.removeObject(e.data.objId)},!1),document.addEventListener("removeallobjects",()=>va.removeAllObjects(),!1),document.addEventListener("zoomto",e=>{e.data&&_o.zoomTo(e.data.latLng,e.data.geometry)},!1),document.addEventListener("additinerarypointmarker",e=>{e.data&&va.addItineraryPointMarker(e.data.objId,e.data.latLng)},!1),document.addEventListener("addsearchpointmarker",e=>{e.data&&va.addSearchPointMarker(e.data.objId,e.data.latLng,e.data.geometry)},!1),document.addEventListener("addrectangle",e=>{e.data&&va.addRectangle(e.data.objId,e.data.bounds,e.data.properties)},!1),document.addEventListener("addwaypoint",e=>{e.data&&va.addWayPoint(e.data.wayPoint,e.data.letter)},!1),document.addEventListener("layerchange",e=>{e.data&&va.setLayer(e.data.layer)}),document.addEventListener("geolocationpositionchanged",e=>{e.data&&_o.onGeolocationPositionChanged(e.data.position)},!1),document.addEventListener("geolocationstatuschanged",e=>{e.data&&_o.onGeolocationStatusChanged(e.data.status)},!1),document.addEventListener("roadbookupdate",()=>(Ea.saveStatus=e.modified,void(j.storageAvailable("localStorage")&&cr.getOpenPromise().then(()=>{cr.getWritePromise(he.UUID,Wt.getTravelHTML("TravelNotes-Roadbook-").outerHTML)}).then(()=>localStorage.setItem(he.UUID,Date.now())).catch(e=>{e instanceof Error&&console.error(e)}))),!1),document.addEventListener("profileclosed",e=>{e.data&&no.onProfileClosed(e.data.objId)},!1)}function vr(e){he.travel.readOnly||function(e){let t=[e.latlng.lat,e.latlng.lng],o=_e();return lt(e,[{context:ko,name:E.getText("MapContextMenu - Select this point as start point"),action:-1!==he.editedRouteObjId&&r.defaultValue===he.travel.editedRoute.wayPoints.first.lat?ko.setStartPoint:null,param:t},{context:ko,name:E.getText("MapContextMenu - Select this point as way point"),action:-1===he.editedRouteObjId?null:ko.addWayPoint,param:t},{context:ko,name:E.getText("MapContextMenu - Select this point as end point"),action:-1!==he.editedRouteObjId&&r.defaultValue===he.travel.editedRoute.wayPoints.last.lat?ko.setEndPoint:null,param:t},{context:Oo,name:E.getText("MapContextMenu - Add a route"),action:Oo.addRoute},{context:Oo,name:E.getText("MapContextMenu - Hide all routes"),action:Oo.hideRoutes},{context:Oo,name:E.getText("MapContextMenu - Show all routes"),action:Oo.showRoutes},{context:eo,name:E.getText("MapContextMenu - New travel note"),action:eo.newTravelNote,param:t},{context:eo,name:E.getText("MapContextMenu - Hide all notes"),action:eo.hideNotes},{context:eo,name:E.getText("MapContextMenu - Show all notes"),action:eo.showNotes},{context:o,name:E.getText("MapContextMenu - Zoom to travel"),action:o.zoomToTravel},{context:null,name:E.getText("MapContextMenu - About Travel & Notes"),action:sr}])}
/**
@------------------------------------------------------------------------------------------------------------------------------
@@ -103,4 +103,4 @@ function to(){let e=T(),t=null,o=null,a=null,n=null,r=null,i=null,s=null,d=null;
@private
@------------------------------------------------------------------------------------------------------------------------------
- */(e).show()}const vr=new class{constructor(){Object.freeze(this)}addReadOnlyMap(e,t){cr||(cr=!0,ur(),e&&(he.map=e),ro.createUI(),Eo.setLayer("OSM - Color"),async function(e){let t=fetch(e);if(200===t.status&&t.ok){let e=await t.json();Pa().openDistantFile(e)}else he.map.setView([r.defaultValue,r.defaultValue],2),document.title="Travel & Notes"}(t))}addControl(t,o){cr||(cr=!0,ur(),window.addEventListener("unload",()=>{localStorage.removeItem(he.UUID)}),window.addEventListener("beforeunload",e=>{if(dr.closeDb(he.UUID),y.travelNotes.haveBeforeUnloadWarning)return e.returnValue="x","x"}),t&&(he.map=t,he.map.on("contextmenu",gr)),he.travel=de(),he.travel.routes.add(ne()),ir.createUI(document.getElementById(o)),ro.createUI(),Be.setKeysFromServerFile(),y.layersToolbarUI.haveLayersToolbarUI?Eo.createUI():Eo.setLayer("OSM - Color"),y.mouseUI.haveMouseUI&&Ea.createUI(),y.travelEditor.startupRouteEdition&&Oo.editRoute(he.travel.routes.first.objId),De.dispatch("setrouteslist"),De.dispatch("roadbookupdate"),he.map.setView([y.map.center.lat,y.map.center.lng],y.map.zoom),je.showHelp("
"+E.getText("Help - Continue with interface1")+"
"+E.getText("Help - Continue with interface2")+"
"),document.title="Travel & Notes",Ea.saveStatus=e.saved)}addProvider(e){Be.addProvider(e)}showInfo(e){je.showInfo(e)}get baseDialog(){return pe()}get map(){return he.map}get maneuver(){return V()}get itineraryPoint(){return U()}get version(){return"2.2.0"}};!function(){let e=null,t=null,o="",a=window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"TravelNotes";async function n(){let t=await Promise.allSettled([fetch(a+e.toUpperCase()+".json"),fetch(a+"EN.json"),fetch(a+"NoteDialog"+e.toUpperCase()+".json"),fetch(a+"NoteDialogEN.json"),fetch(a+"SearchDictionary"+e.toUpperCase()+".csv"),fetch(a+"SearchDictionaryEN.csv"),fetch(a+"Layers.json")]);o=await async function(t,o){return"fulfilled"===t.status&&200===t.value.status&&t.value.ok?(E.setTranslations(await t.value.json()),""):"fulfilled"===o.status&&200===o.value.status&&o.value.ok?(E.setTranslations(await o.value.json()),"Not possible to load the TravelNotes"+e.toUpperCase()+".json file. English will be used. "):"Not possible to load the translations. "}(t[0],t[1]),o+=await async function(t,o){if("fulfilled"===t.status&&200===t.value.status&&t.value.ok){let e=await t.value.json();return It.selectOptions=e.preDefinedIconsList,e.preDefinedIconsList.forEach(e=>{e.name=f.sanitizeToJsString(e.name)}),It.buttons=e.editionButtons,""}if("fulfilled"===o.status&&200===o.value.status&&o.value.ok){let t=await o.value.json();return It.selectOptions=t.preDefinedIconsList,t.preDefinedIconsList.forEach(e=>{e.name=f.sanitizeToJsString(e.name)}),It.buttons=t.editionButtons,"Not possible to load the TravelNotesNoteDialog"+e.toUpperCase()+".json file. English will be used. "}return"Not possible to load the translations for the note dialog. "}(t[2],t[3]),o+=await async function(t,o){return"fulfilled"===t.status&&200===t.value.status&&t.value.ok?(Jn.parseDictionary(await t.value.text()),""):"fulfilled"===o.status&&200===o.value.status&&o.value.ok?(Jn.parseDictionary(await o.value.text()),"Not possible to load the TravelNotesSearchDictionary"+e.toUpperCase()+".csv file. English will be used. "):"Not possible to load the search dictionary. OSM search will not be available."}(t[4],t[5]),o+=await async function(e){return"fulfilled"===e.status&&200===e.value.status&&e.value.ok?(Eo.addLayers(await e.value.json()),""):"Not possible to load the TravelNotesLayers.json file. Only the OpenStreetMap background will be available. "}(t[6]),""!==o&&(je.showWarning(o),o="")}!async function(){window.TaN=vr,window.L&&(window.L.travelNotes=window.TaN),function(){let o=new URL(window.location),a=o.searchParams.get("fil");if(a&&0!==a.length)try{if(a=atob(a),a.match(/[^\w-%:./]/))throw new Error("invalid char in the url encoded in the fil parameter");let e=new URL(a);if(!(o.protocol&&e.protocol&&o.protocol===e.protocol&&o.hostname&&e.hostname&&o.hostname===e.hostname))throw new Error("The distant file is not on the same site than the app");t=encodeURI(e.href)}catch(e){e instanceof Error&&console.error(e)}let n=o.searchParams.get("lng");n&&n.match(/^[A-Z,a-z]{2}$/)&&(e=n.toLowerCase())}(),await async function(){let t=await fetch(a+"Config.json");if(200===t.status&&t.ok){let o=await t.json();return o.travelNotes.language=e||o.travelNotes.language,"wwwouaiebe.github.io"===window.location.hostname&&(o.APIKeysDialog.haveUnsecureButtons=!0,o.errorsUI.showHelp=!0,o.layersToolbarUI.theDevil.addButton=!1,o.note.maxManeuversNotes=10,o.note.haveBackground=!0,o.noteDialog.theDevil.addButton=!1,o.printRouteMap.maxTiles=120,o.route.showDragTooltip=-1),y.overload(o),he.providers.forEach(e=>{e.userLanguage=y.travelNotes.language}),!0}return!1}()?(e=e||y.travelNotes.language||"fr",je.createUI(),await n(),function(){if(y.travelNotes.autoLoad&&""===o){w.create("div",{id:"TravelNotes-Map"},document.querySelector("body")),w.create("div",{id:"TravelNotes-UI"},document.querySelector("body"));let e=window.L.map("TravelNotes-Map",{attributionControl:!1,zoomControl:!1}).setView([r.defaultValue,r.defaultValue],0);t?vr.addReadOnlyMap(e,t):vr.addControl(e,"TravelNotes-UI")}}()):je.showError("Not possible to load the TravelNotesConfig.json file. ")}()}()}();
\ No newline at end of file
+ */(e).show()}const hr=new class{constructor(){Object.freeze(this)}addReadOnlyMap(e,t){ur||(ur=!0,gr(),e&&(he.map=e),ro.createUI(),Eo.setLayer("OSM - Color"),async function(e){let t=fetch(e);if(200===t.status&&t.ok){let e=await t.json();Pa().openDistantFile(e)}else he.map.setView([r.defaultValue,r.defaultValue],2),document.title="Travel & Notes"}(t))}addControl(t,o){ur||(ur=!0,gr(),window.addEventListener("unload",()=>{localStorage.removeItem(he.UUID)}),window.addEventListener("beforeunload",e=>{if(cr.closeDb(he.UUID),y.travelNotes.haveBeforeUnloadWarning)return e.returnValue="x","x"}),t&&(he.map=t,he.map.on("contextmenu",vr)),he.travel=de(),he.travel.routes.add(ne()),lr.createUI(document.getElementById(o)),ro.createUI(),Be.setKeysFromServerFile(),y.layersToolbarUI.haveLayersToolbarUI?Eo.createUI():Eo.setLayer("OSM - Color"),y.mouseUI.haveMouseUI&&Ea.createUI(),y.travelEditor.startupRouteEdition&&Oo.editRoute(he.travel.routes.first.objId),De.dispatch("setrouteslist"),De.dispatch("roadbookupdate"),he.map.setView([y.map.center.lat,y.map.center.lng],y.map.zoom),je.showHelp("
"+E.getText("Help - Continue with interface1")+"
"+E.getText("Help - Continue with interface2")+"
"),document.title="Travel & Notes",Ea.saveStatus=e.saved)}addProvider(e){Be.addProvider(e)}showInfo(e){je.showInfo(e)}get baseDialog(){return pe()}get map(){return he.map}get maneuver(){return V()}get itineraryPoint(){return U()}get version(){return"2.2.0"}};!function(){let e=null,t=null,o="",a=window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"TravelNotes";async function n(){let t=await Promise.allSettled([fetch(a+e.toUpperCase()+".json"),fetch(a+"EN.json"),fetch(a+"NoteDialog"+e.toUpperCase()+".json"),fetch(a+"NoteDialogEN.json"),fetch(a+"SearchDictionary"+e.toUpperCase()+".csv"),fetch(a+"SearchDictionaryEN.csv"),fetch(a+"Layers.json")]);o=await async function(t,o){return"fulfilled"===t.status&&200===t.value.status&&t.value.ok?(E.setTranslations(await t.value.json()),""):"fulfilled"===o.status&&200===o.value.status&&o.value.ok?(E.setTranslations(await o.value.json()),"Not possible to load the TravelNotes"+e.toUpperCase()+".json file. English will be used. "):"Not possible to load the translations. "}(t[0],t[1]),o+=await async function(t,o){if("fulfilled"===t.status&&200===t.value.status&&t.value.ok){let e=await t.value.json();return It.selectOptions=e.preDefinedIconsList,e.preDefinedIconsList.forEach(e=>{e.name=f.sanitizeToJsString(e.name)}),It.buttons=e.editionButtons,""}if("fulfilled"===o.status&&200===o.value.status&&o.value.ok){let t=await o.value.json();return It.selectOptions=t.preDefinedIconsList,t.preDefinedIconsList.forEach(e=>{e.name=f.sanitizeToJsString(e.name)}),It.buttons=t.editionButtons,"Not possible to load the TravelNotesNoteDialog"+e.toUpperCase()+".json file. English will be used. "}return"Not possible to load the translations for the note dialog. "}(t[2],t[3]),o+=await async function(t,o){return"fulfilled"===t.status&&200===t.value.status&&t.value.ok?(Yn.parseDictionary(await t.value.text()),""):"fulfilled"===o.status&&200===o.value.status&&o.value.ok?(Yn.parseDictionary(await o.value.text()),"Not possible to load the TravelNotesSearchDictionary"+e.toUpperCase()+".csv file. English will be used. "):"Not possible to load the search dictionary. OSM search will not be available."}(t[4],t[5]),o+=await async function(e){return"fulfilled"===e.status&&200===e.value.status&&e.value.ok?(Eo.addLayers(await e.value.json()),""):"Not possible to load the TravelNotesLayers.json file. Only the OpenStreetMap background will be available. "}(t[6]),""!==o&&(je.showWarning(o),o="")}!async function(){window.TaN=hr,window.L&&(window.L.travelNotes=window.TaN),function(){let o=new URL(window.location),a=o.searchParams.get("fil");if(a&&0!==a.length)try{if(a=atob(a),a.match(/[^\w-%:./]/))throw new Error("invalid char in the url encoded in the fil parameter");let e=new URL(a);if(!(o.protocol&&e.protocol&&o.protocol===e.protocol&&o.hostname&&e.hostname&&o.hostname===e.hostname))throw new Error("The distant file is not on the same site than the app");t=encodeURI(e.href)}catch(e){e instanceof Error&&console.error(e)}let n=o.searchParams.get("lng");n&&n.match(/^[A-Z,a-z]{2}$/)&&(e=n.toLowerCase())}(),await async function(){let t=await fetch(a+"Config.json");if(200===t.status&&t.ok){let o=await t.json();return o.travelNotes.language=e||o.travelNotes.language,"wwwouaiebe.github.io"===window.location.hostname&&(o.APIKeysDialog.haveUnsecureButtons=!0,o.errorsUI.showHelp=!0,o.layersToolbarUI.theDevil.addButton=!1,o.note.maxManeuversNotes=10,o.note.haveBackground=!0,o.noteDialog.theDevil.addButton=!1,o.printRouteMap.maxTiles=120,o.route.showDragTooltip=-1),y.overload(o),he.providers.forEach(e=>{e.userLanguage=y.travelNotes.language}),!0}return!1}()?(e=e||y.travelNotes.language||"fr",je.createUI(),await n(),function(){if(y.travelNotes.autoLoad&&""===o){let e=w.create("div",{id:"TravelNotes-Map"},document.querySelector("body"));w.create("div",{id:"TravelNotes-UI"},document.querySelector("body"));let o=window.L.map("TravelNotes-Map",{attributionControl:!1,zoomControl:!1}).setView([r.defaultValue,r.defaultValue],0);t?hr.addReadOnlyMap(o,t):hr.addControl(o,"TravelNotes-UI"),e.focus()}}()):je.showError("Not possible to load the TravelNotesConfig.json file. ")}()}()}();
\ No newline at end of file
diff --git a/dist/TravelNotesConfig.json b/dist/TravelNotesConfig.json
index 3fbc20dc..e34e34ae 100644
--- a/dist/TravelNotesConfig.json
+++ b/dist/TravelNotesConfig.json
@@ -247,6 +247,7 @@
},
"wayPoint":
{
- "reverseGeocoding":true
+ "reverseGeocoding":true,
+ "geocodingIncludeName":true
}
}
\ No newline at end of file
diff --git a/dist/TravelNotesEN.json b/dist/TravelNotesEN.json
index 478ab2ef..7dfa9513 100644
--- a/dist/TravelNotesEN.json
+++ b/dist/TravelNotesEN.json
@@ -335,6 +335,10 @@
"msgid" : "NoteDialog - Icon content",
"msgstr" : "Icon content\u00A0:\u00A0"
},
+ {
+ "msgid" : "NoteDialog - invalidUrl",
+ "msgstr" : "Invalid link"
+ },
{
"msgid" : "NoteDialog - Link",
"msgstr" : "Link : "
@@ -659,6 +663,22 @@
"msgid" : "ProfileContextMenu - Zoom to this point",
"msgstr" : "Zoom to this point"
},
+ {
+ "msgid" : "SaveAsDialog - SaveAs",
+ "msgstr" : "Select\u00a0:"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Travel Notes",
+ "msgstr" : "Remove Travel Notes"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Routes Notes",
+ "msgstr" : "Remove Routes Notes"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Maneuvers",
+ "msgstr" : "Remove Maneuvers"
+ },
{
"msgid" : "SvgIconFromOsmFactory - at the small roundabout on the ground",
"msgstr" : " at the small roundabout on the ground"
@@ -719,6 +739,14 @@
"msgid" : "TravelEditor - Cannot remove an edited route",
"msgstr" : "It's impossible to remove an edited route"
},
+ {
+ "msgid" : "TravelEditor - Gives a name to the travel",
+ "msgstr" : "Gives first a name to the travel"
+ },
+ {
+ "msgid" : "TravelEditor - Not possible to partial save when a route is edited.",
+ "msgstr" : "Not possible to partial save when a route is edited."
+ },
{
"msgid" : "TravelEditor - This page ask to close; data are perhaps not saved.",
"msgstr" : "This page ask to close; data are perhaps not saved."
@@ -727,10 +755,6 @@
"msgid" : "TravelUI - Cancel travel",
"msgstr" : "Cancel travel"
},
- {
- "msgid" : "TravelUI - Gives a name to the travel",
- "msgstr" : "Gives first a name to the travel"
- },
{
"msgid" : "TravelUI - Hide",
"msgstr" : "Hide"
@@ -759,6 +783,10 @@
"msgid" : "TravelUI - Route",
"msgstr" : "Route"
},
+ {
+ "msgid" : "TravelUI - Save as travel",
+ "msgstr" : "☢️ Partial save ☢️"
+ },
{
"msgid" : "TravelUI - Save travel",
"msgstr" : "Save the travel in a file"
diff --git a/dist/TravelNotesFR.json b/dist/TravelNotesFR.json
index 39d261c8..c2971f3d 100644
--- a/dist/TravelNotesFR.json
+++ b/dist/TravelNotesFR.json
@@ -335,6 +335,10 @@
"msgid" : "NoteDialog - Icon content",
"msgstr" : "Contenu de l'icône\u00a0:\u00a0"
},
+ {
+ "msgid" : "NoteDialog - invalidUrl",
+ "msgstr" : "Lien non valide"
+ },
{
"msgid" : "NoteDialog - Link",
"msgstr" : "Lien : "
@@ -659,6 +663,22 @@
"msgid" : "ProfileContextMenu - Zoom to this point",
"msgstr" : "Zoomer sur cet endroit"
},
+ {
+ "msgid" : "SaveAsDialog - SaveAs",
+ "msgstr" : "Sélectionnez\u00a0:"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Travel Notes",
+ "msgstr" : "Supprimer les notes de voyage"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Routes Notes",
+ "msgstr" : "Supprimer les notes de trajets"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Maneuvers",
+ "msgstr" : "Supprimer les manœuvres"
+ },
{
"msgid" : "SvgIconFromOsmFactory - at the small roundabout on the ground",
"msgstr" : " au petit rond-point au sol"
@@ -719,6 +739,14 @@
"msgid" : "TravelEditor - Cannot remove an edited route",
"msgstr" : "Il n'est pas possible de supprimer un trajet quand celui-ci est en cours d'édition"
},
+ {
+ "msgid" : "TravelEditor - Gives a name to the travel",
+ "msgstr" : "Donnez d'abord un nom à ce voyage."
+ },
+ {
+ "msgid" : "TravelEditor - Not possible to partial save when a route is edited.",
+ "msgstr" : "Il n'est pas possible de faire une sauvegarde partielle quand un trajet est en cours d'édition"
+ },
{
"msgid" : "TravelEditor - This page ask to close; data are perhaps not saved.",
"msgstr" : "Cette page demande de confirmer sa fermeture ; des données saisies pourraient ne pas être enregistrées."
@@ -727,10 +755,6 @@
"msgid" : "TravelUI - Cancel travel",
"msgstr" : "Abandonner ce voyage"
},
- {
- "msgid" : "TravelUI - Gives a name to the travel",
- "msgstr" : "Donnez d'abord un nom à ce voyage."
- },
{
"msgid" : "TravelUI - Hide",
"msgstr" : "Masquer"
@@ -759,6 +783,10 @@
"msgid" : "TravelUI - Route",
"msgstr" : "Trajet"
},
+ {
+ "msgid" : "TravelUI - Save as travel",
+ "msgstr" : "☢️ Sauvegarde partielle ☢️"
+ },
{
"msgid" : "TravelUI - Save travel",
"msgstr" : "Sauver dans un fichier"
diff --git a/dist/TravelNotesProviders/GraphHopperRouteProvider.min.js b/dist/TravelNotesProviders/GraphHopperRouteProvider.min.js
index d50a2b06..4279648f 100644
--- a/dist/TravelNotesProviders/GraphHopperRouteProvider.min.js
+++ b/dist/TravelNotesProviders/GraphHopperRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesProviders/MapboxRouteProvider.min.js b/dist/TravelNotesProviders/MapboxRouteProvider.min.js
index 01babaa6..91091d31 100644
--- a/dist/TravelNotesProviders/MapboxRouteProvider.min.js
+++ b/dist/TravelNotesProviders/MapboxRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesProviders/MapzenValhallaRouteProvider.min.js b/dist/TravelNotesProviders/MapzenValhallaRouteProvider.min.js
index 17148567..1191dcc4 100644
--- a/dist/TravelNotesProviders/MapzenValhallaRouteProvider.min.js
+++ b/dist/TravelNotesProviders/MapzenValhallaRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesProviders/OSRMRouteProvider.min.js b/dist/TravelNotesProviders/OSRMRouteProvider.min.js
index bdcb6963..2d5a353b 100644
--- a/dist/TravelNotesProviders/OSRMRouteProvider.min.js
+++ b/dist/TravelNotesProviders/OSRMRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesProviders/OpenRouteServiceRouteProvider.min.js b/dist/TravelNotesProviders/OpenRouteServiceRouteProvider.min.js
index 5780c655..34b72927 100644
--- a/dist/TravelNotesProviders/OpenRouteServiceRouteProvider.min.js
+++ b/dist/TravelNotesProviders/OpenRouteServiceRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesProviders/PolylineRouteProvider.min.js b/dist/TravelNotesProviders/PolylineRouteProvider.min.js
index c0869ef0..9d016cb1 100644
--- a/dist/TravelNotesProviders/PolylineRouteProvider.min.js
+++ b/dist/TravelNotesProviders/PolylineRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesProviders/PublicTransportRouteProvider.min.js b/dist/TravelNotesProviders/PublicTransportRouteProvider.min.js
index bfe3f849..71b4a253 100644
--- a/dist/TravelNotesProviders/PublicTransportRouteProvider.min.js
+++ b/dist/TravelNotesProviders/PublicTransportRouteProvider.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:25+0100
+ * Build 00823 - 2021-02-14T13:47:13+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
diff --git a/dist/TravelNotesRoadbook.min.css b/dist/TravelNotesRoadbook.min.css
index 4cc4838f..6eab2fb0 100644
--- a/dist/TravelNotesRoadbook.min.css
+++ b/dist/TravelNotesRoadbook.min.css
@@ -1 +1 @@
-.TravelNotes-Roadbook-Travel{margin-top:.5em;margin-left:1em;margin-right:1em;font-family:sans-serif;line-height:1.5em}.TravelNotes-Roadbook-Travel-Header{border-style:solid;border-width:.1em;padding:1em}.TravelNotes-Roadbook-Travel-Header-Name{font-size:156%;font-weight:700;margin-bottom:1em}.TravelNotes-Roadbook-Travel-Header-TravelDistance{margin-top:1em}.TravelNotes-Roadbook-Travel-Header-TravelAscent>span,.TravelNotes-Roadbook-Travel-Header-TravelDescent>span,.TravelNotes-Roadbook-Travel-Header-TravelDistance>span{text-decoration:underline}.TravelNotes-Roadbook-TravelFooter{border-top-style:solid;border-top-width:.1em;padding-top:2em;padding-bottom:2em}.TravelNotes-MapNote{width:100%;height:100%;background-repeat:no-repeat;display:inline-block;vertical-align:top}.TravelNotes-SvgIcon{border-style:solid;border-color:#000;border-width:.1em}.TravelNotes-Note-WhiteRed{color:#fff;background-color:red}.TravelNotes-Note-WhiteGreen{color:#fff;background-color:green}.TravelNotes-Note-WhiteBlue{color:#fff;background-color:#00f}.TravelNotes-Note-WhiteBrown{color:#fff;background-color:brown}.TravelNotes-Note-WhiteBlack{color:#fff;background-color:#000}.TravelNotes-Note-BlackWhite{color:#000;background-color:#fff;border:solid .1em}.TravelNotes-Note-BlackOrange{color:#000;background-color:orange}svg.TravelNotes-Note-Knooppunt{background-color:#fff}.TravelNotes-Note-Knooppunt>text{fill:green;font:bold 120px sans-serif}.TravelNotes-Note-Knooppunt>polyline{fill:none;stroke:green;stroke-width:10}.TravelNotes-OSM-Itinerary{fill:none;stroke:red;stroke-width:8}.TravelNotes-OSM-Highway{fill:none;stroke-width:2}.TravelNotes-OSM-Highway-living_street,.TravelNotes-OSM-Highway-motorway,.TravelNotes-OSM-Highway-motorway_link,.TravelNotes-OSM-Highway-primary,.TravelNotes-OSM-Highway-primary_link,.TravelNotes-OSM-Highway-residential,.TravelNotes-OSM-Highway-secondary,.TravelNotes-OSM-Highway-secondary_link,.TravelNotes-OSM-Highway-service,.TravelNotes-OSM-Highway-tertiary,.TravelNotes-OSM-Highway-tertiary_link,.TravelNotes-OSM-Highway-trunk,.TravelNotes-OSM-Highway-trunk_link,.TravelNotes-OSM-Highway-unclassified{stroke:gray}.TravelNotes-OSM-Highway-pedestrian{stroke:#a9a9a9}.TravelNotes-OSM-Highway-cycleway{stroke:#00f;stroke-dasharray:6 2}.TravelNotes-OSM-Highway-bridleway,.TravelNotes-OSM-Highway-track{stroke:brown;stroke-dasharray:6 2}.TravelNotes-OSM-Highway-footway,.TravelNotes-OSM-Highway-path{stroke:red;stroke-dasharray:2 2}.TravelNotes-OSM-RcnRef{font:bold 50px sans-serif;fill:#0ff;fill-opacity:75%;text-anchor:middle}.TravelNotes-MapNoteCategory-0001{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0002{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0003{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0004{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0005{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0006{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0007{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0008{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0009{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0010{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0011{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0012{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0013{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0014{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0015{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0016{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0017{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0018{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0019{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0020{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0021{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0022{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0023{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0024{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0025{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0026{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0027{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0028{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0029{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0030{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0031{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0032{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0033{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0034{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0035{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0036{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0037{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0038{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0039{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0040{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0041{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0042{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0043{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0044{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0045{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0046{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0047{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0048{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0049{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0050{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0051{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0052{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0053{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0054{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0055{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0056{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0057{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0058{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0059{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0060{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0061{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0062{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0063{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0064{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0065{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0066{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0067{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0068{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0069{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0070{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0071{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0072{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0073{background-image:url('data:image/svg+xml;utf8,');margin:0;padding:0}.TravelNotes-MapNoteCategory-0073 svg{max-height:170px;max-width:170px}.TravelNotes-MapNoteCategory-0073>svg>text{font:bold 10px sans-serif;fill:#00bfbf;text-anchor:middle}.TravelNotes-ManeuverNote-kArriveDefault,.TravelNotes-UI-kArriveDefault{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kArriveLeft,.TravelNotes-UI-kArriveLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kArriveRight,.TravelNotes-UI-kArriveRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueLeft,.TravelNotes-UI-kContinueLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueRight,.TravelNotes-UI-kContinueRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSharpLeft,.TravelNotes-UI-kContinueSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSharpRight,.TravelNotes-UI-kContinueSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSlightLeft,.TravelNotes-UI-kContinueSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSlightRight,.TravelNotes-UI-kContinueSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueStraight,.TravelNotes-UI-kContinueStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kDepartDefault,.TravelNotes-UI-kDepartDefault{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kDepartLeft,.TravelNotes-UI-kDepartLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kDepartRight,.TravelNotes-UI-kDepartRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kEndOfRoadLeft,.TravelNotes-UI-kEndOfRoadLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kEndOfRoadRight,.TravelNotes-UI-kEndOfRoadRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kFerryEnter,.TravelNotes-UI-kFerryEnter{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kFerryExit,.TravelNotes-UI-kFerryExit{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kForkLeft,.TravelNotes-UI-kForkLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kForkRight,.TravelNotes-UI-kForkRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kMergeDefault,.TravelNotes-UI-kMergeDefault{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kMergeLeft,.TravelNotes-UI-kMergeLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kMergeRight,.TravelNotes-UI-kMergeRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameLeft,.TravelNotes-UI-kNewNameLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameRight,.TravelNotes-UI-kNewNameRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSharpLeft,.TravelNotes-UI-kNewNameSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSharpRight,.TravelNotes-UI-kNewNameSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSlightLeft,.TravelNotes-UI-kNewNameSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSlightRight,.TravelNotes-UI-kNewNameSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameStraight,.TravelNotes-UI-kNewNameStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOffRampLeft,.TravelNotes-UI-kOffRampLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOffRampRight,.TravelNotes-UI-kOffRampRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOnRampLeft,.TravelNotes-UI-kOnRampLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOnRampRight,.TravelNotes-UI-kOnRampRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRotaryLeft,.TravelNotes-UI-kRotaryLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRotaryRight,.TravelNotes-UI-kRotaryRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutExit,.TravelNotes-UI-kRoundaboutExit{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutLeft,.TravelNotes-UI-kRoundaboutLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutRight,.TravelNotes-UI-kRoundaboutRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnLeft,.TravelNotes-UI-kRoundaboutTurnLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnRight,.TravelNotes-UI-kRoundaboutTurnRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSharpLeft,.TravelNotes-UI-kRoundaboutTurnSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSharpRight,.TravelNotes-UI-kRoundaboutTurnSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSlightLeft,.TravelNotes-UI-kRoundaboutTurnSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSlightRight,.TravelNotes-UI-kRoundaboutTurnSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnStraight,.TravelNotes-UI-kRoundaboutTurnStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kStayLeft,.TravelNotes-UI-kStayLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kStayRight,.TravelNotes-UI-kStayRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kStayStraight,.TravelNotes-UI-kStayStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnLeft,.TravelNotes-UI-kTurnLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnRight,.TravelNotes-UI-kTurnRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSharpLeft,.TravelNotes-UI-kTurnSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSharpRight,.TravelNotes-UI-kTurnSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSlightLeft,.TravelNotes-UI-kTurnSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSlightRight,.TravelNotes-UI-kTurnSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnStraight,.TravelNotes-UI-kTurnStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnUturn,.TravelNotes-UI-kTurnUturn{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kUndefined,.TravelNotes-UI-kUndefined{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kUturnLeft,.TravelNotes-UI-kUturnLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kUturnRight,.TravelNotes-UI-kUturnRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTrainStart,.TravelNotes-UI-kTrainStart{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTrainContinue,.TravelNotes-UI-kTrainContinue{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTrainEnd,.TravelNotes-UI-kTrainEnd{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-Roadbook-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-Roadbook-NoteHtml-Address-City,.TravelNotes-Roadbook-NoteHtml-Address>span:first-child,.TravelNotes-Roadbook-NoteHtml-Distance>span:first-child,.TravelNotes-Roadbook-NoteHtml-LatLng>span,.TravelNotes-Roadbook-NoteHtml-NextDistance>span:first-child,.TravelNotes-Roadbook-NoteHtml-Phone>span:first-child,.TravelNotes-Roadbook-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-Roadbook-Route-Header{border-style:solid;border-width:.1em;padding:1em}.TravelNotes-Roadbook-Route-Header-Name{font-size:125%;font-weight:700;margin-bottom:1em}.TravelNotes-Roadbook-Route-Header-Ascent>span,.TravelNotes-Roadbook-Route-Header-Descent>span,.TravelNotes-Roadbook-Route-Header-Distance>span,.TravelNotes-Roadbook-Route-Header-Duration>span{text-decoration:underline}.TravelNotes-Roadbook-RouteFooter{padding-bottom:2em}.TravelNotes-Route-SvgProfile{background-color:#fff;margin:1em}.TravelNotes-Route-SvgProfile-profilePolyline{fill:none;stroke:red;stroke-width:3}.TravelNotes-Route-SvgProfile-framePolyline,.TravelNotes-Route-SvgProfile-markerPolyline{fill:none;stroke:#000;stroke-width:1}.TravelNotes-Route-SvgProfile-elevText{fill:#000;font:bold 30px sans-serif}.TravelNotes-Route-SvgProfile-distLegend,.TravelNotes-Route-SvgProfile-elevLegend{fill:#000;font:bold 24px sans-serif}#TravelNotes-Roadbook-GoTop>a{color:#000;text-decoration:none}.TravelNotes-Roadbook-Route-ManeuversAndNotes,.TravelNotes-Roadbook-Travel-Notes{margin-top:1em;margin-bottom:2em}.TravelNotes-Roadbook-Route-Maneuvers-Row,.TravelNotes-Roadbook-Route-Notes-Row,.TravelNotes-Roadbook-Travel-Notes-Row{border-bottom-style:solid;border-bottom-width:.1em;padding-top:1em;padding-bottom:1em;display:flex;flex-direction:row}.TravelNotes-Roadbook-Route-ManeuversAndNotes-IconCell,.TravelNotes-Roadbook-Travel-Notes-IconCell{background-repeat:no-repeat;min-width:40px;min-height:40px;vertical-align:top;flex-shrink:0}.TravelNotes-Roadbook-Route-ManeuversAndNotes-Cell,.TravelNotes-Roadbook-Travel-Notes-Cell{padding-left:.5em;flex-shrink:2}#TravelNotes-Roadbook-Menu{position:fixed;top:1em;left:1em;background-color:#fff}@media screen and (max-width:70em){.TravelNotes-Roadbook-Travel{padding-top:3.5em}#TravelNotes-Roadbook-Menu{padding:.5em;border-style:solid;border-width:1px;margin-left:.5em}#TravelNotes-Roadbook-Menu>div{display:inline-block}}@media screen and (min-width:70em){.TravelNotes-Roadbook-Travel{width:50em;margin-left:calc(50% - 50em / 2);margin-right:calc(50% - 50em / 2)}}@media print{#TravelNotes-Roadbook-Menu{visibility:hidden;width:0;height:0;margin:0;padding:0;border-width:0;border-style:none}.TravelNotes-Roadbook-Route-Header{page-break-before:always}.TravelNotes-Roadbook-Route-Maneuvers-Row,.TravelNotes-Roadbook-Route-Notes-Row,.TravelNotes-Roadbook-Travel-Notes-Row{page-break-inside:avoid}}.TravelNotes-Hidden,.TravelNotes-Hidden>*,.TravelNotes-Hidden>*>*,.TravelNotes-Hidden>*>*>*{width:0;height:0;margin:0;padding:0;top:0;left:0;border-width:0;border-style:none;animation:none;visibility:hidden;transform:scale(0)}
\ No newline at end of file
+.TravelNotes-Roadbook-Travel{margin-top:.5em;margin-left:1em;margin-right:1em;font-family:sans-serif;line-height:1.5em}.TravelNotes-Roadbook-Travel-Header{border-style:solid;border-width:.1em;padding:1em}.TravelNotes-Roadbook-Travel-Header-Name{font-size:156%;font-weight:700;margin-bottom:1em}.TravelNotes-Roadbook-Travel-Header-TravelDistance{margin-top:1em}.TravelNotes-Roadbook-Travel-Header-TravelAscent>span,.TravelNotes-Roadbook-Travel-Header-TravelDescent>span,.TravelNotes-Roadbook-Travel-Header-TravelDistance>span{text-decoration:underline}.TravelNotes-Roadbook-TravelFooter{border-top-style:solid;border-top-width:.1em;padding-top:2em;padding-bottom:2em}.TravelNotes-MapNote{width:100%;height:100%;background-repeat:no-repeat;display:inline-block;vertical-align:top}.TravelNotes-SvgIcon{border-style:solid;border-color:#000;border-width:.1em}.TravelNotes-Note-WhiteRed{color:#fff;background-color:red}.TravelNotes-Note-WhiteGreen{color:#fff;background-color:green}.TravelNotes-Note-WhiteBlue{color:#fff;background-color:#00f}.TravelNotes-Note-WhiteBrown{color:#fff;background-color:brown}.TravelNotes-Note-WhiteBlack{color:#fff;background-color:#000}.TravelNotes-Note-BlackWhite{color:#000;background-color:#fff;border:solid .1em}.TravelNotes-Note-BlackOrange{color:#000;background-color:orange}svg.TravelNotes-Note-Knooppunt{background-color:#fff}.TravelNotes-Note-Knooppunt>text{fill:green;font:bold 120px sans-serif}.TravelNotes-Note-Knooppunt>polyline{fill:none;stroke:green;stroke-width:10}.TravelNotes-OSM-Itinerary{fill:none;stroke:red;stroke-width:8}.TravelNotes-OSM-Highway{fill:none;stroke-width:2}.TravelNotes-OSM-Highway-living_street,.TravelNotes-OSM-Highway-motorway,.TravelNotes-OSM-Highway-motorway_link,.TravelNotes-OSM-Highway-primary,.TravelNotes-OSM-Highway-primary_link,.TravelNotes-OSM-Highway-residential,.TravelNotes-OSM-Highway-secondary,.TravelNotes-OSM-Highway-secondary_link,.TravelNotes-OSM-Highway-service,.TravelNotes-OSM-Highway-tertiary,.TravelNotes-OSM-Highway-tertiary_link,.TravelNotes-OSM-Highway-trunk,.TravelNotes-OSM-Highway-trunk_link,.TravelNotes-OSM-Highway-unclassified{stroke:gray}.TravelNotes-OSM-Highway-pedestrian{stroke:#a9a9a9}.TravelNotes-OSM-Highway-cycleway{stroke:#00f;stroke-dasharray:6 2}.TravelNotes-OSM-Highway-bridleway,.TravelNotes-OSM-Highway-track{stroke:brown;stroke-dasharray:6 2}.TravelNotes-OSM-Highway-footway,.TravelNotes-OSM-Highway-path{stroke:red;stroke-dasharray:2 2}.TravelNotes-OSM-RcnRef{font:bold 50px sans-serif;fill:#0ff;fill-opacity:75%;text-anchor:middle}.TravelNotes-MapNoteCategory-0001{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0002{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0003{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0004{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0005{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0006{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0007{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0008{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0009{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0010{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0011{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0012{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0013{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0014{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0015{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0016{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0017{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0018{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0019{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0020{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0021{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0022{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0023{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0024{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0025{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0026{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0027{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0028{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0029{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0030{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0031{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0032{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0033{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0034{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0035{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0036{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0037{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0038{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0039{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0040{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0041{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0042{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0043{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0044{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0045{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0046{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0047{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0048{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0049{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0050{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0051{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0052{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0053{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0054{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0055{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0056{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0057{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0058{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0059{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0060{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0061{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0062{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0063{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0064{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0065{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0066{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0067{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0068{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0069{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0070{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0071{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0072{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-MapNoteCategory-0073{background-image:url('data:image/svg+xml;utf8,');margin:0;padding:0}.TravelNotes-MapNoteCategory-0073 svg{max-height:170px;max-width:170px}.TravelNotes-MapNoteCategory-0073>svg>text{font:bold 10px sans-serif;fill:#00bfbf;text-anchor:middle}.TravelNotes-ManeuverNote-kArriveDefault,.TravelNotes-UI-kArriveDefault{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kArriveLeft,.TravelNotes-UI-kArriveLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kArriveRight,.TravelNotes-UI-kArriveRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueLeft,.TravelNotes-UI-kContinueLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueRight,.TravelNotes-UI-kContinueRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSharpLeft,.TravelNotes-UI-kContinueSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSharpRight,.TravelNotes-UI-kContinueSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSlightLeft,.TravelNotes-UI-kContinueSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueSlightRight,.TravelNotes-UI-kContinueSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kContinueStraight,.TravelNotes-UI-kContinueStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kDepartDefault,.TravelNotes-UI-kDepartDefault{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kDepartLeft,.TravelNotes-UI-kDepartLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kDepartRight,.TravelNotes-UI-kDepartRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kEndOfRoadLeft,.TravelNotes-UI-kEndOfRoadLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kEndOfRoadRight,.TravelNotes-UI-kEndOfRoadRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kFerryEnter,.TravelNotes-UI-kFerryEnter{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kFerryExit,.TravelNotes-UI-kFerryExit{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kForkLeft,.TravelNotes-UI-kForkLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kForkRight,.TravelNotes-UI-kForkRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kMergeDefault,.TravelNotes-UI-kMergeDefault{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kMergeLeft,.TravelNotes-UI-kMergeLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kMergeRight,.TravelNotes-UI-kMergeRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameLeft,.TravelNotes-UI-kNewNameLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameRight,.TravelNotes-UI-kNewNameRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSharpLeft,.TravelNotes-UI-kNewNameSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSharpRight,.TravelNotes-UI-kNewNameSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSlightLeft,.TravelNotes-UI-kNewNameSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameSlightRight,.TravelNotes-UI-kNewNameSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kNewNameStraight,.TravelNotes-UI-kNewNameStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOffRampLeft,.TravelNotes-UI-kOffRampLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOffRampRight,.TravelNotes-UI-kOffRampRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOnRampLeft,.TravelNotes-UI-kOnRampLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kOnRampRight,.TravelNotes-UI-kOnRampRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRotaryLeft,.TravelNotes-UI-kRotaryLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRotaryRight,.TravelNotes-UI-kRotaryRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutExit,.TravelNotes-UI-kRoundaboutExit{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutLeft,.TravelNotes-UI-kRoundaboutLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutRight,.TravelNotes-UI-kRoundaboutRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnLeft,.TravelNotes-UI-kRoundaboutTurnLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnRight,.TravelNotes-UI-kRoundaboutTurnRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSharpLeft,.TravelNotes-UI-kRoundaboutTurnSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSharpRight,.TravelNotes-UI-kRoundaboutTurnSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSlightLeft,.TravelNotes-UI-kRoundaboutTurnSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnSlightRight,.TravelNotes-UI-kRoundaboutTurnSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kRoundaboutTurnStraight,.TravelNotes-UI-kRoundaboutTurnStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kStayLeft,.TravelNotes-UI-kStayLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kStayRight,.TravelNotes-UI-kStayRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kStayStraight,.TravelNotes-UI-kStayStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnLeft,.TravelNotes-UI-kTurnLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnRight,.TravelNotes-UI-kTurnRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSharpLeft,.TravelNotes-UI-kTurnSharpLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSharpRight,.TravelNotes-UI-kTurnSharpRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSlightLeft,.TravelNotes-UI-kTurnSlightLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnSlightRight,.TravelNotes-UI-kTurnSlightRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnStraight,.TravelNotes-UI-kTurnStraight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTurnUturn,.TravelNotes-UI-kTurnUturn{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kUndefined,.TravelNotes-UI-kUndefined{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kUturnLeft,.TravelNotes-UI-kUturnLeft{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kUturnRight,.TravelNotes-UI-kUturnRight{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTrainStart,.TravelNotes-UI-kTrainStart{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTrainContinue,.TravelNotes-UI-kTrainContinue{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-ManeuverNote-kTrainEnd,.TravelNotes-UI-kTrainEnd{background-image:url('data:image/svg+xml;utf8,')}.TravelNotes-Roadbook-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-Roadbook-NoteHtml-Address-City,.TravelNotes-Roadbook-NoteHtml-Address>span:first-child,.TravelNotes-Roadbook-NoteHtml-Distance>span:first-child,.TravelNotes-Roadbook-NoteHtml-LatLng>span,.TravelNotes-Roadbook-NoteHtml-NextDistance>span:first-child,.TravelNotes-Roadbook-NoteHtml-Phone>span:first-child,.TravelNotes-Roadbook-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-Roadbook-Route-Header{border-style:solid;border-width:.1em;padding:1em}.TravelNotes-Roadbook-Route-Header-Name{font-size:125%;font-weight:700;margin-bottom:1em}.TravelNotes-Roadbook-Route-Header-Ascent>span,.TravelNotes-Roadbook-Route-Header-Descent>span,.TravelNotes-Roadbook-Route-Header-Distance>span,.TravelNotes-Roadbook-Route-Header-Duration>span{text-decoration:underline}.TravelNotes-Roadbook-RouteFooter{padding-bottom:2em}.TravelNotes-Route-SvgProfile{background-color:#fff;margin:1em}.TravelNotes-Route-SvgProfile-profilePolyline{fill:none;stroke:red;stroke-width:3}.TravelNotes-Route-SvgProfile-framePolyline,.TravelNotes-Route-SvgProfile-markerPolyline{fill:none;stroke:#000;stroke-width:1}.TravelNotes-Route-SvgProfile-elevText{fill:#000;font:bold 30px sans-serif}.TravelNotes-Route-SvgProfile-distLegend,.TravelNotes-Route-SvgProfile-elevLegend{fill:#000;font:bold 24px sans-serif}#TravelNotes-Roadbook-GoTop>a{color:#000;text-decoration:none}.TravelNotes-Roadbook-Route-ManeuversAndNotes,.TravelNotes-Roadbook-Travel-Notes{margin-top:1em;margin-bottom:2em}.TravelNotes-Roadbook-Route-Maneuvers-Row,.TravelNotes-Roadbook-Route-Notes-Row,.TravelNotes-Roadbook-Travel-Notes-Row{border-bottom-style:solid;border-bottom-width:.1em;padding-top:1em;padding-bottom:1em;display:flex;flex-direction:row}.TravelNotes-Roadbook-Route-ManeuversAndNotes-IconCell,.TravelNotes-Roadbook-Travel-Notes-IconCell{background-repeat:no-repeat;min-width:40px;min-height:40px;vertical-align:top;flex-shrink:0}.TravelNotes-Roadbook-Route-ManeuversAndNotes-Cell,.TravelNotes-Roadbook-Travel-Notes-Cell{padding-left:.5em;flex-shrink:2}#TravelNotes-Roadbook-Menu{position:fixed;top:0;left:0;z-index:200}@media screen and (max-width:320px){body{margin:0;padding:0}#TravelNotes-Roadbook-Menu{position:static}.TravelNotes-Roadbook-Travel{margin-right:0;margin-left:0}.TravelNotes-Roadbook-Route-Maneuvers-Row,.TravelNotes-Roadbook-Route-Notes-Row,.TravelNotes-Roadbook-Travel-Notes-Row{display:flex;flex-direction:column}.TravelNotes-Roadbook-NoteHtml-Url{overflow:hidden}.TravelNotes-Roadbook-Route-ManeuversAndNotes-Cell,.TravelNotes-Roadbook-Travel-Notes-Cell{padding-left:0;flex-shrink:2}}@media screen and (min-width:321px) and (max-width:70em){.TravelNotes-Roadbook-Travel{padding-top:3.5em}#TravelNotes-Roadbook-Menu{padding:.5em;border-style:solid;border-width:1px;margin-left:.5em}#TravelNotes-Roadbook-Menu>div{display:inline-block}}@media screen and (min-width:70em){.TravelNotes-Roadbook-Travel{width:50em;margin-left:calc(50% - 50em / 2);margin-right:calc(50% - 50em / 2)}}@media print{#TravelNotes-Roadbook-Menu{visibility:hidden;width:0;height:0;margin:0;padding:0;border-width:0;border-style:none}.TravelNotes-Roadbook-Route-Header{page-break-before:always}.TravelNotes-Roadbook-Route-Maneuvers-Row,.TravelNotes-Roadbook-Route-Notes-Row,.TravelNotes-Roadbook-Travel-Notes-Row{page-break-inside:avoid}}.TravelNotes-Hidden,.TravelNotes-Hidden>*,.TravelNotes-Hidden>*>*,.TravelNotes-Hidden>*>*>*{width:0;height:0;margin:0;padding:0;top:0;left:0;border-width:0;border-style:none;animation:none;visibility:hidden;transform:scale(0)}
\ No newline at end of file
diff --git a/dist/TravelNotesRoadbook.min.js b/dist/TravelNotesRoadbook.min.js
index 17133fa6..4029fe43 100644
--- a/dist/TravelNotesRoadbook.min.js
+++ b/dist/TravelNotesRoadbook.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:30+0100
+ * Build 00823 - 2021-02-14T13:47:19+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
@@ -51,4 +51,4 @@
@private
@------------------------------------------------------------------------------------------------------------------------------
- */let i=null;const d=new class{constructor(){Object.freeze(this)}getOpenPromise(){return new Promise((function(e,t){if(i)return void e();let r=window.indexedDB.open("TravelNotesDb",1);r.onerror=function(){i=null,t(new Error("Not possible to open the db"))},r.onsuccess=function(t){i=t.target.result,e()},r.onupgradeneeded=function(e){i=e.target.result,i.createObjectStore("Travels",{keyPath:"UUID"})}}))}getReadPromise(e){return new Promise((function(t,r){if(!i)return void r(new Error("Database not opened"));let o=i.transaction(["Travels"],"readonly");o.onerror=function(){r(new Error("Transaction error"))},o.objectStore("Travels").get(e).onsuccess=function(e){t(e.target.result?e.target.result.data:null)}}))}getWritePromise(e,t){return new Promise((function(r,o){if(!i)return void o(new Error("Database not opened"));let n=null;try{n=i.transaction(["Travels"],"readwrite")}catch(e){return void o(e)}n.onerror=function(){o(new Error("Transaction error"))},n.objectStore("Travels").put({UUID:e,data:t}).onsuccess=function(){r()}}))}closeDb(e){if(!i)return;if(!e)return i.close(),void(i=null);let t=i.transaction(["Travels"],"readwrite");t.onerror=function(){};let r=t.objectStore("Travels").delete(e);r.onerror=function(){i.close(),i=null},r.onsuccess=function(){i.close(),i=null}}};let c=new URLSearchParams(document.location.search.substring(1)),u=c.get("lng"),h=c.get("page");function m(){let e=document.getElementById("TravelNotes-Travel-ShowNotes").checked,t=document.getElementsByClassName("TravelNotes-Roadbook-Travel-Notes-Row");for(let r=0;r{let t=e.getAttribute("tanwidth");t&&(e.style.width=t);let r=e.getAttribute("tanheight");r&&(e.style.height=r)})}function b(e){document.getElementById("TravelNotes").textContent="",l.sanitizeToHtmlElement(e,document.getElementById("TravelNotes"));let t=document.querySelector(".TravelNotes-Roadbook-Travel-Header-Name");t&&(document.title=""===t.textContent?"roadbook":t.textContent+" - roadbook"),v(),m(),g(),f()}document.getElementById("TravelNotes-Travel-ShowNotes").addEventListener("change",m),document.getElementById("TravelNotes-Routes-ShowNotes").addEventListener("change",g),document.getElementById("TravelNotes-Routes-ShowManeuvers").addEventListener("change",f),h?(u&&fetch(window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"TravelNotes"+u.toUpperCase()+".json").then(e=>{200===e.status&&e.ok&&e.json().then(e=>{s.setTranslations(e),document.getElementById("TravelNotes-Travel-ShowNotesLabel").textContent=s.getText("Roadbook - show travel notes"),document.getElementById("TravelNotes-Routes-ShowManeuversLabel").textContent=s.getText("Roadbook - show maneuver"),document.getElementById("TravelNotes-Routes-ShowNotesLabel").textContent=s.getText("Roadbook - show routes notes"),document.getElementById("TravelNotes-SaveButton").textContent=s.getText("Roadbook - Save")}).catch(e=>{e instanceof Error&&console.error(e)})}),function(){let e=document.createElement("button");e.id="TravelNotes-SaveButton",document.getElementById("TravelNotes-Roadbook-Menu").appendChild(e),e.addEventListener("click",(function(){try{let e=document.querySelector(".TravelNotes-Roadbook-Travel-Header-Name").textContent+"-Roadbook.html",t=document.getElementById("TravelNotes-Roadbook-Menu").removeChild(document.getElementById("TravelNotes-SaveButton")),r=window.URL.createObjectURL(new File(["",document.documentElement.outerHTML],e,{type:"text/plain"})),o=document.createElement("a");o.setAttribute("href",r),o.setAttribute("download",e),o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),window.URL.revokeObjectURL(r),document.getElementById("TravelNotes-Roadbook-Menu").appendChild(t)}catch(e){e instanceof Error&&console.error(e)}}))}(),h?(d.getOpenPromise().then(()=>d.getReadPromise(h)).then(b).catch(e=>{e instanceof Error&&console.error(e)}),window.addEventListener("storage",()=>{d.getReadPromise(h).then(e=>{e?b(e):document.getElementById("TravelNotes").textContent=""}).catch(e=>{e instanceof Error&&console.error(e)})}),window.addEventListener("unload",()=>{d.closeDb()})):document.getElementById("TravelNotes-Roadbook-Menu").removeChild(document.getElementById("TravelNotes-ButtonContainer"))):v(),m(),g(),f()}();
\ No newline at end of file
+ */let i=null;const d=new class{constructor(){Object.freeze(this)}getOpenPromise(){return new Promise((function(e,t){if(i)return void e();let r=window.indexedDB.open("TravelNotesDb",1);r.onerror=function(){i=null,t(new Error("Not possible to open the db"))},r.onsuccess=function(t){i=t.target.result,e()},r.onupgradeneeded=function(e){i=e.target.result,i.createObjectStore("Travels",{keyPath:"UUID"})}}))}getReadPromise(e){return new Promise((function(t,r){if(!i)return void r(new Error("Database not opened"));let o=i.transaction(["Travels"],"readonly");o.onerror=function(){r(new Error("Transaction error"))},o.objectStore("Travels").get(e).onsuccess=function(e){t(e.target.result?e.target.result.data:null)}}))}getWritePromise(e,t){return new Promise((function(r,o){if(!i)return void o(new Error("Database not opened"));let n=null;try{n=i.transaction(["Travels"],"readwrite")}catch(e){return void o(e)}n.onerror=function(){o(new Error("Transaction error"))},n.objectStore("Travels").put({UUID:e,data:t}).onsuccess=function(){r()}}))}closeDb(e){if(!i)return;if(!e)return i.close(),void(i=null);let t=i.transaction(["Travels"],"readwrite");t.onerror=function(){};let r=t.objectStore("Travels").delete(e);r.onerror=function(){i.close(),i=null},r.onsuccess=function(){i.close(),i=null}}};let c=new URLSearchParams(document.location.search.substring(1)),u=c.get("lng"),m=c.get("page");function h(){let e=document.getElementById("TravelNotes-Travel-ShowNotes").checked,t=document.getElementsByClassName("TravelNotes-Roadbook-Travel-Notes-Row");for(let r=0;r{let t=e.getAttribute("tanwidth");t&&(e.style.width=t);let r=e.getAttribute("tanheight");r&&(e.style.height=r)})}function b(e){document.getElementById("TravelNotes").textContent="",l.sanitizeToHtmlElement(e,document.getElementById("TravelNotes"));let t=document.querySelector(".TravelNotes-Roadbook-Travel-Header-Name");t&&(document.title=""===t.textContent?"roadbook":t.textContent+" - roadbook"),v(),h(),g(),f()}document.getElementById("TravelNotes-Travel-ShowNotes").addEventListener("change",h),document.getElementById("TravelNotes-Routes-ShowNotes").addEventListener("change",g),document.getElementById("TravelNotes-Routes-ShowManeuvers").addEventListener("change",f),m?(u&&fetch(window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"TravelNotes"+u.toUpperCase()+".json").then(e=>{200===e.status&&e.ok&&e.json().then(e=>{s.setTranslations(e),document.getElementById("TravelNotes-Travel-ShowNotesLabel").textContent=s.getText("Roadbook - show travel notes"),document.getElementById("TravelNotes-Routes-ShowManeuversLabel").textContent=s.getText("Roadbook - show maneuver"),document.getElementById("TravelNotes-Routes-ShowNotesLabel").textContent=s.getText("Roadbook - show routes notes"),document.getElementById("TravelNotes-SaveButton").textContent=s.getText("Roadbook - Save")}).catch(e=>{e instanceof Error&&console.error(e)})}),function(){let e=document.createElement("button");e.id="TravelNotes-SaveButton",e.addEventListener("click",(function(){try{let e=document.querySelector(".TravelNotes-Roadbook-Travel-Header-Name").textContent+"-Roadbook.html",t=document.getElementById("TravelNotes-Roadbook-Menu").removeChild(document.getElementById("TravelNotes-SaveButton")),r=window.URL.createObjectURL(new File(["",document.documentElement.outerHTML],e,{type:"text/plain"})),o=document.createElement("a");o.setAttribute("href",r),o.setAttribute("download",e),o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o),window.URL.revokeObjectURL(r),document.getElementById("TravelNotes-Roadbook-Menu").appendChild(t)}catch(e){e instanceof Error&&console.error(e)}}));let t=document.createElement("div");t.appendChild(e),document.getElementById("TravelNotes-Roadbook-Menu").appendChild(t)}(),m?(d.getOpenPromise().then(()=>d.getReadPromise(m)).then(b).catch(e=>{e instanceof Error&&console.error(e)}),window.addEventListener("storage",()=>{d.getReadPromise(m).then(e=>{e?b(e):document.getElementById("TravelNotes").textContent=""}).catch(e=>{e instanceof Error&&console.error(e)})}),window.addEventListener("unload",()=>{d.closeDb()})):document.getElementById("TravelNotes-Roadbook-Menu").removeChild(document.getElementById("TravelNotes-ButtonContainer"))):v(),h(),g(),f()}();
\ No newline at end of file
diff --git a/dist/viewer/TravelNotesConfig.json b/dist/viewer/TravelNotesConfig.json
index 3fbc20dc..e34e34ae 100644
--- a/dist/viewer/TravelNotesConfig.json
+++ b/dist/viewer/TravelNotesConfig.json
@@ -247,6 +247,7 @@
},
"wayPoint":
{
- "reverseGeocoding":true
+ "reverseGeocoding":true,
+ "geocodingIncludeName":true
}
}
\ No newline at end of file
diff --git a/dist/viewer/TravelNotesEN.json b/dist/viewer/TravelNotesEN.json
index 478ab2ef..7dfa9513 100644
--- a/dist/viewer/TravelNotesEN.json
+++ b/dist/viewer/TravelNotesEN.json
@@ -335,6 +335,10 @@
"msgid" : "NoteDialog - Icon content",
"msgstr" : "Icon content\u00A0:\u00A0"
},
+ {
+ "msgid" : "NoteDialog - invalidUrl",
+ "msgstr" : "Invalid link"
+ },
{
"msgid" : "NoteDialog - Link",
"msgstr" : "Link : "
@@ -659,6 +663,22 @@
"msgid" : "ProfileContextMenu - Zoom to this point",
"msgstr" : "Zoom to this point"
},
+ {
+ "msgid" : "SaveAsDialog - SaveAs",
+ "msgstr" : "Select\u00a0:"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Travel Notes",
+ "msgstr" : "Remove Travel Notes"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Routes Notes",
+ "msgstr" : "Remove Routes Notes"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Maneuvers",
+ "msgstr" : "Remove Maneuvers"
+ },
{
"msgid" : "SvgIconFromOsmFactory - at the small roundabout on the ground",
"msgstr" : " at the small roundabout on the ground"
@@ -719,6 +739,14 @@
"msgid" : "TravelEditor - Cannot remove an edited route",
"msgstr" : "It's impossible to remove an edited route"
},
+ {
+ "msgid" : "TravelEditor - Gives a name to the travel",
+ "msgstr" : "Gives first a name to the travel"
+ },
+ {
+ "msgid" : "TravelEditor - Not possible to partial save when a route is edited.",
+ "msgstr" : "Not possible to partial save when a route is edited."
+ },
{
"msgid" : "TravelEditor - This page ask to close; data are perhaps not saved.",
"msgstr" : "This page ask to close; data are perhaps not saved."
@@ -727,10 +755,6 @@
"msgid" : "TravelUI - Cancel travel",
"msgstr" : "Cancel travel"
},
- {
- "msgid" : "TravelUI - Gives a name to the travel",
- "msgstr" : "Gives first a name to the travel"
- },
{
"msgid" : "TravelUI - Hide",
"msgstr" : "Hide"
@@ -759,6 +783,10 @@
"msgid" : "TravelUI - Route",
"msgstr" : "Route"
},
+ {
+ "msgid" : "TravelUI - Save as travel",
+ "msgstr" : "☢️ Partial save ☢️"
+ },
{
"msgid" : "TravelUI - Save travel",
"msgstr" : "Save the travel in a file"
diff --git a/dist/viewer/TravelNotesFR.json b/dist/viewer/TravelNotesFR.json
index 39d261c8..c2971f3d 100644
--- a/dist/viewer/TravelNotesFR.json
+++ b/dist/viewer/TravelNotesFR.json
@@ -335,6 +335,10 @@
"msgid" : "NoteDialog - Icon content",
"msgstr" : "Contenu de l'icône\u00a0:\u00a0"
},
+ {
+ "msgid" : "NoteDialog - invalidUrl",
+ "msgstr" : "Lien non valide"
+ },
{
"msgid" : "NoteDialog - Link",
"msgstr" : "Lien : "
@@ -659,6 +663,22 @@
"msgid" : "ProfileContextMenu - Zoom to this point",
"msgstr" : "Zoomer sur cet endroit"
},
+ {
+ "msgid" : "SaveAsDialog - SaveAs",
+ "msgstr" : "Sélectionnez\u00a0:"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Travel Notes",
+ "msgstr" : "Supprimer les notes de voyage"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Routes Notes",
+ "msgstr" : "Supprimer les notes de trajets"
+ },
+ {
+ "msgid" : "SaveAsDialog - Remove Maneuvers",
+ "msgstr" : "Supprimer les manœuvres"
+ },
{
"msgid" : "SvgIconFromOsmFactory - at the small roundabout on the ground",
"msgstr" : " au petit rond-point au sol"
@@ -719,6 +739,14 @@
"msgid" : "TravelEditor - Cannot remove an edited route",
"msgstr" : "Il n'est pas possible de supprimer un trajet quand celui-ci est en cours d'édition"
},
+ {
+ "msgid" : "TravelEditor - Gives a name to the travel",
+ "msgstr" : "Donnez d'abord un nom à ce voyage."
+ },
+ {
+ "msgid" : "TravelEditor - Not possible to partial save when a route is edited.",
+ "msgstr" : "Il n'est pas possible de faire une sauvegarde partielle quand un trajet est en cours d'édition"
+ },
{
"msgid" : "TravelEditor - This page ask to close; data are perhaps not saved.",
"msgstr" : "Cette page demande de confirmer sa fermeture ; des données saisies pourraient ne pas être enregistrées."
@@ -727,10 +755,6 @@
"msgid" : "TravelUI - Cancel travel",
"msgstr" : "Abandonner ce voyage"
},
- {
- "msgid" : "TravelUI - Gives a name to the travel",
- "msgstr" : "Donnez d'abord un nom à ce voyage."
- },
{
"msgid" : "TravelUI - Hide",
"msgstr" : "Masquer"
@@ -759,6 +783,10 @@
"msgid" : "TravelUI - Route",
"msgstr" : "Trajet"
},
+ {
+ "msgid" : "TravelUI - Save as travel",
+ "msgstr" : "☢️ Sauvegarde partielle ☢️"
+ },
{
"msgid" : "TravelUI - Save travel",
"msgstr" : "Sauver dans un fichier"
diff --git a/dist/viewer/TravelNotesViewer.min.js b/dist/viewer/TravelNotesViewer.min.js
index c81818e6..ad2cce13 100644
--- a/dist/viewer/TravelNotesViewer.min.js
+++ b/dist/viewer/TravelNotesViewer.min.js
@@ -6,7 +6,7 @@
* JavaScript code in this page.
*
* leaflet.travelnotes - version 2.2.0
- * Build 00788 - 2021-02-12T10:38:30+0100
+ * Build 00823 - 2021-02-14T13:47:18+0100
* Copyright 2017 2021 wwwouaiebe
* Contact: https://www.ouaie.be/
* License: GPL-3.0
@@ -41,7 +41,7 @@
@private
@------------------------------------------------------------------------------------------------------------------------------
- */Object.freeze({notSaved:"🔴",modified:"🟡",saved:"🟢"});const e=Object.freeze({fixed:2,invalid:-1,defaultValue:0,metersInKm:1e3}),t=Object.freeze({refusedByUser:-1,disabled:0,inactive:1,active:2}),o=(Object.freeze({invalidPane:"43a6a53e-008a-4910-80a6-7a87d301ea15",itineraryPane:"8fbf0da7-4e6f-4bc7-8e20-1388461ccde7",travelNotesPane:"dffe782b-07df-4b81-a318-f287c0cf5ec6",searchPane:"228f00d7-43a8-4c13-897d-70400cb6dd58"}),Object.freeze({fixed:2,defaultValue:0})),a=Object.freeze({defaultValue:0,fixed:6,maxLat:90,minLat:-90,maxLng:180,minLng:-180}),n=Object.freeze({notEdited:0,editedNoChange:1,editedChanged:2}),r=Object.freeze({margin:100,height:500,width:1e3,yDeltaText:30,xDeltaText:10,vScales:[1,2,5,10,20,50,100,200,500,1e3,2e3,5e3],hScales:[1,2,5,10,20,50,100,200,500,1e3,2e3,5e3,1e4,2e4,5e4,1e5]}),i=Object.freeze({width:40,height:40,svgViewboxDim:200}),s=Object.freeze({d0:0,d90:90,d180:180,d270:270,d360:360,d540:540,toRadians:Math.PI/180,fromRadians:180/Math.PI}),l="http://www.w3.org/2000/svg",c=window.location.protocol,d=new DOMParser;let u=new Map;function h(e){return e.replaceAll(//g,">").replaceAll(/"/g,""").replaceAll(/\u0027/g,"'").replaceAll(/\u0a00/g," ")}function g(e,t="href"){let o=d.parseFromString("
"+e+"
","text/html");if(!o||"#document"!==o.nodeName)return{url:"",errorsString:"Parsing error"};let a=o.querySelector("body").firstChild,n="";for(let e=0;e/g,"").replaceAll(/"/g,"").replaceAll(/\u0027/g,"").replaceAll(/</g,"").replaceAll(/>/g,"").replaceAll(/"/g,"").replaceAll(/'/g,"").replaceAll(/%3C/g,"").replaceAll(/%3c/g,"").replaceAll(/%3E/g,"").replaceAll(/%3e/g,"").replaceAll(/%22/g,"").replaceAll(/%27/g,""),n!==e)return{url:"",errorsString:"Invalid characters found in the url"};let r=["https:"];if("http:"!==c&&"href"!==t||r.push("http:"),"href"===t){r.push("mailto:"),r.push("sms:"),r.push("tel:");let e=n.match(/^#\w*/);if(e&&n===e[0])return{url:n,errorsString:""}}"src"===t&&r.push("data:");let i=null;try{i=new URL(n)}catch(e){return{url:"",errorsString:"Invalid url string"}}if(-1===r.indexOf(i.protocol))return{url:"",errorsString:"Invalid protocol "+i.protocol};if(-1!==["sms:","tel:"].indexOf(i.protocol)&&i.pathname.match(/^\+[0-9,*,#]*$/))return{url:n,errorsString:""};try{encodeURIComponent(i.href)}catch(e){return{url:"",errorsString:"Invalid character in url"}}return{url:n,errorsString:""}}u.set("a",["href","target"]),u.set("div",[]),u.set("del",[]),u.set("em",[]),u.set("figcaption",[]),u.set("figure",[]),u.set("h1",[]),u.set("h2",[]),u.set("h3",[]),u.set("h4",[]),u.set("h5",[]),u.set("h6",[]),u.set("hr",[]),u.set("img",["src","alt","width","height"]),u.set("ins",[]),u.set("li",[]),u.set("mark",[]),u.set("ol",[]),u.set("p",[]),u.set("s",[]),u.set("small",[]),u.set("strong",[]),u.set("span",[]),u.set("sub",[]),u.set("sup",[]),u.set("ul",[]),u.set("svg",["xmlns","viewBox","class"]),u.set("text",["x","y","text-anchor"]),u.set("polyline",["points","class","transform"]);const p=Object.freeze(new class{sanitizeToColor(e){let t=e.match(/^#[0-9,A-F,a-f]{6}$/);return t?t[0]:null}sanitizeToUrl(e,t){return g(e,t)}sanitizeToJsString(e){return function(e){let t=d.parseFromString("