From fab852a2dcd1d6bb23b1f48ff6f0e226f030ec17 Mon Sep 17 00:00:00 2001 From: wwwouaiebe Date: Sun, 14 Feb 2021 13:48:12 +0100 Subject: [PATCH] v2.2.0-RC1 --- buildNumber.json | 2 +- dist/TravelNotes.min.css | 2 +- dist/TravelNotes.min.js | 14 ++++---- dist/TravelNotesConfig.json | 3 +- dist/TravelNotesEN.json | 36 ++++++++++++++++--- dist/TravelNotesFR.json | 36 ++++++++++++++++--- .../GraphHopperRouteProvider.min.js | 2 +- .../MapboxRouteProvider.min.js | 2 +- .../MapzenValhallaRouteProvider.min.js | 2 +- .../OSRMRouteProvider.min.js | 2 +- .../OpenRouteServiceRouteProvider.min.js | 2 +- .../PolylineRouteProvider.min.js | 2 +- .../PublicTransportRouteProvider.min.js | 2 +- dist/TravelNotesRoadbook.min.css | 2 +- dist/TravelNotesRoadbook.min.js | 4 +-- dist/viewer/TravelNotesConfig.json | 3 +- dist/viewer/TravelNotesEN.json | 36 ++++++++++++++++--- dist/viewer/TravelNotesFR.json | 36 ++++++++++++++++--- dist/viewer/TravelNotesViewer.min.js | 6 ++-- 19 files changed, 154 insertions(+), 40 deletions(-) diff --git a/buildNumber.json b/buildNumber.json index 1567d1cf..825a99b4 100644 --- a/buildNumber.json +++ b/buildNumber.json @@ -1 +1 @@ -{ "buildNumber" : "00821"} \ No newline at end of file +{ "buildNumber" : "00823"} \ No newline at end of file diff --git a/dist/TravelNotes.min.css b/dist/TravelNotes.min.css index d4dfdad0..711aa464 100644 --- a/dist/TravelNotes.min.css +++ b/dist/TravelNotes.min.css @@ -1 +1 @@ -body{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}#noscript #TravelNote-Noscript-Text{color:maroon;font:30px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif;width:30em;position:absolute;top:30vh;left:calc(50vw - 15em);text-align:center}#noscript #TravelNotes-Noscript-Bike{position:absolute;top:0;left:0;width:100vw}#noscript #TravelNotes-Noscript-BikeIcon{background-image:url('data:image/svg+xml;utf8, ');background-size:100px 100px;background-repeat:no-repeat;width:100px;height:100px;animation:10s ease-in 0s infinite AnimationBike}@keyframes AnimationBike{from{margin-left:calc(0% - 100px)}to{margin-left:100%}}.leaflet-popup-tip-container{transform:scale(0);visibility:hidden}.leaflet-popup-content-wrapper{border-radius:0}#TravelNotes-UI{position:absolute;top:0;right:0;z-index:1200}#TravelNotes-Map{position:absolute;width:100vw;height:100vh;max-width:100vw;max-height:100vh;top:0;left:0;overflow:hidden}.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-Map-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-Map-NoteHtml-Address-City,.TravelNotes-Map-NoteHtml-Address>span:first-child,.TravelNotes-Map-NoteHtml-Distance>span:first-child,.TravelNotes-Map-NoteHtml-LatLng>span,.TravelNotes-Map-NoteHtml-NextDistance>span:first-child,.TravelNotes-Map-NoteHtml-Phone>span:first-child,.TravelNotes-Map-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-Map-AllNotes{background:0 0;height:auto}.TravelNotes-Map-Note-Background{background-color:#fff}.TravelNotes-Map-Note-Bullet{background-color:#000}.TravelNotes-ItineraryPaneUI-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-ItineraryPaneUI-NoteHtml-Address-City,.TravelNotes-ItineraryPaneUI-NoteHtml-Address>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-Distance>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-LatLng>span,.TravelNotes-ItineraryPaneUI-NoteHtml-NextDistance>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-Phone>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-TravelNotesPaneUI-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-TravelNotesPaneUI-NoteHtml-Address-City,.TravelNotes-TravelNotesPaneUI-NoteHtml-Address>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-Distance>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-LatLng>span,.TravelNotes-TravelNotesPaneUI-NoteHtml-NextDistance>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-Phone>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-routeViewDiv{margin:5mm;margin-left:auto;margin-right:auto}.TravelNotes-routeViewDiv.TravelNotes-PrintPageBreak{page-break-inside:avoid}#TravelNotes-PrintToolbar{position:fixed;top:0;right:0;margin:1em;padding:.5em;z-index:1000;border-style:solid;border-width:.1em;background-color:#fff}@media print{.TravelNotes-routeViewDiv{margin:0;margin-left:auto;margin-right:auto}#TravelNotes-PrintToolbar{width:0;height:0;margin:0;padding:0;top:0;left:0;visibility:hidden}}.TravelNotes-Map-Route-Header-Name{font-weight:700}.TravelNotes-Map-Route-Header-Ascent>span,.TravelNotes-Map-Route-Header-Descent>span,.TravelNotes-Map-Route-Header-Distance>span,.TravelNotes-Map-Route-Header-Duration>span{text-decoration:underline}.TravelNotes-ItineraryPaneUI-Route-Header-Name{font-weight:700}.TravelNotes-ItineraryPaneUI-Route-Header-Ascent>span,.TravelNotes-ItineraryPaneUI-Route-Header-Descent>span,.TravelNotes-ItineraryPaneUI-Route-Header-Distance>span,.TravelNotes-ItineraryPaneUI-Route-Header-Duration>span{text-decoration:underline}.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-Map-WayPointStyle{background:0 0;height:auto}.TravelNotes-Map-WayPoint{background-repeat:no-repeat;height:20px;width:20px;display:inline-block;vertical-align:top}.TravelNotes-Map-WayPointStart{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointVia{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointEnd{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointTmp{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointText{width:20px;text-align:center;font-size:1em;font-weight:700}.TravelNotes-Background{position:absolute;width:100vw;height:100vh;max-width:100vw;max-height:100vh;top:0;left:0;z-index:1200;overflow:hidden;background-color:rgba(0,0,0,.4)}.TravelNotes-Background:hover{cursor:move}.TravelNotes-WaitAnimation{margin:1em;height:1em;width:calc(100% - 2em);overflow:hidden;visibility:visible}.TravelNotes-WaitAnimationBullet{background-color:red;height:100%;width:1em;animation:2s linear 0s infinite alternate WaitAnimationBullet;visibility:visible}@keyframes WaitAnimationBullet{from{margin-left:0}to{margin-left:calc(100% - 1em)}}.TravelNotes-ContextMenu-DummyDiv{position:absolute;top:0;left:0;width:100vw;height:100vh;background-color:transparent;z-index:1100}.TravelNotes-ContextMenu-Container{position:absolute;z-index:1200;background-color:#fff;border-style:solid;border-width:.1em;font-family:sans-serif;font-size:1em;box-shadow:0 3px 14px rgba(0,0,0,.4)}.TravelNotes-ContextMenu-CloseButton{width:1.3em}.TravelNotes-ContextMenu-CloseButton:hover{background-color:#d3d3d3;cursor:default}.TravelNotes-ContextMenu-ItemContainer{margin-left:2em;margin-right:.5em;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-ContextMenu-ItemContainer:last-child{border-bottom-style:none}.TravelNotes-ContextMenu-Item{margin-top:.2em;margin-bottom:.2em;padding-left:1em;padding-right:.2em}.TravelNotes-ContextMenu-ItemSelected{background-color:#add8e6;cursor:default}.TravelNotes-ContextMenu-ItemDisabled{color:gray}.TravelNotes-ContextMenu-ItemDisabled.TravelNotes-ContextMenu-ItemSelected{background-color:#d3d3d3;cursor:auto}#TravelNotes-AboutDialog-AboutDiv{width:30em;color:gray}#TravelNotes-APIKeysDialog-DataDiv{margin-top:1em;width:39em}#TravelNotes-APIKeysDialog-ToolbarDiv{margin-bottom:.5em;display:flex;flex-direction:row}.TravelNotes-APIKeysDialog-AtRightButton{margin-left:auto}.TravelNotes-APIKeysDialog-ApiKeyRow{display:flex;flex-direction:row}.TravelNotes-APIKeysDialog-Input{margin:.2em}.TravelNotes-APIKeysDialog-ApiKeyName{width:10em}.TravelNotes-APIKeysDialog-ApiKeyValue{width:20em}.TravelNotes-BaseDialog-Container{z-index:1200;position:absolute;background-color:#fff;border-style:solid;border-width:.1em;cursor:default;max-height:90vh;box-shadow:0 3px 14px rgba(0,0,0,.6)}.TravelNotes-BaseDialog-TopBar{background-color:#d3d3d3;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-BaseDialog-TopBar:hover{background-color:#8b0000}.TravelNotes-BaseDialog-TopBar:active,.TravelNotes-BaseDialog-TopBar:hover{cursor:grab}.TravelNotes-BaseDialog-CancelButton{background-color:#fff;width:1.5em;text-align:center}.TravelNotes-BaseDialog-CancelButton:hover{cursor:default}.TravelNotes-BaseDialog-ContentDiv,.TravelNotes-BaseDialog-ErrorDiv,.TravelNotes-BaseDialog-FooterDiv,.TravelNotes-BaseDialog-HeaderDiv,.TravelNotes-BaseDialog-WaitDiv{padding:.5em}.TravelNotes-BaseDialog-HeaderDiv{text-align:center;font-weight:700}.TravelNotes-BaseDialog-ContentDiv{border-top-style:solid;border-bottom-style:solid;border-color:#d3d3d3;border-width:.1em;overflow:auto}.TravelNotes-BaseDialog-ErrorDiv{background-color:red;color:#fff}.TravelNotes-BaseDialog-OpenFileInput{opacity:0;position:relative;width:0;height:0}.TravelNotes-BaseDialog-Button{display:inline-block;width:2em;text-align:center;border-style:solid;border-width:.1em;border-color:#fff}.TravelNotes-BaseDialog-Button:hover{border-color:#000}#TravelNotes-ColorDialog-ColorDiv{width:30em;text-align:center}#TravelNotes-ColorDialog-RedButtonsRowDiv{margin-top:.5em;margin-bottom:.5em}.TravelNotes-ColorDialog-CellColorDiv{display:inline-block;height:1em;width:1em;border-style:solid;border-width:.1em;margin-top:0;margin-left:.1em;margin-right:.1em;margin-bottom:0}.TravelNotes-ColorDialog-NumberInput{width:3em;margin:.5em}#TravelNotes-ColorDialog-ColorSampleDiv{width:5em;height:3em;display:inline-block;border-style:solid;border-width:.1em}.TravelNotes-BaseDialog-Container{max-width:44em}#TravelNotes-NoteDialog-MainDataDiv{width:43em}#TravelNotes-NoteDialog-ToolbarDiv{max-width:39em}#TravelNotes-NoteDialog-IconSelect{margin-right:.2em}.TravelNotes-NoteDialog-EditorButton{display:inline-block;text-align:center;border-style:solid;border-width:.1em;border-color:#fff;margin:.1em;padding:.1em}.TravelNotes-NoteDialog-EditorButton span{padding-right:.2em;padding-left:.2em}.TravelNotes-NoteDialog-EditorButton:hover{border-color:#000}.TravelNotes-NoteDialog-DataDiv{margin-top:.3em;margin-bottom:.3em}.TravelNotes-NoteDialog-TextArea{width:39em}.TravelNotes-NoteDialog-InputText{width:38em}.TravelNotes-NoteDialog-NumberInput{margin-right:.5em;width:3em}.TravelNotes-NoteDialog-PreviewDiv>div{margin-top:1em;padding-top:1em;border-top-style:solid;border-top-width:.1em;display:flex;flex-direction:row;max-width:43em;background-color:#d3d3d3}.TravelNotes-NoteDialog-Travel-Notes-IconCell{min-height:20px;background-repeat:no-repeat;flex-shrink:0;margin-left:auto;background-color:#fff}.TravelNotes-NoteDialog-Travel-Notes-Cell{padding:.3em;flex-shrink:1;border-style:solid;border-width:.1em;margin-left:1em;margin-right:auto;max-width:calc(43em - 40px);max-height:11em;overflow:auto;background-color:#fff}.TravelNotes-PrintRouteMapDialog-NumberInput{width:4em;margin-left:.3em;margin-right:.3em}.TravelNotes-PrintRouteMapDialog-DataDiv{margin:.5em}#TravelNotes-RoutePropertiesDialog-MainDataDiv{text-align:center;width:30em}#TravelNotes-RoutePropertiesDialog-NameInput{width:100%}.TravelNotes-RoutePropertiesDialog-DataDiv{text-align:left;margin:.5em}.TravelNotes-RoutePropertiesDialog-DataDiv>span{display:inline-block;width:10em;text-align:right;padding-right:1em}#TravelNotes-RoutePropertiesDialog-ChainDiv,#TravelNotes-RoutePropertiesDialog-NameInputDiv{border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3;margin-bottom:1em;padding-bottom:1em}#TravelNotes-RoutePropertiesDialog-WidthInput{width:3em}#TravelNotes-RoutePropertiesDialog-ColorHeaderDiv{margin:.5em}.TravelNotes-TwoButtonsDialog-FooterDiv{display:flex;flex-direction:row}#TravelNotes-TwoButtonsDialog-MessageDiv{width:30em}.TravelNotes-TwoButtonsDialog-Button{min-width:2em;width:auto}#TravelNotes-WayPointPropertiesDialog-DataDiv{width:30em}#TravelNotes-WayPointPropertiesDialog-DataDiv>div{padding-top:.3em;padding-bottom:.1em}#TravelNotes-WayPointPropertiesDialog-DataDiv>div>div{margin-right:.5em}.TravelNotes-WayPointPropertiesDialog-Input{width:calc(100% - .5em)}.TravelNotes-FloatWindow-Container{position:absolute;top:10em;left:10em;width:40em;z-index:1000;background-color:#fff;border-style:solid;border-width:.1em}.TravelNotes-FloatWindow-TopBar{background-color:#d3d3d3;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-FloatWindow-TopBar:hover{background-color:#8b0000}.TravelNotes-FloatWindow-TopBar:active,.TravelNotes-FloatWindow-TopBar:hover{cursor:grab}.TravelNotes-FloatWindow-CancelButton{background-color:#fff;width:1em}.TravelNotes-FloatWindow-CancelButton:hover{color:red}#TravelNotes-AttributionsUI{position:absolute;left:0;bottom:0;z-index:1800;background-color:#fff;padding-left:1em;padding-right:1em;color:#0078a8;font-size:80%}#TravelNotes-AttributionsUI a{color:#0078a8}#TravelNotes-ErrorsUI{position:absolute;bottom:10em;left:calc(50% - 25em);width:50em;color:transparent;background-color:transparent;z-index:1300}#TravelNotes-ErrorsUI-CancelButton{background-color:#fff}#TravelNotes-ErrorsUI-HelpInputDiv,#TravelNotes-ErrorsUI-Message{margin:.5em}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Hidden{visibility:hidden;width:0;height:0}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Error{color:#fff;background-color:red}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Warning{color:#000;background-color:orange}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Info{color:#000;background-color:#fff}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Help{color:#000;background-color:#fff}.TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row,.TravelNotes-ItineraryPaneUI-Route-Notes-Row{display:flex;flex-direction:row;border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3}.TravelNotes-ItineraryPaneUI-Route-ManeuversAndNotes-Cell{padding:.3em;flex-shrink:1}.TravelNotes-ItineraryPaneUI-Route-ManeuversAndNotes-IconCell{width:40px;height:40px;min-height:20px;background-repeat:no-repeat;flex-shrink:0}.TravelNotes-ItineraryPaneUI-Route-Maneuver-Distance>span{text-decoration:underline}#TravelNotes-LayersToolbarUI{position:absolute;width:3em;top:0;left:0;z-index:1300;display:flex;flex-direction:column;height:auto;max-height:100vh}#TravelNotes-LayersToolbarUI-Header{transform-origin:bottom right;transform:rotateZ(-90deg) translateY(-6em) translateX(4em);text-align:center;width:8em;height:2em;font-size:1em;font-weight:700;color:#fff;background-color:#000;padding:.5em;margin:0;flex-shrink:0}#TravelNotes-LayersToolbarUI-Buttons{background-color:#fff;color:#000;flex-shrink:2;flex-grow:2;overflow:hidden}.TravelNotes-LayersToolbarUI-Button{padding:.5em;text-align:center;margin:0;font-weight:700;height:1.1em}.TravelNotes-LayersToolbarUI-LinkButton-Enter{color:#fff;background-color:#000}.TravelNotes-LayersToolbarUI-LinkButton-Leave{color:#000;background-color:#fff}.TravelNotes-LayersToolbarUI-Button>a{text-decoration:none}.TravelNotes-LayersToolbarUI-Button>a:hover{text-decoration:none}.TravelNotes-LayersToolbarUI-Button:hover{cursor:pointer}#TravelNotes-MouseUI{position:absolute;top:0;left:calc(50vw - 5em);z-index:1200;text-align:center;width:10em}@media screen and (min-width:1px) and (max-width:640px){#TravelNotes-MouseUI{left:3em;width:0;text-align:left;visibility:hidden}}@media screen and (min-width:641px) and (max-width:1024px){#TravelNotes-MouseUI{left:3em;width:calc(100% - 33em);text-align:left}}#TravelNotes-MouseUI>span{padding:.3em;background-color:#fff;opacity:.5}#TravelNotes-OsmSearchPaneUI-SearchButton{margin-right:.3em}#TravelNotes-OsmSearchPaneUI-SearchTree{max-height:15em;overflow:auto}.TravelNotes-OsmSearchPaneUI-SearchItemMargin1{margin-left:.5em}.TravelNotes-OsmSearchPaneUI-SearchItemMargin2{margin-left:.5em}.TravelNotes-OsmSearchPaneUI-SearchItemMargin3{margin-left:2.5em}.TravelNotes-OsmSearchPaneUI-SearchItemMargin4{margin-left:4.5em}.TravelNotes-OsmSearchPaneUI-TreeArrow{color:gray}.TravelNotes-OsmSearchPaneUI-TreeArrow:hover{color:red;border-color:#fff}.TravelNotes-OsmSearchPaneUI-SearchResult-Row{display:flex;flex-direction:row;padding:.3em;border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3}.TravelNotes-OsmSearchPaneUI-SearchResult-IconCell{width:40px;height:40px;min-height:20px;background-repeat:no-repeat;flex-shrink:0}.TravelNotes-OsmSearchPaneUI-SearchResult-Cell{flex-shrink:1}#TravelNotes-PanesManagerUI-PaneControlsDiv{margin-left:.5em;border-bottom-style:solid;border-bottom-width:.1em}#TravelNotes-PanesManagerUI-PaneDataDiv{margin-left:.5em;margin-bottom:auto;max-height:none;overflow:auto;flex-grow:2}.TravelNotes-PanesManagerUI-PaneButton{border-style:solid;border-top-width:.3em;border-right-width:.1em;border-bottom-width:.1em;border-left-width:.3em;border-color:gray;background-color:#d3d3d3;margin-left:.1em}.TravelNotes-PanesManagerUI-ActivePaneButton{background-color:#fff;border-bottom-color:#fff}.TravelNotes-ProvidersToolbarUI-ImgButtonsDiv{padding-top:.5em;border-style:solid;border-width:.1em;border-color:#d3d3d3}.TravelNotes-ProvidersToolbarUI-ImgButton{padding:.1em;margin:.1em;border-style:solid;border-width:.1em;border-color:#fff;width:24px;height:24px}.TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton,.TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton{border-color:#000}.TravelNotes-ProvidersToolbarUI-InactiveImgButton{visibility:hidden;width:0;padding:0;margin:0;border-width:0}.TravelNotes-TravelNotesPaneUI-Travel-Notes-Row{display:flex;flex-direction:row;border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3}.TravelNotes-TravelNotesPaneUI-Travel-Notes-Cell{padding:.3em;flex-shrink:1}.TravelNotes-TravelNotesPaneUI-Travel-Notes-IconCell{width:40px;height:40px;min-height:20px;background-repeat:no-repeat;flex-shrink:0}.TravelNotes-TravelNotesToolbarUI-GeoLocationButton-Striked{text-decoration:line-through;text-decoration-color:red;text-decoration-thickness:2px}#TravelNotes-TravelUI-InputTravelName{width:100%}.TravelNotes-TravelUI-RoutesListDiv{flex-shrink:0;max-height:20em;overflow:auto}.TravelNotes-TravelUI-RoutesList-Item{margin-left:2em;margin-right:.5em;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-TravelUI-RoutesList-HiddenItem{color:gray}.TravelNotes-TravelUI-RouteList-ExpandButton{padding-right:.5em;color:#d3d3d3}.TravelNotes-TravelUI-RouteList-ExpandButton:hover{cursor:default;color:red}.TravelNotes-TravelUI-OpenFileInput{opacity:0;position:relative;width:0}#TravelNotes-UI-MainDiv{height:100vh;max-height:100vh;font-family:sans-serif;font-size:1em;margin:0;display:flex;flex-direction:column;max-width:30em;width:30em;background-color:#fff}#TravelNotes-UI-MainDiv.TravelNotes-UI-Minimized{height:3em;background-color:transparent;width:8em;margin:0;padding:0}#TravelNotes-UI-MainDiv-Title{position:absolute;top:0;right:0;text-align:center;font-size:1em;font-weight:700;color:#fff;background-color:#000;transform-origin:bottom right;transform:rotateZ(-90deg) translateX(4em);padding:.5em;padding-top:1em;margin:0;height:2em;width:8em}.TravelNotes-UI-MoveCursor{cursor:grab}.TravelNotes-UI-MoveCursor:active{cursor:move}.TravelNotes-UI-FlexRowDiv{display:flex;flex-direction:row;padding:.5em}.TravelNotes-UI-FlexRow-RightButton{margin-left:auto}.TravelNotes-UI-Button{font-weight:700;display:inline-block;width:2em;text-align:center;cursor:default;border-style:solid;border-width:.1em;border-color:#fff}.TravelNotes-UI-Button:hover{border-color:#000}.TravelNotes-UI-Button>a{text-decoration:none;color:#000}.TravelNotes-UI-Button>a:visited{color:#000}#TravelNotes-WaitUI{position:absolute;bottom:10em;left:calc(50% - 25em);width:50em;color:#000;background-color:#fff;z-index:1350;border-style:solid;border-width:.1em}#TravelNotes-WaitUI-MessageDiv{text-align:center;padding:1em}.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 +body{font:12px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif}#noscript #TravelNote-Noscript-Text{color:maroon;font:30px/1.5 "Helvetica Neue",Arial,Helvetica,sans-serif;width:30em;position:absolute;top:30vh;left:calc(50vw - 15em);text-align:center}#noscript #TravelNotes-Noscript-Bike{position:absolute;top:0;left:0;width:100vw}#noscript #TravelNotes-Noscript-BikeIcon{background-image:url('data:image/svg+xml;utf8, ');background-size:100px 100px;background-repeat:no-repeat;width:100px;height:100px;animation:10s ease-in 0s infinite AnimationBike}@keyframes AnimationBike{from{margin-left:calc(0% - 100px)}to{margin-left:100%}}.leaflet-popup-tip-container{transform:scale(0);visibility:hidden}.leaflet-popup-content-wrapper{border-radius:0}#TravelNotes-UI{position:absolute;top:0;right:0;z-index:1200}#TravelNotes-Map{position:absolute;width:100vw;height:100vh;max-width:100vw;max-height:100vh;top:0;left:0;overflow:hidden}.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-Map-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-Map-NoteHtml-Address-City,.TravelNotes-Map-NoteHtml-Address>span:first-child,.TravelNotes-Map-NoteHtml-Distance>span:first-child,.TravelNotes-Map-NoteHtml-LatLng>span,.TravelNotes-Map-NoteHtml-NextDistance>span:first-child,.TravelNotes-Map-NoteHtml-Phone>span:first-child,.TravelNotes-Map-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-Map-AllNotes{background:0 0;height:auto}.TravelNotes-Map-Note-Background{background-color:#fff}.TravelNotes-Map-Note-Bullet{background-color:#000}.TravelNotes-ItineraryPaneUI-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-ItineraryPaneUI-NoteHtml-Address-City,.TravelNotes-ItineraryPaneUI-NoteHtml-Address>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-Distance>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-LatLng>span,.TravelNotes-ItineraryPaneUI-NoteHtml-NextDistance>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-Phone>span:first-child,.TravelNotes-ItineraryPaneUI-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-TravelNotesPaneUI-NoteHtml-TooltipContent{font-weight:700}.TravelNotes-TravelNotesPaneUI-NoteHtml-Address-City,.TravelNotes-TravelNotesPaneUI-NoteHtml-Address>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-Distance>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-LatLng>span,.TravelNotes-TravelNotesPaneUI-NoteHtml-NextDistance>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-Phone>span:first-child,.TravelNotes-TravelNotesPaneUI-NoteHtml-Url>span:first-child{text-decoration:underline}.TravelNotes-routeViewDiv{margin:5mm;margin-left:auto;margin-right:auto}.TravelNotes-routeViewDiv.TravelNotes-PrintPageBreak{page-break-inside:avoid}#TravelNotes-PrintToolbar{position:fixed;top:0;right:0;margin:1em;padding:.5em;z-index:1000;border-style:solid;border-width:.1em;background-color:#fff}@media print{.TravelNotes-routeViewDiv{margin:0;margin-left:auto;margin-right:auto}#TravelNotes-PrintToolbar{width:0;height:0;margin:0;padding:0;top:0;left:0;visibility:hidden}}.TravelNotes-Map-Route-Header-Name{font-weight:700}.TravelNotes-Map-Route-Header-Ascent>span,.TravelNotes-Map-Route-Header-Descent>span,.TravelNotes-Map-Route-Header-Distance>span,.TravelNotes-Map-Route-Header-Duration>span{text-decoration:underline}.TravelNotes-ItineraryPaneUI-Route-Header-Name{font-weight:700}.TravelNotes-ItineraryPaneUI-Route-Header-Ascent>span,.TravelNotes-ItineraryPaneUI-Route-Header-Descent>span,.TravelNotes-ItineraryPaneUI-Route-Header-Distance>span,.TravelNotes-ItineraryPaneUI-Route-Header-Duration>span{text-decoration:underline}.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-Map-WayPointStyle{background:0 0;height:auto}.TravelNotes-Map-WayPoint{background-repeat:no-repeat;height:20px;width:20px;display:inline-block;vertical-align:top}.TravelNotes-Map-WayPointStart{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointVia{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointEnd{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointTmp{background-image:url('data:image/svg+xml;utf8, ')}.TravelNotes-Map-WayPointText{width:20px;text-align:center;font-size:1em;font-weight:700}.TravelNotes-Background{position:absolute;width:100vw;height:100vh;max-width:100vw;max-height:100vh;top:0;left:0;z-index:1200;overflow:hidden;background-color:rgba(0,0,0,.4)}.TravelNotes-Background:hover{cursor:move}.TravelNotes-WaitAnimation{margin:1em;height:1em;width:calc(100% - 2em);overflow:hidden;visibility:visible}.TravelNotes-WaitAnimationBullet{background-color:red;height:100%;width:1em;animation:2s linear 0s infinite alternate WaitAnimationBullet;visibility:visible}@keyframes WaitAnimationBullet{from{margin-left:0}to{margin-left:calc(100% - 1em)}}.TravelNotes-ContextMenu-DummyDiv{position:absolute;top:0;left:0;width:100vw;height:100vh;background-color:transparent;z-index:1100}.TravelNotes-ContextMenu-Container{position:absolute;z-index:1200;background-color:#fff;border-style:solid;border-width:.1em;font-family:sans-serif;font-size:1em;box-shadow:0 3px 14px rgba(0,0,0,.4)}.TravelNotes-ContextMenu-CloseButton{width:1.3em}.TravelNotes-ContextMenu-CloseButton:hover{background-color:#d3d3d3;cursor:default}.TravelNotes-ContextMenu-ItemContainer{margin-left:2em;margin-right:.5em;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-ContextMenu-ItemContainer:last-child{border-bottom-style:none}.TravelNotes-ContextMenu-Item{margin-top:.2em;margin-bottom:.2em;padding-left:1em;padding-right:.2em}.TravelNotes-ContextMenu-ItemSelected{background-color:#add8e6;cursor:default}.TravelNotes-ContextMenu-ItemDisabled{color:gray}.TravelNotes-ContextMenu-ItemDisabled.TravelNotes-ContextMenu-ItemSelected{background-color:#d3d3d3;cursor:auto}#TravelNotes-AboutDialog-AboutDiv{width:30em;color:gray}#TravelNotes-APIKeysDialog-DataDiv{margin-top:1em;width:39em}#TravelNotes-APIKeysDialog-ToolbarDiv{margin-bottom:.5em;display:flex;flex-direction:row}.TravelNotes-APIKeysDialog-AtRightButton{margin-left:auto}.TravelNotes-APIKeysDialog-ApiKeyRow{display:flex;flex-direction:row}.TravelNotes-APIKeysDialog-Input{margin:.2em}.TravelNotes-APIKeysDialog-ApiKeyName{width:10em}.TravelNotes-APIKeysDialog-ApiKeyValue{width:20em}.TravelNotes-BaseDialog-Container{z-index:1200;position:absolute;background-color:#fff;border-style:solid;border-width:.1em;cursor:default;max-height:90vh;box-shadow:0 3px 14px rgba(0,0,0,.6)}.TravelNotes-BaseDialog-TopBar{background-color:#d3d3d3;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-BaseDialog-TopBar:hover{background-color:#8b0000}.TravelNotes-BaseDialog-TopBar:active,.TravelNotes-BaseDialog-TopBar:hover{cursor:grab}.TravelNotes-BaseDialog-CancelButton{background-color:#fff;width:1.5em;text-align:center}.TravelNotes-BaseDialog-CancelButton:hover{cursor:default}.TravelNotes-BaseDialog-ContentDiv,.TravelNotes-BaseDialog-ErrorDiv,.TravelNotes-BaseDialog-FooterDiv,.TravelNotes-BaseDialog-HeaderDiv,.TravelNotes-BaseDialog-WaitDiv{padding:.5em}.TravelNotes-BaseDialog-HeaderDiv{text-align:center;font-weight:700}.TravelNotes-BaseDialog-ContentDiv{border-top-style:solid;border-bottom-style:solid;border-color:#d3d3d3;border-width:.1em;overflow:auto}.TravelNotes-BaseDialog-ErrorDiv{background-color:red;color:#fff}.TravelNotes-BaseDialog-OpenFileInput{opacity:0;position:relative;width:0;height:0}.TravelNotes-BaseDialog-Button{display:inline-block;width:2em;text-align:center;border-style:solid;border-width:.1em;border-color:#fff}.TravelNotes-BaseDialog-Button:hover{border-color:#000}#TravelNotes-ColorDialog-ColorDiv{width:30em;text-align:center}#TravelNotes-ColorDialog-RedButtonsRowDiv{margin-top:.5em;margin-bottom:.5em}.TravelNotes-ColorDialog-CellColorDiv{display:inline-block;height:1em;width:1em;border-style:solid;border-width:.1em;margin-top:0;margin-left:.1em;margin-right:.1em;margin-bottom:0}.TravelNotes-ColorDialog-NumberInput{width:3em;margin:.5em}#TravelNotes-ColorDialog-ColorSampleDiv{width:5em;height:3em;display:inline-block;border-style:solid;border-width:.1em}.TravelNotes-BaseDialog-Container{max-width:44em}#TravelNotes-NoteDialog-MainDataDiv{width:43em}#TravelNotes-NoteDialog-ToolbarDiv{max-width:39em}#TravelNotes-NoteDialog-IconSelect{margin-right:.2em}.TravelNotes-NoteDialog-EditorButton{display:inline-block;text-align:center;border-style:solid;border-width:.1em;border-color:#fff;margin:.1em;padding:.1em}.TravelNotes-NoteDialog-EditorButton span{padding-right:.2em;padding-left:.2em}.TravelNotes-NoteDialog-EditorButton:hover{border-color:#000}.TravelNotes-NoteDialog-DataDiv{margin-top:.3em;margin-bottom:.3em}.TravelNotes-NoteDialog-TextArea{width:39em}.TravelNotes-NoteDialog-InputText{width:38em}.TravelNotes-NoteDialog-NumberInput{margin-right:.5em;width:3em}.TravelNotes-NoteDialog-PreviewDiv>div{margin-top:1em;padding-top:1em;border-top-style:solid;border-top-width:.1em;display:flex;flex-direction:row;max-width:43em;background-color:#d3d3d3}.TravelNotes-NoteDialog-Travel-Notes-IconCell{min-height:20px;background-repeat:no-repeat;flex-shrink:0;margin-left:auto;background-color:#fff}.TravelNotes-NoteDialog-Travel-Notes-Cell{padding:.3em;flex-shrink:1;border-style:solid;border-width:.1em;margin-left:1em;margin-right:auto;max-width:calc(43em - 40px);max-height:11em;overflow:auto;background-color:#fff}.TravelNotes-PrintRouteMapDialog-NumberInput{width:4em;margin-left:.3em;margin-right:.3em}.TravelNotes-PrintRouteMapDialog-DataDiv{margin:.5em}#TravelNotes-RoutePropertiesDialog-MainDataDiv{text-align:center;width:30em}#TravelNotes-RoutePropertiesDialog-NameInput{width:100%}.TravelNotes-RoutePropertiesDialog-DataDiv{text-align:left;margin:.5em}.TravelNotes-RoutePropertiesDialog-DataDiv>span{display:inline-block;width:10em;text-align:right;padding-right:1em}#TravelNotes-RoutePropertiesDialog-ChainDiv,#TravelNotes-RoutePropertiesDialog-NameInputDiv{border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3;margin-bottom:1em;padding-bottom:1em}#TravelNotes-RoutePropertiesDialog-WidthInput{width:3em}#TravelNotes-RoutePropertiesDialog-ColorHeaderDiv{margin:.5em}.TravelNotes-TwoButtonsDialog-FooterDiv{display:flex;flex-direction:row}#TravelNotes-TwoButtonsDialog-MessageDiv{width:30em}.TravelNotes-TwoButtonsDialog-Button{min-width:2em;width:auto}#TravelNotes-WayPointPropertiesDialog-DataDiv{width:30em}#TravelNotes-WayPointPropertiesDialog-DataDiv>div{padding-top:.3em;padding-bottom:.1em}#TravelNotes-WayPointPropertiesDialog-DataDiv>div>div{margin-right:.5em}.TravelNotes-WayPointPropertiesDialog-Input{width:calc(100% - .5em)}.TravelNotes-FloatWindow-Container{position:absolute;top:10em;left:10em;width:40em;z-index:1000;background-color:#fff;border-style:solid;border-width:.1em}.TravelNotes-FloatWindow-TopBar{background-color:#d3d3d3;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-FloatWindow-TopBar:hover{background-color:#8b0000}.TravelNotes-FloatWindow-TopBar:active,.TravelNotes-FloatWindow-TopBar:hover{cursor:grab}.TravelNotes-FloatWindow-CancelButton{background-color:#fff;width:1em}.TravelNotes-FloatWindow-CancelButton:hover{color:red}#TravelNotes-AttributionsUI{position:absolute;left:0;bottom:0;z-index:1800;background-color:#fff;padding-left:1em;padding-right:1em;color:#0078a8;font-size:80%}#TravelNotes-AttributionsUI a{color:#0078a8}#TravelNotes-ErrorsUI{position:absolute;bottom:10em;left:calc(50% - 25em);width:50em;color:transparent;background-color:transparent;z-index:1300}#TravelNotes-ErrorsUI-CancelButton{background-color:#fff}#TravelNotes-ErrorsUI-HelpInputDiv,#TravelNotes-ErrorsUI-Message{margin:.5em}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Hidden{visibility:hidden;width:0;height:0}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Error{color:#fff;background-color:red}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Warning{color:#000;background-color:orange}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Info{color:#000;background-color:#fff}#TravelNotes-ErrorsUI.TravelNotes-ErrorsUI-Help{color:#000;background-color:#fff}.TravelNotes-ItineraryPaneUI-Route-Maneuvers-Row,.TravelNotes-ItineraryPaneUI-Route-Notes-Row{display:flex;flex-direction:row;border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3}.TravelNotes-ItineraryPaneUI-Route-ManeuversAndNotes-Cell{padding:.3em;flex-shrink:1}.TravelNotes-ItineraryPaneUI-Route-ManeuversAndNotes-IconCell{width:40px;height:40px;min-height:20px;background-repeat:no-repeat;flex-shrink:0}.TravelNotes-ItineraryPaneUI-Route-Maneuver-Distance>span{text-decoration:underline}#TravelNotes-LayersToolbarUI{position:absolute;width:3em;top:0;left:0;z-index:1300;display:flex;flex-direction:column;height:auto;max-height:100vh}#TravelNotes-LayersToolbarUI-Header{transform-origin:bottom right;transform:rotateZ(-90deg) translateY(-6em) translateX(4em);text-align:center;width:8em;height:2em;font-size:1em;font-weight:700;color:#fff;background-color:#000;padding:.5em;margin:0;flex-shrink:0}#TravelNotes-LayersToolbarUI-Buttons{background-color:#fff;color:#000;flex-shrink:2;flex-grow:2;overflow:hidden}.TravelNotes-LayersToolbarUI-Button{padding:.5em;text-align:center;margin:0;font-weight:700;height:1.1em}.TravelNotes-LayersToolbarUI-LinkButton-Enter{color:#fff;background-color:#000}.TravelNotes-LayersToolbarUI-LinkButton-Leave{color:#000;background-color:#fff}.TravelNotes-LayersToolbarUI-Button>a{text-decoration:none}.TravelNotes-LayersToolbarUI-Button>a:hover{text-decoration:none}.TravelNotes-LayersToolbarUI-Button:hover{cursor:pointer}#TravelNotes-MouseUI{position:absolute;top:0;left:calc(50vw - 5em);z-index:1200;text-align:center;width:10em}@media screen and (min-width:1px) and (max-width:640px){#TravelNotes-MouseUI{left:3em;width:0;text-align:left;visibility:hidden}}@media screen and (min-width:641px) and (max-width:1024px){#TravelNotes-MouseUI{left:3em;width:calc(100% - 33em);text-align:left}}#TravelNotes-MouseUI>span{padding:.3em;background-color:#fff;opacity:.5}#TravelNotes-OsmSearchPaneUI-SearchButton{margin-right:.3em}#TravelNotes-OsmSearchPaneUI-SearchTree{max-height:15em;overflow:auto}.TravelNotes-OsmSearchPaneUI-SearchItemMargin1{margin-left:.5em}.TravelNotes-OsmSearchPaneUI-SearchItemMargin2{margin-left:.5em}.TravelNotes-OsmSearchPaneUI-SearchItemMargin3{margin-left:2.5em}.TravelNotes-OsmSearchPaneUI-SearchItemMargin4{margin-left:4.5em}.TravelNotes-OsmSearchPaneUI-TreeArrow{color:gray}.TravelNotes-OsmSearchPaneUI-TreeArrow:hover{color:red;border-color:#fff}.TravelNotes-OsmSearchPaneUI-SearchResult-Row{display:flex;flex-direction:row;padding:.3em;border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3}.TravelNotes-OsmSearchPaneUI-SearchResult-IconCell{width:40px;height:40px;min-height:20px;background-repeat:no-repeat;flex-shrink:0}.TravelNotes-OsmSearchPaneUI-SearchResult-Cell{flex-shrink:1}#TravelNotes-PanesManagerUI-PaneControlsDiv{margin-left:.5em;border-bottom-style:solid;border-bottom-width:.1em}#TravelNotes-PanesManagerUI-PaneDataDiv{margin-left:.5em;margin-bottom:auto;max-height:none;overflow:auto;flex-grow:2}.TravelNotes-PanesManagerUI-PaneButton{border-style:solid;border-top-width:.3em;border-right-width:.1em;border-bottom-width:.1em;border-left-width:.3em;border-color:gray;background-color:#d3d3d3;margin-left:.1em}.TravelNotes-PanesManagerUI-ActivePaneButton{background-color:#fff;border-bottom-color:#fff}.TravelNotes-ProvidersToolbarUI-ImgButtonsDiv{padding-top:.5em;border-style:solid;border-width:.1em;border-color:#d3d3d3}.TravelNotes-ProvidersToolbarUI-ImgButton{padding:.1em;margin:.1em;border-style:solid;border-width:.1em;border-color:#fff;width:24px;height:24px}.TravelNotes-ProvidersToolbarUI-ActiveProviderImgButton,.TravelNotes-ProvidersToolbarUI-ActiveTransitModeImgButton{border-color:#000}.TravelNotes-ProvidersToolbarUI-InactiveImgButton{visibility:hidden;width:0;padding:0;margin:0;border-width:0}.TravelNotes-TravelNotesPaneUI-Travel-Notes-Row{display:flex;flex-direction:row;border-bottom-style:solid;border-bottom-width:.1em;border-bottom-color:#d3d3d3}.TravelNotes-TravelNotesPaneUI-Travel-Notes-Cell{padding:.3em;flex-shrink:1}.TravelNotes-TravelNotesPaneUI-Travel-Notes-IconCell{width:40px;height:40px;min-height:20px;background-repeat:no-repeat;flex-shrink:0}.TravelNotes-TravelNotesToolbarUI-GeoLocationButton-Striked{text-decoration:line-through;text-decoration-color:red;text-decoration-thickness:2px}#TravelNotes-TravelUI-InputTravelName{width:100%}.TravelNotes-TravelUI-SaveAsButton{background-image:url('data:image/svg+xml;utf8, ');background-position:center}.TravelNotes-TravelUI-RoutesListDiv{flex-shrink:0;max-height:20em;overflow:auto}.TravelNotes-TravelUI-RoutesList-Item{margin-left:2em;margin-right:.5em;border-bottom-style:solid;border-bottom-width:.1em}.TravelNotes-TravelUI-RoutesList-HiddenItem{color:gray}.TravelNotes-TravelUI-RouteList-ExpandButton{padding-right:.5em;color:#d3d3d3}.TravelNotes-TravelUI-RouteList-ExpandButton:hover{cursor:default;color:red}.TravelNotes-TravelUI-OpenFileInput{opacity:0;position:relative;width:0}#TravelNotes-UI-MainDiv{height:100vh;max-height:100vh;font-family:sans-serif;font-size:1em;margin:0;display:flex;flex-direction:column;max-width:30em;width:30em;background-color:#fff}#TravelNotes-UI-MainDiv.TravelNotes-UI-Minimized{height:3em;background-color:transparent;width:8em;margin:0;padding:0}#TravelNotes-UI-MainDiv-Title{position:absolute;top:0;right:0;text-align:center;font-size:1em;font-weight:700;color:#fff;background-color:#000;transform-origin:bottom right;transform:rotateZ(-90deg) translateX(4em);padding:.5em;padding-top:1em;margin:0;height:2em;width:8em}.TravelNotes-UI-MoveCursor{cursor:grab}.TravelNotes-UI-MoveCursor:active{cursor:move}.TravelNotes-UI-FlexRowDiv{display:flex;flex-direction:row;padding:.5em}.TravelNotes-UI-FlexRow-RightButton{margin-left:auto}.TravelNotes-UI-Button{font-weight:700;display:inline-block;width:2em;text-align:center;cursor:default;border-style:solid;border-width:.1em;border-color:#fff}.TravelNotes-UI-Button:hover{border-color:#000}.TravelNotes-UI-Button>a{text-decoration:none;color:#000}.TravelNotes-UI-Button>a:visited{color:#000}#TravelNotes-WaitUI{position:absolute;bottom:10em;left:calc(50% - 25em);width:50em;color:#000;background-color:#fff;z-index:1350;border-style:solid;border-width:.1em}#TravelNotes-WaitUI-MessageDiv{text-align:center;padding:1em}.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/TravelNotes.min.js b/dist/TravelNotes.min.js index 41239837..a56129e6 100644 --- a/dist/TravelNotes.min.js +++ b/dist/TravelNotes.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 @@ -41,7 +41,7 @@ @private @------------------------------------------------------------------------------------------------------------------------------ - */const e=Object.freeze({notSaved:"🔴",modified:"🟡",saved:"🟢"}),t=Object.freeze({fixed:2,invalid:-1,defaultValue:0,metersInKm:1e3}),o=Object.freeze({refusedByUser:-1,disabled:0,inactive:1,active:2}),a=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"}),n=Object.freeze({fixed:2,defaultValue:0}),r=Object.freeze({defaultValue:0,fixed:6,maxLat:90,minLat:-90,maxLng:180,minLng:-180}),i=Object.freeze({notEdited:0,editedNoChange:1,editedChanged:2}),l=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]}),s=Object.freeze({width:40,height:40,svgViewboxDim:200}),d=Object.freeze({d0:0,d90:90,d180:180,d270:270,d360:360,d540:540,toRadians:Math.PI/180,fromRadians:180/Math.PI}),c=[.3,10,1],u="http://www.w3.org/2000/svg",g=window.location.protocol,v=new DOMParser;let h=new Map;function m(e){return e.replaceAll(//g,">").replaceAll(/"/g,""").replaceAll(/\u0027/g,"'").replaceAll(/\u0a00/g," ")}function p(e,t="href"){let o=v.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:"!==g&&"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:""}}h.set("a",["href","target"]),h.set("div",[]),h.set("del",[]),h.set("em",[]),h.set("figcaption",[]),h.set("figure",[]),h.set("h1",[]),h.set("h2",[]),h.set("h3",[]),h.set("h4",[]),h.set("h5",[]),h.set("h6",[]),h.set("hr",[]),h.set("img",["src","alt","width","height"]),h.set("ins",[]),h.set("li",[]),h.set("mark",[]),h.set("ol",[]),h.set("p",[]),h.set("s",[]),h.set("small",[]),h.set("strong",[]),h.set("span",[]),h.set("sub",[]),h.set("sup",[]),h.set("ul",[]),h.set("svg",["xmlns","viewBox","class"]),h.set("text",["x","y","text-anchor"]),h.set("polyline",["points","class","transform"]);const f=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 p(e,t)}sanitizeToJsString(e){return function(e){let t=v.parseFromString("
"+e+"
","text/html");if(!t||"#document"!==t.nodeName)return"";let o=t.querySelector("body").firstChild,a="";for(let e=0;e/g,"≻").replaceAll(/"/g,"″").replaceAll(/\u0027/g,"′"),a}(e)}sanitizeToHtmlElement(e,t){!function(e,t){let o=v.parseFromString("
"+e+"
","text/html");o&&"#document"===o.nodeName?function e(t,o){let a=t.childNodes;for(let n=0;n{if(t)a.hasAttributeNS(null,e)&&(n.setAttributeNS(null,e,a.getAttribute(e)),a.removeAttributeNS(null,e));else if(a.hasAttribute(e))if("href"===e||"src"===e){let t=p(a.getAttribute(e),e).url;""!==t&&n.setAttribute(e,t)}else n.setAttribute(e,a.getAttribute(e))}),a.hasAttribute("style")){a.getAttribute("style").split(";").forEach(e=>{let t=e.split(":");2!==t.length||"width"!==t[0].trim()&&"height"!==t[0].trim()||(n.style[t[0].trim()]=t[1].trim())})}o.appendChild(n),e(a,n)}else"#text"===r&&o.appendChild(document.createTextNode(a.nodeValue))}}(o.querySelector("body").firstChild,t):t.textContent=""}(e,t)}sanitizeToHtmlString(e){return function(e){let t="",o="",a=v.parseFromString("
"+e.replace(" ","਀")+"
","text/html");return a&&"#document"===a.nodeName?(function e(a){let n=a.childNodes;for(let r=0;r{if(a)n.hasAttributeNS(null,e)&&(t+=" "+e+'="'+m(n.getAttribute(e))+'"',n.removeAttribute(e));else if(n.hasAttribute(e))if("href"===e||"src"===e){let a=p(n.getAttribute(e),e).url;""===a?o+="\nAn invalid url ("+n.getAttribute(e)+") was removed from a "+e+" attribute":t+=" "+e+'="'+a+'"',n.removeAttribute(e)}else t+=" "+e+'="'+m(n.getAttribute(e))+'"',n.removeAttribute(e)}),t+=">",e(n),t+=""}else"#text"===i?t+=m(n.nodeValue):o+="\nAn invalid tag "+i+" was removed";if(n.hasAttributes)for(let e=0;e/g,">").replaceAll(/"/g,""").replaceAll(/\u0027/g,"'").replaceAll(/\u0a00/g," ")}function p(e,t="href"){let o=v.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:"!==g&&"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:""}}h.set("a",["href","target"]),h.set("div",[]),h.set("del",[]),h.set("em",[]),h.set("figcaption",[]),h.set("figure",[]),h.set("h1",[]),h.set("h2",[]),h.set("h3",[]),h.set("h4",[]),h.set("h5",[]),h.set("h6",[]),h.set("hr",[]),h.set("img",["src","alt","width","height"]),h.set("ins",[]),h.set("li",[]),h.set("mark",[]),h.set("ol",[]),h.set("p",[]),h.set("s",[]),h.set("small",[]),h.set("strong",[]),h.set("span",[]),h.set("sub",[]),h.set("sup",[]),h.set("ul",[]),h.set("svg",["xmlns","viewBox","class"]),h.set("text",["x","y","text-anchor"]),h.set("polyline",["points","class","transform"]);const f=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 p(e,t)}sanitizeToJsString(e){return function(e){let t=v.parseFromString("
"+e+"
","text/html");if(!t||"#document"!==t.nodeName)return"";let o=t.querySelector("body").firstChild,a="";for(let e=0;e/g,"≻").replaceAll(/"/g,"″").replaceAll(/\u0027/g,"′"),a}(e)}sanitizeToHtmlElement(e,t){!function(e,t){let o=v.parseFromString("
"+e+"
","text/html");o&&"#document"===o.nodeName?function e(t,o){let a=t.childNodes;for(let n=0;n{if(t)a.hasAttributeNS(null,e)&&(n.setAttributeNS(null,e,a.getAttribute(e)),a.removeAttributeNS(null,e));else if(a.hasAttribute(e))if("href"===e||"src"===e){let t=p(a.getAttribute(e),e).url;""!==t&&n.setAttribute(e,t)}else n.setAttribute(e,a.getAttribute(e))}),a.hasAttribute("style")){a.getAttribute("style").split(";").forEach(e=>{let t=e.split(":");2!==t.length||"width"!==t[0].trim()&&"height"!==t[0].trim()||(n.style[t[0].trim()]=t[1].trim())})}o.appendChild(n),e(a,n)}else"#text"===r&&o.appendChild(document.createTextNode(a.nodeValue))}}(o.querySelector("body").firstChild,t):t.textContent=""}(e,t)}sanitizeToHtmlString(e){return function(e){let t="",o="",a=v.parseFromString("
"+e.replace(" ","਀")+"
","text/html");return a&&"#document"===a.nodeName?(function e(a){let n=a.childNodes;for(let r=0;r{if(a)n.hasAttributeNS(null,e)&&(t+=" "+e+'="'+m(n.getAttribute(e))+'"',n.removeAttribute(e));else if(n.hasAttribute(e))if("href"===e||"src"===e){let a=p(n.getAttribute(e),e).url;""===a?o+="\nAn invalid url ("+n.getAttribute(e)+") was removed from a "+e+" attribute":t+=" "+e+'="'+a+'"',n.removeAttribute(e)}else t+=" "+e+'="'+m(n.getAttribute(e))+'"',n.removeAttribute(e)}),t+=">",e(n),t+=""}else"#text"===i?t+=m(n.nodeValue):o+="\nAn invalid tag "+i+" was removed";if(n.hasAttributes)for(let e=0;e=e?null:o[e-1]},get next(){return e=o.length},get first(){return 0===e},get last(){return e>=o.length-1},get index(){return e}})}function i(e){return o.findIndex(t=>t.objId===e)}function l(e,t,a){let n=i(e);if(-1===n)throw new Error("invalid objId for next or previous function");if(1!==a&&-1!==a)throw new Error("invalid direction");let r=t;for(r||(r=()=>!0),n+=a;-1{a=t(),a.jsonObject=e,n(a)})}}}let I=new Map;const E=new class{constructor(){Object.freeze(this)}setTranslations(e){e.forEach(e=>I.set(e.msgid,f.sanitizeToJsString(e.msgstr)))}getText(e,t){let o=I.get(e);return t&&o&&Object.getOwnPropertyNames(t).forEach(e=>o=o.replace("{"+e+"}",t[e])),o||e}};const j=new class{constructor(){Object.freeze(this)}get UUID(){let e=new Uint16Array(8);const t=["","-","-","-","-","","",""];window.crypto.getRandomValues(e);let o="";for(let a=0;a<8;a++)o+=e[a].toString(16).padStart(4,"0")+t[a];return o}storageAvailable(e){try{let t=window[e],o="__storage_test__";return t.setItem(o,o),t.removeItem(o),!0}catch(e){return!1}}saveFile(e,t,o){try{let a=window.URL.createObjectURL(new File([t],e,{type:o||"text/plain"})),n=document.createElement("a");n.setAttribute("href",a),n.setAttribute("download",e),n.click(),window.URL.revokeObjectURL(a)}catch(e){e instanceof Error&&console.error(e)}}formatTime(e){let t=Math.floor(e);if(0===t)return"";let o=Math.floor(t/86400),a=Math.floor(t%86400/3600),n=Math.floor(t%3600/60),r=Math.floor(t%60);return 0=o?"0 km":Math.floor(o/t.metersInKm)+","+Math.floor(o%t.metersInKm/10).toFixed(0).padStart(2,"0").padEnd(3,"0")+" km"}formatLat(e){return e>0?e.toFixed(r.fixed)+" N":(-e).toFixed(r.fixed)+" S"}formatLng(e){return e>0?e.toFixed(r.fixed)+" E":(-e).toFixed(r.fixed)+" W"}formatLatLng(e){return 0===e[0]&&0===e[1]?"":this.formatLat(e[0])+" - "+this.formatLng(e[1])}},P=x("WayPoint"),D=new WeakMap;function C(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+P.name);P.validate(e.objType),P.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.address=e.name,e.name="";case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+P.name)}}(e);let t=Object.getOwnPropertyNames(e);return["address","name","lat","lng","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+P.name)}),e}class R{constructor(){this.name="",this.address="",this.lat=r.defaultValue,this.lng=r.defaultValue,D.set(this,T()),Object.seal(this)}get fullName(){let e=""===this.name?this.address:this.name+", "+this.address;return""===e&&(e=j.formatLatLng([this.lat,this.lng])),e}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objId(){return D.get(this)}get objType(){return P}get jsonObject(){return{name:this.name,address:this.address,lat:parseFloat(this.lat.toFixed(r.fixed)),lng:parseFloat(this.lng.toFixed(r.fixed)),objId:D.get(this),objType:P.jsonObject}}set jsonObject(e){let t=C(e);this.address=t.address||"",this.name=t.name||"",this.lat=t.lat||r.defaultValue,this.lng=t.lng||r.defaultValue,D.set(this,T()),this.validateData()}validateData(){"string"==typeof this.address?this.address=f.sanitizeToJsString(this.address):this.address="","string"==typeof this.name?this.name=f.sanitizeToJsString(this.name):this.name="","number"!=typeof this.lat&&(this.lat=r.defaultValue),"number"!=typeof this.lng&&(this.lng=r.defaultValue)}}function M(){return new R}const S=x("ItineraryPoint"),O=new WeakMap;function A(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+S.name);S.validate(e.objType),S.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.elev=n.defaultValue;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+S.name)}}(e);let t=Object.getOwnPropertyNames(e);return["lat","lng","distance","elev","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+S.name)}),e}class k{constructor(){this.lat=r.defaultValue,this.lng=r.defaultValue,this.distance=t.defaultValue,this.elev=n.defaultValue,O.set(this,T()),Object.seal(this)}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return S}get objId(){return O.get(this)}get jsonObject(){return{lat:parseFloat(this.lat.toFixed(r.fixed)),lng:parseFloat(this.lng.toFixed(r.fixed)),distance:parseFloat(this.distance.toFixed(t.fixed)),elev:parseFloat(this.elev.toFixed(n.fixed)),objId:O.get(this),objType:S.jsonObject}}set jsonObject(e){let o=A(e);this.lat=o.lat||r.defaultValue,this.lng=o.lng||r.defaultValue,this.distance=o.distance||t.defaultValue,this.elev=o.elev||n.defaultValue,O.set(this,T()),this.validateData()}validateData(){"number"!=typeof this.lat&&(this.lat=r.defaultValue),"number"!=typeof this.lng&&(this.lng=r.defaultValue),"number"!=typeof this.distance&&(this.distance=t.defaultValue),"number"!=typeof this.elev&&(this.elev=n.defaultValue)}}function U(){return new k}const B=x("Maneuver"),z=new WeakMap;function H(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+B.name);B.validate(e.objType),B.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":"kArriveDefault"===e.iconName&&(e.distance=t.defaultValue);case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+B.name)}}(e);let o=Object.getOwnPropertyNames(e);return["iconName","instruction","distance","duration","itineraryPointObjId","objId"].forEach(e=>{if(!o.includes(e))throw new Error("No "+e+" for "+B.name)}),e}class F{constructor(){this.iconName="",this.instruction="",this.itineraryPointObjId=-1,this.distance=t.defaultValue,this.duration=t.defaultValue,z.set(this,T()),Object.seal(this)}get objType(){return B}get objId(){return z.get(this)}get jsonObject(){return{iconName:this.iconName,instruction:this.instruction,distance:parseFloat(this.distance.toFixed(t.fixed)),duration:this.duration,itineraryPointObjId:this.itineraryPointObjId,objId:z.get(this),objType:B.jsonObject}}set jsonObject(e){let o=H(e);this.iconName=o.iconName||"",this.instruction=o.instruction||"",this.distance=o.distance||t.defaultValue,this.duration=o.duration||t.defaultValue,this.itineraryPointObjId=o.itineraryPointObjId||-1,z.set(this,T()),this.validateData()}validateData(){"string"==typeof this.iconName?this.iconName=f.sanitizeToJsString(this.iconName):this.iconName="","string"==typeof this.instruction?this.instruction=f.sanitizeToJsString(this.instruction):this.instruction="","number"!=typeof this.distance&&(this.distance=t.defaultValue),"number"!=typeof this.duration&&(this.duration=t.defaultValue),"number"!=typeof this.itineraryPointObjId&&(this.itineraryPointObjId=-1)}}function V(){return new F}const W=x("Itinerary"),K=new WeakMap;function _(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+W.name);W.validate(e.objType),W.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.hasProfile=!1,e.ascent=0,e.descent=0;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+W.name)}}(e);let t=Object.getOwnPropertyNames(e);return["hasProfile","ascent","descent","itineraryPoints","maneuvers","provider","transitMode","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+W.name)}),e}class Z{constructor(){this.hasProfile=!1,this.ascent=0,this.descent=0,this.provider="",this.transitMode="",this.itineraryPoints=L(U),this.maneuvers=L(V),K.set(this,T()),Object.seal(this)}get objType(){return W}get objId(){return K.get(this)}get jsonObject(){return{hasProfile:this.hasProfile,ascent:this.ascent,descent:this.descent,itineraryPoints:this.itineraryPoints.jsonObject,maneuvers:this.maneuvers.jsonObject,provider:this.provider,transitMode:this.transitMode,objId:K.get(this),objType:W.jsonObject}}set jsonObject(e){let t=_(e);this.hasProfile=t.hasProfile||!1,this.ascent=t.ascent||0,this.descent=t.descent||0,this.itineraryPoints.jsonObject=t.itineraryPoints||[],this.maneuvers.jsonObject=t.maneuvers||[],this.provider=t.provider||"",this.transitMode=t.transitMode||"",K.set(this,T());let o=new Map,a=0,n=this.itineraryPoints.iterator;for(;!n.done;)o.set(t.itineraryPoints[a].objId,n.value.objId),a++;let r=this.maneuvers.iterator;for(;!r.done;)r.value.itineraryPointObjId=o.get(r.value.itineraryPointObjId);this.validateData()}validateData(){"boolean"!=typeof this.hasProfile&&(this.hasProfile=!1),"number"!=typeof this.ascent&&(this.ascent=0),"number"!=typeof this.descent&&(this.descent=0),"string"==typeof this.provider?this.provider=f.sanitizeToJsString(this.provider):this.provider="","string"==typeof this.transitMode?this.transitMode=f.sanitizeToJsString(this.transitMode):this.transitMode=""}}function X(){return new Z}const q=x("Note"),G=new WeakMap;function J(e){return e.replaceAll(/style='color:white;background-color:red'/g,"class='TravelNotes-Note-WhiteRed'").replaceAll(/style='color:white;background-color:green'/g,"class='TravelNotes-Note-WhiteGreen'").replaceAll(/style='color:white;background-color:blue'/g,"class='TravelNotes-Note-WhiteBlue'").replaceAll(/style='color:white;background-color:brown'/g,"class='TravelNotes-Note-WhiteBrown'").replaceAll(/style='color:white;background-color:black'/g,"class='TravelNotes-Note-WhiteBlack'").replaceAll(/style='border:solid 0.1em'/g,"class='TravelNotes-Note-BlackWhite'").replaceAll(/style='background-color:white;'/g,"class='TravelNotes-Note-Knooppunt'").replaceAll(/style='fill:green;font:bold 120px sans-serif;'/g,"").replaceAll(/style='fill:none;stroke:green;stroke-width:10;'/g,"")}function Y(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+q.name);q.validate(e.objType),q.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":"string"==typeof e.iconHeight&&(e.iconHeight=Number.parseInt(e.iconHeight)),"string"==typeof e.iconWidth&&(e.iconWidth=Number.parseInt(e.iconWidth)),e.iconContent=J(e.iconContent),e.popupContent=J(e.popupContent),e.tooltipContent=J(e.tooltipContent),e.phone=J(e.phone),e.address=J(e.address);case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+q.name)}}(e);let t=Object.getOwnPropertyNames(e);return["iconHeight","iconWidth","iconContent","popupContent","tooltipContent","phone","url","address","iconLat","iconLng","lat","lng","distance","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+q.name)}),e}class ${constructor(){this.iconHeight=0,this.iconWidth=0,this.iconContent="",this.popupContent="",this.tooltipContent="",this.phone="",this.url="",this.address="",this.iconLat=r.defaultValue,this.iconLng=r.defaultValue,this.lat=r.defaultValue,this.lng=r.defaultValue,this.distance=t.invalid,this.chainedDistance=t.defaultValue,G.set(this,T()),Object.seal(this)}get isRouteNote(){return this.distance!==t.invalid}get iconLatLng(){return[this.iconLat,this.iconLng]}set iconLatLng(e){this.iconLat=e[0],this.iconLng=e[1]}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return q}get objId(){return G.get(this)}get jsonObject(){return{iconHeight:this.iconHeight,iconWidth:this.iconWidth,iconContent:this.iconContent,popupContent:this.popupContent,tooltipContent:this.tooltipContent,phone:this.phone,url:this.url,address:this.address,iconLat:parseFloat(this.iconLat.toFixed(r.fixed)),iconLng:parseFloat(this.iconLng.toFixed(r.fixed)),lat:parseFloat(this.lat.toFixed(r.fixed)),lng:parseFloat(this.lng.toFixed(r.fixed)),distance:parseFloat(this.distance.toFixed(t.fixed)),chainedDistance:parseFloat(this.chainedDistance.toFixed(t.fixed)),objId:G.get(this),objType:q.jsonObject}}set jsonObject(e){let o=Y(e);this.iconHeight=o.iconHeight||0,this.iconWidth=o.iconWidth||0,this.iconContent=o.iconContent||"",this.popupContent=o.popupContent||"",this.tooltipContent=o.tooltipContent||"",this.phone=o.phone||"",this.url=o.url||"",this.address=o.address||"",this.iconLat=o.iconLat||r.defaultValue,this.iconLng=o.iconLng||r.defaultValue,this.lat=o.lat||r.defaultValue,this.lng=o.lng||r.defaultValue,this.distance=o.distance||t.invalid,this.chainedDistance=o.chainedDistance||t.defaultValue,G.set(this,T()),this.validateData(!0)}validateData(e){if("number"!=typeof this.iconHeight&&(this.iconHeight=0),"number"!=typeof this.iconWidth&&(this.iconWidth=0),"string"==typeof this.iconContent){let t=f.sanitizeToHtmlString(this.iconContent);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.iconContent+")"),this.iconContent=t.htmlString}else this.iconContent="";if("string"==typeof this.popupContent){let t=f.sanitizeToHtmlString(this.popupContent);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.popupContent+")"),this.popupContent=t.htmlString}else this.popupContent="";if("string"==typeof this.tooltipContent){let t=f.sanitizeToHtmlString(this.tooltipContent);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.tooltipContent+")"),this.tooltipContent=t.htmlString}else this.tooltipContent="";if("string"==typeof this.phone){let t=f.sanitizeToHtmlString(this.phone);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.phone+")"),this.phone=t.htmlString}else this.phone="";if("string"==typeof this.url&&""!==this.url){let t=f.sanitizeToUrl(this.url);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.url+")"),this.url=encodeURI(t.url)}else this.url="";"string"==typeof this.address?this.address=f.sanitizeToHtmlString(this.address).htmlString:this.address="","number"!=typeof this.iconLat&&(this.iconLat=r.defaultValue),"number"!=typeof this.iconLng&&(this.iconLng=r.defaultValue),"number"!=typeof this.lat&&(this.lat=r.defaultValue),"number"!=typeof this.lng&&(this.lng=r.defaultValue),"number"!=typeof this.distance&&(this.distance=t.invalid),"number"!=typeof this.chainedDistance&&(this.chainedDistance=t.defaultValue)}}function Q(){return new $}const ee=x("Route"),te=new WeakMap;function oe(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+ee.name);ee.validate(e.objType),ee.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":e.dashArray=0,e.hidden=!1;case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.edited=i.notEdited;case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.editionStatus=e.edited;case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+ee.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","wayPoints","notes","itinerary","width","color","dashArray","chain","distance","duration","editionStatus","hidden","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+ee.name)}),e}class ae{constructor(){this.name="",this.wayPoints=L(M),this.wayPoints.add(M()),this.wayPoints.add(M()),this.notes=L(Q),this.itinerary=X(),this.width=y.route.width,this.color=y.route.color,this.dashArray=y.route.dashArray,this.chain=!0,this.chainedDistance=t.defaultValue,this.distance=t.defaultValue,this.duration=t.defaultValue,this.editionStatus=i.notEdited,this.hidden=!1,te.set(this,T()),Object.seal(this)}get computedName(){let e=this.name;return""===e&&(e=(""===this.wayPoints.first.fullName?"???":this.wayPoints.first.fullName)+" ⮞ "+(""===this.wayPoints.last.fullName?"???":this.wayPoints.last.fullName)),e}get objId(){return te.get(this)}get objType(){return ee}get jsonObject(){return{name:this.name,wayPoints:this.wayPoints.jsonObject,notes:this.notes.jsonObject,itinerary:this.itinerary.jsonObject,width:this.width,color:this.color,dashArray:this.dashArray,chain:this.chain,distance:parseFloat(this.distance.toFixed(t.fixed)),duration:this.duration,editionStatus:this.editionStatus,hidden:this.hidden,chainedDistance:parseFloat(this.chainedDistance.toFixed(t.fixed)),objId:te.get(this),objType:ee.jsonObject}}set jsonObject(e){let t=oe(e);this.name=t.name||"",this.wayPoints.jsonObject=t.wayPoints||[],this.notes.jsonObject=t.notes||[],this.itinerary.jsonObject=t.itinerary||X().jsonObject,this.width=t.width||y.route.width,this.color=t.color||"#000000",this.dashArray=t.dashArray||0,this.chain=t.chain||!1,this.distance=t.distance,this.duration=t.duration,this.editionStatus=t.editionStatus||i.notEdited,this.hidden=t.hidden||!1,this.chainedDistance=t.chainedDistance,te.set(this,T()),this.validateData()}validateData(){"string"==typeof this.name?this.name=f.sanitizeToJsString(this.name):this.name="","number"!=typeof this.width&&(this.width=y.route.width),"string"==typeof this.color?this.color=f.sanitizeToColor(this.color)||y.route.color:this.color=y.route.color,"number"!=typeof this.dashArray&&(this.dashArray=0),this.dashArray>=y.route.dashChoices.length&&(this.dashArray=0),"boolean"!=typeof this.chain&&(this.chain=!1),"number"!=typeof this.distance&&(this.distance=t.defaultValue),"number"!=typeof this.duration&&(this.duration=t.defaultValue),"number"!=typeof this.editionStatus&&(this.editionStatus=i.notEdited),"boolean"!=typeof this.hidden&&(this.hidden=!1),"number"!=typeof this.chainedDistance&&(this.chainedDistance=t.defaultValue)}}function ne(){return new ae}const re=x("Travel"),ie=new WeakMap;function le(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+re.name);re.validate(e.objType),re.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.editedRoute=ne();case"1.5.0":if(e.userData.layerId){let t=[{layerId:"0",layerName:"OSM - Color"},{layerId:"1",layerName:"OSM - Black and White"},{layerId:"2",layerName:"Thunderforest - Transport"},{layerId:"3",layerName:"Thunderforest - OpenCycleMap"},{layerId:"4",layerName:"Thunderforest - Outdoors"},{layerId:"5",layerName:"Esri - Aerial view"},{layerId:"6",layerName:"Kartverket - Norway"},{layerId:"7",layerName:"IGN-NGI - Belgium now"},{layerId:"12",layerName:"Thunderforest - Landscape"},{layerId:"24",layerName:"Lantmäteriet - Sweden"},{layerId:"25",layerName:"Maanmittauslaitos - Finland"}].find(t=>t.layerId===e.userData.layerId);e.layerName=t?t.layerName:"OSM - Color"}else e.layerName="OSM - Color";case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+re.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","editedRoute","routes","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+re.name)}),e}class se{constructor(){this.editedRoute=ne(),this.routes=L(ne),this.notes=L(Q),this.layerName="OSM - Color",this.name="",this.readOnly=!1,ie.set(this,T()),Object.seal(this)}get objId(){return ie.get(this)}get objType(){return re}get jsonObject(){return{editedRoute:this.editedRoute.jsonObject,layerName:this.layerName,name:this.name,routes:this.routes.jsonObject,notes:this.notes.jsonObject,readOnly:this.readOnly,objId:ie.get(this),objType:re.jsonObject}}set jsonObject(e){let t=le(e);this.editedRoute.jsonObject=t.editedRoute,this.layerName=e.layerName||"OSM - Color",this.name=t.name||"",this.readOnly=t.readOnly||!1,this.routes.jsonObject=t.routes||[],this.notes.jsonObject=t.notes||[],ie.set(this,T()),this.validateData()}validateData(){"string"==typeof this.layerName?this.layerName=f.sanitizeToJsString(this.layerName):this.layerName="OSM - Color","string"==typeof this.name?this.name=f.sanitizeToJsString(this.name):this.name="TravelNotes","boolean"!=typeof this.readOnly&&(this.readOnly=!0)}}function de(){return new se}let ce=new Map,ue=new Map,ge=Object.seal({provider:"",transitMode:""}),ve=j.UUID;const he=new class{constructor(){this.map=null,this.travel=de(),this.editedRouteObjId=-1,this.searchData=[],Object.seal(this)}get providers(){return ce}get mapObjects(){return ue}get routing(){return ge}get UUID(){return ve}};const me=new class{constructor(){Object.freeze(this)}getLatLngElevAtDist(e,t){if(e.distance<=t||0>=t)return null;let o=0,a=e.itinerary.itineraryPoints.iterator;for(;o{t.lat=Math.min(t.lat,e[0]),t.lng=Math.min(t.lng,e[1]),o.lat=Math.max(o.lat,e[0]),o.lng=Math.max(o.lng,e[1])}),window.L.latLngBounds(t,o)}getSquareBoundingBox(e,t){let o=t/6371e3*d.fromRadians,a=e[0]*d.toRadians,n=Math.acos((Math.cos(t/6371e3)-Math.sin(a)**2)/Math.cos(a)**2)*d.fromRadians;return window.L.latLngBounds(window.L.latLng([e[0]-o,e[1]-n]),window.L.latLng([e[0]+o,e[1]+n]))}project(e,t){let o=he.map.project(window.L.latLng(e),t);return[o.x,o.y]}screenCoordToLatLng(e,t){let o=he.map.containerPointToLatLng(window.L.point(e,t));return[o.lat,o.lng]}addPoints(e,t){return[e[0]+t[0],e[1]+t[1]]}subtrackPoints(e,t){return[e[0]-t[0],e[1]-t[1]]}};function pe(){let e=0,t=0,o=0,a=0,n=0,r=0,i=!1,l=he.map.getCenter(),s=0,d=0,c=null,u=null,g=null,v=null,h=null,m=null,p=null,b=null,y=null,N=null,T=null,x=null,L=null,I=!0,j=null,P=null,D=null;function C(e){I&&("Escape"===e.key||"Esc"===e.key?x.click():"Enter"===e.key&&T.click())}function R(i){o+=i.screenX-e,a+=i.screenY-t,o=Math.min(Math.max(o,20),n-g.clientWidth-20),a=Math.max(a,20);let l=r-Math.max(a,0)-20;g.style.top=String(a)+"px",g.style.left=String(o)+"px",g.style["max-height"]=String(l)+"px"}function M(o){try{o.dataTransfer.setData("Text","1")}catch(e){e instanceof Error&&console.error(e)}e=o.screenX,t=o.screenY}function S(){document.removeEventListener("keydown",C,!0),document.querySelector("body").removeChild(c)}function O(){S(),D("Canceled by user")}function A(){let e=null;L&&(e=L(),!e)||(T.removeEventListener("click",A,!1),S(),P(e))}function k(e){"TravelNotes-Background"===e.target.id&&(i=!0,s=e.screenX,d=e.screenY,l=he.map.getCenter())}function U(e){if(i){e.preventDefault(),e.stopPropagation();let t=me.screenCoordToLatLng(s,d),o=me.screenCoordToLatLng(e.screenX,e.screenY);he.map.panTo([l.lat+t[0]-o[0],l.lng+t[1]-o[1]])}}function B(e){"TravelNotes-Background"===e.target.id&&(U(e),i=!1)}function z(e){if("TravelNotes-Background"!==e.target.id)return;let t=he.map.getZoom()-Math.round(e.deltaY/100);t=Math.min(he.map.getMaxZoom(),t),t=Math.max(he.map.getMinZoom(),t),he.map.setZoomAround(window.L.point(e.clientX,e.clientY),t)}function H(e){e.preventDefault()}function F(e,t){P=e,D=t,document.querySelector("body").appendChild(c),document.addEventListener("keydown",C,!0),n=c.clientWidth,r=c.clientHeight,function(){o=(n-g.clientWidth)/2,a=(r-g.clientHeight)/2,o=Math.min(Math.max(o,20),n-g.clientWidth-20),a=Math.max(a,20);let e=r-Math.max(a,0)-20;g.style.top=String(a)+"px",g.style.left=String(o)+"px",g.style["max-height"]=String(e)+"px"}(),j&&j()}c=w.create("div",{id:"TravelNotes-Background",className:"TravelNotes-Background"}),c.addEventListener("dragover",()=>null,!1),c.addEventListener("drop",()=>null,!1),c.addEventListener("mousedown",k,!1),c.addEventListener("mouseup",B,!1),c.addEventListener("mousemove",U,!1),c.addEventListener("wheel",z,!1),c.addEventListener("contextmenu",H,!1),g=w.create("div",{className:"TravelNotes-BaseDialog-Container"},c),u=w.create("div",{className:"TravelNotes-BaseDialog-TopBar",draggable:!0},g),u.addEventListener("dragstart",M,!1),u.addEventListener("dragend",R,!1),x=w.create("div",{textContent:"❌",className:"TravelNotes-BaseDialog-CancelButton",title:E.getText("BaseDialog - Cancel")},u),x.addEventListener("click",O,!1),v=w.create("div",{className:"TravelNotes-BaseDialog-HeaderDiv"},g),h=w.create("div",{className:"TravelNotes-BaseDialog-ContentDiv"},g),m=w.create("div",{className:"TravelNotes-BaseDialog-ErrorDiv TravelNotes-Hidden"},g),p=w.create("div",{className:"TravelNotes-BaseDialog-WaitDiv"},g),N=w.create("div",{className:"TravelNotes-WaitAnimationBullet TravelNotes-Hidden"},y=w.create("div",{className:"TravelNotes-WaitAnimation TravelNotes-Hidden"},p)),b=w.create("div",{className:"TravelNotes-BaseDialog-FooterDiv"},g),T=w.create("div",{textContent:"🆗",className:"TravelNotes-BaseDialog-Button"},b),T.addEventListener("click",A,!1);return new class{constructor(){Object.freeze(this)}set okButtonListener(e){L=e}set keyboardEventListenerEnabled(e){I=e}set onShow(e){j=e}set title(e){v.textContent=e}get content(){return h}get footer(){return b}get okButton(){return T}get cancelButton(){return x}showError(e){m.textContent="",f.sanitizeToHtmlElement(e,m),m.classList.remove("TravelNotes-Hidden")}hideError(){m.textContent="",m.classList.add("TravelNotes-Hidden")}showWait(){N.classList.remove("TravelNotes-Hidden"),y.classList.remove("TravelNotes-Hidden"),T.classList.add("TravelNotes-Hidden")}hideWait(){N.classList.add("TravelNotes-Hidden"),y.classList.add("TravelNotes-Hidden"),T.classList.remove("TravelNotes-Hidden")}show(){return new Promise(F)}}}function fe(e){let t=null,o=null,a=null;function n(){return t.hideError(),!e||!(a.value.length<12)&&a.value.match(RegExp("[0-9]+"))&&a.value.match(RegExp("[a-z]+"))&&a.value.match(RegExp("[A-Z]+"))&&a.value.match(RegExp("[^0-9a-zA-Z]"))?(new window.TextEncoder).encode(a.value):(t.showError("

"+E.getText("PasswordDialog - Password rules1")+"

  • "+E.getText("PasswordDialog - Password rules2")+"
  • "+E.getText("PasswordDialog - Password rules3")+"
  • "+E.getText("PasswordDialog - Password rules4")+"
  • "+E.getText("PasswordDialog - Password rules5")+"
  • "+E.getText("PasswordDialog - Password rules6")+"
"),void a.focus())}return t=pe(),t.title=E.getText("PasswordDialog - password"),t.okButtonListener=n,o=w.create("div",null,t.content),a=w.create("input",{type:"password"},o),t.onShow=function(){a.focus()},t} + */function x(e){const t=e;return new class{constructor(){Object.freeze(this)}get name(){return t}get version(){return"2.2.0"}get jsonObject(){return{name:t,version:"2.2.0"}}validate(e){if(!Object.getOwnPropertyNames(e).includes("name"))throw new Error("No name for "+t);if(t!==e.name)throw new Error("Invalid name for "+t);if(!Object.getOwnPropertyNames(e).includes("version"))throw new Error("No version for "+t)}}}function L(e){const t=e;let o=[];const a=function(){let e=t();if(!e.objType||!e.objType.name)throw new Error("invalid object name for collection");return e.objType.name}();function n(e){if(!e.objType||!e.objType.name||e.objType.name!==a)throw new Error("invalid object name for add function");o.push(e)}function r(){let e=-1;return Object.freeze({get value(){return e=e?null:o[e-1]},get next(){return e=o.length},get first(){return 0===e},get last(){return e>=o.length-1},get index(){return e}})}function i(e){return o.findIndex(t=>t.objId===e)}function l(e,t,a){let n=i(e);if(-1===n)throw new Error("invalid objId for next or previous function");if(1!==a&&-1!==a)throw new Error("invalid direction");let r=t;for(r||(r=()=>!0),n+=a;-1{a=t(),a.jsonObject=e,n(a)})}}}let I=new Map;const E=new class{constructor(){Object.freeze(this)}setTranslations(e){e.forEach(e=>I.set(e.msgid,f.sanitizeToJsString(e.msgstr)))}getText(e,t){let o=I.get(e);return t&&o&&Object.getOwnPropertyNames(t).forEach(e=>o=o.replace("{"+e+"}",t[e])),o||e}};const j=new class{constructor(){Object.freeze(this)}get UUID(){let e=new Uint16Array(8);const t=["","-","-","-","-","","",""];window.crypto.getRandomValues(e);let o="";for(let a=0;a<8;a++)o+=e[a].toString(16).padStart(4,"0")+t[a];return o}storageAvailable(e){try{let t=window[e],o="__storage_test__";return t.setItem(o,o),t.removeItem(o),!0}catch(e){return!1}}saveFile(e,t,o){try{let a=window.URL.createObjectURL(new File([t],e,{type:o||"text/plain"})),n=document.createElement("a");n.setAttribute("href",a),n.setAttribute("download",e),n.click(),window.URL.revokeObjectURL(a)}catch(e){e instanceof Error&&console.error(e)}}formatTime(e){let t=Math.floor(e);if(0===t)return"";let o=Math.floor(t/86400),a=Math.floor(t%86400/3600),n=Math.floor(t%3600/60),r=Math.floor(t%60);return 0=o?"0 km":Math.floor(o/t.metersInKm)+","+Math.floor(o%t.metersInKm/10).toFixed(0).padStart(2,"0").padEnd(3,"0")+" km"}formatLat(e){return e>0?e.toFixed(r.fixed)+" N":(-e).toFixed(r.fixed)+" S"}formatLng(e){return e>0?e.toFixed(r.fixed)+" E":(-e).toFixed(r.fixed)+" W"}formatLatLng(e){return 0===e[0]&&0===e[1]?"":this.formatLat(e[0])+" - "+this.formatLng(e[1])}},P=x("WayPoint"),D=new WeakMap;function C(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+P.name);P.validate(e.objType),P.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.address=e.name,e.name="";case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+P.name)}}(e);let t=Object.getOwnPropertyNames(e);return["address","name","lat","lng","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+P.name)}),e}class R{constructor(){this.name="",this.address="",this.lat=r.defaultValue,this.lng=r.defaultValue,D.set(this,T()),Object.seal(this)}get fullName(){let e=""===this.name?this.address:this.name+", "+this.address;return""===e&&(e=j.formatLatLng([this.lat,this.lng])),e}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objId(){return D.get(this)}get objType(){return P}get jsonObject(){return{name:this.name,address:this.address,lat:parseFloat(this.lat.toFixed(r.fixed)),lng:parseFloat(this.lng.toFixed(r.fixed)),objId:D.get(this),objType:P.jsonObject}}set jsonObject(e){let t=C(e);this.address=t.address||"",this.name=t.name||"",this.lat=t.lat||r.defaultValue,this.lng=t.lng||r.defaultValue,D.set(this,T()),this.validateData()}validateData(){"string"==typeof this.address?this.address=f.sanitizeToJsString(this.address):this.address="","string"==typeof this.name?this.name=f.sanitizeToJsString(this.name):this.name="","number"!=typeof this.lat&&(this.lat=r.defaultValue),"number"!=typeof this.lng&&(this.lng=r.defaultValue)}}function M(){return new R}const S=x("ItineraryPoint"),O=new WeakMap;function A(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+S.name);S.validate(e.objType),S.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.elev=n.defaultValue;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+S.name)}}(e);let t=Object.getOwnPropertyNames(e);return["lat","lng","distance","elev","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+S.name)}),e}class k{constructor(){this.lat=r.defaultValue,this.lng=r.defaultValue,this.distance=t.defaultValue,this.elev=n.defaultValue,O.set(this,T()),Object.seal(this)}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return S}get objId(){return O.get(this)}get jsonObject(){return{lat:parseFloat(this.lat.toFixed(r.fixed)),lng:parseFloat(this.lng.toFixed(r.fixed)),distance:parseFloat(this.distance.toFixed(t.fixed)),elev:parseFloat(this.elev.toFixed(n.fixed)),objId:O.get(this),objType:S.jsonObject}}set jsonObject(e){let o=A(e);this.lat=o.lat||r.defaultValue,this.lng=o.lng||r.defaultValue,this.distance=o.distance||t.defaultValue,this.elev=o.elev||n.defaultValue,O.set(this,T()),this.validateData()}validateData(){"number"!=typeof this.lat&&(this.lat=r.defaultValue),"number"!=typeof this.lng&&(this.lng=r.defaultValue),"number"!=typeof this.distance&&(this.distance=t.defaultValue),"number"!=typeof this.elev&&(this.elev=n.defaultValue)}}function U(){return new k}const B=x("Maneuver"),H=new WeakMap;function z(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+B.name);B.validate(e.objType),B.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":"kArriveDefault"===e.iconName&&(e.distance=t.defaultValue);case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+B.name)}}(e);let o=Object.getOwnPropertyNames(e);return["iconName","instruction","distance","duration","itineraryPointObjId","objId"].forEach(e=>{if(!o.includes(e))throw new Error("No "+e+" for "+B.name)}),e}class F{constructor(){this.iconName="",this.instruction="",this.itineraryPointObjId=-1,this.distance=t.defaultValue,this.duration=t.defaultValue,H.set(this,T()),Object.seal(this)}get objType(){return B}get objId(){return H.get(this)}get jsonObject(){return{iconName:this.iconName,instruction:this.instruction,distance:parseFloat(this.distance.toFixed(t.fixed)),duration:this.duration,itineraryPointObjId:this.itineraryPointObjId,objId:H.get(this),objType:B.jsonObject}}set jsonObject(e){let o=z(e);this.iconName=o.iconName||"",this.instruction=o.instruction||"",this.distance=o.distance||t.defaultValue,this.duration=o.duration||t.defaultValue,this.itineraryPointObjId=o.itineraryPointObjId||-1,H.set(this,T()),this.validateData()}validateData(){"string"==typeof this.iconName?this.iconName=f.sanitizeToJsString(this.iconName):this.iconName="","string"==typeof this.instruction?this.instruction=f.sanitizeToJsString(this.instruction):this.instruction="","number"!=typeof this.distance&&(this.distance=t.defaultValue),"number"!=typeof this.duration&&(this.duration=t.defaultValue),"number"!=typeof this.itineraryPointObjId&&(this.itineraryPointObjId=-1)}}function V(){return new F}const W=x("Itinerary"),K=new WeakMap;function _(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+W.name);W.validate(e.objType),W.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.hasProfile=!1,e.ascent=0,e.descent=0;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+W.name)}}(e);let t=Object.getOwnPropertyNames(e);return["hasProfile","ascent","descent","itineraryPoints","maneuvers","provider","transitMode","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+W.name)}),e}class Z{constructor(){this.hasProfile=!1,this.ascent=0,this.descent=0,this.provider="",this.transitMode="",this.itineraryPoints=L(U),this.maneuvers=L(V),K.set(this,T()),Object.seal(this)}get objType(){return W}get objId(){return K.get(this)}get jsonObject(){return{hasProfile:this.hasProfile,ascent:this.ascent,descent:this.descent,itineraryPoints:this.itineraryPoints.jsonObject,maneuvers:this.maneuvers.jsonObject,provider:this.provider,transitMode:this.transitMode,objId:K.get(this),objType:W.jsonObject}}set jsonObject(e){let t=_(e);this.hasProfile=t.hasProfile||!1,this.ascent=t.ascent||0,this.descent=t.descent||0,this.itineraryPoints.jsonObject=t.itineraryPoints||[],this.maneuvers.jsonObject=t.maneuvers||[],this.provider=t.provider||"",this.transitMode=t.transitMode||"",K.set(this,T());let o=new Map,a=0,n=this.itineraryPoints.iterator;for(;!n.done;)o.set(t.itineraryPoints[a].objId,n.value.objId),a++;let r=this.maneuvers.iterator;for(;!r.done;)r.value.itineraryPointObjId=o.get(r.value.itineraryPointObjId);this.validateData()}validateData(){"boolean"!=typeof this.hasProfile&&(this.hasProfile=!1),"number"!=typeof this.ascent&&(this.ascent=0),"number"!=typeof this.descent&&(this.descent=0),"string"==typeof this.provider?this.provider=f.sanitizeToJsString(this.provider):this.provider="","string"==typeof this.transitMode?this.transitMode=f.sanitizeToJsString(this.transitMode):this.transitMode=""}}function X(){return new Z}const q=x("Note"),G=new WeakMap;function J(e){return e.replaceAll(/style='color:white;background-color:red'/g,"class='TravelNotes-Note-WhiteRed'").replaceAll(/style='color:white;background-color:green'/g,"class='TravelNotes-Note-WhiteGreen'").replaceAll(/style='color:white;background-color:blue'/g,"class='TravelNotes-Note-WhiteBlue'").replaceAll(/style='color:white;background-color:brown'/g,"class='TravelNotes-Note-WhiteBrown'").replaceAll(/style='color:white;background-color:black'/g,"class='TravelNotes-Note-WhiteBlack'").replaceAll(/style='border:solid 0.1em'/g,"class='TravelNotes-Note-BlackWhite'").replaceAll(/style='background-color:white;'/g,"class='TravelNotes-Note-Knooppunt'").replaceAll(/style='fill:green;font:bold 120px sans-serif;'/g,"").replaceAll(/style='fill:none;stroke:green;stroke-width:10;'/g,"")}function Y(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+q.name);q.validate(e.objType),q.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":"string"==typeof e.iconHeight&&(e.iconHeight=Number.parseInt(e.iconHeight)),"string"==typeof e.iconWidth&&(e.iconWidth=Number.parseInt(e.iconWidth)),e.iconContent=J(e.iconContent),e.popupContent=J(e.popupContent),e.tooltipContent=J(e.tooltipContent),e.phone=J(e.phone),e.address=J(e.address);case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+q.name)}}(e);let t=Object.getOwnPropertyNames(e);return["iconHeight","iconWidth","iconContent","popupContent","tooltipContent","phone","url","address","iconLat","iconLng","lat","lng","distance","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+q.name)}),e}class ${constructor(){this.iconHeight=0,this.iconWidth=0,this.iconContent="",this.popupContent="",this.tooltipContent="",this.phone="",this.url="",this.address="",this.iconLat=r.defaultValue,this.iconLng=r.defaultValue,this.lat=r.defaultValue,this.lng=r.defaultValue,this.distance=t.invalid,this.chainedDistance=t.defaultValue,G.set(this,T()),Object.seal(this)}get isRouteNote(){return this.distance!==t.invalid}get iconLatLng(){return[this.iconLat,this.iconLng]}set iconLatLng(e){this.iconLat=e[0],this.iconLng=e[1]}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return q}get objId(){return G.get(this)}get jsonObject(){return{iconHeight:this.iconHeight,iconWidth:this.iconWidth,iconContent:this.iconContent,popupContent:this.popupContent,tooltipContent:this.tooltipContent,phone:this.phone,url:this.url,address:this.address,iconLat:parseFloat(this.iconLat.toFixed(r.fixed)),iconLng:parseFloat(this.iconLng.toFixed(r.fixed)),lat:parseFloat(this.lat.toFixed(r.fixed)),lng:parseFloat(this.lng.toFixed(r.fixed)),distance:parseFloat(this.distance.toFixed(t.fixed)),chainedDistance:parseFloat(this.chainedDistance.toFixed(t.fixed)),objId:G.get(this),objType:q.jsonObject}}set jsonObject(e){let o=Y(e);this.iconHeight=o.iconHeight||0,this.iconWidth=o.iconWidth||0,this.iconContent=o.iconContent||"",this.popupContent=o.popupContent||"",this.tooltipContent=o.tooltipContent||"",this.phone=o.phone||"",this.url=o.url||"",this.address=o.address||"",this.iconLat=o.iconLat||r.defaultValue,this.iconLng=o.iconLng||r.defaultValue,this.lat=o.lat||r.defaultValue,this.lng=o.lng||r.defaultValue,this.distance=o.distance||t.invalid,this.chainedDistance=o.chainedDistance||t.defaultValue,G.set(this,T()),this.validateData(!0)}validateData(e){if("number"!=typeof this.iconHeight&&(this.iconHeight=0),"number"!=typeof this.iconWidth&&(this.iconWidth=0),"string"==typeof this.iconContent){let t=f.sanitizeToHtmlString(this.iconContent);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.iconContent+")"),this.iconContent=t.htmlString}else this.iconContent="";if("string"==typeof this.popupContent){let t=f.sanitizeToHtmlString(this.popupContent);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.popupContent+")"),this.popupContent=t.htmlString}else this.popupContent="";if("string"==typeof this.tooltipContent){let t=f.sanitizeToHtmlString(this.tooltipContent);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.tooltipContent+")"),this.tooltipContent=t.htmlString}else this.tooltipContent="";if("string"==typeof this.phone){let t=f.sanitizeToHtmlString(this.phone);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.phone+")"),this.phone=t.htmlString}else this.phone="";if("string"==typeof this.url&&""!==this.url){let t=f.sanitizeToUrl(this.url);e&&""!==t.errorsString&&console.log(t.errorsString+" ("+this.url+")"),this.url=encodeURI(t.url)}else this.url="";"string"==typeof this.address?this.address=f.sanitizeToHtmlString(this.address).htmlString:this.address="","number"!=typeof this.iconLat&&(this.iconLat=r.defaultValue),"number"!=typeof this.iconLng&&(this.iconLng=r.defaultValue),"number"!=typeof this.lat&&(this.lat=r.defaultValue),"number"!=typeof this.lng&&(this.lng=r.defaultValue),"number"!=typeof this.distance&&(this.distance=t.invalid),"number"!=typeof this.chainedDistance&&(this.chainedDistance=t.defaultValue)}}function Q(){return new $}const ee=x("Route"),te=new WeakMap;function oe(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+ee.name);ee.validate(e.objType),ee.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":e.dashArray=0,e.hidden=!1;case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.edited=i.notEdited;case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.editionStatus=e.edited;case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+ee.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","wayPoints","notes","itinerary","width","color","dashArray","chain","distance","duration","editionStatus","hidden","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+ee.name)}),e}class ae{constructor(){this.name="",this.wayPoints=L(M),this.wayPoints.add(M()),this.wayPoints.add(M()),this.notes=L(Q),this.itinerary=X(),this.width=y.route.width,this.color=y.route.color,this.dashArray=y.route.dashArray,this.chain=!0,this.chainedDistance=t.defaultValue,this.distance=t.defaultValue,this.duration=t.defaultValue,this.editionStatus=i.notEdited,this.hidden=!1,te.set(this,T()),Object.seal(this)}get computedName(){let e=this.name;return""===e&&(e=(""===this.wayPoints.first.fullName?"???":this.wayPoints.first.fullName)+" ⮞ "+(""===this.wayPoints.last.fullName?"???":this.wayPoints.last.fullName)),e}get objId(){return te.get(this)}get objType(){return ee}get jsonObject(){return{name:this.name,wayPoints:this.wayPoints.jsonObject,notes:this.notes.jsonObject,itinerary:this.itinerary.jsonObject,width:this.width,color:this.color,dashArray:this.dashArray,chain:this.chain,distance:parseFloat(this.distance.toFixed(t.fixed)),duration:this.duration,editionStatus:this.editionStatus,hidden:this.hidden,chainedDistance:parseFloat(this.chainedDistance.toFixed(t.fixed)),objId:te.get(this),objType:ee.jsonObject}}set jsonObject(e){let t=oe(e);this.name=t.name||"",this.wayPoints.jsonObject=t.wayPoints||[],this.notes.jsonObject=t.notes||[],this.itinerary.jsonObject=t.itinerary||X().jsonObject,this.width=t.width||y.route.width,this.color=t.color||"#000000",this.dashArray=t.dashArray||0,this.chain=t.chain||!1,this.distance=t.distance,this.duration=t.duration,this.editionStatus=t.editionStatus||i.notEdited,this.hidden=t.hidden||!1,this.chainedDistance=t.chainedDistance,te.set(this,T()),this.validateData()}validateData(){"string"==typeof this.name?this.name=f.sanitizeToJsString(this.name):this.name="","number"!=typeof this.width&&(this.width=y.route.width),"string"==typeof this.color?this.color=f.sanitizeToColor(this.color)||y.route.color:this.color=y.route.color,"number"!=typeof this.dashArray&&(this.dashArray=0),this.dashArray>=y.route.dashChoices.length&&(this.dashArray=0),"boolean"!=typeof this.chain&&(this.chain=!1),"number"!=typeof this.distance&&(this.distance=t.defaultValue),"number"!=typeof this.duration&&(this.duration=t.defaultValue),"number"!=typeof this.editionStatus&&(this.editionStatus=i.notEdited),"boolean"!=typeof this.hidden&&(this.hidden=!1),"number"!=typeof this.chainedDistance&&(this.chainedDistance=t.defaultValue)}}function ne(){return new ae}const re=x("Travel"),ie=new WeakMap;function le(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+re.name);re.validate(e.objType),re.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.editedRoute=ne();case"1.5.0":if(e.userData.layerId){let t=[{layerId:"0",layerName:"OSM - Color"},{layerId:"1",layerName:"OSM - Black and White"},{layerId:"2",layerName:"Thunderforest - Transport"},{layerId:"3",layerName:"Thunderforest - OpenCycleMap"},{layerId:"4",layerName:"Thunderforest - Outdoors"},{layerId:"5",layerName:"Esri - Aerial view"},{layerId:"6",layerName:"Kartverket - Norway"},{layerId:"7",layerName:"IGN-NGI - Belgium now"},{layerId:"12",layerName:"Thunderforest - Landscape"},{layerId:"24",layerName:"Lantmäteriet - Sweden"},{layerId:"25",layerName:"Maanmittauslaitos - Finland"}].find(t=>t.layerId===e.userData.layerId);e.layerName=t?t.layerName:"OSM - Color"}else e.layerName="OSM - Color";case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+re.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","editedRoute","routes","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+re.name)}),e}class se{constructor(){this.editedRoute=ne(),this.routes=L(ne),this.notes=L(Q),this.layerName="OSM - Color",this.name="",this.readOnly=!1,ie.set(this,T()),Object.seal(this)}get objId(){return ie.get(this)}get objType(){return re}get jsonObject(){return{editedRoute:this.editedRoute.jsonObject,layerName:this.layerName,name:this.name,routes:this.routes.jsonObject,notes:this.notes.jsonObject,readOnly:this.readOnly,objId:ie.get(this),objType:re.jsonObject}}set jsonObject(e){let t=le(e);this.editedRoute.jsonObject=t.editedRoute,this.layerName=e.layerName||"OSM - Color",this.name=t.name||"",this.readOnly=t.readOnly||!1,this.routes.jsonObject=t.routes||[],this.notes.jsonObject=t.notes||[],ie.set(this,T()),this.validateData()}validateData(){"string"==typeof this.layerName?this.layerName=f.sanitizeToJsString(this.layerName):this.layerName="OSM - Color","string"==typeof this.name?this.name=f.sanitizeToJsString(this.name):this.name="TravelNotes","boolean"!=typeof this.readOnly&&(this.readOnly=!0)}}function de(){return new se}let ce=new Map,ue=new Map,ge=Object.seal({provider:"",transitMode:""}),ve=j.UUID;const he=new class{constructor(){this.map=null,this.travel=de(),this.editedRouteObjId=-1,this.searchData=[],Object.seal(this)}get providers(){return ce}get mapObjects(){return ue}get routing(){return ge}get UUID(){return ve}};const me=new class{constructor(){Object.freeze(this)}getLatLngElevAtDist(e,t){if(e.distance<=t||0>=t)return null;let o=0,a=e.itinerary.itineraryPoints.iterator;for(;o{t.lat=Math.min(t.lat,e[0]),t.lng=Math.min(t.lng,e[1]),o.lat=Math.max(o.lat,e[0]),o.lng=Math.max(o.lng,e[1])}),window.L.latLngBounds(t,o)}getSquareBoundingBox(e,t){let o=t/6371e3*d.fromRadians,a=e[0]*d.toRadians,n=Math.acos((Math.cos(t/6371e3)-Math.sin(a)**2)/Math.cos(a)**2)*d.fromRadians;return window.L.latLngBounds(window.L.latLng([e[0]-o,e[1]-n]),window.L.latLng([e[0]+o,e[1]+n]))}project(e,t){let o=he.map.project(window.L.latLng(e),t);return[o.x,o.y]}screenCoordToLatLng(e,t){let o=he.map.containerPointToLatLng(window.L.point(e,t));return[o.lat,o.lng]}addPoints(e,t){return[e[0]+t[0],e[1]+t[1]]}subtrackPoints(e,t){return[e[0]-t[0],e[1]-t[1]]}};function pe(){let e=0,t=0,o=0,a=0,n=0,r=0,i=!1,l=he.map.getCenter(),s=0,d=0,c=null,u=null,g=null,v=null,h=null,m=null,p=null,b=null,y=null,N=null,T=null,x=null,L=null,I=!0,j=null,P=null,D=null;function C(e){I&&("Escape"===e.key||"Esc"===e.key?x.click():"Enter"===e.key&&T.click())}function R(i){o+=i.screenX-e,a+=i.screenY-t,o=Math.min(Math.max(o,20),n-g.clientWidth-20),a=Math.max(a,20);let l=r-Math.max(a,0)-20;g.style.top=String(a)+"px",g.style.left=String(o)+"px",g.style["max-height"]=String(l)+"px"}function M(o){try{o.dataTransfer.setData("Text","1")}catch(e){e instanceof Error&&console.error(e)}e=o.screenX,t=o.screenY}function S(){document.removeEventListener("keydown",C,!0),document.querySelector("body").removeChild(c)}function O(){S(),D("Canceled by user")}function A(){let e=null;L&&(e=L(),!e)||(T.removeEventListener("click",A,!1),S(),P(e))}function k(e){"TravelNotes-Background"===e.target.id&&(i=!0,s=e.screenX,d=e.screenY,l=he.map.getCenter())}function U(e){if(i){e.preventDefault(),e.stopPropagation();let t=me.screenCoordToLatLng(s,d),o=me.screenCoordToLatLng(e.screenX,e.screenY);he.map.panTo([l.lat+t[0]-o[0],l.lng+t[1]-o[1]])}}function B(e){"TravelNotes-Background"===e.target.id&&(U(e),i=!1)}function H(e){if("TravelNotes-Background"!==e.target.id)return;let t=he.map.getZoom()-Math.round(e.deltaY/100);t=Math.min(he.map.getMaxZoom(),t),t=Math.max(he.map.getMinZoom(),t),he.map.setZoomAround(window.L.point(e.clientX,e.clientY),t)}function z(e){e.preventDefault()}function F(e,t){P=e,D=t,document.querySelector("body").appendChild(c),document.addEventListener("keydown",C,!0),n=c.clientWidth,r=c.clientHeight,function(){o=(n-g.clientWidth)/2,a=(r-g.clientHeight)/2,o=Math.min(Math.max(o,20),n-g.clientWidth-20),a=Math.max(a,20);let e=r-Math.max(a,0)-20;g.style.top=String(a)+"px",g.style.left=String(o)+"px",g.style["max-height"]=String(e)+"px"}(),j&&j()}c=w.create("div",{id:"TravelNotes-Background",className:"TravelNotes-Background"}),c.addEventListener("dragover",()=>null,!1),c.addEventListener("drop",()=>null,!1),c.addEventListener("mousedown",k,!1),c.addEventListener("mouseup",B,!1),c.addEventListener("mousemove",U,!1),c.addEventListener("wheel",H,!1),c.addEventListener("contextmenu",z,!1),g=w.create("div",{className:"TravelNotes-BaseDialog-Container"},c),u=w.create("div",{className:"TravelNotes-BaseDialog-TopBar",draggable:!0},g),u.addEventListener("dragstart",M,!1),u.addEventListener("dragend",R,!1),x=w.create("div",{textContent:"❌",className:"TravelNotes-BaseDialog-CancelButton",title:E.getText("BaseDialog - Cancel")},u),x.addEventListener("click",O,!1),v=w.create("div",{className:"TravelNotes-BaseDialog-HeaderDiv"},g),h=w.create("div",{className:"TravelNotes-BaseDialog-ContentDiv"},g),m=w.create("div",{className:"TravelNotes-BaseDialog-ErrorDiv TravelNotes-Hidden"},g),p=w.create("div",{className:"TravelNotes-BaseDialog-WaitDiv"},g),N=w.create("div",{className:"TravelNotes-WaitAnimationBullet TravelNotes-Hidden"},y=w.create("div",{className:"TravelNotes-WaitAnimation TravelNotes-Hidden"},p)),b=w.create("div",{className:"TravelNotes-BaseDialog-FooterDiv"},g),T=w.create("div",{textContent:"🆗",className:"TravelNotes-BaseDialog-Button"},b),T.addEventListener("click",A,!1);return new class{constructor(){Object.freeze(this)}set okButtonListener(e){L=e}set keyboardEventListenerEnabled(e){I=e}set onShow(e){j=e}set title(e){v.textContent=e}get content(){return h}get footer(){return b}get okButton(){return T}get cancelButton(){return x}showError(e){m.textContent="",f.sanitizeToHtmlElement(e,m),m.classList.remove("TravelNotes-Hidden")}hideError(){m.textContent="",m.classList.add("TravelNotes-Hidden")}showWait(){N.classList.remove("TravelNotes-Hidden"),y.classList.remove("TravelNotes-Hidden"),T.classList.add("TravelNotes-Hidden")}hideWait(){N.classList.add("TravelNotes-Hidden"),y.classList.add("TravelNotes-Hidden"),T.classList.remove("TravelNotes-Hidden")}show(){return new Promise(F)}}}function fe(e){let t=null,o=null,a=null;function n(){return t.hideError(),!e||!(a.value.length<12)&&a.value.match(RegExp("[0-9]+"))&&a.value.match(RegExp("[a-z]+"))&&a.value.match(RegExp("[A-Z]+"))&&a.value.match(RegExp("[^0-9a-zA-Z]"))?(new window.TextEncoder).encode(a.value):(t.showError("

"+E.getText("PasswordDialog - Password rules1")+"

  • "+E.getText("PasswordDialog - Password rules2")+"
  • "+E.getText("PasswordDialog - Password rules3")+"
  • "+E.getText("PasswordDialog - Password rules4")+"
  • "+E.getText("PasswordDialog - Password rules5")+"
  • "+E.getText("PasswordDialog - Password rules6")+"
"),void a.focus())}return t=pe(),t.title=E.getText("PasswordDialog - password"),t.okButtonListener=n,o=w.create("div",null,t.content),a=w.create("input",{type:"password"},o),t.onShow=function(){a.focus()},t} /** @------------------------------------------------------------------------------------------------------------------------------ @@ -71,7 +71,7 @@ @private @------------------------------------------------------------------------------------------------------------------------------ - */function be(){function e(e){return window.crypto.subtle.importKey("raw",e,{name:"PBKDF2"},!1,["deriveKey"])}function t(e){return window.crypto.subtle.deriveKey({name:"PBKDF2",salt:(new window.TextEncoder).encode("Tire la chevillette la bobinette cherra. Le Petit Chaperon rouge tira la chevillette."),iterations:1e6,hash:"SHA-256"},e,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}return new class{constructor(){Object.freeze(this)}encryptData(o,a,n,r){!function(o,a,n,r){let i=window.crypto.getRandomValues(new Uint8Array(16));r.then(e).then(t).then((function(e){return window.crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,o)})).then((function(e){a(new Blob([i,new Uint8Array(e)],{type:"application/octet-stream"}))})).catch(n)}(o,a,n,r)}decryptData(o,a,n,r){!function(o,a,n,r){r.then(e).then(t).then((function(e){return window.crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(o.slice(0,16))},e,new Uint8Array(o.slice(16)))})).then(a).catch(n)}(o,a,n,r)}}}let ye=null,we=null,Ne=null,Te=null,xe=y.errorsUI.showHelp;function Le(){xe=!Ne.checked}function Ie(){we&&(clearTimeout(we),we=null),ye.classList.remove("TravelNotes-ErrorsUI-Error"),ye.classList.remove("TravelNotes-ErrorsUI-Warning"),ye.classList.remove("TravelNotes-ErrorsUI-Info"),ye.classList.remove("TravelNotes-ErrorsUI-Help"),ye.classList.add("TravelNotes-ErrorsUI-Hidden"),Ne&&(Ne.removeEventListener("change",Le,!1),Ne=null,Te=null),ye.textContent=""}function Ee(e,t){if("Error"===t&&!y.errorsUI.showError||"Warning"===t&&!y.errorsUI.showWarning||"Info"===t&&!y.errorsUI.showInfo||"Help"===t&&!y.errorsUI.showHelp||"Help"===t&&!xe)return;we&&Ie();let o=w.create("div",{id:"TravelNotes-ErrorsUI-Header"},ye);w.create("span",{id:"TravelNotes-ErrorsUI-CancelButton",textContent:"❌"},o).addEventListener("click",Ie,!1),f.sanitizeToHtmlElement(e,w.create("div",{id:"TravelNotes-ErrorsUI-Message"},ye)),ye.classList.add("TravelNotes-ErrorsUI-"+t);let a=y.errorsUI.timeOut;"Help"===t&&(Te=w.create("div",{id:"TravelNotes-ErrorsUI-HelpInputDiv"},ye),Ne=w.create("input",{id:"TravelNotes-ErrorsUI-HelpInput",type:"checkbox"},Te),Ne.addEventListener("change",Le,!1),w.create("label",{id:"TravelNotes-ErrorsUI-HelpInputLabel",for:"TravelNotes-ErrorsUI-HelpInput",textContent:E.getText("ErrorUI - Dont show again")},Te),a=y.errorsUI.helpTimeOut),ye.classList.remove("TravelNotes-ErrorsUI-Hidden"),we=setTimeout(Ie,a)}const je=new class{constructor(){Object.freeze(this)}createUI(){ye||(ye=w.create("div",{id:"TravelNotes-ErrorsUI",className:"TravelNotes-ErrorsUI-Hidden"},document.querySelector("body")))}showError(e){Ee(e,"Error")}showWarning(e){Ee(e,"Warning")}showInfo(e){Ee(e,"Info")}showHelp(e){Ee(e,"Help")}};function Pe(e,t){let o=null,a=null,n=null,r=null,i=null,l=null,s=null,d=null,c=null,u=null,g=null;function v(){let e=[],t=n.childNodes;for(let o=0;op(e)),o.hideWait(),o.hideError(),o.keyboardEventListenerEnabled=!0}function N(e){be().decryptData(e,b,f,fe(!1).show())}function T(e){e.stopPropagation(),o.showWait(),o.keyboardEventListenerEnabled=!1,fetch(window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"APIKeys").then(e=>{200===e.status&&e.ok?e.arrayBuffer().then(N):f(new Error("Invalid http status"))}).catch(e=>{f(e),e instanceof Error&&console.error(e)})}function x(){o.showError(E.getText("APIKeysDialog - An error occurs when saving the keys")),o.hideWait(),o.keyboardEventListenerEnabled=!0}function L(e){o.hideError(),o.hideWait();let t=URL.createObjectURL(e),a=document.createElement("a");a.setAttribute("href",t),a.setAttribute("download","APIKeys"),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(t),o.keyboardEventListenerEnabled=!0}function I(e){e.stopPropagation(),o.hideError(),h()&&(o.showWait(),o.keyboardEventListenerEnabled=!1,be().encryptData((new window.TextEncoder).encode(JSON.stringify(v())),L,x,fe(!0).show()))}function P(e){o.hideError(),o.showWait(),o.keyboardEventListenerEnabled=!1,e.stopPropagation();let t=new FileReader;t.onload=function(){be().decryptData(t.result,b,f,fe(!1).show())},t.readAsArrayBuffer(e.target.files[0])}function D(){r.click()}function C(e){e.stopPropagation(),p({providerName:"",providerKey:""})}function R(e){e.stopPropagation(),o.hideError(),h()&&j.saveFile("APIKeys.json",JSON.stringify(v()))}function M(e){e.stopPropagation(),o.hideError();let t=new FileReader;t.onload=function(){try{let e=JSON.parse(t.result);for(;n.firstChild;)n.removeChild(n.firstChild);e.forEach(e=>p(e))}catch(e){o.showError(e.message),e instanceof Error&&console.error(e)}},t.readAsText(e.target.files[0])}function S(){i.click()}function O(){if(o.hideError(),h())return v()}return o=pe(),o.title=E.getText("APIKeysDialog - API keys"),o.okButtonListener=O,a=w.create("div",{id:"TravelNotes-APIKeysDialog-ToolbarDiv"},o.content),window.crypto&&window.crypto.subtle&&window.crypto.subtle.importKey&&window.isSecureContext&&(t&&(l=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Reload from server"),textContent:"🔄"},a),l.addEventListener("click",T,!1)),s=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Save to file"),textContent:"💾"},a),s.addEventListener("click",I,!1),r=w.create("input",{className:"TravelNotes-BaseDialog-OpenFileInput",type:"file"},a),r.addEventListener("change",P,!1),d=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Open file"),textContent:"📂"},a),d.addEventListener("click",D,!1)),c=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - new API key"),textContent:"+"},a),c.addEventListener("click",C,!1),y.APIKeysDialog.haveUnsecureButtons&&(u=w.create("div",{className:"TravelNotes-BaseDialog-Button TravelNotes-APIKeysDialog-AtRightButton",title:E.getText("APIKeysDialog - Save to json file"),textContent:"💾"},a),u.addEventListener("click",R,!1),i=w.create("input",{className:"TravelNotes-BaseDialog-OpenFileInput",type:"file"},a),i.addEventListener("change",M,!1),g=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Open json file"),textContent:"📂"},a),g.addEventListener("click",S,!1)),n=w.create("div",{id:"TravelNotes-APIKeysDialog-DataDiv"},o.content),e.forEach(e=>p(e)),je.showHelp("

"+E.getText("Help - Complete the APIKeys1")+"

"+E.getText("Help - Complete the APIKeys2")+"

"+E.getText("Help - Complete the APIKeys3")+"

"),o}const De=new class{constructor(){Object.freeze(this)}dispatch(e,t){let o=function(e){return-1<["showitinerary","updateitinerary","showtravelnotes","updatetravelnotes","showsearch","updatesearch","setrouteslist","setprovider","providersadded","travelnameupdated","settransitmode"].indexOf(e)?document.getElementById("TravelNotes-UI-MainDiv"):-1<["removeobject","removeallobjects","zoomto","additinerarypointmarker","addsearchpointmarker","addrectangle","addwaypoint","layerchange","geolocationstatuschanged","geolocationpositionchanged","routeupdated","routepropertiesupdated","noteupdated","roadbookupdate","profileclosed"].indexOf(e)?document:null}(e);if(o){let a=new Event(e);t&&(a.data=t),o.dispatchEvent(a)}}};let Ce=new Map,Re=!1;function Me(e){return Ce.get(e.toLowerCase())}function Se(e,t){Ce.set(e.toLowerCase(),t)}function Oe(e){sessionStorage.clear(),Ce.clear();let t=j.storageAvailable("sessionStorage")&&y.APIKeys.saveToSessionStorage;e.forEach(e=>{t&&sessionStorage.setItem(e.providerName.toLowerCase()+"ProviderKey",btoa(e.providerKey)),Se(e.providerName,e.providerKey)}),he.providers.forEach(e=>{e.providerKey=Me(e.name)||""}),De.dispatch("providersadded")}function Ae(e){Oe(JSON.parse((new TextDecoder).decode(e)))}function ke(e){e instanceof Error&&console.error(e),e&&"Canceled by user"!==e&&je.showError(E.getText("APIKeysManager - An error occurs when reading the APIKeys file"))}function Ue(e){window.isSecureContext&&window.crypto&&window.crypto.subtle&&window.crypto.subtle.importKey&&be().decryptData(e,Ae,ke,fe(!1).show())}const Be=new class{constructor(){Object.freeze(this)}hasKey(e){return Ce.has(e.toLowerCase())}getUrl(e){if(e.providerKeyNeeded){let t=Ce.get(e.providerName.toLowerCase());return t?e.url.replace("{providerKey}",t):null}return e.url}setKeysFromServerFile(){let e=!1;0!==function(){let e=0;for(let t=0;t{e.providerKey=Me(e.name)||""}),e}()&&(De.dispatch("providersadded"),e=!0),fetch(window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"APIKeys").then(t=>{200===t.status&&t.ok&&(Re=!0,e||t.arrayBuffer().then(Ue))}).catch(e=>{e instanceof Error&&console.error(e)})}setKeysFromDialog(){let e=[];Ce.forEach((t,o)=>e.push({providerName:o,providerKey:t})),e.sort((e,t)=>e.providerName.localeCompare(t.providerName)),Pe(e,Re).show().then(e=>Oe(e)).catch(e=>{e instanceof Error&&console.error(e)})}addProvider(e){let t=e.name.toLowerCase(),o=Me(t);e.providerKeyNeeded&&!o&&j.storageAvailable("sessionStorage")&&(o=sessionStorage.getItem(t),o&&(o=atob(o))),e.providerKeyNeeded&&o&&(e.providerKey=o),he.providers.set(e.name.toLowerCase(),e)}};const ze=new class{constructor(){Object.freeze(this)}getRoute(e){let t=null;return t=he.travel.routes.getAt(e),t||e===he.travel.editedRoute.objId&&(t=he.travel.editedRoute),t}getNoteAndRoute(e){let t=null,o=null;if(t=he.travel.notes.getAt(e),!t){let a=he.travel.routes.iterator;for(;!a.done&&!t;)t=a.value.notes.getAt(e),t&&(o=a.value);t||(t=he.travel.editedRoute.notes.getAt(e),t&&(o=he.travel.editedRoute))}return Object.freeze({note:t,route:o})}getWayPoint(e){let t=he.travel.editedRoute.wayPoints.getAt(e);if(!t){let o=he.travel.routes.iterator;for(;!o.done&&!t;)t=o.value.wayPoints.getAt(e)}return t}};function He(){let e="",t="",o=null;function a(a){o=ze.getRoute(a),o&&(t='time="'+(new Date).toISOString()+'" ',e='\n',e+='',function(){let a=o.wayPoints.iterator;for(;!a.done;)e+='\n\t"}(),function(){e+="\n\t";let a=o.itinerary.maneuvers.iterator;for(;!a.done;){let n=o.itinerary.itineraryPoints.getAt(a.value.itineraryPointObjId),r=a.value.instruction.replace("&","&").replace('"',"'").replace('"',""e;").replace(">",">").replace("<","<");e+='\n\t\t'}e+="\n\t"}(),function(){e+="\n\t",e+="\n\t\t";let a=o.itinerary.itineraryPoints.iterator;for(;!a.done;)e+='\n\t\t\t";e+="\n\t\t",e+="\n\t"}(),e+="\n",function(){let t=(""===he.travel.name?"":he.travel.name+" - ")+o.computedName;""===t&&(t="TravelNote"),t+=".gpx",j.saveFile(t,e)}())}return new class{constructor(){Object.freeze(this)}routeToGpx(e){a(e)}}}class Fe{constructor(e,t,o){this.red="number"==typeof e&&255>=e?e:255,this.green="number"==typeof t&&255>=t?t:255,this.blue="number"==typeof o&&255>=o?o:255,Object.seal(this)}get cssColor(){return"#"+this.red.toString(16).padStart(2,"0")+this.green.toString(16).padStart(2,"0")+this.blue.toString(16).padStart(2,"0")}set cssColor(e){this.red=parseInt(e.substr(1,2),16),this.green=parseInt(e.substr(3,2),16),this.blue=parseInt(e.substr(5,2),16)}clone(){return new Fe(this.red,this.green,this.blue)}copyTo(e){e.red=this.red,e.green=this.green,e.blue=this.blue}}function Ve(e){let t=null,o=null,a=null,n=null,r=null,i=null;function l(){return e.color=document.getElementById("TravelNotes-ColorDialog-ColorSampleDiv").color.cssColor,e.computedName!==a.value&&(e.name=a.value),e.width=parseInt(n.value),e.chain=r.checked,e.dashArray=i.selectedIndex,e.validateData(),e}return t=function(e){let t=null,o=new Fe;o.cssColor=e;let a=null,n=[],r=null,i=null,l=null,s=null;function d(e){o=e.target.color.clone(),r.value=o.red,i.value=o.green,l.value=o.blue,s.style["background-color"]=o.cssColor,s.color=o}function c(e){for(let t=0;t<6;++t)for(let o=0;o<6;++o){let a=n[6*t+o];a.color.red=e,a.style["background-color"]=a.color.cssColor}}function u(e){c(Math.ceil(2.55*e.target.valueAsNumber))}function g(e){c(255-e.target.color.blue)}function v(){o.red=parseInt(r.value),o.green=parseInt(i.value),o.blue=parseInt(l.value),s.style["background-color"]=o.cssColor,s.color=o}return t=pe(),t.title=E.getText("ColorDialog - Colors"),a=w.create("div",{id:"TravelNotes-ColorDialog-ColorDiv"},t.content),function(){let e=w.create("div",null,a),t=new Fe(y.colorDialog.initialRed,0,0);for(let o=0;o<6;++o){let o=w.create("div",{className:"TravelNotes-ColorDialog-RowColorDiv"},e);t.green=0;for(let e=0;e<6;++e){let e=w.create("div",{className:"TravelNotes-ColorDialog-CellColorDiv"},o);e.color=t.clone(),e.style["background-color"]=t.cssColor,e.addEventListener("click",d,!1),t.green+=51,n.push(e)}t.blue+=51}}(),y.colorDialog.haveSlider?function(){let e=w.create("div",null,a),t=Math.ceil(y.colorDialog.initialRed*(100/255)),o=w.create("input",{type:"range",className:"TravelNotes-ColorDialog-SliderInput",value:t,min:0,max:100,step:20},e);o.addEventListener("input",u,!1),o.focus()}():function(){let e=w.create("div",null,a),t=new Fe(255,0,0),o=w.create("div",{className:"TravelNotes-ColorDialog-RowColorDiv",id:"TravelNotes-ColorDialog-RedButtonsRowDiv"},e);for(let e=0;e<6;++e){let e=w.create("div",{className:"TravelNotes-ColorDialog-CellColorDiv"},o);e.color=t.clone(),e.style["background-color"]=e.color.cssColor,e.addEventListener("click",g,!1),t.green+=51,t.blue+=51}}(),function(){let e=w.create("div",null,a);w.create("text",{value:E.getText("ColorDialog - Red")},e),r=w.create("input",{type:"number",className:"TravelNotes-ColorDialog-NumberInput",value:o.red,min:0,max:255},e),r.addEventListener("input",v,!1),w.create("text",{value:E.getText("ColorDialog - Green")},e),i=w.create("input",{type:"number",className:"TravelNotes-ColorDialog-NumberInput",value:o.green,min:0,max:255},e),i.addEventListener("input",v,!1),w.create("text",{value:E.getText("ColorDialog - Blue")},e),l=w.create("input",{type:"number",className:"TravelNotes-ColorDialog-NumberInput",value:o.blue,min:0,max:255},e),l.addEventListener("input",v,!1)}(),s=w.create("div",{id:"TravelNotes-ColorDialog-ColorSampleDiv"},a),s.style["background-color"]=o.cssColor,s.color=o,t}(e.color),t.title=E.getText("RoutePropertiesDialog - Route properties"),t.okButtonListener=l,o=w.create("div",{id:"TravelNotes-RoutePropertiesDialog-MainDataDiv"}),t.content.insertBefore(o,t.content.firstChild),function(){let t=w.create("div",null,o);w.create("div",{textContent:E.getText("RoutePropertiesDialog - Name")},t);let n=w.create("div",{className:"TravelNotes-RoutePropertiesDialog-DataDiv",id:"TravelNotes-RoutePropertiesDialog-NameInputDiv"},t);a=w.create("input",{type:"text",id:"TravelNotes-RoutePropertiesDialog-NameInput",value:e.computedName},n)}(),function(){let t=w.create("div",{className:"TravelNotes-RoutePropertiesDialog-DataDiv"},o);w.create("text",{value:E.getText("RoutePropertiesDialog - Width")},w.create("span",null,t)),n=w.create("input",{type:"number",id:"TravelNotes-RoutePropertiesDialog-WidthInput",value:e.width,min:1,max:40},t)}(),function(){let t=w.create("div",{className:"TravelNotes-RoutePropertiesDialog-DataDiv"},o);w.create("text",{value:E.getText("RoutePropertiesDialog - Linetype")},w.create("span",null,t)),i=w.create("select",null,t);let a=y.route.dashChoices;for(let e=0;ee.push(t.latLng)),o.notes.forEach(e=>t(e))}return new class{constructor(){Object.freeze(this)}zoomToLatLng(e){De.dispatch("zoomto",{latLng:e})}zoomToManeuver(e){let t=he.travel.editedRoute.itinerary.maneuvers.getAt(e).itineraryPointObjId,o=he.travel.editedRoute.itinerary.itineraryPoints.getAt(t).latLng;De.dispatch("zoomto",{latLng:o})}zoomToNote(o){e=[],t(ze.getNoteAndRoute(o).note),De.dispatch("zoomto",{geometry:[e]})}zoomToRoute(t){e=[],o(ze.getRoute(t)),De.dispatch("zoomto",{geometry:[e]})}zoomToTravel(){e=[],he.travel.routes.forEach(e=>o(e)),-1!==he.travel.editedRouteObjId&&o(he.travel.editedRoute),he.travel.notes.forEach(e=>t(e)),De.dispatch("zoomto",{geometry:[e]})}zoomToPoi(e){De.dispatch("zoomto",e)}}} + */function be(){function e(e){return window.crypto.subtle.importKey("raw",e,{name:"PBKDF2"},!1,["deriveKey"])}function t(e){return window.crypto.subtle.deriveKey({name:"PBKDF2",salt:(new window.TextEncoder).encode("Tire la chevillette la bobinette cherra. Le Petit Chaperon rouge tira la chevillette."),iterations:1e6,hash:"SHA-256"},e,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}return new class{constructor(){Object.freeze(this)}encryptData(o,a,n,r){!function(o,a,n,r){let i=window.crypto.getRandomValues(new Uint8Array(16));r.then(e).then(t).then((function(e){return window.crypto.subtle.encrypt({name:"AES-GCM",iv:i},e,o)})).then((function(e){a(new Blob([i,new Uint8Array(e)],{type:"application/octet-stream"}))})).catch(n)}(o,a,n,r)}decryptData(o,a,n,r){!function(o,a,n,r){r.then(e).then(t).then((function(e){return window.crypto.subtle.decrypt({name:"AES-GCM",iv:new Uint8Array(o.slice(0,16))},e,new Uint8Array(o.slice(16)))})).then(a).catch(n)}(o,a,n,r)}}}let ye=null,we=null,Ne=null,Te=null,xe=y.errorsUI.showHelp;function Le(){xe=!Ne.checked}function Ie(){we&&(clearTimeout(we),we=null),ye.classList.remove("TravelNotes-ErrorsUI-Error"),ye.classList.remove("TravelNotes-ErrorsUI-Warning"),ye.classList.remove("TravelNotes-ErrorsUI-Info"),ye.classList.remove("TravelNotes-ErrorsUI-Help"),ye.classList.add("TravelNotes-ErrorsUI-Hidden"),Ne&&(Ne.removeEventListener("change",Le,!1),Ne=null,Te=null),ye.textContent=""}function Ee(e,t){if("Error"===t&&!y.errorsUI.showError||"Warning"===t&&!y.errorsUI.showWarning||"Info"===t&&!y.errorsUI.showInfo||"Help"===t&&!y.errorsUI.showHelp||"Help"===t&&!xe)return;we&&Ie();let o=w.create("div",{id:"TravelNotes-ErrorsUI-Header"},ye);w.create("span",{id:"TravelNotes-ErrorsUI-CancelButton",textContent:"❌"},o).addEventListener("click",Ie,!1),f.sanitizeToHtmlElement(e,w.create("div",{id:"TravelNotes-ErrorsUI-Message"},ye)),ye.classList.add("TravelNotes-ErrorsUI-"+t);let a=y.errorsUI.timeOut;"Help"===t&&(Te=w.create("div",{id:"TravelNotes-ErrorsUI-HelpInputDiv"},ye),Ne=w.create("input",{id:"TravelNotes-ErrorsUI-HelpInput",type:"checkbox"},Te),Ne.addEventListener("change",Le,!1),w.create("label",{id:"TravelNotes-ErrorsUI-HelpInputLabel",for:"TravelNotes-ErrorsUI-HelpInput",textContent:E.getText("ErrorUI - Dont show again")},Te),a=y.errorsUI.helpTimeOut),ye.classList.remove("TravelNotes-ErrorsUI-Hidden"),we=setTimeout(Ie,a)}const je=new class{constructor(){Object.freeze(this)}createUI(){ye||(ye=w.create("div",{id:"TravelNotes-ErrorsUI",className:"TravelNotes-ErrorsUI-Hidden"},document.querySelector("body")))}showError(e){Ee(e,"Error")}showWarning(e){Ee(e,"Warning")}showInfo(e){Ee(e,"Info")}showHelp(e){Ee(e,"Help")}};function Pe(e,t){let o=null,a=null,n=null,r=null,i=null,l=null,s=null,d=null,c=null,u=null,g=null;function v(){let e=[],t=n.childNodes;for(let o=0;op(e)),o.hideWait(),o.hideError(),o.keyboardEventListenerEnabled=!0}function N(e){be().decryptData(e,b,f,fe(!1).show())}function T(e){e.stopPropagation(),o.showWait(),o.keyboardEventListenerEnabled=!1,fetch(window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"APIKeys").then(e=>{200===e.status&&e.ok?e.arrayBuffer().then(N):f(new Error("Invalid http status"))}).catch(e=>{f(e),e instanceof Error&&console.error(e)})}function x(){o.showError(E.getText("APIKeysDialog - An error occurs when saving the keys")),o.hideWait(),o.keyboardEventListenerEnabled=!0}function L(e){o.hideError(),o.hideWait();let t=URL.createObjectURL(e),a=document.createElement("a");a.setAttribute("href",t),a.setAttribute("download","APIKeys"),a.style.display="none",document.body.appendChild(a),a.click(),document.body.removeChild(a),window.URL.revokeObjectURL(t),o.keyboardEventListenerEnabled=!0}function I(e){e.stopPropagation(),o.hideError(),h()&&(o.showWait(),o.keyboardEventListenerEnabled=!1,be().encryptData((new window.TextEncoder).encode(JSON.stringify(v())),L,x,fe(!0).show()))}function P(e){o.hideError(),o.showWait(),o.keyboardEventListenerEnabled=!1,e.stopPropagation();let t=new FileReader;t.onload=function(){be().decryptData(t.result,b,f,fe(!1).show())},t.readAsArrayBuffer(e.target.files[0])}function D(){r.click()}function C(e){e.stopPropagation(),p({providerName:"",providerKey:""})}function R(e){e.stopPropagation(),o.hideError(),h()&&j.saveFile("APIKeys.json",JSON.stringify(v()))}function M(e){e.stopPropagation(),o.hideError();let t=new FileReader;t.onload=function(){try{let e=JSON.parse(t.result);for(;n.firstChild;)n.removeChild(n.firstChild);e.forEach(e=>p(e))}catch(e){o.showError(e.message),e instanceof Error&&console.error(e)}},t.readAsText(e.target.files[0])}function S(){i.click()}function O(){if(o.hideError(),h())return v()}return o=pe(),o.title=E.getText("APIKeysDialog - API keys"),o.okButtonListener=O,a=w.create("div",{id:"TravelNotes-APIKeysDialog-ToolbarDiv"},o.content),window.crypto&&window.crypto.subtle&&window.crypto.subtle.importKey&&window.isSecureContext&&(t&&(l=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Reload from server"),textContent:"🔄"},a),l.addEventListener("click",T,!1)),s=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Save to file"),textContent:"💾"},a),s.addEventListener("click",I,!1),r=w.create("input",{className:"TravelNotes-BaseDialog-OpenFileInput",type:"file"},a),r.addEventListener("change",P,!1),d=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Open file"),textContent:"📂"},a),d.addEventListener("click",D,!1)),c=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - new API key"),textContent:"+"},a),c.addEventListener("click",C,!1),y.APIKeysDialog.haveUnsecureButtons&&(u=w.create("div",{className:"TravelNotes-BaseDialog-Button TravelNotes-APIKeysDialog-AtRightButton",title:E.getText("APIKeysDialog - Save to json file"),textContent:"💾"},a),u.addEventListener("click",R,!1),i=w.create("input",{className:"TravelNotes-BaseDialog-OpenFileInput",type:"file"},a),i.addEventListener("change",M,!1),g=w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("APIKeysDialog - Open json file"),textContent:"📂"},a),g.addEventListener("click",S,!1)),n=w.create("div",{id:"TravelNotes-APIKeysDialog-DataDiv"},o.content),e.forEach(e=>p(e)),je.showHelp("

"+E.getText("Help - Complete the APIKeys1")+"

"+E.getText("Help - Complete the APIKeys2")+"

"+E.getText("Help - Complete the APIKeys3")+"

"),o}const De=new class{constructor(){Object.freeze(this)}dispatch(e,t){let o=function(e){return-1<["showitinerary","updateitinerary","showtravelnotes","updatetravelnotes","showsearch","updatesearch","setrouteslist","setprovider","providersadded","travelnameupdated","settransitmode"].indexOf(e)?document.getElementById("TravelNotes-UI-MainDiv"):-1<["removeobject","removeallobjects","zoomto","additinerarypointmarker","addsearchpointmarker","addrectangle","addwaypoint","layerchange","geolocationstatuschanged","geolocationpositionchanged","routeupdated","routepropertiesupdated","noteupdated","roadbookupdate","profileclosed"].indexOf(e)?document:null}(e);if(o){let a=new Event(e);t&&(a.data=t),o.dispatchEvent(a)}}};let Ce=new Map,Re=!1;function Me(e){return Ce.get(e.toLowerCase())}function Se(e,t){Ce.set(e.toLowerCase(),t)}function Oe(e){sessionStorage.clear(),Ce.clear();let t=j.storageAvailable("sessionStorage")&&y.APIKeys.saveToSessionStorage;e.forEach(e=>{t&&sessionStorage.setItem(e.providerName.toLowerCase()+"ProviderKey",btoa(e.providerKey)),Se(e.providerName,e.providerKey)}),he.providers.forEach(e=>{e.providerKey=Me(e.name)||""}),De.dispatch("providersadded")}function Ae(e){Oe(JSON.parse((new TextDecoder).decode(e)))}function ke(e){e instanceof Error&&console.error(e),e&&"Canceled by user"!==e&&je.showError(E.getText("APIKeysManager - An error occurs when reading the APIKeys file"))}function Ue(e){window.isSecureContext&&window.crypto&&window.crypto.subtle&&window.crypto.subtle.importKey&&be().decryptData(e,Ae,ke,fe(!1).show())}const Be=new class{constructor(){Object.freeze(this)}hasKey(e){return Ce.has(e.toLowerCase())}getUrl(e){if(e.providerKeyNeeded){let t=Ce.get(e.providerName.toLowerCase());return t?e.url.replace("{providerKey}",t):null}return e.url}setKeysFromServerFile(){let e=!1;0!==function(){let e=0;for(let t=0;t{e.providerKey=Me(e.name)||""}),e}()&&(De.dispatch("providersadded"),e=!0),fetch(window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"APIKeys").then(t=>{200===t.status&&t.ok&&(Re=!0,e||t.arrayBuffer().then(Ue))}).catch(e=>{e instanceof Error&&console.error(e)})}setKeysFromDialog(){let e=[];Ce.forEach((t,o)=>e.push({providerName:o,providerKey:t})),e.sort((e,t)=>e.providerName.localeCompare(t.providerName)),Pe(e,Re).show().then(e=>Oe(e)).catch(e=>{e instanceof Error&&console.error(e)})}addProvider(e){let t=e.name.toLowerCase(),o=Me(t);e.providerKeyNeeded&&!o&&j.storageAvailable("sessionStorage")&&(o=sessionStorage.getItem(t),o&&(o=atob(o))),e.providerKeyNeeded&&o&&(e.providerKey=o),he.providers.set(e.name.toLowerCase(),e)}};const He=new class{constructor(){Object.freeze(this)}getRoute(e){let t=null;return t=he.travel.routes.getAt(e),t||e===he.travel.editedRoute.objId&&(t=he.travel.editedRoute),t}getNoteAndRoute(e){let t=null,o=null;if(t=he.travel.notes.getAt(e),!t){let a=he.travel.routes.iterator;for(;!a.done&&!t;)t=a.value.notes.getAt(e),t&&(o=a.value);t||(t=he.travel.editedRoute.notes.getAt(e),t&&(o=he.travel.editedRoute))}return Object.freeze({note:t,route:o})}getWayPoint(e){let t=he.travel.editedRoute.wayPoints.getAt(e);if(!t){let o=he.travel.routes.iterator;for(;!o.done&&!t;)t=o.value.wayPoints.getAt(e)}return t}};function ze(){let e="",t="",o=null;function a(a){o=He.getRoute(a),o&&(t='time="'+(new Date).toISOString()+'" ',e='\n',e+='',function(){let a=o.wayPoints.iterator;for(;!a.done;)e+='\n\t"}(),function(){e+="\n\t";let a=o.itinerary.maneuvers.iterator;for(;!a.done;){let n=o.itinerary.itineraryPoints.getAt(a.value.itineraryPointObjId),r=a.value.instruction.replace("&","&").replace('"',"'").replace('"',""e;").replace(">",">").replace("<","<");e+='\n\t\t'}e+="\n\t"}(),function(){e+="\n\t",e+="\n\t\t";let a=o.itinerary.itineraryPoints.iterator;for(;!a.done;)e+='\n\t\t\t";e+="\n\t\t",e+="\n\t"}(),e+="\n",function(){let t=(""===he.travel.name?"":he.travel.name+" - ")+o.computedName;""===t&&(t="TravelNote"),t+=".gpx",j.saveFile(t,e)}())}return new class{constructor(){Object.freeze(this)}routeToGpx(e){a(e)}}}class Fe{constructor(e,t,o){this.red="number"==typeof e&&255>=e?e:255,this.green="number"==typeof t&&255>=t?t:255,this.blue="number"==typeof o&&255>=o?o:255,Object.seal(this)}get cssColor(){return"#"+this.red.toString(16).padStart(2,"0")+this.green.toString(16).padStart(2,"0")+this.blue.toString(16).padStart(2,"0")}set cssColor(e){this.red=parseInt(e.substr(1,2),16),this.green=parseInt(e.substr(3,2),16),this.blue=parseInt(e.substr(5,2),16)}clone(){return new Fe(this.red,this.green,this.blue)}copyTo(e){e.red=this.red,e.green=this.green,e.blue=this.blue}}function Ve(e){let t=null,o=null,a=null,n=null,r=null,i=null;function l(){return e.color=document.getElementById("TravelNotes-ColorDialog-ColorSampleDiv").color.cssColor,e.computedName!==a.value&&(e.name=a.value),e.width=parseInt(n.value),e.chain=r.checked,e.dashArray=i.selectedIndex,e.validateData(),e}return t=function(e){let t=null,o=new Fe;o.cssColor=e;let a=null,n=[],r=null,i=null,l=null,s=null;function d(e){o=e.target.color.clone(),r.value=o.red,i.value=o.green,l.value=o.blue,s.style["background-color"]=o.cssColor,s.color=o}function c(e){for(let t=0;t<6;++t)for(let o=0;o<6;++o){let a=n[6*t+o];a.color.red=e,a.style["background-color"]=a.color.cssColor}}function u(e){c(Math.ceil(2.55*e.target.valueAsNumber))}function g(e){c(255-e.target.color.blue)}function v(){o.red=parseInt(r.value),o.green=parseInt(i.value),o.blue=parseInt(l.value),s.style["background-color"]=o.cssColor,s.color=o}return t=pe(),t.title=E.getText("ColorDialog - Colors"),a=w.create("div",{id:"TravelNotes-ColorDialog-ColorDiv"},t.content),function(){let e=w.create("div",null,a),t=new Fe(y.colorDialog.initialRed,0,0);for(let o=0;o<6;++o){let o=w.create("div",{className:"TravelNotes-ColorDialog-RowColorDiv"},e);t.green=0;for(let e=0;e<6;++e){let e=w.create("div",{className:"TravelNotes-ColorDialog-CellColorDiv"},o);e.color=t.clone(),e.style["background-color"]=t.cssColor,e.addEventListener("click",d,!1),t.green+=51,n.push(e)}t.blue+=51}}(),y.colorDialog.haveSlider?function(){let e=w.create("div",null,a),t=Math.ceil(y.colorDialog.initialRed*(100/255)),o=w.create("input",{type:"range",className:"TravelNotes-ColorDialog-SliderInput",value:t,min:0,max:100,step:20},e);o.addEventListener("input",u,!1),o.focus()}():function(){let e=w.create("div",null,a),t=new Fe(255,0,0),o=w.create("div",{className:"TravelNotes-ColorDialog-RowColorDiv",id:"TravelNotes-ColorDialog-RedButtonsRowDiv"},e);for(let e=0;e<6;++e){let e=w.create("div",{className:"TravelNotes-ColorDialog-CellColorDiv"},o);e.color=t.clone(),e.style["background-color"]=e.color.cssColor,e.addEventListener("click",g,!1),t.green+=51,t.blue+=51}}(),function(){let e=w.create("div",null,a);w.create("text",{value:E.getText("ColorDialog - Red")},e),r=w.create("input",{type:"number",className:"TravelNotes-ColorDialog-NumberInput",value:o.red,min:0,max:255},e),r.addEventListener("input",v,!1),w.create("text",{value:E.getText("ColorDialog - Green")},e),i=w.create("input",{type:"number",className:"TravelNotes-ColorDialog-NumberInput",value:o.green,min:0,max:255},e),i.addEventListener("input",v,!1),w.create("text",{value:E.getText("ColorDialog - Blue")},e),l=w.create("input",{type:"number",className:"TravelNotes-ColorDialog-NumberInput",value:o.blue,min:0,max:255},e),l.addEventListener("input",v,!1)}(),s=w.create("div",{id:"TravelNotes-ColorDialog-ColorSampleDiv"},a),s.style["background-color"]=o.cssColor,s.color=o,t}(e.color),t.title=E.getText("RoutePropertiesDialog - Route properties"),t.okButtonListener=l,o=w.create("div",{id:"TravelNotes-RoutePropertiesDialog-MainDataDiv"}),t.content.insertBefore(o,t.content.firstChild),function(){let t=w.create("div",null,o);w.create("div",{textContent:E.getText("RoutePropertiesDialog - Name")},t);let n=w.create("div",{className:"TravelNotes-RoutePropertiesDialog-DataDiv",id:"TravelNotes-RoutePropertiesDialog-NameInputDiv"},t);a=w.create("input",{type:"text",id:"TravelNotes-RoutePropertiesDialog-NameInput",value:e.computedName},n)}(),function(){let t=w.create("div",{className:"TravelNotes-RoutePropertiesDialog-DataDiv"},o);w.create("text",{value:E.getText("RoutePropertiesDialog - Width")},w.create("span",null,t)),n=w.create("input",{type:"number",id:"TravelNotes-RoutePropertiesDialog-WidthInput",value:e.width,min:1,max:40},t)}(),function(){let t=w.create("div",{className:"TravelNotes-RoutePropertiesDialog-DataDiv"},o);w.create("text",{value:E.getText("RoutePropertiesDialog - Linetype")},w.create("span",null,t)),i=w.create("select",null,t);let a=y.route.dashChoices;for(let e=0;ee.push(t.latLng)),o.notes.forEach(e=>t(e))}return new class{constructor(){Object.freeze(this)}zoomToLatLng(e){De.dispatch("zoomto",{latLng:e})}zoomToManeuver(e){let t=he.travel.editedRoute.itinerary.maneuvers.getAt(e).itineraryPointObjId,o=he.travel.editedRoute.itinerary.itineraryPoints.getAt(t).latLng;De.dispatch("zoomto",{latLng:o})}zoomToNote(o){e=[],t(He.getNoteAndRoute(o).note),De.dispatch("zoomto",{geometry:[e]})}zoomToRoute(t){e=[],o(He.getRoute(t)),De.dispatch("zoomto",{geometry:[e]})}zoomToTravel(){e=[],he.travel.routes.forEach(e=>o(e)),-1!==he.travel.editedRouteObjId&&o(he.travel.editedRoute),he.travel.notes.forEach(e=>t(e)),De.dispatch("zoomto",{geometry:[e]})}zoomToPoi(e){De.dispatch("zoomto",e)}}} /** @------------------------------------------------------------------------------------------------------------------------------ @@ -82,7 +82,7 @@ @------------------------------------------------------------------------------------------------------------------------------ */ -function Ze(){let e=null,t=null,o=null,a=0,n=0,r=0,i=0,l=0,s=0,d=null,c=null;function u(e){try{e.dataTransfer.setData("Text","1")}catch(e){e instanceof Error&&console.error(e)}a=e.screenX,n=e.screenY}function g(t){r+=t.screenX-a,i+=t.screenY-n,r=Math.min(Math.max(r,20),l-e.clientWidth-20),i=Math.max(i,20);let o=s-Math.max(i,0)-20;e.style.top=String(i)+"px",e.style.left=String(r)+"px",e.style["max-height"]=String(o)+"px"}function v(){d&&d(),document.querySelector("body").removeChild(e)}return new class{constructor(){Object.freeze(this)}createWindow(){l=he.map.getContainer().clientWidth,s=he.map.getContainer().clientHeight,e=w.create("div",{className:"TravelNotes-FloatWindow-Container"},document.querySelector("body")),function(){let t=w.create("div",{className:"TravelNotes-FloatWindow-TopBar",draggable:!0},e);t.addEventListener("dragstart",u,!1),t.addEventListener("dragend",g,!1),w.create("div",{textContent:"❌",className:"TravelNotes-FloatWindow-CancelButton",title:E.getText("FloatWindow - Close")},t).addEventListener("click",v,!1)}(),t=w.create("div",{className:"TravelNotes-FloatWindow-HeaderDiv"},e),o=w.create("div",{className:"TravelNotes-FloatWindow-ContentDiv"},e)}close(){v()}set onClose(e){d=e}update(...e){!function(e){c&&c(e)}(e)}set onUpdate(e){c=e}get header(){return t}get content(){return o}}}let Xe=null,qe=null,Ge=null,Je=-1,Ye=-1,$e=-1,Qe=[],et=null,tt=null;function ot(e){-1!==$e&&qe.childNodes[$e+1].firstChild.classList.remove("TravelNotes-ContextMenu-ItemSelected"),e?(qe.childNodes[Je+1].firstChild.classList.add("TravelNotes-ContextMenu-ItemSelected"),$e=Je):(qe.childNodes[Ye+1].firstChild.classList.add("TravelNotes-ContextMenu-ItemSelected"),$e=Ye,Je=Ye)}function at(e){qe&&("Escape"===e.key||"Esc"===e.key?(e.stopPropagation(),et.click()):"ArrowDown"===e.key||"ArrowRight"===e.key||"Tab"===e.key?(e.stopPropagation(),Je=-1===Je||Qe.length-1===Je?0:++Je,ot(!0)):"ArrowUp"===e.key||"ArrowLeft"===e.key?(e.stopPropagation(),Je=-1===Je||0===Je?Qe.length-1:--Je,ot(!0)):"Home"===e.key?(e.stopPropagation(),Je=0,ot(!0)):"End"===e.key?(e.stopPropagation(),Je=Qe.length-1,ot(!0)):"Enter"===e.key&&Je>=0&&Qe[Je].action&&(e.stopPropagation(),ot(!0),qe.childNodes[$e+1].firstChild.click()))}function nt(e){e.stopPropagation();let t=Qe[e.target.menuItem];et.click(),t.param?t.action.call(t.context,t.param):t.action.call(t.context)}function rt(e){Ye=e.target.objId,ot(!1)}function it(){Ge&&(clearTimeout(Ge),Ge=null),document.removeEventListener("keydown",at,!0),tt.removeChild(qe),Xe=null,qe=null,Je=-1,Ye=-1,$e=-1,Qe=[],et=null,tt=null}function lt(e,t,o){function a(){if(Xe=e,qe)return Ge&&(clearTimeout(Ge),Ge=null),void it();qe=null,Je=-1,Ye=-1,$e=-1,et=null,tt=o||document.querySelector("body"),Qe=t,qe=w.create("div",{id:"TravelNotes-ContextMenu-Container",className:"TravelNotes-ContextMenu-Container"},tt),0{Ge&&(clearTimeout(Ge),Ge=null)},!1),qe.addEventListener("mouseleave",()=>{Ge=setTimeout(it,y.contextMenu.timeout)},!1)),et=w.create("div",{textContent:"❌",className:"TravelNotes-ContextMenu-CloseButton",title:E.getText("ContextMenu - Close")},qe),et.addEventListener("click",it,!1),function(){let e=0;Qe.forEach(t=>{let o=w.create("div",{className:"TravelNotes-ContextMenu-ItemContainer"},qe),a=w.create("div",{textContent:t.name,id:"TravelNotes-ContextMenu-Item"+e,objId:e,className:t.action?"TravelNotes-ContextMenu-Item":"TravelNotes-ContextMenu-Item TravelNotes-ContextMenu-ItemDisabled"},o);a.addEventListener("mouseenter",rt,!1),t.action&&a.addEventListener("click",nt,!1),a.menuItem=e,++e})}(),function(){let e=document.querySelector("body"),t=w.create("div",{className:"TravelNotes-ContextMenu-DummyDiv"},e),a=t.clientWidth,n=t.clientHeight;e.removeChild(t);let r=Math.min(Xe.originalEvent.clientY,n-qe.clientHeight-20),i=Math.min(Xe.originalEvent.clientX,a-qe.clientWidth-20);o?(qe.style.top=String(r)+"px",qe.style.right=String(20)+"px"):(qe.style.top=String(r)+"px",qe.style.left=String(i)+"px")}(),document.addEventListener("keydown",at,!0)}return new class{constructor(){Object.freeze(this)}show(){a()}}}let st=!1;const dt=Math.max(y.geoCoder.distances.hamlet,y.geoCoder.distances.village,y.geoCoder.distances.city,y.geoCoder.distances.town),ct=Object.freeze({atStart:-1,onRoute:0,atEnd:1});function ut(){let e=y.geoCoder.osmCityAdminLevel.DEFAULT,o=Object.seal({latLng:[r.defaultValue,r.defaultValue],distance:t.defaultValue}),a=null,n=null,i=new Map,l=new Map,c=[],g={},v=null,h=null,m=null,p=ct.onRoute,f=[0,0],b=0,w=null,N=y.note.svgIcon.zoom,T=y.note.svgIcon.angleDistance,x=" ",L="",I="",j="";function P(e){let t=!1;return n.wayPoints.forEach(o=>{Math.abs(e.lat-o.lat)<5e-6&&Math.abs(e.lng-o.lng)<5e-6&&(t=!0)}),!t&&(a.lat!==e.lat||a.lng!==e.lng)}function D(r,D){!function(t){i.clear(),l.clear(),c=[],g={hamlet:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.hamlet},village:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.village},city:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.city},town:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.town}},t.elements.forEach(t=>{switch(t.type){case"area":{let o=t.tags.name;y.nominatim.language&&"*"!==y.nominatim.language&&t.tags["name:"+y.nominatim.language]&&(o=t.tags["name:"+y.nominatim.language]),c[Number.parseInt(t.tags.admin_level)]=o,"2"===t.tags.admin_level&&(e=y.geoCoder.osmCityAdminLevel[t.tags["ISO3166-1"]]||e)}break;case"way":t.nodesIds=t.nodes,delete t.nodes,i.set(t.id,t);break;case"node":if(l.set(t.id,t),t.tags&&t.tags.place&&g[t.tags.place]&&t.tags.name){let e=Ke.pointsDistance(o.latLng,[t.lat,t.lon]),a=g[t.tags.place];a.maxDistance>e&&a.distance>e&&(a.distance=e,a.name=t.tags.name)}}})}(r),m=document.createElementNS(u,"svg"),m.setAttributeNS(null,"viewBox",String(s.svgViewboxDim/4)+" "+s.svgViewboxDim/4+" "+s.svgViewboxDim/2+" "+s.svgViewboxDim/2),m.setAttributeNS(null,"class","TravelNotes-SvgIcon"),function(){h=null;let t=null;for(let o=2;o=o?h=c[o]:t=c[o]);v=null;let o=Number.MAX_VALUE;Object.values(g).forEach(e=>{e.distance{o.distance-e>T&&(r=t),e-o.distance>T&&!l&&(i=t,l=!0),e+=t.distance});let s=me.addPoints(me.project(o.latLng,N),f);if(a.objId!==n.itinerary.itineraryPoints.first.objId){let e=me.addPoints(me.project(r.latLng,N),f);b=Math.atan((s[1]-e[1])/(e[0]-s[0]))*d.d180/Math.PI,0>b&&(b+=d.d360),b-=d.d270,0>e[0]-s[0]&&(b+=d.d180)}if(a.objId!==n.itinerary.itineraryPoints.last.objId){let e=me.addPoints(me.project(i.latLng,N),f);for(w=Math.atan((s[1]-e[1])/(e[0]-s[0]))*d.d180/Math.PI,0>e[0]-s[0]&&(w+=d.d180),w-=b;d.d0>w;)w+=d.d360;for(;d.d360{"bike"===n.itinerary.transitMode&&t.tags&&t.tags.rcn_ref&&(h=t),a&&(v=Ke.pointsDistance([t.lat,t.lon],a.latLng),ve&&(m=h)}let f=m&&m.tags&&m.tags.highway&&"mini_roundabout"===m.tags.highway;"bike"===n.itinerary.transitMode&&m&&m.tags&&m.tags.rcn_ref&&m.tags["network:type"]&&"node_network"===m.tags["network:type"]&&(j=m.tags.rcn_ref,L+=E.getText("SvgIconFromOsmFactory - rcnRef",{rcnRef:j}));let b="",w="",N=!1,T=!1;i.forEach(e=>{if(!e.nodesIds.includes(r))return;let t=function(e){return(e.tags.name?e.tags.name:"")+(e.tags.name&&e.tags.ref?" ":"")+(e.tags.ref?"["+e.tags.ref+"]":"")}(e),o=""!==t,a=e.nodesIds.includes(s),n=e.nodesIds.includes(d),i=2*e.nodesIds.filter(e=>e===r).length;if(e.nodesIds[0]===r&&i--,e.nodesIds[e.nodesIds.length-1]===r&&i--,a&&(b=o?t:"???",i--,e.tags.junction&&"roundabout"===e.tags.junction&&(T=!0)),0!==i&&(n&&(w=o?t:"???",i--,e.tags.junction&&"roundabout"===e.tags.junction&&(N=!0)),0!==i&&o))for(;0!==i;)I=""===I?t:I+" ⪥ "+t,i--}),I=ct.atStart===p?"🟢 "+w:ct.atEnd===p?b+" 🔴 ":b+(""===I?"":" ⪥ "+I)+" "+x+" "+w,N&&!T?L+=E.getText("SvgIconFromOsmFactory - entry roundabout"):!N&&T?L+=E.getText("SvgIconFromOsmFactory - exit roundabout"):N&&T&&(L+=E.getText("SvgIconFromOsmFactory - continue roundabout")),f&&(L+=E.getText("SvgIconFromOsmFactory - at the small roundabout on the ground"))}(),function(){let e=-1,t=-1,o=-1,a=[];if(n.itinerary.itineraryPoints.forEach(n=>{e++;let r=me.addPoints(me.project(n.latLng,N),f);a.push(r),r[0]>=0&&r[1]>=0&&r[0]<=s.svgViewboxDim&&r[1]<=s.svgViewboxDim&&(-1===t&&(t=e),o=e)}),-1!==t&&-1!==o){0o&&o++;let r="";for(e=t;e<=o;e++)r+=a[e][0].toFixed(0)+","+a[e][1].toFixed(0)+" ";let i=document.createElementNS(u,"polyline");i.setAttributeNS(null,"points",r),i.setAttributeNS(null,"class","TravelNotes-OSM-Itinerary"),i.setAttributeNS(null,"transform","rotate("+b+","+s.svgViewboxDim/2+","+s.svgViewboxDim/2+")"),m.appendChild(i)}}(),i.forEach(e=>{let t=-1,o=-1,a=-1,n=[];if(e.nodesIds.forEach(e=>{a++;let r=l.get(e),i=me.addPoints(me.project([r.lat,r.lon],N),f);n.push(i),i[0]>=0&&i[1]>=0&&i[0]<=s.svgViewboxDim&&i[1]<=s.svgViewboxDim&&(-1===t&&(t=a),o=a)}),-1!==t&&-1!==o){0o&&o++;let r="";for(a=t;a<=o;a++)r+=n[a][0].toFixed(0)+","+n[a][1].toFixed(0)+" ";let i=document.createElementNS(u,"polyline");i.setAttributeNS(null,"points",r),i.setAttributeNS(null,"class","TravelNotes-OSM-Highway TravelNotes-OSM-Highway-"+e.tags.highway),i.setAttributeNS(null,"transform","rotate("+b+","+s.svgViewboxDim/2+","+s.svgViewboxDim/2+")"),m.appendChild(i)}}),function(){if(""===j)return;let e=document.createElementNS(u,"text");e.textContent=j,e.setAttributeNS(null,"x",String(s.svgViewboxDim/2)),e.setAttributeNS(null,"y",String(.6*s.svgViewboxDim)),e.setAttributeNS(null,"class","TravelNotes-OSM-RcnRef"),m.appendChild(e)}(),st=!1,D(Object.freeze({svg:m,tooltip:L,city:h,place:v,streets:I,latLng:a.latLng}))}function C(e,i){st?i("A request is already running"):(st=!0,m=null,h=null,v=null,x=" ",L="",I="",function(){let e=Number.MAX_VALUE,r=t.defaultValue;n.itinerary.itineraryPoints.forEach(t=>{let n=Ke.pointsDistance(o.latLng,t.latLng);e>n&&(e=n,a=t,o.distance=r),r+=t.distance}),o.latLng=a.latLng}(),fetch(function(){let e=o.latLng[0].toFixed(r.fixed)+","+o.latLng[1].toFixed(r.fixed);return y.overpassApi.url+"?data=[out:json][timeout:"+y.overpassApi.timeOut+"];way[highway](around:"+(1.5*s.svgViewboxDim).toFixed(0)+","+e+")->.a;(.a >;.a;)->.a;.a out;is_in("+e+')->.e;area.e[admin_level][boundary="administrative"];out;node(around:'+dt+","+e+")[place];out;"}()).then(t=>{200===t.status&&t.ok?t.json().then(t=>D(t,e)).catch(e=>{st=!1,i(e)}):(st=!1,i(new Error("An error occurs when callin OverpassAPI")))}))}return new class{constructor(){Object.freeze(this)}getPromiseIconAndAdress(e,t){return o.latLng=e,n=ze.getRoute(t),new Promise(C)}}}const gt=Math.max(y.geoCoder.distances.hamlet,y.geoCoder.distances.village,y.geoCoder.distances.city,y.geoCoder.distances.town);function vt(){let e=null;async function t(t,o,a){let n=t[0].value,r=t[1].value;if("fulfilled"!==t[0].status||"fulfilled"!==t[1].status||200!==n.status||!n.ok||200!==r.status||!r.ok)return void a(new Error("error when calling Nominatim or OverpassAPI"));let i=function(e){let t="";return e.error?{street:null,nameDetails:null,country:null}:(e.address.house_number&&(t+=e.address.house_number+" "),e.address.road?t+=e.address.road+" ":e.address.pedestrian&&(t+=e.address.pedestrian+" "),{street:t,nameDetails:e.namedetails.name,country:e.address.country})}(await n.json()),l=function(t){let o=y.geoCoder.osmCityAdminLevel.DEFAULT,a=[],n={hamlet:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.hamlet},village:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.village},city:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.city},town:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.town}};t.elements.forEach(t=>{if("area"===t.type){let e=t.tags.name;y.nominatim.language&&"*"!==y.nominatim.language&&t.tags["name:"+y.nominatim.language]&&(e=t.tags["name:"+y.nominatim.language]),a[Number.parseInt(t.tags.admin_level)]=e,"2"===t.tags.admin_level&&(o=y.geoCoder.osmCityAdminLevel[t.tags["ISO3166-1"]]||o)}if("node"===t.type&&t.tags&&t.tags.place&&n[t.tags.place]&&t.tags.name){let o=Ke.pointsDistance(e,[t.lat,t.lon]),a=n[t.tags.place];a.maxDistance>o&&a.distance>o&&(a.distance=o,a.name=t.tags.name)}});let r=null,i=null;for(let e=2;e=e?r=a[e]:i=a[e]);let l=null,s=Number.MAX_VALUE;return Object.values(n).forEach(e=>{e.distance.e;area.e[admin_level][boundary="administrative"];out;node(around:'+gt+","+e[0]+","+e[1]+")[place];out;";return Promise.allSettled([fetch(t,{headers:a}),fetch(n)])})().then(e=>t(e,o,a))}return new class{constructor(){Object.freeze(this)}getPromiseAddress(t){return e=t,new Promise(o)}}}let ht=[],mt=[],pt=null,ft=null,bt=null,yt=null;function wt(){mt.forEach(e=>ft.add(w.create("option",{text:f.sanitizeToJsString(e.name)}))),ft.selectedIndex=-1}function Nt(){ht.forEach(e=>{let t=w.create("button",{type:"button",htmlBefore:e.htmlBefore||"",htmlAfter:e.htmlAfter||"",className:"TravelNotes-NoteDialog-EditorButton"},pt);f.sanitizeToHtmlElement(e.title||"?",t),t.addEventListener("click",yt.onButtonClickEventListener,!1)})}function Tt(e){let t=new FileReader;t.onload=function(){try{let e=JSON.parse(t.result);ht=ht.concat(e.editionButtons),mt=mt.concat(e.preDefinedIconsList),mt.sort((e,t)=>e.name.localeCompare(t.name)),document.querySelectorAll(".TravelNotes-NoteDialog-EditorButton").forEach(e=>{e.removeEventListener("click",yt.onButtonClickEventListener,!1),pt.removeChild(e)}),Nt();for(let e=ft.length-1;e>=0;e--)ft.remove(e);wt(),yt.hideError()}catch(e){e instanceof Error&&console.error(e),yt.showError(E.getText("NoteDialogToolbar - An error was found in the json file",{error:e.message}))}},t.readAsText(e.target.files[0])}function xt(){bt.click()}function Lt(e){yt.toggleContents(),e.target.textContent="▼"===e.target.textContent?"▶":"▼"}const It=new class{constructor(){Object.freeze(this)}set selectOptions(e){mt=mt.concat(e),mt.sort((e,t)=>e.name.localeCompare(t.name))}set buttons(e){ht=ht.concat(e)}getIconData(e){return mt[e]}getIconDataFromName(e){let t=mt.find(t=>t.name===e);return t?t.icon:null}createToolbar(e){return yt=e,pt=w.create("div",{className:"TravelNotes-NoteDialog-ToolbarDiv",id:"TravelNotes-NoteDialog-ToolbarDiv"}),ft=w.create("select",{className:"TravelNotes-NoteDialog-Select",id:"TravelNotes-NoteDialog-IconSelect"},pt),ft.addEventListener("change",yt.onSelectEventListener,!1),wt(),bt=w.create("input",{className:"TravelNotes-BaseDialog-OpenFileInput",type:"file"},pt),bt.addEventListener("change",Tt,!1),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("NoteDialog - show hidden contents"),textContent:"▼"},pt).addEventListener("click",Lt,!1),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("NoteDialog - Open a configuration file"),textContent:"📂"},pt).addEventListener("click",xt,!1),Nt(),pt}},Et=l.margin.toFixed(0),jt=(l.margin+l.height).toFixed(0),Pt=(l.margin+l.width).toFixed(0),Dt=l.margin.toFixed(0),Ct=(l.margin+l.width+l.xDeltaText).toFixed(0),Rt=(l.margin-l.xDeltaText).toFixed(0),Mt=l.margin+l.height+l.margin/2;function St(){let e=null,o=1,a=1,n=Number.MAX_VALUE,r=0,i=0,s=null,d=0,c=y.route.elev.smoothCoefficient,g=y.route.elev.smoothPoints;function v(){let e=function(){let e=0,t=0,o=[],a=s.itinerary.itineraryPoints.iterator,n=0,r=a.done;for(o.push({distance:e,elev:a.value.elev}),n+=a.value.distance,r=a.done;!r;){for(e+=d;e>=n&&!r;)n+=a.value.distance,r=a.done;if(!r){let r=(a.value.elev-a.previous.elev)/a.previous.distance;t=a.value.elev-(n-e)*r,o.push({distance:e,elev:t})}}return o.push({distance:n,elev:s.itinerary.itineraryPoints.last.elev}),o}(),t=new Map,o=(e[g].elev-e[0].elev)/g,a=0;for(a=0;a=t;t++)o+=e[t].elev;t.set(e[a].distance,{distance:e[a].distance,elev:o/(2*g+1)})}return a--,o=d*(e[e.length-1].elev-e[e.length-1-g].elev)/(e[e.length-1].distance-e[e.length-1-g].distance),t.set(e[a].distance+d,{distance:e[a].distance+d,elev:e[a].elev+o}),t.set(e[a].distance+2*d,{distance:e[a].distance+2*d,elev:e[a].elev+2*o}),t}function h(d){return s=d,n=Number.MAX_VALUE,r=0,s.itinerary.itineraryPoints.forEach(e=>{r=Math.max(r,e.elev),n=Math.min(n,e.elev)}),i=r-n,o=l.height/i,a=l.width/s.distance,e=document.createElementNS(u,"svg"),e.setAttributeNS(null,"viewBox","0 0 "+(l.width+2*l.margin)+" "+(l.height+2*l.margin)),e.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile"),function(){let t="",n=0,i=0,d=0;s.itinerary.itineraryPoints.forEach(e=>{i=(l.margin+a*n).toFixed(0),d=(l.margin+o*(r-e.elev)).toFixed(0),t+=i+","+d+" ",n+=e.distance});let c=document.createElementNS(u,"polyline");c.setAttributeNS(null,"points",t),c.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-profilePolyline"),e.appendChild(c)}(),function(){let t=Et+","+Dt+" "+Et+","+jt+" "+Pt+","+jt+" "+Pt+","+Dt,o=document.createElementNS(u,"polyline");o.setAttributeNS(null,"points",t),o.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-framePolyline"),e.appendChild(o)}(),function(){let t=Number.MAX_VALUE,a=0;l.vScales.forEach(e=>{let o=Math.abs(i/4-e);o{let t=Math.abs(s.distance/8-e);t"+E.getText("HTMLViewsFactory - Address")+" : "+o.address,w.create("div",{className:e+"NoteHtml-Address"},a)),0!==o.url.length&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Link")+"'+o.url.substr(0,40)+"...",w.create("div",{className:e+"NoteHtml-Url"},a)),0!==o.phone.length){let t=o.phone;if(o.phone.match(/^\+[0-9, ,*,#]*$/)){let e=o.phone.replaceAll(/\u0020/g,""),a=o.phone.replaceAll(/\u0020/g," ");t=E.getText("HTMLViewsFactory - Phone")+" : "+E.getText("HTMLViewsFactory - call")+''+a+""+E.getText("HTMLViewsFactory - Send a sms to")+''+a+""}else t=E.getText("HTMLViewsFactory - Phone")+" : "+o.phone;f.sanitizeToHtmlElement(t,w.create("div",{className:e+"NoteHtml-Phone"},a))}if(f.sanitizeToHtmlElement(j.formatLatLng(o.latLng),w.create("div",{className:e+"NoteHtml-LatLng"},a)),t.route){t.route.chain&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of travel")+" : "+j.formatDistance(o.chainedDistance+o.distance),w.create("div",{className:e+"NoteHtml-Distance"},a)),f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of route")+" : "+j.formatDistance(o.distance),w.create("div",{className:e+"NoteHtml-Distance"},a));let n=t.route.notes.next(o.objId);if(n){let t=n.distance-o.distance;9"+E.getText("HTMLViewsFactory - Next note after")+" : "+j.formatDistance(t),w.create("div",{className:e+"NoteHtml-NextDistance"},a))}}return a}function At(e,t){let o=w.create("div"),a=w.create("div",{className:e+(t.route?"Route-ManeuversAndNotes-IconCell":"Travel-Notes-IconCell")},o),n=1;f.sanitizeToHtmlElement(t.note.iconContent,a),"TravelNotes-Roadbook-"===e&&a.firstChild?("svg"===a.firstChild.tagName?(a.firstChild.setAttributeNS(null,"viewBox","0 0 "+s.svgViewboxDim+" "+s.svgViewboxDim),n=y.note.svgIcon.roadbookFactor):a.firstChild.classList.contains("TravelNotes-MapNoteCategory-0073")&&(n=y.note.svgIcon.roadbookFactor),a.setAttribute("tanwidth",String(t.note.iconWidth*n)+"px"),a.setAttribute("tanheight",String(t.note.iconWidth*n)+"px")):(a.style.width=String(t.note.iconWidth)+"px",a.style.height=String(t.note.iconHeight)+"px");let r=Ot(e,t);return r.className=e+(t.route?"Route-ManeuversAndNotes-Cell":"Travel-Notes-Cell"),o.appendChild(r),o.noteObjId=t.note.objId,o}function kt(e){let t=w.create("div",{className:e+"Travel-Notes"}),o=he.travel.notes.iterator;for(;!o.done;){let a=At(e,{note:o.value,route:null});a.className=e+"Travel-Notes-Row",t.appendChild(a)}return t}function Ut(e,t){let o=w.create("div",{className:e+"Route-Header",id:"route"+t.objId});return f.sanitizeToHtmlElement(t.computedName,w.create("div",{className:e+"Route-Header-Name"},o)),0!==t.distance&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Route distance")+" : "+j.formatDistance(t.distance),w.create("div",{className:e+"Route-Header-Distance"},o)),he.travel.readOnly||"bike"===t.itinerary.transitMode||f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Duration")+" : "+j.formatTime(t.duration),w.create("div",{className:e+"Route-Header-Duration"},o)),t.itinerary.hasProfile&&(f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Ascent")+" : "+String(t.itinerary.ascent.toFixed(0))+" m.",w.create("div",{className:e+"Route-Header-Ascent"},o)),f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Descent")+" : "+String(t.itinerary.descent.toFixed(0))+" m.",w.create("div",{className:e+"Route-Header-Descent"},o))),o}function Bt(e,o){let a=w.create("div");w.create("div",{className:e+"Route-ManeuversAndNotes-IconCell TravelNotes-ManeuverNote-"+o.maneuver.iconName},a);let n=w.create("div",{className:e+"Route-ManeuversAndNotes-Cell"},a);return f.sanitizeToHtmlElement(o.maneuver.instruction,w.create("div",null,n)),o.route.chain&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of travel")+" : "+j.formatDistance(o.route.chainedDistance+o.maneuverDistance),w.create("div",{className:e+"Route-Maneuver-Distance"},n)),f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of route")+" : "+j.formatDistance(o.maneuverDistance),w.create("div",{className:e+"Route-Maneuver-Distance"},n)),t.defaultValue"+E.getText("HTMLViewsFactory - Next maneuver after")+" : "+j.formatDistance(o.maneuver.distance),w.create("div",{className:e+"Route-Maneuver-Distance"},n)),a}function zt(e,t){let o=[],a=t.notes.iterator;for(;!a.done;){let n=At(e,{note:a.value,route:t});n.className=e+"Route-Notes-Row",n.objId=T(),n.latLng=a.value.latLng,n.noteObjId=a.value.objId,n.distance=a.value.distance,o.push(n)}let n=t.itinerary.maneuvers.iterator,r=0;for(;!n.done;){let a=Bt(e,{route:t,maneuver:n.value,maneuverDistance:r});a.className=e+"Route-Maneuvers-Row",a.objId=T(),a.latLng=t.itinerary.itineraryPoints.getAt(n.value.itineraryPointObjId).latLng,a.maneuverObjId=n.value.objId,a.distance=r,o.push(a),r+=n.value.distance}o.sort((e,t)=>e.distance-t.distance);let i=w.create("div",{className:e+"Route-ManeuversAndNotes"});return o.forEach(e=>i.appendChild(e)),i}function Ht(e,t){let o="";""!==t.itinerary.provider&&""!==t.itinerary.transitMode&&(o=E.getText("HTMLViewsFactory - Itinerary computed by {provider} and optimized for {transitMode}",{provider:t.itinerary.provider,transitMode:E.getText("HTMLViewsFactory - TransitMode "+t.itinerary.transitMode)}));let a=w.create("div",{className:e+"RouteFooter"});return f.sanitizeToHtmlElement(o,a),a}function Ft(e,t){let o=w.create("div",{className:e+"RouteProfile"});return f.sanitizeToHtmlElement(E.getText("HTMLViewsFactory - Profile"),o),o.appendChild(St().createSvg(t)),o}function Vt(e){let o=w.create("div",{className:e+"Travel"});o.appendChild(function(e){let o=w.create("div",{className:e+"Travel-Header"});f.sanitizeToHtmlElement(he.travel.name,w.create("div",{className:e+"Travel-Header-Name"},o));let a=t.defaultValue,n=0,r=0,i=he.travel.routes.iterator;for(;!i.done;){let t=i.value.objId===he.editedRouteObjId&&y.routeEditor.showEditedRouteInRoadbook?he.travel.editedRoute:i.value;f.sanitizeToHtmlElement(''+t.computedName+" : "+j.formatDistance(t.distance)+".",w.create("div",{className:e+"Travel-Header-RouteName"},o)),t.chain&&(a+=t.distance,n+=t.itinerary.ascent,r+=t.itinerary.descent)}return f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Travel distance")+" : "+j.formatDistance(a),w.create("div",{className:e+"Travel-Header-TravelDistance"},o)),0!==n&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Travel ascent")+" : "+String(n.toFixed(0))+" m.",w.create("div",{className:e+"Travel-Header-TravelAscent"},o)),0!==r&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Travel descent")+" : "+String(r.toFixed(0))+" m.",w.create("div",{className:e+"Travel-Header-TravelDescent"},o)),o}(e)),o.appendChild(kt(e));let a=he.travel.routes.iterator;for(;!a.done;){let t=y.routeEditor.showEditedRouteInRoadbook&&a.value.objId===he.editedRouteObjId?he.travel.editedRoute:a.value;o.appendChild(Ut(e,t)),t.itinerary.hasProfile&&o.appendChild(Ft(e,t)),o.appendChild(zt(e,t)),o.appendChild(Ht(e,t))}return o.appendChild(function(e){let t=E.getText("HTMLViewsFactory - Travel footer")+'Travel & Notes, © wwwouaiebe 2017 2021 © '+E.getText("HTMLViewsFactory - OpenStreetMap contributors")+"",o=w.create("div",{className:e+"TravelFooter"});return f.sanitizeToHtmlElement(t,o),o}(e)),o}const Wt=new class{constructor(){Object.freeze(this)}getTravelHTML(e){return Vt(e)}getNoteTextAndIconHTML(e,t){return At(e,t)}getNoteTextHTML(e,t){return Ot(e,t)}getEditedRouteManeuversAndNotesHTML(e){return zt(e,he.travel.editedRoute)}getTravelNotesHTML(e){return kt(e)}getRouteHeaderHTML(e,t){return Ut(e,t)}};function Kt(e,t,o){let a=null,n=vt(),i=e.latLng,l=null,d=null,c=null,u=null,g=null,v=null,h=null,m=null,p=null,b=null,N=null,T=null,x=null,L=null,I=null,j=null,P=null,D=null,C=null,R=null,M=null,S=null;function O(){if(""!==L.value){if(""===R.value||""!==f.sanitizeToUrl(R.value).url)return e.iconWidth=Number.parseInt(I.value),e.iconHeight=Number.parseInt(j.value),e.iconContent=L.value,e.popupContent=P.value,e.tooltipContent=D.value,e.address=C.value,e.url=R.value,e.phone=M.value,e.latLng=i,e.validateData(),e;T.showError(E.getText("Notedialog - invalidUrl"))}else T.showError(E.getText("Notedialog - The icon content cannot be empty"))}function A(){""===L.value?l.iconContent="?????":l.iconContent=L.value,l.popupContent=P.value,l.tooltipContent=D.value,l.address=C.value,l.url=R.value,l.phone=M.value,l.iconWidth=I.value,l.iconHeight=j.value,S.textContent="",S.appendChild(Wt.getNoteTextAndIconHTML("TravelNotes-NoteDialog-",{note:l,route:null}))}function k(e){let t=e.street;""!==e.city&&(t+=' '+e.city+""),C.value=t,T.okButton.classList.remove("TravelNotes-Hidden"),A()}function U(e){T.showError(E.getText("Notedialog - an error occurs when searching the adress")),e instanceof Error&&console.error(e),T.okButton.classList.remove("TravelNotes-Hidden"),A()}function B(){T.okButton.classList.add("TravelNotes-Hidden"),n.getPromiseAddress(e.latLng).then(k).catch(U)}function z(e){L.value=e.svg.outerHTML,D.value=e.tooltip;let t=e.streets;""!==e.city&&(t+=' '+e.city+""),e.place&&e.place!==e.city&&(t+=" ("+e.place+")"),C.value=t,i=e.latLng,T.hideWait(),A()}function H(e){T.hideWait(),T.showError(E.getText("Notedialog - an error occurs when creating the SVG icon")),e instanceof Error&&console.error(e),A()}function F(o){let a=It.getIconData(o.target.selectedIndex);"SvgIcon"===a.icon?-1===t?T.showError(E.getText("Notedialog - not possible to create a SVG icon for a travel note")):(T.showWait(),ut().getPromiseIconAndAdress(e.latLng,t).then(z).catch(H)):(T.hideError(),I.value=a.width,j.value=a.height,L.value=a.icon,D.value=a.tooltip,A())}function V(e){if(!a)return;let t=e.target;for(;!t.htmlBefore;)t=t.parentNode;let o=a.selectionStart,n=a.selectionEnd;a.value=a.value.slice(0,o)+t.htmlBefore+(0===t.htmlAfter.length?"":a.value.slice(o,n))+t.htmlAfter+a.value.slice(n),o===n||0===t.htmlAfter.length?(o+=t.htmlBefore.length,n=o):n+=t.htmlBefore.length+t.htmlAfter.length,a.setSelectionRange(o,n),a.focus(),A()}function W(e){a=e.target}function K(e){if(""===e.target.value)return;let t=f.sanitizeToUrl(e.target.value);""===t.errorsString?T.hideError():T.showError(t.errorsString)}function _(){y.noteDialog.mask.iconsDimension&&d.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.iconTextArea&&c.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.popupContent&&u.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.tooltip&&g.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.address&&(v.classList.toggle("TravelNotes-Hidden"),h.classList.toggle("TravelNotes-Hidden")),y.noteDialog.mask.link&&(m.classList.toggle("TravelNotes-Hidden"),p.classList.toggle("TravelNotes-Hidden")),y.noteDialog.mask.phone&&(b.classList.toggle("TravelNotes-Hidden"),N.classList.toggle("TravelNotes-Hidden"))}return l=Q(),l.jsonObject=e.jsonObject,""===l.iconContent&&(l.iconContent="?????"),T=pe(),T.title=E.getText("NoteDialog - Note"),T.okButtonListener=O,x=w.create("div",{id:"TravelNotes-NoteDialog-MainDataDiv"},T.content),x.appendChild(It.createToolbar({onButtonClickEventListener:V,onSelectEventListener:F,hideError:T.hideError,showError:T.showError,toggleContents:_})),d=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),w.create("text",{value:E.getText("NoteDialog - Icon width")},d),I=w.create("input",{type:"number",className:"TravelNotes-NoteDialog-NumberInput",value:0===e.iconWidth?s.width:e.iconWidth},d),I.addEventListener("input",A,!1),w.create("text",{value:E.getText("NoteDialog - Icon height")},d),j=w.create("input",{type:"number",className:"TravelNotes-NoteDialog-NumberInput",value:0===e.iconHeight?s.height:e.iconHeight},d),j.addEventListener("input",A,!1),c=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv",textContent:E.getText("NoteDialog - Icon content")},x),L=w.create("textarea",{className:"TravelNotes-NoteDialog-TextArea",value:e.iconContent,placeholder:"?????",rows:y.noteDialog.areaHeight.icon},c),L.addEventListener("focus",W,!1),L.addEventListener("input",A,!1),g=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv",textContent:E.getText("NoteDialog - Tooltip content")},x),D=w.create("input",{type:"text",className:"TravelNotes-NoteDialog-InputText",value:e.tooltipContent},g),D.addEventListener("focus",W,!1),D.addEventListener("input",A,!1),u=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv",textContent:E.getText("NoteDialog - Text")},x),P=w.create("textarea",{className:"TravelNotes-NoteDialog-TextArea",value:e.popupContent,rows:y.noteDialog.areaHeight.popupContent},u),P.addEventListener("focus",W,!1),P.addEventListener("input",A,!1),v=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("NoteDialog - Reset address"),textContent:"🔄"},v).addEventListener("click",B,!1),w.create("text",{value:E.getText("NoteDialog - Address")},v),h=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),C=w.create("input",{type:"text",value:e.address,className:"TravelNotes-NoteDialog-InputText"},h),C.addEventListener("focus",W,!1),C.addEventListener("input",A,!1),m=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),y.noteDialog.theDevil.addButton&&w.create("text",{value:"👿"},w.create("a",{href:"https://www.google.com/maps/@"+e.lat.toFixed(r.fixed)+","+e.lng.toFixed(r.fixed)+","+y.noteDialog.theDevil.zoomFactor+"z",target:"_blank",title:"Reminder! The devil will know everything about you"},w.create("div",{className:"TravelNotes-BaseDialog-Button",title:"Reminder! The devil will know everything about you"},m))),w.create("text",{value:E.getText("NoteDialog - Link")},m),p=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),R=w.create("input",{type:"text",className:"TravelNotes-NoteDialog-InputText",value:e.url},p),R.addEventListener("focus",()=>{a=null},!1),R.addEventListener("blur",K,!1),R.addEventListener("input",A,!1),b=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),w.create("text",{value:" "+E.getText("NoteDialog - Phone")},b),N=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),M=w.create("input",{type:"text",className:"TravelNotes-NoteDialog-InputText",value:e.phone},N),M.addEventListener("focus",W,!1),M.addEventListener("input",A,!1),S=w.create("div",{className:"TravelNotes-NoteDialog-PreviewDiv"},T.footer),S.appendChild(Wt.getNoteTextAndIconHTML("TravelNotes-NoteDialog-",{note:l,route:null})),o&&y.note.reverseGeocoding&&B(),_(),T}function _t(){let e=null,t=null;return new class{constructor(){Object.freeze(this)}createUI(){if(document.getElementById("TravelNotes-WaitUI"))return;e=w.create("div",{className:"TravelNotes-Background"},document.querySelector("body"));let o=w.create("div",{id:"TravelNotes-WaitUI"},e);t=w.create("div",{id:"TravelNotes-WaitUI-MessageDiv"},o),w.create("div",{className:"TravelNotes-WaitAnimationBullet"},w.create("div",{className:"TravelNotes-WaitAnimation"},o))}showInfo(e){t.textContent=e}close(){document.querySelector("body").removeChild(e),e=null}}}let Zt=null,Xt=0,qt=0,Gt=null;function Jt(e,t){let o=Q();o.iconContent=e.svg.outerHTML,o.popupContent="",o.iconWidth=s.width,o.iconHeight=s.height,o.tooltipContent=e.tooltip,o.address=e.streets,""!==e.city&&(o.address+=' '+e.city+""),e.place&&e.place!==e.city&&(o.address+=" ("+e.place+")"),o.latLng=e.latLng,o.iconLatLng=e.latLng,o.distance=me.getClosestLatLngDistance(t,o.latLng).distance,o.chainedDistance=t.chainedDistance,t.notes.add(o),De.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:o.objId}),De.dispatch("roadbookupdate")}function Yt(e,t,o){if(o)if(-1===t)he.travel.notes.add(e),De.dispatch("showtravelnotes");else{let o=ze.getRoute(t);o.notes.add(e),e.chainedDistance=o.chainedDistance,o.notes.sort((e,t)=>e.distance-t.distance),De.dispatch("showitinerary")}else-1===t?De.dispatch("updatetravelnotes"):De.dispatch("updateitinerary");De.dispatch("noteupdated",{removedNoteObjId:e.objId,addedNoteObjId:e.objId}),De.dispatch("roadbookupdate")}function $t(e,t,o){Kt(e,t,o).show().then(()=>{Yt(e,t,o)}).catch(e=>{e instanceof Error&&console.error(e)})}function Qt(e){let t=Q();return t.latLng=e,t.iconLatLng=e,t}const eo=new class{constructor(){Object.freeze(this)}get osmSearchNoteDialog(){return null===Gt&&(Gt=y.osmSearch.showSearchNoteDialog),Gt}changeOsmSearchNoteDialog(){Gt=!this.osmSearchNoteDialog}addAllManeuverNotes(e){let t=ze.getRoute(e),o=t.itinerary.maneuvers.iterator;for(qt=0;!o.done;)"kDepartDefault"===o.value.iconName&&!o.first||"kArriveDefault"===o.value.iconName&&!o.last||qt++;y.note.maxManeuversNotest.cancelButton.click(),!0)}e.textContent&&w.create("div",{id:"TravelNotes-TwoButtonsDialog-MessageDiv",textContent:e.textContent},t.content)}(),t}({title:E.getText("NoteEditor - Add a note for each maneuver"),textContent:E.getText("NoteEditor - Add a note for each maneuver. Are you sure?",{noteLength:qt}),secondButtonContent:"❌"}).show().then(()=>{o=t.itinerary.maneuvers.iterator,o.done||(Zt=_t(),Zt.createUI(),Xt=1,function e(t,o){function a(){t.done?(o.notes.sort((e,t)=>e.distance-t.distance),De.dispatch("updateitinerary"),De.dispatch("roadbookupdate"),Zt.close(),Zt=null):e(t,o)}if(Zt.showInfo(E.getText("NoteEditor - Creating note",{noteNumber:Xt,notesLength:qt})),"kDepartDefault"===t.value.iconName&&!t.first||"kArriveDefault"===t.value.iconName&&!t.last)a();else{Xt++;let e=o.itinerary.itineraryPoints.getAt(t.value.itineraryPointObjId).latLng;ut().getPromiseIconAndAdress(e,o.objId).then(e=>{Jt(e,o),a()}).catch(e=>{e instanceof Error&&console.error(e),a()})}}(o,t))}).catch(e=>{e instanceof Error&&console.error(e)})}newRouteNote(e){let t=ze.getRoute(e.routeObjId),o=me.getClosestLatLngDistance(t,[e.lat,e.lng]),a=Qt(o.latLng);a.distance=o.distance,$t(a,t.objId,!0)}newSearchNote(e){let t=[e.osmElement.lat,e.osmElement.lon],o=[e.osmElement.lat,e.osmElement.lon],a=-1,n=Number.MAX_VALUE;function r(e){if(e.objId!==he.editedRouteObjId){let r=me.getClosestLatLngDistance(e,t);if(r){let i=Ke.pointsDistance(t,r.latLng);i"+e.osmElement.tags.rcn_ref+"":i.iconContent=It.getIconDataFromName(e.osmElement.description)||"",i.address=(e.osmElement.tags["addr:housenumber"]?e.osmElement.tags["addr:housenumber"]+" ":"")+(e.osmElement.tags["addr:street"]?e.osmElement.tags["addr:street"]+" ":"")+(e.osmElement.tags["addr:postcode"]?e.osmElement.tags["addr:postcode"]+" ":"")+(e.osmElement.tags["addr:city"]?e.osmElement.tags["addr:city"]+" ":""),i.url=e.osmElement.tags.website||"",i.phone=e.osmElement.tags.phone||"",i.tooltipContent=e.osmElement.description||"",i.popupContent=e.osmElement.tags.name||"",e.isTravelNote||-1!==a?this.osmSearchNoteDialog||""===i.iconContent?$t(i,a,!0):Yt(i,a,!0):je.showError(E.getText("NoteEditor - No route was found"))}newManeuverNote(e){Zt=_t(),Zt.createUI();let t=he.travel.editedRoute,o=t.itinerary.maneuvers.getAt(e),a=t.itinerary.itineraryPoints.getAt(o.itineraryPointObjId).latLng;ut().getPromiseIconAndAdress(a,t.objId).then(o=>{Jt(o,t),t.notes.sort((e,t)=>e.distance-t.distance),t.itinerary.maneuvers.remove(e),De.dispatch("showitinerary"),De.dispatch("roadbookupdate"),Zt.close(),Zt=null}).catch(e=>{e instanceof Error&&console.error(e),Zt.close(),Zt=null})}newTravelNote(e){$t(Qt(e),-1,!0)}editNote(e){let t=ze.getNoteAndRoute(e),o=null===t.route?-1:t.route.objId;$t(t.note,o,!1)}removeNote(e){let t=ze.getNoteAndRoute(e);t.route?(t.route.notes.remove(e),De.dispatch("updateitinerary")):(he.travel.notes.remove(e),De.dispatch("updatetravelnotes")),De.dispatch("noteupdated",{removedNoteObjId:e,addedNoteObjId:-1}),De.dispatch("roadbookupdate")}hideNotes(){let e=he.travel.notes.iterator;for(;!e.done;)De.dispatch("removeobject",{objId:e.value.objId});let t=he.travel.routes.iterator;for(;!t.done;)for(e=t.value.notes.iterator;!e.done;)De.dispatch("removeobject",{objId:e.value.objId});if(-1!==he.editedRouteObjId)for(e=he.travel.editedRoute.notes.iterator;!e.done;)De.dispatch("removeobject",{objId:e.value.objId})}showNotes(){this.hideNotes();let e=he.travel.notes.iterator;for(;!e.done;)De.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:e.value.objId});let t=he.travel.routes.iterator;for(;!t.done;)t.value.hidden||De.dispatch("routeupdated",{removedRouteObjId:t.value.objId,addedRouteObjId:t.value.objId})}attachNoteToRoute(e){let t=ze.getNoteAndRoute(e),o=Number.MAX_VALUE,a=null,n=null,r=null;he.travel.routes.forEach(e=>{let i=me.getClosestLatLngDistance(e,t.note.latLng);if(i){let l=Ke.pointsDistance(t.note.latLng,i.latLng);le.distance-t.distance),De.dispatch("noteupdated",{removedNoteObjId:e,addedNoteObjId:e}),De.dispatch("updateitinerary"),De.dispatch("updatetravelnotes"),De.dispatch("roadbookupdate"))}detachNoteFromRoute(e){let o=ze.getNoteAndRoute(e);o.route.notes.remove(e),o.note.distance=t.invalid,o.note.chainedDistance=t.defaultValue,he.travel.notes.add(o.note),De.dispatch("updateitinerary"),De.dispatch("updatetravelnotes"),De.dispatch("roadbookupdate")}travelNoteDropped(e,t,o){he.travel.notes.moveTo(e,t,o),De.dispatch("updatetravelnotes"),De.dispatch("roadbookupdate")}}; +function Ze(){let e=null,t=null,o=null,a=0,n=0,r=0,i=0,l=0,s=0,d=null,c=null;function u(e){try{e.dataTransfer.setData("Text","1")}catch(e){e instanceof Error&&console.error(e)}a=e.screenX,n=e.screenY}function g(t){r+=t.screenX-a,i+=t.screenY-n,r=Math.min(Math.max(r,20),l-e.clientWidth-20),i=Math.max(i,20);let o=s-Math.max(i,0)-20;e.style.top=String(i)+"px",e.style.left=String(r)+"px",e.style["max-height"]=String(o)+"px"}function v(){d&&d(),document.querySelector("body").removeChild(e)}return new class{constructor(){Object.freeze(this)}createWindow(){l=he.map.getContainer().clientWidth,s=he.map.getContainer().clientHeight,e=w.create("div",{className:"TravelNotes-FloatWindow-Container"},document.querySelector("body")),function(){let t=w.create("div",{className:"TravelNotes-FloatWindow-TopBar",draggable:!0},e);t.addEventListener("dragstart",u,!1),t.addEventListener("dragend",g,!1),w.create("div",{textContent:"❌",className:"TravelNotes-FloatWindow-CancelButton",title:E.getText("FloatWindow - Close")},t).addEventListener("click",v,!1)}(),t=w.create("div",{className:"TravelNotes-FloatWindow-HeaderDiv"},e),o=w.create("div",{className:"TravelNotes-FloatWindow-ContentDiv"},e)}close(){v()}set onClose(e){d=e}update(...e){!function(e){c&&c(e)}(e)}set onUpdate(e){c=e}get header(){return t}get content(){return o}}}let Xe=null,qe=null,Ge=null,Je=-1,Ye=-1,$e=-1,Qe=[],et=null,tt=null;function ot(e){-1!==$e&&qe.childNodes[$e+1].firstChild.classList.remove("TravelNotes-ContextMenu-ItemSelected"),e?(qe.childNodes[Je+1].firstChild.classList.add("TravelNotes-ContextMenu-ItemSelected"),$e=Je):(qe.childNodes[Ye+1].firstChild.classList.add("TravelNotes-ContextMenu-ItemSelected"),$e=Ye,Je=Ye)}function at(e){qe&&("Escape"===e.key||"Esc"===e.key?(e.stopPropagation(),et.click()):"ArrowDown"===e.key||"ArrowRight"===e.key||"Tab"===e.key?(e.stopPropagation(),Je=-1===Je||Qe.length-1===Je?0:++Je,ot(!0)):"ArrowUp"===e.key||"ArrowLeft"===e.key?(e.stopPropagation(),Je=-1===Je||0===Je?Qe.length-1:--Je,ot(!0)):"Home"===e.key?(e.stopPropagation(),Je=0,ot(!0)):"End"===e.key?(e.stopPropagation(),Je=Qe.length-1,ot(!0)):"Enter"===e.key&&Je>=0&&Qe[Je].action&&(e.stopPropagation(),ot(!0),qe.childNodes[$e+1].firstChild.click()))}function nt(e){e.stopPropagation();let t=Qe[e.target.menuItem];et.click(),t.param?t.action.call(t.context,t.param):t.action.call(t.context)}function rt(e){Ye=e.target.objId,ot(!1)}function it(){Ge&&(clearTimeout(Ge),Ge=null),document.removeEventListener("keydown",at,!0),tt.removeChild(qe),Xe=null,qe=null,Je=-1,Ye=-1,$e=-1,Qe=[],et=null,tt=null}function lt(e,t,o){function a(){if(Xe=e,qe)return Ge&&(clearTimeout(Ge),Ge=null),void it();qe=null,Je=-1,Ye=-1,$e=-1,et=null,tt=o||document.querySelector("body"),Qe=t,qe=w.create("div",{id:"TravelNotes-ContextMenu-Container",className:"TravelNotes-ContextMenu-Container"},tt),0{Ge&&(clearTimeout(Ge),Ge=null)},!1),qe.addEventListener("mouseleave",()=>{Ge=setTimeout(it,y.contextMenu.timeout)},!1)),et=w.create("div",{textContent:"❌",className:"TravelNotes-ContextMenu-CloseButton",title:E.getText("ContextMenu - Close")},qe),et.addEventListener("click",it,!1),function(){let e=0;Qe.forEach(t=>{let o=w.create("div",{className:"TravelNotes-ContextMenu-ItemContainer"},qe),a=w.create("div",{textContent:t.name,id:"TravelNotes-ContextMenu-Item"+e,objId:e,className:t.action?"TravelNotes-ContextMenu-Item":"TravelNotes-ContextMenu-Item TravelNotes-ContextMenu-ItemDisabled"},o);a.addEventListener("mouseenter",rt,!1),t.action&&a.addEventListener("click",nt,!1),a.menuItem=e,++e})}(),function(){let e=document.querySelector("body"),t=w.create("div",{className:"TravelNotes-ContextMenu-DummyDiv"},e),a=t.clientWidth,n=t.clientHeight;e.removeChild(t);let r=Math.min(Xe.originalEvent.clientY,n-qe.clientHeight-20),i=Math.min(Xe.originalEvent.clientX,a-qe.clientWidth-20);o?(qe.style.top=String(r)+"px",qe.style.right=String(20)+"px"):(qe.style.top=String(r)+"px",qe.style.left=String(i)+"px")}(),document.addEventListener("keydown",at,!0)}return new class{constructor(){Object.freeze(this)}show(){a()}}}let st=!1;const dt=Math.max(y.geoCoder.distances.hamlet,y.geoCoder.distances.village,y.geoCoder.distances.city,y.geoCoder.distances.town),ct=Object.freeze({atStart:-1,onRoute:0,atEnd:1});function ut(){let e=y.geoCoder.osmCityAdminLevel.DEFAULT,o=Object.seal({latLng:[r.defaultValue,r.defaultValue],distance:t.defaultValue}),a=null,n=null,i=new Map,l=new Map,c=[],g={},v=null,h=null,m=null,p=ct.onRoute,f=[0,0],b=0,w=null,N=y.note.svgIcon.zoom,T=y.note.svgIcon.angleDistance,x=" ",L="",I="",j="";function P(e){let t=!1;return n.wayPoints.forEach(o=>{Math.abs(e.lat-o.lat)<5e-6&&Math.abs(e.lng-o.lng)<5e-6&&(t=!0)}),!t&&(a.lat!==e.lat||a.lng!==e.lng)}function D(r,D){!function(t){i.clear(),l.clear(),c=[],g={hamlet:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.hamlet},village:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.village},city:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.city},town:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.town}},t.elements.forEach(t=>{switch(t.type){case"area":{let o=t.tags.name;y.nominatim.language&&"*"!==y.nominatim.language&&t.tags["name:"+y.nominatim.language]&&(o=t.tags["name:"+y.nominatim.language]),c[Number.parseInt(t.tags.admin_level)]=o,"2"===t.tags.admin_level&&(e=y.geoCoder.osmCityAdminLevel[t.tags["ISO3166-1"]]||e)}break;case"way":t.nodesIds=t.nodes,delete t.nodes,i.set(t.id,t);break;case"node":if(l.set(t.id,t),t.tags&&t.tags.place&&g[t.tags.place]&&t.tags.name){let e=Ke.pointsDistance(o.latLng,[t.lat,t.lon]),a=g[t.tags.place];a.maxDistance>e&&a.distance>e&&(a.distance=e,a.name=t.tags.name)}}})}(r),m=document.createElementNS(u,"svg"),m.setAttributeNS(null,"viewBox",String(s.svgViewboxDim/4)+" "+s.svgViewboxDim/4+" "+s.svgViewboxDim/2+" "+s.svgViewboxDim/2),m.setAttributeNS(null,"class","TravelNotes-SvgIcon"),function(){h=null;let t=null;for(let o=2;o=o?h=c[o]:t=c[o]);v=null;let o=Number.MAX_VALUE;Object.values(g).forEach(e=>{e.distance{o.distance-e>T&&(r=t),e-o.distance>T&&!l&&(i=t,l=!0),e+=t.distance});let s=me.addPoints(me.project(o.latLng,N),f);if(a.objId!==n.itinerary.itineraryPoints.first.objId){let e=me.addPoints(me.project(r.latLng,N),f);b=Math.atan((s[1]-e[1])/(e[0]-s[0]))*d.d180/Math.PI,0>b&&(b+=d.d360),b-=d.d270,0>e[0]-s[0]&&(b+=d.d180)}if(a.objId!==n.itinerary.itineraryPoints.last.objId){let e=me.addPoints(me.project(i.latLng,N),f);for(w=Math.atan((s[1]-e[1])/(e[0]-s[0]))*d.d180/Math.PI,0>e[0]-s[0]&&(w+=d.d180),w-=b;d.d0>w;)w+=d.d360;for(;d.d360{"bike"===n.itinerary.transitMode&&t.tags&&t.tags.rcn_ref&&(h=t),a&&(v=Ke.pointsDistance([t.lat,t.lon],a.latLng),ve&&(m=h)}let f=m&&m.tags&&m.tags.highway&&"mini_roundabout"===m.tags.highway;"bike"===n.itinerary.transitMode&&m&&m.tags&&m.tags.rcn_ref&&m.tags["network:type"]&&"node_network"===m.tags["network:type"]&&(j=m.tags.rcn_ref,L+=E.getText("SvgIconFromOsmFactory - rcnRef",{rcnRef:j}));let b="",w="",N=!1,T=!1;i.forEach(e=>{if(!e.nodesIds.includes(r))return;let t=function(e){return(e.tags.name?e.tags.name:"")+(e.tags.name&&e.tags.ref?" ":"")+(e.tags.ref?"["+e.tags.ref+"]":"")}(e),o=""!==t,a=e.nodesIds.includes(s),n=e.nodesIds.includes(d),i=2*e.nodesIds.filter(e=>e===r).length;if(e.nodesIds[0]===r&&i--,e.nodesIds[e.nodesIds.length-1]===r&&i--,a&&(b=o?t:"???",i--,e.tags.junction&&"roundabout"===e.tags.junction&&(T=!0)),0!==i&&(n&&(w=o?t:"???",i--,e.tags.junction&&"roundabout"===e.tags.junction&&(N=!0)),0!==i&&o))for(;0!==i;)I=""===I?t:I+" ⪥ "+t,i--}),I=ct.atStart===p?"🟢 "+w:ct.atEnd===p?b+" 🔴 ":b+(""===I?"":" ⪥ "+I)+" "+x+" "+w,N&&!T?L+=E.getText("SvgIconFromOsmFactory - entry roundabout"):!N&&T?L+=E.getText("SvgIconFromOsmFactory - exit roundabout"):N&&T&&(L+=E.getText("SvgIconFromOsmFactory - continue roundabout")),f&&(L+=E.getText("SvgIconFromOsmFactory - at the small roundabout on the ground"))}(),function(){let e=-1,t=-1,o=-1,a=[];if(n.itinerary.itineraryPoints.forEach(n=>{e++;let r=me.addPoints(me.project(n.latLng,N),f);a.push(r),r[0]>=0&&r[1]>=0&&r[0]<=s.svgViewboxDim&&r[1]<=s.svgViewboxDim&&(-1===t&&(t=e),o=e)}),-1!==t&&-1!==o){0o&&o++;let r="";for(e=t;e<=o;e++)r+=a[e][0].toFixed(0)+","+a[e][1].toFixed(0)+" ";let i=document.createElementNS(u,"polyline");i.setAttributeNS(null,"points",r),i.setAttributeNS(null,"class","TravelNotes-OSM-Itinerary"),i.setAttributeNS(null,"transform","rotate("+b+","+s.svgViewboxDim/2+","+s.svgViewboxDim/2+")"),m.appendChild(i)}}(),i.forEach(e=>{let t=-1,o=-1,a=-1,n=[];if(e.nodesIds.forEach(e=>{a++;let r=l.get(e),i=me.addPoints(me.project([r.lat,r.lon],N),f);n.push(i),i[0]>=0&&i[1]>=0&&i[0]<=s.svgViewboxDim&&i[1]<=s.svgViewboxDim&&(-1===t&&(t=a),o=a)}),-1!==t&&-1!==o){0o&&o++;let r="";for(a=t;a<=o;a++)r+=n[a][0].toFixed(0)+","+n[a][1].toFixed(0)+" ";let i=document.createElementNS(u,"polyline");i.setAttributeNS(null,"points",r),i.setAttributeNS(null,"class","TravelNotes-OSM-Highway TravelNotes-OSM-Highway-"+e.tags.highway),i.setAttributeNS(null,"transform","rotate("+b+","+s.svgViewboxDim/2+","+s.svgViewboxDim/2+")"),m.appendChild(i)}}),function(){if(""===j)return;let e=document.createElementNS(u,"text");e.textContent=j,e.setAttributeNS(null,"x",String(s.svgViewboxDim/2)),e.setAttributeNS(null,"y",String(.6*s.svgViewboxDim)),e.setAttributeNS(null,"class","TravelNotes-OSM-RcnRef"),m.appendChild(e)}(),st=!1,D(Object.freeze({svg:m,tooltip:L,city:h,place:v,streets:I,latLng:a.latLng}))}function C(e,i){st?i("A request is already running"):(st=!0,m=null,h=null,v=null,x=" ",L="",I="",function(){let e=Number.MAX_VALUE,r=t.defaultValue;n.itinerary.itineraryPoints.forEach(t=>{let n=Ke.pointsDistance(o.latLng,t.latLng);e>n&&(e=n,a=t,o.distance=r),r+=t.distance}),o.latLng=a.latLng}(),fetch(function(){let e=o.latLng[0].toFixed(r.fixed)+","+o.latLng[1].toFixed(r.fixed);return y.overpassApi.url+"?data=[out:json][timeout:"+y.overpassApi.timeOut+"];way[highway](around:"+(1.5*s.svgViewboxDim).toFixed(0)+","+e+")->.a;(.a >;.a;)->.a;.a out;is_in("+e+')->.e;area.e[admin_level][boundary="administrative"];out;node(around:'+dt+","+e+")[place];out;"}()).then(t=>{200===t.status&&t.ok?t.json().then(t=>D(t,e)).catch(e=>{st=!1,i(e)}):(st=!1,i(new Error("An error occurs when callin OverpassAPI")))}))}return new class{constructor(){Object.freeze(this)}getPromiseIconAndAdress(e,t){return o.latLng=e,n=He.getRoute(t),new Promise(C)}}}const gt=Math.max(y.geoCoder.distances.hamlet,y.geoCoder.distances.village,y.geoCoder.distances.city,y.geoCoder.distances.town);function vt(){let e=null;async function t(t,o,a){let n=t[0].value,r=t[1].value;if("fulfilled"!==t[0].status||"fulfilled"!==t[1].status||200!==n.status||!n.ok||200!==r.status||!r.ok)return void a(new Error("error when calling Nominatim or OverpassAPI"));let i=function(e){let t="";return e.error?{street:null,nameDetails:null,country:null}:(e.address.house_number&&(t+=e.address.house_number+" "),e.address.road?t+=e.address.road+" ":e.address.pedestrian&&(t+=e.address.pedestrian+" "),{street:t,nameDetails:e.namedetails.name,country:e.address.country})}(await n.json()),l=function(t){let o=y.geoCoder.osmCityAdminLevel.DEFAULT,a=[],n={hamlet:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.hamlet},village:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.village},city:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.city},town:{name:null,distance:Number.MAX_VALUE,maxDistance:y.geoCoder.distances.town}};t.elements.forEach(t=>{if("area"===t.type){let e=t.tags.name;y.nominatim.language&&"*"!==y.nominatim.language&&t.tags["name:"+y.nominatim.language]&&(e=t.tags["name:"+y.nominatim.language]),a[Number.parseInt(t.tags.admin_level)]=e,"2"===t.tags.admin_level&&(o=y.geoCoder.osmCityAdminLevel[t.tags["ISO3166-1"]]||o)}if("node"===t.type&&t.tags&&t.tags.place&&n[t.tags.place]&&t.tags.name){let o=Ke.pointsDistance(e,[t.lat,t.lon]),a=n[t.tags.place];a.maxDistance>o&&a.distance>o&&(a.distance=o,a.name=t.tags.name)}});let r=null,i=null;for(let e=2;e=e?r=a[e]:i=a[e]);let l=null,s=Number.MAX_VALUE;return Object.values(n).forEach(e=>{e.distance.e;area.e[admin_level][boundary="administrative"];out;node(around:'+gt+","+e[0]+","+e[1]+")[place];out;";return Promise.allSettled([fetch(t,{headers:a}),fetch(n)])})().then(e=>t(e,o,a))}return new class{constructor(){Object.freeze(this)}getPromiseAddress(t){return e=t,new Promise(o)}}}let ht=[],mt=[],pt=null,ft=null,bt=null,yt=null;function wt(){mt.forEach(e=>ft.add(w.create("option",{text:f.sanitizeToJsString(e.name)}))),ft.selectedIndex=-1}function Nt(){ht.forEach(e=>{let t=w.create("button",{type:"button",htmlBefore:e.htmlBefore||"",htmlAfter:e.htmlAfter||"",className:"TravelNotes-NoteDialog-EditorButton"},pt);f.sanitizeToHtmlElement(e.title||"?",t),t.addEventListener("click",yt.onButtonClickEventListener,!1)})}function Tt(e){let t=new FileReader;t.onload=function(){try{let e=JSON.parse(t.result);ht=ht.concat(e.editionButtons),mt=mt.concat(e.preDefinedIconsList),mt.sort((e,t)=>e.name.localeCompare(t.name)),document.querySelectorAll(".TravelNotes-NoteDialog-EditorButton").forEach(e=>{e.removeEventListener("click",yt.onButtonClickEventListener,!1),pt.removeChild(e)}),Nt();for(let e=ft.length-1;e>=0;e--)ft.remove(e);wt(),yt.hideError()}catch(e){e instanceof Error&&console.error(e),yt.showError(E.getText("NoteDialogToolbar - An error was found in the json file",{error:e.message}))}},t.readAsText(e.target.files[0])}function xt(){bt.click()}function Lt(e){yt.toggleContents(),e.target.textContent="▼"===e.target.textContent?"▶":"▼"}const It=new class{constructor(){Object.freeze(this)}set selectOptions(e){mt=mt.concat(e),mt.sort((e,t)=>e.name.localeCompare(t.name))}set buttons(e){ht=ht.concat(e)}getIconData(e){return mt[e]}getIconDataFromName(e){let t=mt.find(t=>t.name===e);return t?t.icon:null}createToolbar(e){return yt=e,pt=w.create("div",{className:"TravelNotes-NoteDialog-ToolbarDiv",id:"TravelNotes-NoteDialog-ToolbarDiv"}),ft=w.create("select",{className:"TravelNotes-NoteDialog-Select",id:"TravelNotes-NoteDialog-IconSelect"},pt),ft.addEventListener("change",yt.onSelectEventListener,!1),wt(),bt=w.create("input",{className:"TravelNotes-BaseDialog-OpenFileInput",type:"file"},pt),bt.addEventListener("change",Tt,!1),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("NoteDialog - show hidden contents"),textContent:"▼"},pt).addEventListener("click",Lt,!1),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("NoteDialog - Open a configuration file"),textContent:"📂"},pt).addEventListener("click",xt,!1),Nt(),pt}},Et=l.margin.toFixed(0),jt=(l.margin+l.height).toFixed(0),Pt=(l.margin+l.width).toFixed(0),Dt=l.margin.toFixed(0),Ct=(l.margin+l.width+l.xDeltaText).toFixed(0),Rt=(l.margin-l.xDeltaText).toFixed(0),Mt=l.margin+l.height+l.margin/2;function St(){let e=null,o=1,a=1,n=Number.MAX_VALUE,r=0,i=0,s=null,d=0,c=y.route.elev.smoothCoefficient,g=y.route.elev.smoothPoints;function v(){let e=function(){let e=0,t=0,o=[],a=s.itinerary.itineraryPoints.iterator,n=0,r=a.done;for(o.push({distance:e,elev:a.value.elev}),n+=a.value.distance,r=a.done;!r;){for(e+=d;e>=n&&!r;)n+=a.value.distance,r=a.done;if(!r){let r=(a.value.elev-a.previous.elev)/a.previous.distance;t=a.value.elev-(n-e)*r,o.push({distance:e,elev:t})}}return o.push({distance:n,elev:s.itinerary.itineraryPoints.last.elev}),o}(),t=new Map,o=(e[g].elev-e[0].elev)/g,a=0;for(a=0;a=t;t++)o+=e[t].elev;t.set(e[a].distance,{distance:e[a].distance,elev:o/(2*g+1)})}return a--,o=d*(e[e.length-1].elev-e[e.length-1-g].elev)/(e[e.length-1].distance-e[e.length-1-g].distance),t.set(e[a].distance+d,{distance:e[a].distance+d,elev:e[a].elev+o}),t.set(e[a].distance+2*d,{distance:e[a].distance+2*d,elev:e[a].elev+2*o}),t}function h(d){return s=d,n=Number.MAX_VALUE,r=0,s.itinerary.itineraryPoints.forEach(e=>{r=Math.max(r,e.elev),n=Math.min(n,e.elev)}),i=r-n,o=l.height/i,a=l.width/s.distance,e=document.createElementNS(u,"svg"),e.setAttributeNS(null,"viewBox","0 0 "+(l.width+2*l.margin)+" "+(l.height+2*l.margin)),e.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile"),function(){let t="",n=0,i=0,d=0;s.itinerary.itineraryPoints.forEach(e=>{i=(l.margin+a*n).toFixed(0),d=(l.margin+o*(r-e.elev)).toFixed(0),t+=i+","+d+" ",n+=e.distance});let c=document.createElementNS(u,"polyline");c.setAttributeNS(null,"points",t),c.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-profilePolyline"),e.appendChild(c)}(),function(){let t=Et+","+Dt+" "+Et+","+jt+" "+Pt+","+jt+" "+Pt+","+Dt,o=document.createElementNS(u,"polyline");o.setAttributeNS(null,"points",t),o.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-framePolyline"),e.appendChild(o)}(),function(){let t=Number.MAX_VALUE,a=0;l.vScales.forEach(e=>{let o=Math.abs(i/4-e);o{let t=Math.abs(s.distance/8-e);t"+E.getText("HTMLViewsFactory - Address")+" : "+o.address,w.create("div",{className:e+"NoteHtml-Address"},a)),0!==o.url.length&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Link")+"'+o.url.substr(0,40)+"...",w.create("div",{className:e+"NoteHtml-Url"},a)),0!==o.phone.length){let t=o.phone;if(o.phone.match(/^\+[0-9, ,*,#]*$/)){let e=o.phone.replaceAll(/\u0020/g,""),a=o.phone.replaceAll(/\u0020/g," ");t=E.getText("HTMLViewsFactory - Phone")+" : "+E.getText("HTMLViewsFactory - call")+''+a+""+E.getText("HTMLViewsFactory - Send a sms to")+''+a+""}else t=E.getText("HTMLViewsFactory - Phone")+" : "+o.phone;f.sanitizeToHtmlElement(t,w.create("div",{className:e+"NoteHtml-Phone"},a))}if(f.sanitizeToHtmlElement(j.formatLatLng(o.latLng),w.create("div",{className:e+"NoteHtml-LatLng"},a)),t.route){t.route.chain&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of travel")+" : "+j.formatDistance(o.chainedDistance+o.distance),w.create("div",{className:e+"NoteHtml-Distance"},a)),f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of route")+" : "+j.formatDistance(o.distance),w.create("div",{className:e+"NoteHtml-Distance"},a));let n=t.route.notes.next(o.objId);if(n){let t=n.distance-o.distance;9"+E.getText("HTMLViewsFactory - Next note after")+" : "+j.formatDistance(t),w.create("div",{className:e+"NoteHtml-NextDistance"},a))}}return a}function At(e,t){let o=w.create("div"),a=w.create("div",{className:e+(t.route?"Route-ManeuversAndNotes-IconCell":"Travel-Notes-IconCell")},o),n=1;f.sanitizeToHtmlElement(t.note.iconContent,a),"TravelNotes-Roadbook-"===e&&a.firstChild?("svg"===a.firstChild.tagName?(a.firstChild.setAttributeNS(null,"viewBox","0 0 "+s.svgViewboxDim+" "+s.svgViewboxDim),n=y.note.svgIcon.roadbookFactor):a.firstChild.classList.contains("TravelNotes-MapNoteCategory-0073")&&(n=y.note.svgIcon.roadbookFactor),a.setAttribute("tanwidth",String(t.note.iconWidth*n)+"px"),a.setAttribute("tanheight",String(t.note.iconWidth*n)+"px")):(a.style.width=String(t.note.iconWidth)+"px",a.style.height=String(t.note.iconHeight)+"px");let r=Ot(e,t);return r.className=e+(t.route?"Route-ManeuversAndNotes-Cell":"Travel-Notes-Cell"),o.appendChild(r),o.noteObjId=t.note.objId,o}function kt(e){let t=w.create("div",{className:e+"Travel-Notes"}),o=he.travel.notes.iterator;for(;!o.done;){let a=At(e,{note:o.value,route:null});a.className=e+"Travel-Notes-Row",t.appendChild(a)}return t}function Ut(e,t){let o=w.create("div",{className:e+"Route-Header",id:"route"+t.objId});return f.sanitizeToHtmlElement(t.computedName,w.create("div",{className:e+"Route-Header-Name"},o)),0!==t.distance&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Route distance")+" : "+j.formatDistance(t.distance),w.create("div",{className:e+"Route-Header-Distance"},o)),he.travel.readOnly||"bike"===t.itinerary.transitMode||f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Duration")+" : "+j.formatTime(t.duration),w.create("div",{className:e+"Route-Header-Duration"},o)),t.itinerary.hasProfile&&(f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Ascent")+" : "+String(t.itinerary.ascent.toFixed(0))+" m.",w.create("div",{className:e+"Route-Header-Ascent"},o)),f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Descent")+" : "+String(t.itinerary.descent.toFixed(0))+" m.",w.create("div",{className:e+"Route-Header-Descent"},o))),o}function Bt(e,o){let a=w.create("div");w.create("div",{className:e+"Route-ManeuversAndNotes-IconCell TravelNotes-ManeuverNote-"+o.maneuver.iconName},a);let n=w.create("div",{className:e+"Route-ManeuversAndNotes-Cell"},a);return f.sanitizeToHtmlElement(o.maneuver.instruction,w.create("div",null,n)),o.route.chain&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of travel")+" : "+j.formatDistance(o.route.chainedDistance+o.maneuverDistance),w.create("div",{className:e+"Route-Maneuver-Distance"},n)),f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Distance from start of route")+" : "+j.formatDistance(o.maneuverDistance),w.create("div",{className:e+"Route-Maneuver-Distance"},n)),t.defaultValue"+E.getText("HTMLViewsFactory - Next maneuver after")+" : "+j.formatDistance(o.maneuver.distance),w.create("div",{className:e+"Route-Maneuver-Distance"},n)),a}function Ht(e,t){let o=[],a=t.notes.iterator;for(;!a.done;){let n=At(e,{note:a.value,route:t});n.className=e+"Route-Notes-Row",n.objId=T(),n.latLng=a.value.latLng,n.noteObjId=a.value.objId,n.distance=a.value.distance,o.push(n)}let n=t.itinerary.maneuvers.iterator,r=0;for(;!n.done;){let a=Bt(e,{route:t,maneuver:n.value,maneuverDistance:r});a.className=e+"Route-Maneuvers-Row",a.objId=T(),a.latLng=t.itinerary.itineraryPoints.getAt(n.value.itineraryPointObjId).latLng,a.maneuverObjId=n.value.objId,a.distance=r,o.push(a),r+=n.value.distance}o.sort((e,t)=>e.distance-t.distance);let i=w.create("div",{className:e+"Route-ManeuversAndNotes"});return o.forEach(e=>i.appendChild(e)),i}function zt(e,t){let o="";""!==t.itinerary.provider&&""!==t.itinerary.transitMode&&(o=E.getText("HTMLViewsFactory - Itinerary computed by {provider} and optimized for {transitMode}",{provider:t.itinerary.provider,transitMode:E.getText("HTMLViewsFactory - TransitMode "+t.itinerary.transitMode)}));let a=w.create("div",{className:e+"RouteFooter"});return f.sanitizeToHtmlElement(o,a),a}function Ft(e,t){let o=w.create("div",{className:e+"RouteProfile"});return f.sanitizeToHtmlElement(E.getText("HTMLViewsFactory - Profile"),o),o.appendChild(St().createSvg(t)),o}function Vt(e){let o=w.create("div",{className:e+"Travel"});o.appendChild(function(e){let o=w.create("div",{className:e+"Travel-Header"});f.sanitizeToHtmlElement(he.travel.name,w.create("div",{className:e+"Travel-Header-Name"},o));let a=t.defaultValue,n=0,r=0,i=he.travel.routes.iterator;for(;!i.done;){let t=i.value.objId===he.editedRouteObjId&&y.routeEditor.showEditedRouteInRoadbook?he.travel.editedRoute:i.value;f.sanitizeToHtmlElement(''+t.computedName+" : "+j.formatDistance(t.distance)+".",w.create("div",{className:e+"Travel-Header-RouteName"},o)),t.chain&&(a+=t.distance,n+=t.itinerary.ascent,r+=t.itinerary.descent)}return f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Travel distance")+" : "+j.formatDistance(a),w.create("div",{className:e+"Travel-Header-TravelDistance"},o)),0!==n&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Travel ascent")+" : "+String(n.toFixed(0))+" m.",w.create("div",{className:e+"Travel-Header-TravelAscent"},o)),0!==r&&f.sanitizeToHtmlElement(""+E.getText("HTMLViewsFactory - Travel descent")+" : "+String(r.toFixed(0))+" m.",w.create("div",{className:e+"Travel-Header-TravelDescent"},o)),o}(e)),o.appendChild(kt(e));let a=he.travel.routes.iterator;for(;!a.done;){let t=y.routeEditor.showEditedRouteInRoadbook&&a.value.objId===he.editedRouteObjId?he.travel.editedRoute:a.value;o.appendChild(Ut(e,t)),t.itinerary.hasProfile&&o.appendChild(Ft(e,t)),o.appendChild(Ht(e,t)),o.appendChild(zt(e,t))}return o.appendChild(function(e){let t=E.getText("HTMLViewsFactory - Travel footer")+'Travel & Notes, © wwwouaiebe 2017 2021 © '+E.getText("HTMLViewsFactory - OpenStreetMap contributors")+"",o=w.create("div",{className:e+"TravelFooter"});return f.sanitizeToHtmlElement(t,o),o}(e)),o}const Wt=new class{constructor(){Object.freeze(this)}getTravelHTML(e){return Vt(e)}getNoteTextAndIconHTML(e,t){return At(e,t)}getNoteTextHTML(e,t){return Ot(e,t)}getEditedRouteManeuversAndNotesHTML(e){return Ht(e,he.travel.editedRoute)}getTravelNotesHTML(e){return kt(e)}getRouteHeaderHTML(e,t){return Ut(e,t)}};function Kt(e,t,o){let a=null,n=vt(),i=e.latLng,l=null,d=null,c=null,u=null,g=null,v=null,h=null,m=null,p=null,b=null,N=null,T=null,x=null,L=null,I=null,j=null,P=null,D=null,C=null,R=null,M=null,S=null;function O(){if(""!==L.value){if(""===R.value||""!==f.sanitizeToUrl(R.value).url)return e.iconWidth=Number.parseInt(I.value),e.iconHeight=Number.parseInt(j.value),e.iconContent=L.value,e.popupContent=P.value,e.tooltipContent=D.value,e.address=C.value,e.url=R.value,e.phone=M.value,e.latLng=i,e.validateData(),e;T.showError(E.getText("NoteDialog - invalidUrl"))}else T.showError(E.getText("Notedialog - The icon content cannot be empty"))}function A(){""===L.value?l.iconContent="?????":l.iconContent=L.value,l.popupContent=P.value,l.tooltipContent=D.value,l.address=C.value,l.url=R.value,l.phone=M.value,l.iconWidth=I.value,l.iconHeight=j.value,S.textContent="",S.appendChild(Wt.getNoteTextAndIconHTML("TravelNotes-NoteDialog-",{note:l,route:null}))}function k(e){let t=e.street;""!==e.city&&(t+=' '+e.city+""),C.value=t,T.okButton.classList.remove("TravelNotes-Hidden"),A()}function U(e){T.showError(E.getText("Notedialog - an error occurs when searching the adress")),e instanceof Error&&console.error(e),T.okButton.classList.remove("TravelNotes-Hidden"),A()}function B(){T.okButton.classList.add("TravelNotes-Hidden"),n.getPromiseAddress(e.latLng).then(k).catch(U)}function H(e){L.value=e.svg.outerHTML,D.value=e.tooltip;let t=e.streets;""!==e.city&&(t+=' '+e.city+""),e.place&&e.place!==e.city&&(t+=" ("+e.place+")"),C.value=t,i=e.latLng,T.hideWait(),A()}function z(e){T.hideWait(),T.showError(E.getText("Notedialog - an error occurs when creating the SVG icon")),e instanceof Error&&console.error(e),A()}function F(o){let a=It.getIconData(o.target.selectedIndex);"SvgIcon"===a.icon?-1===t?T.showError(E.getText("Notedialog - not possible to create a SVG icon for a travel note")):(T.showWait(),ut().getPromiseIconAndAdress(e.latLng,t).then(H).catch(z)):(T.hideError(),I.value=a.width,j.value=a.height,L.value=a.icon,D.value=a.tooltip,A())}function V(e){if(!a)return;let t=e.target;for(;!t.htmlBefore;)t=t.parentNode;let o=a.selectionStart,n=a.selectionEnd;a.value=a.value.slice(0,o)+t.htmlBefore+(0===t.htmlAfter.length?"":a.value.slice(o,n))+t.htmlAfter+a.value.slice(n),o===n||0===t.htmlAfter.length?(o+=t.htmlBefore.length,n=o):n+=t.htmlBefore.length+t.htmlAfter.length,a.setSelectionRange(o,n),a.focus(),A()}function W(e){a=e.target}function K(e){if(""===e.target.value)return;""===f.sanitizeToUrl(e.target.value).errorsString?T.hideError():T.showError(E.getText("NoteDialog - invalidUrl"))}function _(){y.noteDialog.mask.iconsDimension&&d.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.iconTextArea&&c.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.popupContent&&u.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.tooltip&&g.classList.toggle("TravelNotes-Hidden"),y.noteDialog.mask.address&&(v.classList.toggle("TravelNotes-Hidden"),h.classList.toggle("TravelNotes-Hidden")),y.noteDialog.mask.link&&(m.classList.toggle("TravelNotes-Hidden"),p.classList.toggle("TravelNotes-Hidden")),y.noteDialog.mask.phone&&(b.classList.toggle("TravelNotes-Hidden"),N.classList.toggle("TravelNotes-Hidden"))}return l=Q(),l.jsonObject=e.jsonObject,""===l.iconContent&&(l.iconContent="?????"),T=pe(),T.title=E.getText("NoteDialog - Note"),T.okButtonListener=O,x=w.create("div",{id:"TravelNotes-NoteDialog-MainDataDiv"},T.content),x.appendChild(It.createToolbar({onButtonClickEventListener:V,onSelectEventListener:F,hideError:T.hideError,showError:T.showError,toggleContents:_})),d=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),w.create("text",{value:E.getText("NoteDialog - Icon width")},d),I=w.create("input",{type:"number",className:"TravelNotes-NoteDialog-NumberInput",value:0===e.iconWidth?s.width:e.iconWidth},d),I.addEventListener("input",A,!1),w.create("text",{value:E.getText("NoteDialog - Icon height")},d),j=w.create("input",{type:"number",className:"TravelNotes-NoteDialog-NumberInput",value:0===e.iconHeight?s.height:e.iconHeight},d),j.addEventListener("input",A,!1),c=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv",textContent:E.getText("NoteDialog - Icon content")},x),L=w.create("textarea",{className:"TravelNotes-NoteDialog-TextArea",value:e.iconContent,placeholder:"?????",rows:y.noteDialog.areaHeight.icon},c),L.addEventListener("focus",W,!1),L.addEventListener("input",A,!1),g=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv",textContent:E.getText("NoteDialog - Tooltip content")},x),D=w.create("input",{type:"text",className:"TravelNotes-NoteDialog-InputText",value:e.tooltipContent},g),D.addEventListener("focus",W,!1),D.addEventListener("input",A,!1),u=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv",textContent:E.getText("NoteDialog - Text")},x),P=w.create("textarea",{className:"TravelNotes-NoteDialog-TextArea",value:e.popupContent,rows:y.noteDialog.areaHeight.popupContent},u),P.addEventListener("focus",W,!1),P.addEventListener("input",A,!1),v=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("NoteDialog - Reset address"),textContent:"🔄"},v).addEventListener("click",B,!1),w.create("text",{value:E.getText("NoteDialog - Address")},v),h=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),C=w.create("input",{type:"text",value:e.address,className:"TravelNotes-NoteDialog-InputText"},h),C.addEventListener("focus",W,!1),C.addEventListener("input",A,!1),m=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),y.noteDialog.theDevil.addButton&&w.create("text",{value:"👿"},w.create("a",{href:"https://www.google.com/maps/@"+e.lat.toFixed(r.fixed)+","+e.lng.toFixed(r.fixed)+","+y.noteDialog.theDevil.zoomFactor+"z",target:"_blank",title:"Reminder! The devil will know everything about you"},w.create("div",{className:"TravelNotes-BaseDialog-Button",title:"Reminder! The devil will know everything about you"},m))),w.create("text",{value:E.getText("NoteDialog - Link")},m),p=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),R=w.create("input",{type:"text",className:"TravelNotes-NoteDialog-InputText",value:e.url},p),R.addEventListener("focus",()=>{a=null},!1),R.addEventListener("blur",K,!1),R.addEventListener("input",A,!1),b=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),w.create("text",{value:" "+E.getText("NoteDialog - Phone")},b),N=w.create("div",{className:"TravelNotes-NoteDialog-DataDiv"},x),M=w.create("input",{type:"text",className:"TravelNotes-NoteDialog-InputText",value:e.phone},N),M.addEventListener("focus",W,!1),M.addEventListener("input",A,!1),S=w.create("div",{className:"TravelNotes-NoteDialog-PreviewDiv"},T.footer),S.appendChild(Wt.getNoteTextAndIconHTML("TravelNotes-NoteDialog-",{note:l,route:null})),o&&y.note.reverseGeocoding&&B(),_(),T}function _t(){let e=null,t=null;return new class{constructor(){Object.freeze(this)}createUI(){if(document.getElementById("TravelNotes-WaitUI"))return;e=w.create("div",{className:"TravelNotes-Background"},document.querySelector("body"));let o=w.create("div",{id:"TravelNotes-WaitUI"},e);t=w.create("div",{id:"TravelNotes-WaitUI-MessageDiv"},o),w.create("div",{className:"TravelNotes-WaitAnimationBullet"},w.create("div",{className:"TravelNotes-WaitAnimation"},o))}showInfo(e){t.textContent=e}close(){document.querySelector("body").removeChild(e),e=null}}}let Zt=null,Xt=0,qt=0,Gt=null;function Jt(e,t){let o=Q();o.iconContent=e.svg.outerHTML,o.popupContent="",o.iconWidth=s.width,o.iconHeight=s.height,o.tooltipContent=e.tooltip,o.address=e.streets,""!==e.city&&(o.address+=' '+e.city+""),e.place&&e.place!==e.city&&(o.address+=" ("+e.place+")"),o.latLng=e.latLng,o.iconLatLng=e.latLng,o.distance=me.getClosestLatLngDistance(t,o.latLng).distance,o.chainedDistance=t.chainedDistance,t.notes.add(o),De.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:o.objId}),De.dispatch("roadbookupdate")}function Yt(e,t,o){if(o)if(-1===t)he.travel.notes.add(e),De.dispatch("showtravelnotes");else{let o=He.getRoute(t);o.notes.add(e),e.chainedDistance=o.chainedDistance,o.notes.sort((e,t)=>e.distance-t.distance),De.dispatch("showitinerary")}else-1===t?De.dispatch("updatetravelnotes"):De.dispatch("updateitinerary");De.dispatch("noteupdated",{removedNoteObjId:e.objId,addedNoteObjId:e.objId}),De.dispatch("roadbookupdate")}function $t(e,t,o){Kt(e,t,o).show().then(()=>{Yt(e,t,o)}).catch(e=>{e instanceof Error&&console.error(e)})}function Qt(e){let t=Q();return t.latLng=e,t.iconLatLng=e,t}const eo=new class{constructor(){Object.freeze(this)}get osmSearchNoteDialog(){return null===Gt&&(Gt=y.osmSearch.showSearchNoteDialog),Gt}changeOsmSearchNoteDialog(){Gt=!this.osmSearchNoteDialog}addAllManeuverNotes(e){let t=He.getRoute(e),o=t.itinerary.maneuvers.iterator;for(qt=0;!o.done;)"kDepartDefault"===o.value.iconName&&!o.first||"kArriveDefault"===o.value.iconName&&!o.last||qt++;y.note.maxManeuversNotest.cancelButton.click(),!0)}e.textContent&&w.create("div",{id:"TravelNotes-TwoButtonsDialog-MessageDiv",textContent:e.textContent},t.content)}(),t}({title:E.getText("NoteEditor - Add a note for each maneuver"),textContent:E.getText("NoteEditor - Add a note for each maneuver. Are you sure?",{noteLength:qt}),secondButtonContent:"❌"}).show().then(()=>{o=t.itinerary.maneuvers.iterator,o.done||(Zt=_t(),Zt.createUI(),Xt=1,function e(t,o){function a(){t.done?(o.notes.sort((e,t)=>e.distance-t.distance),De.dispatch("updateitinerary"),De.dispatch("roadbookupdate"),Zt.close(),Zt=null):e(t,o)}if(Zt.showInfo(E.getText("NoteEditor - Creating note",{noteNumber:Xt,notesLength:qt})),"kDepartDefault"===t.value.iconName&&!t.first||"kArriveDefault"===t.value.iconName&&!t.last)a();else{Xt++;let e=o.itinerary.itineraryPoints.getAt(t.value.itineraryPointObjId).latLng;ut().getPromiseIconAndAdress(e,o.objId).then(e=>{Jt(e,o),a()}).catch(e=>{e instanceof Error&&console.error(e),a()})}}(o,t))}).catch(e=>{e instanceof Error&&console.error(e)})}newRouteNote(e){let t=He.getRoute(e.routeObjId),o=me.getClosestLatLngDistance(t,[e.lat,e.lng]),a=Qt(o.latLng);a.distance=o.distance,$t(a,t.objId,!0)}newSearchNote(e){let t=[e.osmElement.lat,e.osmElement.lon],o=[e.osmElement.lat,e.osmElement.lon],a=-1,n=Number.MAX_VALUE;function r(e){if(e.objId!==he.editedRouteObjId){let r=me.getClosestLatLngDistance(e,t);if(r){let i=Ke.pointsDistance(t,r.latLng);i"+e.osmElement.tags.rcn_ref+"":i.iconContent=It.getIconDataFromName(e.osmElement.description)||"",i.address=(e.osmElement.tags["addr:housenumber"]?e.osmElement.tags["addr:housenumber"]+" ":"")+(e.osmElement.tags["addr:street"]?e.osmElement.tags["addr:street"]+" ":"")+(e.osmElement.tags["addr:postcode"]?e.osmElement.tags["addr:postcode"]+" ":"")+(e.osmElement.tags["addr:city"]?e.osmElement.tags["addr:city"]+" ":""),i.url=e.osmElement.tags.website||"",i.phone=e.osmElement.tags.phone||"",i.tooltipContent=e.osmElement.description||"",i.popupContent=e.osmElement.tags.name||"",e.isTravelNote||-1!==a?this.osmSearchNoteDialog||""===i.iconContent?$t(i,a,!0):Yt(i,a,!0):je.showError(E.getText("NoteEditor - No route was found"))}newManeuverNote(e){Zt=_t(),Zt.createUI();let t=he.travel.editedRoute,o=t.itinerary.maneuvers.getAt(e),a=t.itinerary.itineraryPoints.getAt(o.itineraryPointObjId).latLng;ut().getPromiseIconAndAdress(a,t.objId).then(o=>{Jt(o,t),t.notes.sort((e,t)=>e.distance-t.distance),t.itinerary.maneuvers.remove(e),De.dispatch("showitinerary"),De.dispatch("roadbookupdate"),Zt.close(),Zt=null}).catch(e=>{e instanceof Error&&console.error(e),Zt.close(),Zt=null})}newTravelNote(e){$t(Qt(e),-1,!0)}editNote(e){let t=He.getNoteAndRoute(e),o=null===t.route?-1:t.route.objId;$t(t.note,o,!1)}removeNote(e){let t=He.getNoteAndRoute(e);t.route?(t.route.notes.remove(e),De.dispatch("updateitinerary")):(he.travel.notes.remove(e),De.dispatch("updatetravelnotes")),De.dispatch("noteupdated",{removedNoteObjId:e,addedNoteObjId:-1}),De.dispatch("roadbookupdate")}hideNotes(){let e=he.travel.notes.iterator;for(;!e.done;)De.dispatch("removeobject",{objId:e.value.objId});let t=he.travel.routes.iterator;for(;!t.done;)for(e=t.value.notes.iterator;!e.done;)De.dispatch("removeobject",{objId:e.value.objId});if(-1!==he.editedRouteObjId)for(e=he.travel.editedRoute.notes.iterator;!e.done;)De.dispatch("removeobject",{objId:e.value.objId})}showNotes(){this.hideNotes();let e=he.travel.notes.iterator;for(;!e.done;)De.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:e.value.objId});let t=he.travel.routes.iterator;for(;!t.done;)t.value.hidden||De.dispatch("routeupdated",{removedRouteObjId:t.value.objId,addedRouteObjId:t.value.objId})}attachNoteToRoute(e){let t=He.getNoteAndRoute(e),o=Number.MAX_VALUE,a=null,n=null,r=null;he.travel.routes.forEach(e=>{let i=me.getClosestLatLngDistance(e,t.note.latLng);if(i){let l=Ke.pointsDistance(t.note.latLng,i.latLng);le.distance-t.distance),De.dispatch("noteupdated",{removedNoteObjId:e,addedNoteObjId:e}),De.dispatch("updateitinerary"),De.dispatch("updatetravelnotes"),De.dispatch("roadbookupdate"))}detachNoteFromRoute(e){let o=He.getNoteAndRoute(e);o.route.notes.remove(e),o.note.distance=t.invalid,o.note.chainedDistance=t.defaultValue,he.travel.notes.add(o.note),De.dispatch("updateitinerary"),De.dispatch("updatetravelnotes"),De.dispatch("roadbookupdate")}travelNoteDropped(e,t,o){he.travel.notes.moveTo(e,t,o),De.dispatch("updatetravelnotes"),De.dispatch("roadbookupdate")}}; /** @------------------------------------------------------------------------------------------------------------------------------ @@ -93,7 +93,7 @@ function Ze(){let e=null,t=null,o=null,a=0,n=0,r=0,i=0,l=0,s=0,d=null,c=null;fun @------------------------------------------------------------------------------------------------------------------------------ */ -function to(){let e=T(),t=null,o=null,a=null,n=null,r=null,i=null,s=null,d=null;function c(e){let o=t.getBoundingClientRect(),a=(e.clientX-o.x-l.margin/(2*l.margin+l.width)*o.width)/(l.width/(2*l.margin+l.width)*o.width)*d.distance;return me.getLatLngElevAtDist(d,a)}function g(e){e.preventDefault(),e.stopPropagation();let t=c(e);t&&(e.routeObjId=d.objId,e.latlng={lat:t.latLng[0],lng:t.latLng[1]},e.originalEvent={clientX:e.clientX,clientY:e.clientY},function(e){let t=_e();return lt(e,[{context:eo,name:E.getText("ProfileContextMenu - Add a note to the route at this point"),action:eo.newRouteNote,param:{routeObjId:e.routeObjId,lat:e.latlng.lat,lng:e.latlng.lng}},{context:t,name:E.getText("ProfileContextMenu - Zoom to this point"),action:t.zoomToLatLng,param:[e.latlng.lat,e.latlng.lng]}])}(e).show())}function v(){De.dispatch("removeobject",{objId:e})}function h(i){let s=t.getBoundingClientRect(),g=c(i);if(g){De.dispatch("removeobject",{objId:e}),De.dispatch("additinerarypointmarker",{objId:e,latLng:g.latLng}),o&&(t.removeChild(o),t.removeChild(r),t.removeChild(a),t.removeChild(n));let c=(2*l.margin+l.width)*(i.clientX-s.x)/s.width,v=l.margin+l.height;o=document.createElementNS(u,"polyline"),o.setAttributeNS(null,"points",String(c)+","+l.margin+" "+c+","+v),o.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-markerPolyline"),t.appendChild(o);let h=g.routeDistance>d.distance/2?"end":"start",m=g.routeDistance>d.distance/2?-l.xDeltaText:l.xDeltaText;r=document.createElementNS(u,"text"),r.appendChild(document.createTextNode(j.formatDistance(g.routeDistance))),r.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-elevText"),r.setAttributeNS(null,"x",c+m),r.setAttributeNS(null,"y",l.margin+l.yDeltaText),r.setAttributeNS(null,"text-anchor",h),t.appendChild(r),a=document.createElementNS(u,"text"),a.appendChild(document.createTextNode("Alt. "+g.elev.toFixed(0)+" m.")),a.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-elevText"),a.setAttributeNS(null,"x",c+m),a.setAttributeNS(null,"y",l.margin+2*l.yDeltaText),a.setAttributeNS(null,"text-anchor",h),t.appendChild(a),n=document.createElementNS(u,"text"),n.appendChild(document.createTextNode("Pente "+g.ascent.toFixed(0)+" % ")),n.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-elevText"),n.setAttributeNS(null,"x",c+m),n.setAttributeNS(null,"y",l.margin+3*l.yDeltaText),n.setAttributeNS(null,"text-anchor",h),t.appendChild(n)}}function m(){t&&(t.removeEventListener("contextmenu",g,!1),t.removeEventListener("mousemove",h,!1),t.removeEventListener("mouseleave",v,!1),De.dispatch("removeobject",{objId:e}),i.content.removeChild(s),i.content.removeChild(t)),t=null,o=null,n=null,r=null,a=null,s=null}return i=Ze(),i.createWindow(),i.onClose=function(){m(),De.dispatch("profileclosed",{objId:d.objId})},i.onUpdate=function(e){m(),d=e[0],t=St().createSvg(d),i.header.textContent=E.getText("ProfileWindow - Profile {name}",{name:d.computedName}),i.content.appendChild(t),t.addEventListener("contextmenu",g,!1),t.addEventListener("mousemove",h,!1),t.addEventListener("mouseleave",v,!1),s=w.create("div",{className:"TravelNotes-ProfileWindow-Ascent",textContent:E.getText("ProfileWindow - Ascent: {ascent} m. - Descent: {descent} m. - Distance: {distance}",{ascent:d.itinerary.ascent.toFixed(0),descent:d.itinerary.descent.toFixed(0),distance:j.formatDistance(d.distance)})}),i.content.appendChild(s)},i}let oo=new Map,ao=St();const no=new class{constructor(){Object.freeze(this)}createProfile(e){let t=oo.get(e.objId);if(e.itinerary.hasProfile){y.route.elev.smooth&&ao.smooth(e),e.itinerary.ascent=0,e.itinerary.descent=0;let o=e.itinerary.itineraryPoints.first.elev;e.itinerary.itineraryPoints.forEach(t=>{let a=t.elev-o;0>a?e.itinerary.descent-=a:e.itinerary.ascent+=a,o=t.elev}),t&&t.update(e)}else t&&t.close()}updateProfile(e,t){let o=oo.get(e);o&&(oo.delete(e),t&&t.itinerary.hasProfile?(o.update(t),oo.set(t.objId,o)):o.close())}deleteProfile(e){let t=oo.get(e);t&&t.close()}deleteAllProfiles(){oo.forEach(e=>e.close())}showProfile(e){let t=oo.get(e);t||(t=to());let o=ze.getRoute(e);t.update(o),oo.set(e,t)}onProfileClosed(e){oo.delete(e)}};const ro=new class{constructor(){Object.freeze(this)}createUI(){w.create("div",{id:"TravelNotes-AttributionsUI"},document.querySelector("body")),this.attributions=""}set attributions(e){let t='© Leaflet | © OpenStreetMap contributors '+e+'| © Travel & Notes',o=document.getElementById("TravelNotes-AttributionsUI");for(;o.firstChild;)o.removeChild(o.firstChild);f.sanitizeToHtmlElement(t,o)}};class io{constructor(e){if(!e.name||"string"!=typeof e.name)throw new Error("invalid name for layer");if(this.name=f.sanitizeToJsString(e.name),!e.service||"wms"!==e.service&&"wmts"!==e.service)throw new Error("invalid service for layer "+this.name);if(this.service=e.service,!e.url||"string"!=typeof e.url)throw new Error("invalid url for layer "+this.name);if(this.url=e.url,"wms"===this.service){if(!(e.wmsOptions&&e.wmsOptions.layers&&"string"==typeof e.wmsOptions.layers&&e.wmsOptions.format&&"string"==typeof e.wmsOptions.format&&e.wmsOptions.transparent&&"boolean"==typeof e.wmsOptions.transparent))throw new Error("invalid wmsOptions for layer "+this.name);this.wmsOptions=e.wmsOptions,this.wmsOptions.layers=f.sanitizeToJsString(this.wmsOptions.layers),this.wmsOptions.format=f.sanitizeToJsString(this.wmsOptions.format)}try{e.bounds&&"number"==typeof e.bounds[0][0]&&"number"==typeof e.bounds[0][1]&&"number"==typeof e.bounds[1][0]&&"number"==typeof e.bounds[1][1]&&(this.bounds=e.bounds)}catch(e){throw new Error("invalid bounds for layer "+this.name)}if(e.minZoom&&"number"==typeof e.minZoom&&(this.minZoom=e.minZoom),e.maxZoom&&"number"==typeof e.maxZoom&&(this.maxZoom=e.maxZoom),!(e.toolbar&&e.toolbar.text&&"string"==typeof e.toolbar.text&&e.toolbar.color&&"string"==typeof e.toolbar.color&&e.toolbar.backgroundColor&&"string"==typeof e.toolbar.backgroundColor))throw new Error("invalid toolbar for layer "+this.name);if(this.toolbar=e.toolbar,this.toolbar.text=f.sanitizeToJsString(this.toolbar.text),this.toolbar.color=f.sanitizeToColor(this.toolbar.color)||"#000000",this.toolbar.backgroundColor=f.sanitizeToColor(this.toolbar.backgroundColor)||"#ffffff",!e.providerName||"string"!=typeof e.providerName)throw new Error("invalid providerName for layer "+this.name);if(this.providerName=f.sanitizeToJsString(e.providerName),"boolean"!=typeof e.providerKeyNeeded)throw new Error("invalid providerKeyNeeded for layer "+this.name);if(this.providerKeyNeeded=e.providerKeyNeeded,""===e.attribution)this.attribution="";else{if(!e.attribution||"string"!=typeof e.attribution)throw new Error("invalid attribution for layer "+this.name);this.attribution=f.sanitizeToHtmlString(e.attribution).htmlString}if(e.getCapabilitiesUrl&&"string"==typeof e.getCapabilitiesUrl&&(this.getCapabilitiesUrl=f.sanitizeToUrl(e.getCapabilitiesUrl).url,""===this.getCapabilitiesUrl))throw new Error("invalid getCapabilitiesUrl for layer "+this.name);Object.freeze(this)}}function lo(e){return new io(e)}let so=[lo({service:"wmts",url:"https://{s}.tile.osm.org/{z}/{x}/{y}.png",name:"OSM - Color",toolbar:{text:"OSM",color:"#ff0000",backgroundColor:"#ffffff"},providerName:"OSM",providerKeyNeeded:!1,attribution:""})],co=null,uo=null,go=null,vo=0,ho=0,mo=0,po=0;function fo(e){e.target.style.color=e.target.layer.toolbar.backgroundColor,e.target.style["background-color"]=e.target.layer.toolbar.color}function bo(e){e.target.style.color=e.target.layer.toolbar.color,e.target.style["background-color"]=e.target.layer.toolbar.backgroundColor}function yo(e){e.target.classList.add("TravelNotes-LayersToolbarUI-LinkButton-Enter"),e.target.classList.remove("TravelNotes-LayersToolbarUI-LinkButton-Leave")}function wo(e){De.dispatch("layerchange",{layer:e.target.layer}),ro.attributions=e.target.layer.attribution,he.travel.layerName=e.target.layer.name}function No(e){e.target.classList.add("TravelNotes-LayersToolbarUI-LinkButton-Leave"),e.target.classList.remove("TravelNotes-LayersToolbarUI-LinkButton-Enter")}function To(e){e.deltaY&&(vo-=e.deltaY*c[e.deltaMode],vo=vo>po?po:vo,vo=vofunction(e){if(e.providerKeyNeeded&&!Be.hasKey(e.providerName.toLowerCase()))return;let t=w.create("div",{type:"layer",className:"TravelNotes-LayersToolbarUI-Button",title:e.name,layer:e,textContent:e.toolbar.text,style:"color:"+e.toolbar.color+";background-color:"+e.toolbar.backgroundColor},go);t.addEventListener("mouseenter",fo,!1),t.addEventListener("mouseleave",bo,!1),t.addEventListener("click",wo,!1),ho=t.clientHeight,mo+=ho}(e)),y.layersToolbarUI.theDevil&&y.layersToolbarUI.theDevil.addButton&&function(e,t,o){let a=w.create("div",{type:"link",className:"TravelNotes-LayersToolbarUI-Button TravelNotes-LayersToolbarUI-LinkButton-Leave"},go);w.create("a",{href:e,title:t,textContent:o,target:"_blank"},a),a.addEventListener("mouseenter",yo,!1),a.addEventListener("mouseleave",No,!1),mo+=a.clientHeight}("https://www.google.com/maps/@"+he.map.getCenter().lat+","+he.map.getCenter().lng+","+he.map.getZoom()+"z","Reminder! The devil will know everything about you","👿"),po+=ho,vo=po,go.style.marginTop=String(vo)+"px",go.addEventListener("wheel",To,!1)}const Eo=new class{constructor(){Object.freeze(this)}createUI(){uo=w.create("div",{id:"TravelNotes-LayersToolbarUI"},document.querySelector("body")),w.create("div",{id:"TravelNotes-LayersToolbarUI-Header",textContent:E.getText("LayersToolbarUI - Layers")},uo),uo.addEventListener("mouseenter",Io,!1),uo.addEventListener("mouseleave",Lo,!1),De.dispatch("layerchange",{layer:so[0]}),ro.attributions=so[0].attribution}getLayer(e){let t=so.find(t=>t.name===e)||so[0];return t.providerKeyNeeded&&(Be.hasKey(t.providerName.toLowerCase())||(t=so[0])),t}setLayer(e){let t=so.find(t=>t.name===e)||so[0];t.providerKeyNeeded&&(Be.hasKey(t.providerName.toLowerCase())||(t=so[0])),De.dispatch("layerchange",{layer:t}),ro.attributions=t.attribution,he.travel.layerName=t.name}addLayers(e){e.forEach(e=>{so.push(lo(e))})}};function jo(){let e=null,t=null,o=null,a=[],n=0,r=null,i=document.querySelector("body"),l=0;function s(){for(;0window.print(),!1),document.getElementById("TravelNotes-PrintToolbar-CancelButton").removeEventListener("click",s,!1),i.removeChild(document.getElementById("TravelNotes-PrintToolbar"));let e=i.children;for(let t=0;to.lat?e.bottomLeft.lat:e.upperRight.lat,lng:t.lng}:t.lat===o.lat?{lat:t.lat,lng:t.lng=e.bottomLeft.lat&&n.lng=e.bottomLeft.lng&&n.lng<=e.upperRight.lng&&n.lat=e.bottomLeft.lat&&n.lng>a.lng)return n;if(n={lat:e.bottomLeft.lat,lng:(e.bottomLeft.lat-i)/r},n.lng>=e.bottomLeft.lng&&n.lng<=e.upperRight.lng&&n.lat>a.lat)return n;throw new Error("intermediate point not found")}function c(o){n++;let a="TravelNotes-RouteViewDiv"+n,l=w.create("div",{className:"TravelNotes-routeViewDiv",id:a},i);e.pageBreak&&l.classList.add("TravelNotes-PrintPageBreak"),l.style.width=String(e.paperWidth)+"mm",l.style.height=String(e.paperHeight)+"mm";let s=e.printNotes?function(){let e=[];return t.notes.forEach(t=>{let o=window.L.divIcon({iconSize:[t.iconWidth,t.iconHeight],iconAnchor:[t.iconWidth/2,t.iconHeight/2],popupAnchor:[0,-t.iconHeight/2],html:t.iconContent,className:"TravelNotes-Map-AllNotes "}),a=window.L.marker(t.iconLatLng,{zIndexOffset:100,icon:o,draggable:!0});e.push(a)}),e}():[];s.push(function(){let e=Eo.getLayer(he.travel.layerName),t=Be.getUrl(e),o=null;return o="wmts"===e.service.toLowerCase()?window.L.tileLayer(t):window.L.tileLayer.wms(t,e.wmsOptions),o.options.attribution=' © OpenStreetMap contributors '+e.attribution+'| © Travel & Notes ',o}()),s.push(window.L.circleMarker([o.entryPoint.lat,o.entryPoint.lng],y.printRouteMap.entryPointMarker)),s.push(window.L.circleMarker([o.exitPoint.lat,o.exitPoint.lng],y.printRouteMap.exitPointMarker)),s.push(r),window.L.map(a,{attributionControl:!0,zoomControl:!1,center:[(o.bottomLeft.lat+o.upperRight.lat)/2,(o.bottomLeft.lng+o.upperRight.lng)/2],zoom:e.zoomFactor,minZoom:e.zoomFactor,maxZoom:e.zoomFactor,layers:s})}function u(){let e=i.children;for(let t=0;twindow.print(),!1),w.create("div",{id:"TravelNotes-PrintToolbar-CancelButton",className:"TravelNotes-UI-Button",title:E.getText("PrintFactory - Cancel print"),textContent:"❌"},e).addEventListener("click",s,!1)}(),window.addEventListener("afterprint",s,!0);let o=[],l=t.itinerary.itineraryPoints.iterator;for(;!l.done;)o.push(l.value.latLng);r=window.L.polyline(o,{color:t.color,weight:t.width}),n=0,a.forEach(c)}return new class{constructor(){Object.freeze(this)}print(n,r){t=ze.getRoute(r),t&&(e=n,function(){let t=document.querySelector("body"),a=w.create("div",{},t);a.style.position="absolute",a.style.top="0",a.style.left="0",a.style.width=String(e.paperWidth-2*e.borderWidth)+"mm",a.style.height=String(e.paperHeight-2*e.borderWidth)+"mm",l=Math.ceil(a.clientWidth/256)*Math.ceil(a.clientHeight/256);let n=me.screenCoordToLatLng(0,0),r=me.screenCoordToLatLng(a.clientWidth,a.clientHeight);t.removeChild(a);let i=he.map.getZoomScale(he.map.getZoom(),e.zoomFactor);o=[Math.abs(n[0]-r[0])*i,Math.abs(n[1]-r[1])*i]}(),function(){a=[];let e=t.itinerary.itineraryPoints.iterator,n=e.done,r={bottomLeft:{lat:e.value.lat,lng:e.value.lng},upperRight:{lat:e.value.lat,lng:e.value.lng}},i={lat:e.value.lat,lng:e.value.lng},s=e.value;n=e.done;let c=e.value;for(;!n;){let t={bottomLeft:{lat:Math.min(r.bottomLeft.lat,c.lat),lng:Math.min(r.bottomLeft.lng,c.lng)},upperRight:{lat:Math.max(r.upperRight.lat,c.lat),lng:Math.max(r.upperRight.lng,c.lng)}},u=[t.upperRight.lat-t.bottomLeft.lat,t.upperRight.lng-t.bottomLeft.lng];o[0]>u[0]&&o[1]>u[1]?(r=t,s=e.value,n=e.done,c=e.value,n&&(r.entryPoint=i,r.exitPoint=s,a.push(r))):(s=d(r,s,c),r.bottomLeft={lat:Math.min(r.bottomLeft.lat,s.lat),lng:Math.min(r.bottomLeft.lng,s.lng)},r.upperRight={lat:Math.max(r.upperRight.lat,s.lat),lng:Math.max(r.upperRight.lng,s.lng)},r.entryPoint=i,r.exitPoint=s,a.push(r),r={bottomLeft:{lat:s.lat,lng:s.lng},upperRight:{lat:s.lat,lng:s.lng}},i={lat:s.lat,lng:s.lng}),y.printRouteMap.maxTiles{t=t&&r.defaultValue!==e.lat&&r.defaultValue!==e.lng}),t}function Mo(e){Do=!1,je.showError(e),e instanceof Error&&console.error(e)}function So(){Do=!1,he.travel.editedRoute.itinerary.validateData();let e=he.travel.editedRoute.itinerary.maneuvers.iterator;for(;!e.done;)e.value.validateData();let o=he.travel.editedRoute.itinerary.itineraryPoints.iterator;for(;!o.done;)o.value.validateData();if(function(e){let o=e.itinerary.itineraryPoints.iterator,a=e.itinerary.maneuvers.iterator;for(o.done,a.done,a.value.distance=t.defaultValue,a.done,e.distance=t.defaultValue,e.duration=t.defaultValue;!o.done;)o.previous.distance=Ke.pointsDistance(o.previous.latLng,o.value.latLng),e.distance+=o.previous.distance,a.previous.distance+=o.previous.distance,a.value.itineraryPointObjId===o.value.objId&&(e.duration+=a.previous.duration,a.value.distance=t.defaultValue,a.next&&a.value.itineraryPointObjId===a.next.itineraryPointObjId&&(a.done,a.value.distance=t.defaultValue),a.done)}(he.travel.editedRoute),"circle"!==he.travel.editedRoute.itinerary.transitMode){let e=he.travel.editedRoute.wayPoints.iterator;for(;!e.done;)e.first?e.value.latLng=he.travel.editedRoute.itinerary.itineraryPoints.first.latLng:e.last?e.value.latLng=he.travel.editedRoute.itinerary.itineraryPoints.last.latLng:e.value.latLng=me.getClosestLatLngDistance(he.travel.editedRoute,e.value.latLng).latLng}let a=he.travel.editedRoute.notes.iterator;for(;!a.done;){let e=me.getClosestLatLngDistance(he.travel.editedRoute,a.value.latLng);a.value.latLng=e.latLng,a.value.distance=e.distance}Co(),he.travel.editedRoute.notes.sort((e,t)=>e.distance-t.distance),Po&&_e().zoomToRoute(he.travel.editedRoute.objId),no.createProfile(he.travel.editedRoute),De.dispatch("routeupdated",{removedRouteObjId:he.travel.editedRoute.objId,addedRouteObjId:he.travel.editedRoute.objId}),De.dispatch("roadbookupdate"),De.dispatch("showitinerary"),De.dispatch("setrouteslist")}const Oo=new class{constructor(){Object.freeze(this)}addRoute(){let e=ne();he.travel.routes.add(e),i.editedChanged===he.travel.editedRoute.editionStatus?(Co(),De.dispatch("setrouteslist"),De.dispatch("roadbookupdate")):this.editRoute(e.objId)}editRoute(e){if(i.editedChanged===he.travel.editedRoute.editionStatus)return void je.showError(E.getText("RouteEditor - Not possible to edit a route without a save or cancel"));let t=ze.getRoute(e),o=t.itinerary.provider,a=he.providers.get(o.toLowerCase());if(o&&""!==o&&(!a||a.providerKeyNeeded&&!Be.hasKey(o)))return void je.showError(E.getText("RouteEditor - Not possible to edit a route created with this provider",{provider:o}));-1!==he.editedRouteObjId&&this.cancelEdition(),o&&""!==o&&De.dispatch("setprovider",{provider:o});let n=t.itinerary.transitMode;n&&""!==n&&De.dispatch("settransitmode",{transitMode:n}),he.travel.editedRoute=ne(),t.editionStatus=i.editedNoChange,he.travel.editedRoute.jsonObject=t.jsonObject,he.editedRouteObjId=t.objId,he.travel.editedRoute.hidden=!1,t.hidden=!1,no.updateProfile(he.editedRouteObjId,he.travel.editedRoute),Co(),De.dispatch("routeupdated",{removedRouteObjId:t.objId,addedRouteObjId:he.travel.editedRoute.objId}),De.dispatch("roadbookupdate"),De.dispatch("showitinerary"),De.dispatch("setrouteslist")}removeRoute(e){let t=e;if(t===he.editedRouteObjId||t===he.travel.editedRoute.objId){if(i.editedChanged===he.travel.editedRoute.editionStatus)return void je.showError(E.getText("TravelEditor - Cannot remove an edited route"));t=he.editedRouteObjId,this.cancelEdition()}De.dispatch("routeupdated",{removedRouteObjId:t,addedRouteObjId:-1}),he.travel.routes.remove(t),no.deleteProfile(t),Co(),De.dispatch("roadbookupdate"),De.dispatch("setrouteslist")}removeManeuver(e){(he.travel.editedRoute.itinerary.maneuvers.previous(e,e=>t.defaultValue{Co(),Ro(t)&&De.dispatch("routepropertiesupdated",{routeObjId:t.objId}),De.dispatch("roadbookupdate"),De.dispatch("setrouteslist"),De.dispatch("updateitinerary")}).catch(e=>{e instanceof Error&&console.error(e)})}printRouteMap(e){(function(){let e=null,t=null,o=null,a=null,n=null,r=null,i=null,l=null;function s(){return Object.freeze({paperWidth:parseInt(o.value),paperHeight:parseInt(a.value),borderWidth:parseInt(n.value),zoomFactor:parseInt(l.value),pageBreak:r.checked,printNotes:i.checked})}return e=pe(),e.title=E.getText("PrintRouteMapDialog - Print"),e.okButtonListener=s,t=w.create("div",{id:"TravelNotes-PrintRouteMapDialog-MainDataDiv"},e.content),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Paper width")},e),o=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput"},e),o.value=y.printRouteMap.paperWidth,w.create("text",{value:E.getText("PrintRouteMapDialog - Paper width units")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Paper height")},e),a=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput",value:y.printRouteMap.paperHeight},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Paper height units")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Border width")},e),n=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput",id:"TravelNotes-PrintRouteMapDialog-BorderWidthNumberInput",value:y.printRouteMap.borderWidth},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Border width units")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv",id:"TravelNotes-PrintRouteMapDialog-ZoomFactorDataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Zoom factor")},e),l=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput",value:Math.min(y.printRouteMap.zoomFactor,15),min:he.map.getMinZoom(),max:Math.min(he.map.getMaxZoom(),15)},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv",id:"TravelNotes-PrintRouteMapDialog-PageBreakDataDiv"},t);r=w.create("input",{type:"checkbox",id:"TravelNotes-PrintRouteMapDialog-PageBreakInput",checked:y.printRouteMap.pageBreak},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Page break")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv",id:"TravelNotes-PrintRouteMapDialog-PrintNotesDataDiv"},t);i=w.create("input",{type:"checkbox",id:"TravelNotes-PrintRouteMapDialog-PrintNotesInput",checked:y.printRouteMap.printNotes},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Print notes")},e)}(),e})().show().then(t=>jo().print(t,e)).catch(e=>{e instanceof Error&&console.error(e)})}showRoute(e){ze.getRoute(e).hidden=!1,De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e}),De.dispatch("setrouteslist")}hideRoute(e){ze.getRoute(e).hidden=!0,De.dispatch("routeupdated",{removedRouteObjId:e,addedRouteObjId:-1}),De.dispatch("setrouteslist")}showRoutes(){let e=he.travel.routes.iterator;for(;!e.done;)e.value.hidden&&(e.value.hidden=!1,De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e.value.objId}));De.dispatch("setrouteslist")}hideRoutes(){let e=he.travel.routes.iterator;for(;!e.done;)e.value.hidden||e.value.objId===he.editedRouteObjId||(e.value.hidden=!0,De.dispatch("routeupdated",{removedRouteObjId:e.value.objId,addedRouteObjId:-1}));De.dispatch("setrouteslist")}};function Ao(e,t){if(!y.wayPoint.reverseGeocoding)return De.dispatch("setrouteslist"),De.dispatch("showitinerary"),void De.dispatch("roadbookupdate");vt().getPromiseAddress(e).then(e=>{let o=e.street;""!==e.city&&(o+=" "+e.city),function(e,t){he.travel.editedRoute.editionStatus=i.editedChanged;let o=he.travel.editedRoute.wayPoints.getAt(t);o.name=e.name,o.address=e.address,De.dispatch("setrouteslist"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate")}(Object.seal({name:e.name,address:o}),t)}).catch(e=>{e instanceof Error&&console.error(e)})}const ko=new class{constructor(){Object.freeze(this)}addWayPoint(e){he.travel.editedRoute.editionStatus=i.editedChanged;let t=M();t.latLng=e,he.travel.editedRoute.wayPoints.add(t),Ao(e,t.objId),De.dispatch("addwaypoint",{wayPoint:he.travel.editedRoute.wayPoints.last,letter:he.travel.editedRoute.wayPoints.length-2}),he.travel.editedRoute.wayPoints.swap(t.objId,!0),Oo.startRouting()}addWayPointOnRoute(e,t){let o=me.getClosestLatLngDistance(he.travel.editedRoute,e).distance;he.travel.editedRoute.editionStatus=i.editedChanged;let a=M();a.latLng=t,he.travel.editedRoute.wayPoints.add(a),Ao(t,a.objId),De.dispatch("addwaypoint",{wayPoint:he.travel.editedRoute.wayPoints.last,letter:he.travel.editedRoute.wayPoints.length-2});let n=he.travel.editedRoute.wayPoints.iterator;for(;!n.done;){if(o{let t=e.street;""!==e.city&&(t+=" "+e.city),n.value=t}).catch(e=>{e instanceof Error&&console.error(e)})}return t=pe(),t.title=E.getText("WayPointPropertiesDialog - Waypoint properties"),t.okButtonListener=r,o=w.create("div",{id:"TravelNotes-WayPointPropertiesDialog-DataDiv"},t.content),w.create("div",{textContent:E.getText("WayPointPropertiesDialog - Name")},o),a=w.create("input",{type:"text",value:e.name,className:"TravelNotes-WayPointPropertiesDialog-Input"},w.create("div",null,o)),function(){let t=w.create("div",null,o);w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("WayPointPropertiesDialog - Reset address"),textContent:"🔄"},t).addEventListener("click",i,!1),w.create("text",{value:E.getText("WayPointPropertiesDialog - Address")},t),n=w.create("input",{type:"text",value:e.address,className:"TravelNotes-WayPointPropertiesDialog-Input"},w.create("div",null,o))}(),t})(he.travel.editedRoute.wayPoints.getAt(e)).show().then(()=>{De.dispatch("setrouteslist"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate")}).catch(e=>{e instanceof Error&&console.error(e)})}};function Uo(e,t){let o=e.target.objId,a=ze.getRoute(o),n=_e();return lt(e,function(){let t=[{context:Oo,name:E.getText("RouteContextMenu - Edit this route"),action:o===he.travel.editedRoute.objId||i.editedChanged===he.travel.editedRoute.editionStatus?null:Oo.editRoute,param:o},{context:Oo,name:E.getText("RouteContextMenu - Delete this route"),action:o===he.travel.editedRoute.objId&&i.editedChanged===he.travel.editedRoute.editionStatus?null:Oo.removeRoute,param:o},a.hidden?{context:Oo,name:E.getText("RouteContextMenu - Show this route"),action:Oo.showRoute,param:o}:{context:Oo,name:E.getText("RouteContextMenu - Hide this route"),action:he.travel.editedRoute.objId===o?null:Oo.hideRoute,param:o},{context:Oo,name:E.getText("RouteContextMenu - Properties"),action:a.hidden?null:Oo.routeProperties,param:o},{context:n,name:E.getText("RouteContextMenu - Zoom to route"),action:n.zoomToRoute,param:o},{context:no,name:E.getText("RouteContextMenu - View the elevation"),action:a.itinerary.hasProfile?no.showProfile:null,param:o}];return y.printRouteMap.isEnabled&&t.push({context:Oo,name:E.getText("RouteContextMenu - Print route map"),action:Oo.printRouteMap,param:o}),t=t.concat([{context:Oo,name:E.getText("RouteContextMenu - Save this route in a GPX file"),action:0",className:"TravelNotes-Map-Note-Bullet"}),opacity:y.note.grip.opacity,draggable:!he.travel.readOnly});o.objId=t.objId;let a=window.L.divIcon({iconSize:[t.iconWidth,t.iconHeight],iconAnchor:[t.iconWidth/2,t.iconHeight/2],popupAnchor:[0,-t.iconHeight/2],html:t.iconContent,className:"TravelNotes-Map-AllNotes "}),n=window.L.marker(t.iconLatLng,{zIndexOffset:100,icon:a,draggable:!he.travel.readOnly});n.objId=t.objId,n.bindPopup(e=>Wt.getNoteTextHTML("TravelNotes-Map-",ze.getNoteAndRoute(e.objId))),0!==t.tooltipContent.length&&(n.bindTooltip(e=>ze.getNoteAndRoute(e.objId).note.tooltipContent),n.getTooltip().options.offset[0]=t.iconWidth/2);let r=window.L.polyline([t.latLng,t.iconLatLng],y.note.polyline);r.objId=t.objId;let i=window.L.layerGroup([n,r,o]);return i.markerId=window.L.Util.stamp(n),i.polylineId=window.L.Util.stamp(r),i.bulletId=window.L.Util.stamp(o),Vo(t.objId,i),y.note.haveBackground&&document.querySelectorAll(".TravelNotes-MapNote,.TravelNotes-SvgIcon").forEach(e=>e.classList.add("TravelNotes-Map-Note-Background")),Object.freeze({marker:n,polyline:r,bullet:o})}function Ko(e){e.dashArray>=y.route.dashChoices.length&&(e.dashArray=0);let t=y.route.dashChoices[e.dashArray].iDashArray;if(t){let o="",a=0;for(a=0;a{let t=ze.getRoute(e.objId);return Wt.getRouteHeaderHTML("TravelNotes-Map-",t)}),window.L.DomEvent.on(n,"click",e=>e.target.openPopup(e.latlng));let r=t.notes.iterator;for(;!r.done;)Wo(r.value.objId);return t}addNote(e){return Wo(e)}getDashArray(e){return Ko(e)}zoomTo(e,t){if(t){let e=[];t.forEach(t=>e=e.concat(t)),he.map.fitBounds(me.getLatLngBounds(e))}else he.map.setView(e,y.itineraryPoint.zoomFactor)}setLayer(e,t){let o=null;o="wmts"===e.service.toLowerCase()?window.L.tileLayer(t):window.L.tileLayer.wms(t,e.wmsOptions),zo&&he.map.removeLayer(zo),he.map.addLayer(o),zo=o,he.travel.readOnly||(he.map.getZoom()<(e.minZoom||0)&&he.map.setZoom(e.minZoom||0),he.map.setMinZoom(e.minZoom||0),he.map.getZoom()>(e.maxZoom||18)&&he.map.setZoom(e.maxZoom||18),he.map.setMaxZoom(e.maxZoom||18),e.bounds?(he.map.getBounds().intersects(e.bounds)&&!he.map.getBounds().contains(e.bounds)||(he.map.setMaxBounds(null),he.map.fitBounds(e.bounds),he.map.setZoom(e.minZoom||0)),he.map.setMaxBounds(e.bounds)):he.map.setMaxBounds(null)),he.map.fire("baselayerchange",o)}onGeolocationStatusChanged(e){o.active!==e&&Ho&&(he.map.removeLayer(Ho),Ho=null)}onGeolocationPositionChanged(e){let t=y.geoLocation.zoomToPosition;Ho&&(he.map.removeLayer(Ho),t=!1),Ho=window.L.circleMarker(window.L.latLng(e.coords.latitude,e.coords.longitude),y.geoLocation.marker).bindTooltip(j.formatLatLng([e.coords.latitude,e.coords.longitude])).addTo(he.map),t&&he.map.setView(window.L.latLng(e.coords.latitude,e.coords.longitude),y.geoLocation.zoomFactor)}};let Zo=null,Xo=null,qo=1;function Go(){Zo&&(window.L.DomEvent.off(Zo),he.map.removeLayer(Zo),Zo=null)}function Jo(){window.L.DomEvent.off(Zo,"mouseout",Go)}function Yo(e){e.latlng.lat=Xo[0],e.latlng.lng=Xo[1],e.target.objId=he.travel.editedRoute.objId,Uo(e).show()}function $o(e){ko.addWayPointOnRoute(Xo,[e.target.getLatLng().lat,e.target.getLatLng().lng]),Zo&&(window.L.DomEvent.off(Zo,"dragstart",Jo),window.L.DomEvent.off(Zo,"dragend",$o),window.L.DomEvent.off(Zo,"contextmenu",Yo),he.map.removeLayer(Zo),Zo=null)}function Qo(e){let t=ze.getNoteAndRoute(e.target.objId),o=t.note,a=t.route,n=he.mapObjects.get(e.target.objId);if(null===a)o.latLng=[e.target.getLatLng().lat,e.target.getLatLng().lng],De.dispatch("updatetravelnotes");else{let t=me.getClosestLatLngDistance(a,[e.target.getLatLng().lat,e.target.getLatLng().lng]);o.latLng=t.latLng,o.distance=t.distance,a.notes.sort((e,t)=>e.distance-t.distance),n.getLayer(n.bulletId).setLatLng(t.latLng),De.dispatch("updateitinerary")}n.getLayer(n.polylineId).setLatLngs([o.latLng,o.iconLatLng]),De.dispatch("roadbookupdate")}function ea(e){let t=ze.getNoteAndRoute(e.target.objId).note,o=he.mapObjects.get(e.target.objId);o.getLayer(o.polylineId).setLatLngs([[e.latlng.lat,e.latlng.lng],t.iconLatLng])}function ta(e){e.originalEvent.target.style.opacity=y.note.grip.moveOpacity}function oa(e){e.originalEvent.target.style.opacity=y.note.grip.opacity}function aa(e){Bo(e).show()}function na(e){let t=ze.getNoteAndRoute(e.target.objId).note;t.iconLatLng=[e.target.getLatLng().lat,e.target.getLatLng().lng];let o=he.mapObjects.get(e.target.objId);o.getLayer(o.polylineId).setLatLngs([t.latLng,t.iconLatLng])}function ra(e){let t=ze.getNoteAndRoute(e.target.objId).note,o=he.mapObjects.get(e.target.objId);o.getLayer(o.polylineId).setLatLngs([t.latLng,[e.latlng.lat,e.latlng.lng]])}function ia(e){let t=ze.getRoute(e.target.objId);if(i.notEdited!==t.editionStatus)if(Xo=[e.latlng.lat,e.latlng.lng],Zo)Zo.setLatLng(e.latlng);else{let t='
?
';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, <\t\tpath d="m 2,13 a 1.7142857,1.7142857 0 0 0 1.7142857,1.714286 H 16.285714 A 1.7142857,1.7142857 0 0 0 18,13 V 9\t\t.5714286 A 1.7142857,1.7142857 0 0 0 16.285714,7.8571429 H 3.7142857 A 1.7142857,1.7142857 0 0 0 2,9.5714286 Z \t\tm 1.8285714,-2.285714 a 1.0285714,1.0285714 0 1 1 0,0.01143 z m 10.2857146,0 a 1.0285714,1.0285714 0 1 1 0,0.01\t\t143 z" /> ',train:'data:image/svg+xml;utf8, \t\t',line:'data:image/svg+xml;utf8, ',circle:'data:image/svg+xml;utf8, <\t\tcircle cx="8" cy="6" r="5" stroke="rgb(0,0,0)" /> '};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?"
"+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.

Copyright - 2017 2021 - wwwouaiebe

Contact : https://www.ouaie.be/

GitHub : https://github.com/wwwouaiebe/leaflet.TravelNotes

Version : 2.2.0.

This program uses: leaflet, Project-OSRM/osrm-text-instructions and the Overpass API

',e.content),e.show().then().catch(e=>{e instanceof Error&&console.error(e)})}let sr=null;const dr=new class{constructor(){Object.freeze(this)}getOpenPromise(){return new Promise((function(e,t){if(sr)return void e();let o=window.indexedDB.open("TravelNotesDb",1);o.onerror=function(){sr=null,t(new Error("Not possible to open the db"))},o.onsuccess=function(t){sr=t.target.result,e()},o.onupgradeneeded=function(e){sr=e.target.result,sr.createObjectStore("Travels",{keyPath:"UUID"})}}))}getReadPromise(e){return new Promise((function(t,o){if(!sr)return void o(new Error("Database not opened"));let a=sr.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(!sr)return void a(new Error("Database not opened"));let n=null;try{n=sr.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(!sr)return;if(!e)return sr.close(),void(sr=null);let t=sr.transaction(["Travels"],"readwrite");t.onerror=function(){};let o=t.objectStore("Travels").delete(e);o.onerror=function(){sr.close(),sr=null},o.onsuccess=function(){sr.close(),sr=null}}};let cr=!1;function ur(){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")&&dr.getOpenPromise().then(()=>{dr.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 gr(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:lr}])} +function to(){let e=T(),t=null,o=null,a=null,n=null,r=null,i=null,s=null,d=null;function c(e){let o=t.getBoundingClientRect(),a=(e.clientX-o.x-l.margin/(2*l.margin+l.width)*o.width)/(l.width/(2*l.margin+l.width)*o.width)*d.distance;return me.getLatLngElevAtDist(d,a)}function g(e){e.preventDefault(),e.stopPropagation();let t=c(e);t&&(e.routeObjId=d.objId,e.latlng={lat:t.latLng[0],lng:t.latLng[1]},e.originalEvent={clientX:e.clientX,clientY:e.clientY},function(e){let t=_e();return lt(e,[{context:eo,name:E.getText("ProfileContextMenu - Add a note to the route at this point"),action:eo.newRouteNote,param:{routeObjId:e.routeObjId,lat:e.latlng.lat,lng:e.latlng.lng}},{context:t,name:E.getText("ProfileContextMenu - Zoom to this point"),action:t.zoomToLatLng,param:[e.latlng.lat,e.latlng.lng]}])}(e).show())}function v(){De.dispatch("removeobject",{objId:e})}function h(i){let s=t.getBoundingClientRect(),g=c(i);if(g){De.dispatch("removeobject",{objId:e}),De.dispatch("additinerarypointmarker",{objId:e,latLng:g.latLng}),o&&(t.removeChild(o),t.removeChild(r),t.removeChild(a),t.removeChild(n));let c=(2*l.margin+l.width)*(i.clientX-s.x)/s.width,v=l.margin+l.height;o=document.createElementNS(u,"polyline"),o.setAttributeNS(null,"points",String(c)+","+l.margin+" "+c+","+v),o.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-markerPolyline"),t.appendChild(o);let h=g.routeDistance>d.distance/2?"end":"start",m=g.routeDistance>d.distance/2?-l.xDeltaText:l.xDeltaText;r=document.createElementNS(u,"text"),r.appendChild(document.createTextNode(j.formatDistance(g.routeDistance))),r.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-elevText"),r.setAttributeNS(null,"x",c+m),r.setAttributeNS(null,"y",l.margin+l.yDeltaText),r.setAttributeNS(null,"text-anchor",h),t.appendChild(r),a=document.createElementNS(u,"text"),a.appendChild(document.createTextNode("Alt. "+g.elev.toFixed(0)+" m.")),a.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-elevText"),a.setAttributeNS(null,"x",c+m),a.setAttributeNS(null,"y",l.margin+2*l.yDeltaText),a.setAttributeNS(null,"text-anchor",h),t.appendChild(a),n=document.createElementNS(u,"text"),n.appendChild(document.createTextNode("Pente "+g.ascent.toFixed(0)+" % ")),n.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-elevText"),n.setAttributeNS(null,"x",c+m),n.setAttributeNS(null,"y",l.margin+3*l.yDeltaText),n.setAttributeNS(null,"text-anchor",h),t.appendChild(n)}}function m(){t&&(t.removeEventListener("contextmenu",g,!1),t.removeEventListener("mousemove",h,!1),t.removeEventListener("mouseleave",v,!1),De.dispatch("removeobject",{objId:e}),i.content.removeChild(s),i.content.removeChild(t)),t=null,o=null,n=null,r=null,a=null,s=null}return i=Ze(),i.createWindow(),i.onClose=function(){m(),De.dispatch("profileclosed",{objId:d.objId})},i.onUpdate=function(e){m(),d=e[0],t=St().createSvg(d),i.header.textContent=E.getText("ProfileWindow - Profile {name}",{name:d.computedName}),i.content.appendChild(t),t.addEventListener("contextmenu",g,!1),t.addEventListener("mousemove",h,!1),t.addEventListener("mouseleave",v,!1),s=w.create("div",{className:"TravelNotes-ProfileWindow-Ascent",textContent:E.getText("ProfileWindow - Ascent: {ascent} m. - Descent: {descent} m. - Distance: {distance}",{ascent:d.itinerary.ascent.toFixed(0),descent:d.itinerary.descent.toFixed(0),distance:j.formatDistance(d.distance)})}),i.content.appendChild(s)},i}let oo=new Map,ao=St();const no=new class{constructor(){Object.freeze(this)}createProfile(e){let t=oo.get(e.objId);if(e.itinerary.hasProfile){y.route.elev.smooth&&ao.smooth(e),e.itinerary.ascent=0,e.itinerary.descent=0;let o=e.itinerary.itineraryPoints.first.elev;e.itinerary.itineraryPoints.forEach(t=>{let a=t.elev-o;0>a?e.itinerary.descent-=a:e.itinerary.ascent+=a,o=t.elev}),t&&t.update(e)}else t&&t.close()}updateProfile(e,t){let o=oo.get(e);o&&(oo.delete(e),t&&t.itinerary.hasProfile?(o.update(t),oo.set(t.objId,o)):o.close())}deleteProfile(e){let t=oo.get(e);t&&t.close()}deleteAllProfiles(){oo.forEach(e=>e.close())}showProfile(e){let t=oo.get(e);t||(t=to());let o=He.getRoute(e);t.update(o),oo.set(e,t)}onProfileClosed(e){oo.delete(e)}};const ro=new class{constructor(){Object.freeze(this)}createUI(){w.create("div",{id:"TravelNotes-AttributionsUI"},document.querySelector("body")),this.attributions=""}set attributions(e){let t='© Leaflet | © OpenStreetMap contributors '+e+'| © Travel & Notes',o=document.getElementById("TravelNotes-AttributionsUI");for(;o.firstChild;)o.removeChild(o.firstChild);f.sanitizeToHtmlElement(t,o)}};class io{constructor(e){if(!e.name||"string"!=typeof e.name)throw new Error("invalid name for layer");if(this.name=f.sanitizeToJsString(e.name),!e.service||"wms"!==e.service&&"wmts"!==e.service)throw new Error("invalid service for layer "+this.name);if(this.service=e.service,!e.url||"string"!=typeof e.url)throw new Error("invalid url for layer "+this.name);if(this.url=e.url,"wms"===this.service){if(!(e.wmsOptions&&e.wmsOptions.layers&&"string"==typeof e.wmsOptions.layers&&e.wmsOptions.format&&"string"==typeof e.wmsOptions.format&&e.wmsOptions.transparent&&"boolean"==typeof e.wmsOptions.transparent))throw new Error("invalid wmsOptions for layer "+this.name);this.wmsOptions=e.wmsOptions,this.wmsOptions.layers=f.sanitizeToJsString(this.wmsOptions.layers),this.wmsOptions.format=f.sanitizeToJsString(this.wmsOptions.format)}try{e.bounds&&"number"==typeof e.bounds[0][0]&&"number"==typeof e.bounds[0][1]&&"number"==typeof e.bounds[1][0]&&"number"==typeof e.bounds[1][1]&&(this.bounds=e.bounds)}catch(e){throw new Error("invalid bounds for layer "+this.name)}if(e.minZoom&&"number"==typeof e.minZoom&&(this.minZoom=e.minZoom),e.maxZoom&&"number"==typeof e.maxZoom&&(this.maxZoom=e.maxZoom),!(e.toolbar&&e.toolbar.text&&"string"==typeof e.toolbar.text&&e.toolbar.color&&"string"==typeof e.toolbar.color&&e.toolbar.backgroundColor&&"string"==typeof e.toolbar.backgroundColor))throw new Error("invalid toolbar for layer "+this.name);if(this.toolbar=e.toolbar,this.toolbar.text=f.sanitizeToJsString(this.toolbar.text),this.toolbar.color=f.sanitizeToColor(this.toolbar.color)||"#000000",this.toolbar.backgroundColor=f.sanitizeToColor(this.toolbar.backgroundColor)||"#ffffff",!e.providerName||"string"!=typeof e.providerName)throw new Error("invalid providerName for layer "+this.name);if(this.providerName=f.sanitizeToJsString(e.providerName),"boolean"!=typeof e.providerKeyNeeded)throw new Error("invalid providerKeyNeeded for layer "+this.name);if(this.providerKeyNeeded=e.providerKeyNeeded,""===e.attribution)this.attribution="";else{if(!e.attribution||"string"!=typeof e.attribution)throw new Error("invalid attribution for layer "+this.name);this.attribution=f.sanitizeToHtmlString(e.attribution).htmlString}if(e.getCapabilitiesUrl&&"string"==typeof e.getCapabilitiesUrl&&(this.getCapabilitiesUrl=f.sanitizeToUrl(e.getCapabilitiesUrl).url,""===this.getCapabilitiesUrl))throw new Error("invalid getCapabilitiesUrl for layer "+this.name);Object.freeze(this)}}function lo(e){return new io(e)}let so=[lo({service:"wmts",url:"https://{s}.tile.osm.org/{z}/{x}/{y}.png",name:"OSM - Color",toolbar:{text:"OSM",color:"#ff0000",backgroundColor:"#ffffff"},providerName:"OSM",providerKeyNeeded:!1,attribution:""})],co=null,uo=null,go=null,vo=0,ho=0,mo=0,po=0;function fo(e){e.target.style.color=e.target.layer.toolbar.backgroundColor,e.target.style["background-color"]=e.target.layer.toolbar.color}function bo(e){e.target.style.color=e.target.layer.toolbar.color,e.target.style["background-color"]=e.target.layer.toolbar.backgroundColor}function yo(e){e.target.classList.add("TravelNotes-LayersToolbarUI-LinkButton-Enter"),e.target.classList.remove("TravelNotes-LayersToolbarUI-LinkButton-Leave")}function wo(e){De.dispatch("layerchange",{layer:e.target.layer}),ro.attributions=e.target.layer.attribution,he.travel.layerName=e.target.layer.name}function No(e){e.target.classList.add("TravelNotes-LayersToolbarUI-LinkButton-Leave"),e.target.classList.remove("TravelNotes-LayersToolbarUI-LinkButton-Enter")}function To(e){e.deltaY&&(vo-=e.deltaY*c[e.deltaMode],vo=vo>po?po:vo,vo=vofunction(e){if(e.providerKeyNeeded&&!Be.hasKey(e.providerName.toLowerCase()))return;let t=w.create("div",{type:"layer",className:"TravelNotes-LayersToolbarUI-Button",title:e.name,layer:e,textContent:e.toolbar.text,style:"color:"+e.toolbar.color+";background-color:"+e.toolbar.backgroundColor},go);t.addEventListener("mouseenter",fo,!1),t.addEventListener("mouseleave",bo,!1),t.addEventListener("click",wo,!1),ho=t.clientHeight,mo+=ho}(e)),y.layersToolbarUI.theDevil&&y.layersToolbarUI.theDevil.addButton&&function(e,t,o){let a=w.create("div",{type:"link",className:"TravelNotes-LayersToolbarUI-Button TravelNotes-LayersToolbarUI-LinkButton-Leave"},go);w.create("a",{href:e,title:t,textContent:o,target:"_blank"},a),a.addEventListener("mouseenter",yo,!1),a.addEventListener("mouseleave",No,!1),mo+=a.clientHeight}("https://www.google.com/maps/@"+he.map.getCenter().lat+","+he.map.getCenter().lng+","+he.map.getZoom()+"z","Reminder! The devil will know everything about you","👿"),po+=ho,vo=po,go.style.marginTop=String(vo)+"px",go.addEventListener("wheel",To,!1)}const Eo=new class{constructor(){Object.freeze(this)}createUI(){uo=w.create("div",{id:"TravelNotes-LayersToolbarUI"},document.querySelector("body")),w.create("div",{id:"TravelNotes-LayersToolbarUI-Header",textContent:E.getText("LayersToolbarUI - Layers")},uo),uo.addEventListener("mouseenter",Io,!1),uo.addEventListener("mouseleave",Lo,!1),De.dispatch("layerchange",{layer:so[0]}),ro.attributions=so[0].attribution}getLayer(e){let t=so.find(t=>t.name===e)||so[0];return t.providerKeyNeeded&&(Be.hasKey(t.providerName.toLowerCase())||(t=so[0])),t}setLayer(e){let t=so.find(t=>t.name===e)||so[0];t.providerKeyNeeded&&(Be.hasKey(t.providerName.toLowerCase())||(t=so[0])),De.dispatch("layerchange",{layer:t}),ro.attributions=t.attribution,he.travel.layerName=t.name}addLayers(e){e.forEach(e=>{so.push(lo(e))})}};function jo(){let e=null,t=null,o=null,a=[],n=0,r=null,i=document.querySelector("body"),l=0;function s(){for(;0window.print(),!1),document.getElementById("TravelNotes-PrintToolbar-CancelButton").removeEventListener("click",s,!1),i.removeChild(document.getElementById("TravelNotes-PrintToolbar"));let e=i.children;for(let t=0;to.lat?e.bottomLeft.lat:e.upperRight.lat,lng:t.lng}:t.lat===o.lat?{lat:t.lat,lng:t.lng=e.bottomLeft.lat&&n.lng=e.bottomLeft.lng&&n.lng<=e.upperRight.lng&&n.lat=e.bottomLeft.lat&&n.lng>a.lng)return n;if(n={lat:e.bottomLeft.lat,lng:(e.bottomLeft.lat-i)/r},n.lng>=e.bottomLeft.lng&&n.lng<=e.upperRight.lng&&n.lat>a.lat)return n;throw new Error("intermediate point not found")}function c(o){n++;let a="TravelNotes-RouteViewDiv"+n,l=w.create("div",{className:"TravelNotes-routeViewDiv",id:a},i);e.pageBreak&&l.classList.add("TravelNotes-PrintPageBreak"),l.style.width=String(e.paperWidth)+"mm",l.style.height=String(e.paperHeight)+"mm";let s=e.printNotes?function(){let e=[];return t.notes.forEach(t=>{let o=window.L.divIcon({iconSize:[t.iconWidth,t.iconHeight],iconAnchor:[t.iconWidth/2,t.iconHeight/2],popupAnchor:[0,-t.iconHeight/2],html:t.iconContent,className:"TravelNotes-Map-AllNotes "}),a=window.L.marker(t.iconLatLng,{zIndexOffset:100,icon:o,draggable:!0});e.push(a)}),e}():[];s.push(function(){let e=Eo.getLayer(he.travel.layerName),t=Be.getUrl(e),o=null;return o="wmts"===e.service.toLowerCase()?window.L.tileLayer(t):window.L.tileLayer.wms(t,e.wmsOptions),o.options.attribution=' © OpenStreetMap contributors '+e.attribution+'| © Travel & Notes ',o}()),s.push(window.L.circleMarker([o.entryPoint.lat,o.entryPoint.lng],y.printRouteMap.entryPointMarker)),s.push(window.L.circleMarker([o.exitPoint.lat,o.exitPoint.lng],y.printRouteMap.exitPointMarker)),s.push(r),window.L.map(a,{attributionControl:!0,zoomControl:!1,center:[(o.bottomLeft.lat+o.upperRight.lat)/2,(o.bottomLeft.lng+o.upperRight.lng)/2],zoom:e.zoomFactor,minZoom:e.zoomFactor,maxZoom:e.zoomFactor,layers:s})}function u(){let e=i.children;for(let t=0;twindow.print(),!1),w.create("div",{id:"TravelNotes-PrintToolbar-CancelButton",className:"TravelNotes-UI-Button",title:E.getText("PrintFactory - Cancel print"),textContent:"❌"},e).addEventListener("click",s,!1)}(),window.addEventListener("afterprint",s,!0);let o=[],l=t.itinerary.itineraryPoints.iterator;for(;!l.done;)o.push(l.value.latLng);r=window.L.polyline(o,{color:t.color,weight:t.width}),n=0,a.forEach(c)}return new class{constructor(){Object.freeze(this)}print(n,r){t=He.getRoute(r),t&&(e=n,function(){let t=document.querySelector("body"),a=w.create("div",{},t);a.style.position="absolute",a.style.top="0",a.style.left="0",a.style.width=String(e.paperWidth-2*e.borderWidth)+"mm",a.style.height=String(e.paperHeight-2*e.borderWidth)+"mm",l=Math.ceil(a.clientWidth/256)*Math.ceil(a.clientHeight/256);let n=me.screenCoordToLatLng(0,0),r=me.screenCoordToLatLng(a.clientWidth,a.clientHeight);t.removeChild(a);let i=he.map.getZoomScale(he.map.getZoom(),e.zoomFactor);o=[Math.abs(n[0]-r[0])*i,Math.abs(n[1]-r[1])*i]}(),function(){a=[];let e=t.itinerary.itineraryPoints.iterator,n=e.done,r={bottomLeft:{lat:e.value.lat,lng:e.value.lng},upperRight:{lat:e.value.lat,lng:e.value.lng}},i={lat:e.value.lat,lng:e.value.lng},s=e.value;n=e.done;let c=e.value;for(;!n;){let t={bottomLeft:{lat:Math.min(r.bottomLeft.lat,c.lat),lng:Math.min(r.bottomLeft.lng,c.lng)},upperRight:{lat:Math.max(r.upperRight.lat,c.lat),lng:Math.max(r.upperRight.lng,c.lng)}},u=[t.upperRight.lat-t.bottomLeft.lat,t.upperRight.lng-t.bottomLeft.lng];o[0]>u[0]&&o[1]>u[1]?(r=t,s=e.value,n=e.done,c=e.value,n&&(r.entryPoint=i,r.exitPoint=s,a.push(r))):(s=d(r,s,c),r.bottomLeft={lat:Math.min(r.bottomLeft.lat,s.lat),lng:Math.min(r.bottomLeft.lng,s.lng)},r.upperRight={lat:Math.max(r.upperRight.lat,s.lat),lng:Math.max(r.upperRight.lng,s.lng)},r.entryPoint=i,r.exitPoint=s,a.push(r),r={bottomLeft:{lat:s.lat,lng:s.lng},upperRight:{lat:s.lat,lng:s.lng}},i={lat:s.lat,lng:s.lng}),y.printRouteMap.maxTiles{t=t&&r.defaultValue!==e.lat&&r.defaultValue!==e.lng}),t}function Mo(e){Do=!1,je.showError(e),e instanceof Error&&console.error(e)}function So(){Do=!1,he.travel.editedRoute.itinerary.validateData();let e=he.travel.editedRoute.itinerary.maneuvers.iterator;for(;!e.done;)e.value.validateData();let o=he.travel.editedRoute.itinerary.itineraryPoints.iterator;for(;!o.done;)o.value.validateData();if(function(e){let o=e.itinerary.itineraryPoints.iterator,a=e.itinerary.maneuvers.iterator;for(o.done,a.done,a.value.distance=t.defaultValue,a.done,e.distance=t.defaultValue,e.duration=t.defaultValue;!o.done;)o.previous.distance=Ke.pointsDistance(o.previous.latLng,o.value.latLng),e.distance+=o.previous.distance,a.previous.distance+=o.previous.distance,a.value.itineraryPointObjId===o.value.objId&&(e.duration+=a.previous.duration,a.value.distance=t.defaultValue,a.next&&a.value.itineraryPointObjId===a.next.itineraryPointObjId&&(a.done,a.value.distance=t.defaultValue),a.done)}(he.travel.editedRoute),"circle"!==he.travel.editedRoute.itinerary.transitMode){let e=he.travel.editedRoute.wayPoints.iterator;for(;!e.done;)e.first?e.value.latLng=he.travel.editedRoute.itinerary.itineraryPoints.first.latLng:e.last?e.value.latLng=he.travel.editedRoute.itinerary.itineraryPoints.last.latLng:e.value.latLng=me.getClosestLatLngDistance(he.travel.editedRoute,e.value.latLng).latLng}let a=he.travel.editedRoute.notes.iterator;for(;!a.done;){let e=me.getClosestLatLngDistance(he.travel.editedRoute,a.value.latLng);a.value.latLng=e.latLng,a.value.distance=e.distance}Co(),he.travel.editedRoute.notes.sort((e,t)=>e.distance-t.distance),Po&&_e().zoomToRoute(he.travel.editedRoute.objId),no.createProfile(he.travel.editedRoute),De.dispatch("routeupdated",{removedRouteObjId:he.travel.editedRoute.objId,addedRouteObjId:he.travel.editedRoute.objId}),De.dispatch("roadbookupdate"),De.dispatch("showitinerary"),De.dispatch("setrouteslist")}const Oo=new class{constructor(){Object.freeze(this)}addRoute(){let e=ne();he.travel.routes.add(e),i.editedChanged===he.travel.editedRoute.editionStatus?(Co(),De.dispatch("setrouteslist"),De.dispatch("roadbookupdate")):this.editRoute(e.objId)}editRoute(e){if(i.editedChanged===he.travel.editedRoute.editionStatus)return void je.showError(E.getText("RouteEditor - Not possible to edit a route without a save or cancel"));let t=He.getRoute(e),o=t.itinerary.provider,a=he.providers.get(o.toLowerCase());if(o&&""!==o&&(!a||a.providerKeyNeeded&&!Be.hasKey(o)))return void je.showError(E.getText("RouteEditor - Not possible to edit a route created with this provider",{provider:o}));-1!==he.editedRouteObjId&&this.cancelEdition(),o&&""!==o&&De.dispatch("setprovider",{provider:o});let n=t.itinerary.transitMode;n&&""!==n&&De.dispatch("settransitmode",{transitMode:n}),he.travel.editedRoute=ne(),t.editionStatus=i.editedNoChange,he.travel.editedRoute.jsonObject=t.jsonObject,he.editedRouteObjId=t.objId,he.travel.editedRoute.hidden=!1,t.hidden=!1,no.updateProfile(he.editedRouteObjId,he.travel.editedRoute),Co(),De.dispatch("routeupdated",{removedRouteObjId:t.objId,addedRouteObjId:he.travel.editedRoute.objId}),De.dispatch("roadbookupdate"),De.dispatch("showitinerary"),De.dispatch("setrouteslist")}removeRoute(e){let t=e;if(t===he.editedRouteObjId||t===he.travel.editedRoute.objId){if(i.editedChanged===he.travel.editedRoute.editionStatus)return void je.showError(E.getText("TravelEditor - Cannot remove an edited route"));t=he.editedRouteObjId,this.cancelEdition()}De.dispatch("routeupdated",{removedRouteObjId:t,addedRouteObjId:-1}),he.travel.routes.remove(t),no.deleteProfile(t),Co(),De.dispatch("roadbookupdate"),De.dispatch("setrouteslist")}removeManeuver(e){(he.travel.editedRoute.itinerary.maneuvers.previous(e,e=>t.defaultValue{Co(),Ro(t)&&De.dispatch("routepropertiesupdated",{routeObjId:t.objId}),De.dispatch("roadbookupdate"),De.dispatch("setrouteslist"),De.dispatch("updateitinerary")}).catch(e=>{e instanceof Error&&console.error(e)})}printRouteMap(e){(function(){let e=null,t=null,o=null,a=null,n=null,r=null,i=null,l=null;function s(){return Object.freeze({paperWidth:parseInt(o.value),paperHeight:parseInt(a.value),borderWidth:parseInt(n.value),zoomFactor:parseInt(l.value),pageBreak:r.checked,printNotes:i.checked})}return e=pe(),e.title=E.getText("PrintRouteMapDialog - Print"),e.okButtonListener=s,t=w.create("div",{id:"TravelNotes-PrintRouteMapDialog-MainDataDiv"},e.content),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Paper width")},e),o=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput"},e),o.value=y.printRouteMap.paperWidth,w.create("text",{value:E.getText("PrintRouteMapDialog - Paper width units")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Paper height")},e),a=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput",value:y.printRouteMap.paperHeight},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Paper height units")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Border width")},e),n=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput",id:"TravelNotes-PrintRouteMapDialog-BorderWidthNumberInput",value:y.printRouteMap.borderWidth},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Border width units")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv",id:"TravelNotes-PrintRouteMapDialog-ZoomFactorDataDiv"},t);w.create("text",{value:E.getText("PrintRouteMapDialog - Zoom factor")},e),l=w.create("input",{type:"number",className:"TravelNotes-PrintRouteMapDialog-NumberInput",value:Math.min(y.printRouteMap.zoomFactor,15),min:he.map.getMinZoom(),max:Math.min(he.map.getMaxZoom(),15)},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv",id:"TravelNotes-PrintRouteMapDialog-PageBreakDataDiv"},t);r=w.create("input",{type:"checkbox",id:"TravelNotes-PrintRouteMapDialog-PageBreakInput",checked:y.printRouteMap.pageBreak},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Page break")},e)}(),function(){let e=w.create("div",{className:"TravelNotes-PrintRouteMapDialog-DataDiv",id:"TravelNotes-PrintRouteMapDialog-PrintNotesDataDiv"},t);i=w.create("input",{type:"checkbox",id:"TravelNotes-PrintRouteMapDialog-PrintNotesInput",checked:y.printRouteMap.printNotes},e),w.create("text",{value:E.getText("PrintRouteMapDialog - Print notes")},e)}(),e})().show().then(t=>jo().print(t,e)).catch(e=>{e instanceof Error&&console.error(e)})}showRoute(e){He.getRoute(e).hidden=!1,De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e}),De.dispatch("setrouteslist")}hideRoute(e){He.getRoute(e).hidden=!0,De.dispatch("routeupdated",{removedRouteObjId:e,addedRouteObjId:-1}),De.dispatch("setrouteslist")}showRoutes(){let e=he.travel.routes.iterator;for(;!e.done;)e.value.hidden&&(e.value.hidden=!1,De.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e.value.objId}));De.dispatch("setrouteslist")}hideRoutes(){let e=he.travel.routes.iterator;for(;!e.done;)e.value.hidden||e.value.objId===he.editedRouteObjId||(e.value.hidden=!0,De.dispatch("routeupdated",{removedRouteObjId:e.value.objId,addedRouteObjId:-1}));De.dispatch("setrouteslist")}};function Ao(e,t){if(!y.wayPoint.reverseGeocoding)return De.dispatch("setrouteslist"),De.dispatch("showitinerary"),void De.dispatch("roadbookupdate");vt().getPromiseAddress(e).then(e=>{let o=e.street;""!==e.city&&(o+=" "+e.city);let a="";y.wayPoint.geocodingIncludeName&&(a=e.name),function(e,t){he.travel.editedRoute.editionStatus=i.editedChanged;let o=he.travel.editedRoute.wayPoints.getAt(t);o.name=e.name,o.address=e.address,De.dispatch("setrouteslist"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate")}(Object.seal({name:a,address:o}),t)}).catch(e=>{e instanceof Error&&console.error(e)})}const ko=new class{constructor(){Object.freeze(this)}addWayPoint(e){he.travel.editedRoute.editionStatus=i.editedChanged;let t=M();t.latLng=e,he.travel.editedRoute.wayPoints.add(t),Ao(e,t.objId),De.dispatch("addwaypoint",{wayPoint:he.travel.editedRoute.wayPoints.last,letter:he.travel.editedRoute.wayPoints.length-2}),he.travel.editedRoute.wayPoints.swap(t.objId,!0),Oo.startRouting()}addWayPointOnRoute(e,t){let o=me.getClosestLatLngDistance(he.travel.editedRoute,e).distance;he.travel.editedRoute.editionStatus=i.editedChanged;let a=M();a.latLng=t,he.travel.editedRoute.wayPoints.add(a),Ao(t,a.objId),De.dispatch("addwaypoint",{wayPoint:he.travel.editedRoute.wayPoints.last,letter:he.travel.editedRoute.wayPoints.length-2});let n=he.travel.editedRoute.wayPoints.iterator;for(;!n.done;){if(o{t.okButton.classList.remove("TravelNotes-Hidden"),y.wayPoint.geocodingIncludeName&&(a.value=e.name);let o=e.street;""!==e.city&&(o+=" "+e.city),n.value=o}).catch(e=>{t.okButton.classList.remove("TravelNotes-Hidden"),e instanceof Error&&console.error(e)})}return t=pe(),t.title=E.getText("WayPointPropertiesDialog - Waypoint properties"),t.okButtonListener=r,o=w.create("div",{id:"TravelNotes-WayPointPropertiesDialog-DataDiv"},t.content),w.create("div",{className:"TravelNotes-BaseDialog-Button",title:E.getText("WayPointPropertiesDialog - Reset address"),textContent:"🔄"},w.create("div",null,o)).addEventListener("click",i,!1),w.create("div",{textContent:E.getText("WayPointPropertiesDialog - Name")},o),a=w.create("input",{type:"text",value:e.name,className:"TravelNotes-WayPointPropertiesDialog-Input"},w.create("div",null,o)),w.create("text",{value:E.getText("WayPointPropertiesDialog - Address")},w.create("div",null,o)),n=w.create("input",{type:"text",value:e.address,className:"TravelNotes-WayPointPropertiesDialog-Input"},w.create("div",null,o)),t})(he.travel.editedRoute.wayPoints.getAt(e)).show().then(()=>{De.dispatch("setrouteslist"),De.dispatch("showitinerary"),De.dispatch("roadbookupdate")}).catch(e=>{e instanceof Error&&console.error(e)})}};function Uo(e,t){let o=e.target.objId,a=He.getRoute(o),n=_e();return lt(e,function(){let t=[{context:Oo,name:E.getText("RouteContextMenu - Edit this route"),action:o===he.travel.editedRoute.objId||i.editedChanged===he.travel.editedRoute.editionStatus?null:Oo.editRoute,param:o},{context:Oo,name:E.getText("RouteContextMenu - Delete this route"),action:o===he.travel.editedRoute.objId&&i.editedChanged===he.travel.editedRoute.editionStatus?null:Oo.removeRoute,param:o},a.hidden?{context:Oo,name:E.getText("RouteContextMenu - Show this route"),action:Oo.showRoute,param:o}:{context:Oo,name:E.getText("RouteContextMenu - Hide this route"),action:he.travel.editedRoute.objId===o?null:Oo.hideRoute,param:o},{context:Oo,name:E.getText("RouteContextMenu - Properties"),action:a.hidden?null:Oo.routeProperties,param:o},{context:n,name:E.getText("RouteContextMenu - Zoom to route"),action:a.hidden?null:n.zoomToRoute,param:o},{context:no,name:E.getText("RouteContextMenu - View the elevation"),action:a.itinerary.hasProfile?no.showProfile:null,param:o}];return y.printRouteMap.isEnabled&&t.push({context:Oo,name:E.getText("RouteContextMenu - Print route map"),action:Oo.printRouteMap,param:o}),t=t.concat([{context:Oo,name:E.getText("RouteContextMenu - Save this route in a GPX file"),action:0",className:"TravelNotes-Map-Note-Bullet"}),opacity:y.note.grip.opacity,draggable:!he.travel.readOnly});o.objId=t.objId;let a=window.L.divIcon({iconSize:[t.iconWidth,t.iconHeight],iconAnchor:[t.iconWidth/2,t.iconHeight/2],popupAnchor:[0,-t.iconHeight/2],html:t.iconContent,className:"TravelNotes-Map-AllNotes "}),n=window.L.marker(t.iconLatLng,{zIndexOffset:100,icon:a,draggable:!he.travel.readOnly});n.objId=t.objId,n.bindPopup(e=>Wt.getNoteTextHTML("TravelNotes-Map-",He.getNoteAndRoute(e.objId))),0!==t.tooltipContent.length&&(n.bindTooltip(e=>He.getNoteAndRoute(e.objId).note.tooltipContent),n.getTooltip().options.offset[0]=t.iconWidth/2);let r=window.L.polyline([t.latLng,t.iconLatLng],y.note.polyline);r.objId=t.objId;let i=window.L.layerGroup([n,r,o]);return i.markerId=window.L.Util.stamp(n),i.polylineId=window.L.Util.stamp(r),i.bulletId=window.L.Util.stamp(o),Vo(t.objId,i),y.note.haveBackground&&document.querySelectorAll(".TravelNotes-MapNote,.TravelNotes-SvgIcon").forEach(e=>e.classList.add("TravelNotes-Map-Note-Background")),Object.freeze({marker:n,polyline:r,bullet:o})}function Ko(e){e.dashArray>=y.route.dashChoices.length&&(e.dashArray=0);let t=y.route.dashChoices[e.dashArray].iDashArray;if(t){let o="",a=0;for(a=0;a{let t=He.getRoute(e.objId);return Wt.getRouteHeaderHTML("TravelNotes-Map-",t)}),window.L.DomEvent.on(n,"click",e=>e.target.openPopup(e.latlng));let r=t.notes.iterator;for(;!r.done;)Wo(r.value.objId);return t}addNote(e){return Wo(e)}getDashArray(e){return Ko(e)}zoomTo(e,t){if(t){let e=[];t.forEach(t=>e=e.concat(t)),he.map.fitBounds(me.getLatLngBounds(e))}else he.map.setView(e,y.itineraryPoint.zoomFactor)}setLayer(e,t){let o=null;o="wmts"===e.service.toLowerCase()?window.L.tileLayer(t):window.L.tileLayer.wms(t,e.wmsOptions),Ho&&he.map.removeLayer(Ho),he.map.addLayer(o),Ho=o,he.travel.readOnly||(he.map.getZoom()<(e.minZoom||0)&&he.map.setZoom(e.minZoom||0),he.map.setMinZoom(e.minZoom||0),he.map.getZoom()>(e.maxZoom||18)&&he.map.setZoom(e.maxZoom||18),he.map.setMaxZoom(e.maxZoom||18),e.bounds?(he.map.getBounds().intersects(e.bounds)&&!he.map.getBounds().contains(e.bounds)||(he.map.setMaxBounds(null),he.map.fitBounds(e.bounds),he.map.setZoom(e.minZoom||0)),he.map.setMaxBounds(e.bounds)):he.map.setMaxBounds(null)),he.map.fire("baselayerchange",o)}onGeolocationStatusChanged(e){o.active!==e&&zo&&(he.map.removeLayer(zo),zo=null)}onGeolocationPositionChanged(e){let t=y.geoLocation.zoomToPosition;zo&&(he.map.removeLayer(zo),t=!1),zo=window.L.circleMarker(window.L.latLng(e.coords.latitude,e.coords.longitude),y.geoLocation.marker).bindTooltip(j.formatLatLng([e.coords.latitude,e.coords.longitude])).addTo(he.map),t&&he.map.setView(window.L.latLng(e.coords.latitude,e.coords.longitude),y.geoLocation.zoomFactor)}};let Zo=null,Xo=null,qo=1;function Go(){Zo&&(window.L.DomEvent.off(Zo),he.map.removeLayer(Zo),Zo=null)}function Jo(){window.L.DomEvent.off(Zo,"mouseout",Go)}function Yo(e){e.latlng.lat=Xo[0],e.latlng.lng=Xo[1],e.target.objId=he.travel.editedRoute.objId,Uo(e).show()}function $o(e){ko.addWayPointOnRoute(Xo,[e.target.getLatLng().lat,e.target.getLatLng().lng]),Zo&&(window.L.DomEvent.off(Zo,"dragstart",Jo),window.L.DomEvent.off(Zo,"dragend",$o),window.L.DomEvent.off(Zo,"contextmenu",Yo),he.map.removeLayer(Zo),Zo=null)}function Qo(e){let t=He.getNoteAndRoute(e.target.objId),o=t.note,a=t.route,n=he.mapObjects.get(e.target.objId);if(null===a)o.latLng=[e.target.getLatLng().lat,e.target.getLatLng().lng],De.dispatch("updatetravelnotes");else{let t=me.getClosestLatLngDistance(a,[e.target.getLatLng().lat,e.target.getLatLng().lng]);o.latLng=t.latLng,o.distance=t.distance,a.notes.sort((e,t)=>e.distance-t.distance),n.getLayer(n.bulletId).setLatLng(t.latLng),De.dispatch("updateitinerary")}n.getLayer(n.polylineId).setLatLngs([o.latLng,o.iconLatLng]),De.dispatch("roadbookupdate")}function ea(e){let t=He.getNoteAndRoute(e.target.objId).note,o=he.mapObjects.get(e.target.objId);o.getLayer(o.polylineId).setLatLngs([[e.latlng.lat,e.latlng.lng],t.iconLatLng])}function ta(e){e.originalEvent.target.style.opacity=y.note.grip.moveOpacity}function oa(e){e.originalEvent.target.style.opacity=y.note.grip.opacity}function aa(e){Bo(e).show()}function na(e){let t=He.getNoteAndRoute(e.target.objId).note;t.iconLatLng=[e.target.getLatLng().lat,e.target.getLatLng().lng];let o=he.mapObjects.get(e.target.objId);o.getLayer(o.polylineId).setLatLngs([t.latLng,t.iconLatLng])}function ra(e){let t=He.getNoteAndRoute(e.target.objId).note,o=he.mapObjects.get(e.target.objId);o.getLayer(o.polylineId).setLatLngs([t.latLng,[e.latlng.lat,e.latlng.lng]])}function ia(e){let t=He.getRoute(e.target.objId);if(i.notEdited!==t.editionStatus)if(Xo=[e.latlng.lat,e.latlng.lng],Zo)Zo.setLatLng(e.latlng);else{let t='
?
';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, <\t\tpath d="m 2,13 a 1.7142857,1.7142857 0 0 0 1.7142857,1.714286 H 16.285714 A 1.7142857,1.7142857 0 0 0 18,13 V 9\t\t.5714286 A 1.7142857,1.7142857 0 0 0 16.285714,7.8571429 H 3.7142857 A 1.7142857,1.7142857 0 0 0 2,9.5714286 Z \t\tm 1.8285714,-2.285714 a 1.0285714,1.0285714 0 1 1 0,0.01143 z m 10.2857146,0 a 1.0285714,1.0285714 0 1 1 0,0.01\t\t143 z" /> ',train:'data:image/svg+xml;utf8, \t\t',line:'data:image/svg+xml;utf8, ',circle:'data:image/svg+xml;utf8, <\t\tcircle cx="8" cy="6" r="5" stroke="rgb(0,0,0)" /> '};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?"
"+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.

Copyright - 2017 2021 - wwwouaiebe

Contact : https://www.ouaie.be/

GitHub : https://github.com/wwwouaiebe/leaflet.TravelNotes

Version : 2.2.0.

This program uses: leaflet, Project-OSRM/osrm-text-instructions and the Overpass API

',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("
"+e+"
","text/html");if(!t||"#document"!==t.nodeName)return"";let o=t.querySelector("body").firstChild,a="";for(let e=0;e/g,"≻").replaceAll(/"/g,"″").replaceAll(/\u0027/g,"′"),a}(e)}sanitizeToHtmlElement(e,t){!function(e,t){let o=d.parseFromString("
"+e+"
","text/html");o&&"#document"===o.nodeName?function e(t,o){let a=t.childNodes;for(let n=0;n{if(t)a.hasAttributeNS(null,e)&&(n.setAttributeNS(null,e,a.getAttribute(e)),a.removeAttributeNS(null,e));else if(a.hasAttribute(e))if("href"===e||"src"===e){let t=g(a.getAttribute(e),e).url;""!==t&&n.setAttribute(e,t)}else n.setAttribute(e,a.getAttribute(e))}),a.hasAttribute("style")){a.getAttribute("style").split(";").forEach(e=>{let t=e.split(":");2!==t.length||"width"!==t[0].trim()&&"height"!==t[0].trim()||(n.style[t[0].trim()]=t[1].trim())})}o.appendChild(n),e(a,n)}else"#text"===r&&o.appendChild(document.createTextNode(a.nodeValue))}}(o.querySelector("body").firstChild,t):t.textContent=""}(e,t)}sanitizeToHtmlString(e){return function(e){let t="",o="",a=d.parseFromString("
"+e.replace(" ","਀")+"
","text/html");return a&&"#document"===a.nodeName?(function e(a){let n=a.childNodes;for(let r=0;r{if(a)n.hasAttributeNS(null,e)&&(t+=" "+e+'="'+h(n.getAttribute(e))+'"',n.removeAttribute(e));else if(n.hasAttribute(e))if("href"===e||"src"===e){let a=g(n.getAttribute(e),e).url;""===a?o+="\nAn invalid url ("+n.getAttribute(e)+") was removed from a "+e+" attribute":t+=" "+e+'="'+a+'"',n.removeAttribute(e)}else t+=" "+e+'="'+h(n.getAttribute(e))+'"',n.removeAttribute(e)}),t+=">",e(n),t+=""}else"#text"===i?t+=h(n.nodeValue):o+="\nAn invalid tag "+i+" was removed";if(n.hasAttributes)for(let e=0;e/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("
"+e+"
","text/html");if(!t||"#document"!==t.nodeName)return"";let o=t.querySelector("body").firstChild,a="";for(let e=0;e/g,"≻").replaceAll(/"/g,"″").replaceAll(/\u0027/g,"′"),a}(e)}sanitizeToHtmlElement(e,t){!function(e,t){let o=d.parseFromString("
"+e+"
","text/html");o&&"#document"===o.nodeName?function e(t,o){let a=t.childNodes;for(let n=0;n{if(t)a.hasAttributeNS(null,e)&&(n.setAttributeNS(null,e,a.getAttribute(e)),a.removeAttributeNS(null,e));else if(a.hasAttribute(e))if("href"===e||"src"===e){let t=g(a.getAttribute(e),e).url;""!==t&&n.setAttribute(e,t)}else n.setAttribute(e,a.getAttribute(e))}),a.hasAttribute("style")){a.getAttribute("style").split(";").forEach(e=>{let t=e.split(":");2!==t.length||"width"!==t[0].trim()&&"height"!==t[0].trim()||(n.style[t[0].trim()]=t[1].trim())})}o.appendChild(n),e(a,n)}else"#text"===r&&o.appendChild(document.createTextNode(a.nodeValue))}}(o.querySelector("body").firstChild,t):t.textContent=""}(e,t)}sanitizeToHtmlString(e){return function(e){let t="",o="",a=d.parseFromString("
"+e.replace(" ","਀")+"
","text/html");return a&&"#document"===a.nodeName?(function e(a){let n=a.childNodes;for(let r=0;r{if(a)n.hasAttributeNS(null,e)&&(t+=" "+e+'="'+h(n.getAttribute(e))+'"',n.removeAttribute(e));else if(n.hasAttribute(e))if("href"===e||"src"===e){let a=g(n.getAttribute(e),e).url;""===a?o+="\nAn invalid url ("+n.getAttribute(e)+") was removed from a "+e+" attribute":t+=" "+e+'="'+a+'"',n.removeAttribute(e)}else t+=" "+e+'="'+h(n.getAttribute(e))+'"',n.removeAttribute(e)}),t+=">",e(n),t+=""}else"#text"===i?t+=h(n.nodeValue):o+="\nAn invalid tag "+i+" was removed";if(n.hasAttributes)for(let e=0;e=e?null:o[e-1]},get next(){return e=o.length},get first(){return 0===e},get last(){return e>=o.length-1},get index(){return e}})}function i(e){return o.findIndex(t=>t.objId===e)}function s(e,t,a){let n=i(e);if(-1===n)throw new Error("invalid objId for next or previous function");if(1!==a&&-1!==a)throw new Error("invalid direction");let r=t;for(r||(r=()=>!0),n+=a;-1{a=t(),a.jsonObject=e,n(a)})}}}let T=new Map;const N=new class{constructor(){Object.freeze(this)}setTranslations(e){e.forEach(e=>T.set(e.msgid,p.sanitizeToJsString(e.msgstr)))}getText(e,t){let o=T.get(e);return t&&o&&Object.getOwnPropertyNames(t).forEach(e=>o=o.replace("{"+e+"}",t[e])),o||e}};const L=new class{constructor(){Object.freeze(this)}get UUID(){let e=new Uint16Array(8);const t=["","-","-","-","-","","",""];window.crypto.getRandomValues(e);let o="";for(let a=0;a<8;a++)o+=e[a].toString(16).padStart(4,"0")+t[a];return o}storageAvailable(e){try{let t=window[e],o="__storage_test__";return t.setItem(o,o),t.removeItem(o),!0}catch(e){return!1}}saveFile(e,t,o){try{let a=window.URL.createObjectURL(new File([t],e,{type:o||"text/plain"})),n=document.createElement("a");n.setAttribute("href",a),n.setAttribute("download",e),n.click(),window.URL.revokeObjectURL(a)}catch(e){e instanceof Error&&console.error(e)}}formatTime(e){let t=Math.floor(e);if(0===t)return"";let o=Math.floor(t/86400),a=Math.floor(t%86400/3600),n=Math.floor(t%3600/60),r=Math.floor(t%60);return 0=o?"0 km":Math.floor(o/e.metersInKm)+","+Math.floor(o%e.metersInKm/10).toFixed(0).padStart(2,"0").padEnd(3,"0")+" km"}formatLat(e){return e>0?e.toFixed(a.fixed)+" N":(-e).toFixed(a.fixed)+" S"}formatLng(e){return e>0?e.toFixed(a.fixed)+" E":(-e).toFixed(a.fixed)+" W"}formatLatLng(e){return 0===e[0]&&0===e[1]?"":this.formatLat(e[0])+" - "+this.formatLng(e[1])}},O=w("WayPoint"),x=new WeakMap;function I(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+O.name);O.validate(e.objType),O.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.address=e.name,e.name="";case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+O.name)}}(e);let t=Object.getOwnPropertyNames(e);return["address","name","lat","lng","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+O.name)}),e}class A{constructor(){this.name="",this.address="",this.lat=a.defaultValue,this.lng=a.defaultValue,x.set(this,b()),Object.seal(this)}get fullName(){let e=""===this.name?this.address:this.name+", "+this.address;return""===e&&(e=L.formatLatLng([this.lat,this.lng])),e}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objId(){return x.get(this)}get objType(){return O}get jsonObject(){return{name:this.name,address:this.address,lat:parseFloat(this.lat.toFixed(a.fixed)),lng:parseFloat(this.lng.toFixed(a.fixed)),objId:x.get(this),objType:O.jsonObject}}set jsonObject(e){let t=I(e);this.address=t.address||"",this.name=t.name||"",this.lat=t.lat||a.defaultValue,this.lng=t.lng||a.defaultValue,x.set(this,b()),this.validateData()}validateData(){"string"==typeof this.address?this.address=p.sanitizeToJsString(this.address):this.address="","string"==typeof this.name?this.name=p.sanitizeToJsString(this.name):this.name="","number"!=typeof this.lat&&(this.lat=a.defaultValue),"number"!=typeof this.lng&&(this.lng=a.defaultValue)}}function M(){return new A}const S=w("ItineraryPoint"),P=new WeakMap;function E(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+S.name);S.validate(e.objType),S.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.elev=o.defaultValue;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+S.name)}}(e);let t=Object.getOwnPropertyNames(e);return["lat","lng","distance","elev","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+S.name)}),e}class C{constructor(){this.lat=a.defaultValue,this.lng=a.defaultValue,this.distance=e.defaultValue,this.elev=o.defaultValue,P.set(this,b()),Object.seal(this)}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return S}get objId(){return P.get(this)}get jsonObject(){return{lat:parseFloat(this.lat.toFixed(a.fixed)),lng:parseFloat(this.lng.toFixed(a.fixed)),distance:parseFloat(this.distance.toFixed(e.fixed)),elev:parseFloat(this.elev.toFixed(o.fixed)),objId:P.get(this),objType:S.jsonObject}}set jsonObject(t){let n=E(t);this.lat=n.lat||a.defaultValue,this.lng=n.lng||a.defaultValue,this.distance=n.distance||e.defaultValue,this.elev=n.elev||o.defaultValue,P.set(this,b()),this.validateData()}validateData(){"number"!=typeof this.lat&&(this.lat=a.defaultValue),"number"!=typeof this.lng&&(this.lng=a.defaultValue),"number"!=typeof this.distance&&(this.distance=e.defaultValue),"number"!=typeof this.elev&&(this.elev=o.defaultValue)}}function z(){return new C}const D=w("Maneuver"),R=new WeakMap;function H(t){if(!Object.getOwnPropertyNames(t).includes("objType"))throw new Error("No objType for "+D.name);D.validate(t.objType),D.version!==t.objType.version&&function(t){switch(t.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":"kArriveDefault"===t.iconName&&(t.distance=e.defaultValue);case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":t.objType.version="2.2.0";break;default:throw new Error("invalid version for "+D.name)}}(t);let o=Object.getOwnPropertyNames(t);return["iconName","instruction","distance","duration","itineraryPointObjId","objId"].forEach(e=>{if(!o.includes(e))throw new Error("No "+e+" for "+D.name)}),t}class V{constructor(){this.iconName="",this.instruction="",this.itineraryPointObjId=-1,this.distance=e.defaultValue,this.duration=e.defaultValue,R.set(this,b()),Object.seal(this)}get objType(){return D}get objId(){return R.get(this)}get jsonObject(){return{iconName:this.iconName,instruction:this.instruction,distance:parseFloat(this.distance.toFixed(e.fixed)),duration:this.duration,itineraryPointObjId:this.itineraryPointObjId,objId:R.get(this),objType:D.jsonObject}}set jsonObject(t){let o=H(t);this.iconName=o.iconName||"",this.instruction=o.instruction||"",this.distance=o.distance||e.defaultValue,this.duration=o.duration||e.defaultValue,this.itineraryPointObjId=o.itineraryPointObjId||-1,R.set(this,b()),this.validateData()}validateData(){"string"==typeof this.iconName?this.iconName=p.sanitizeToJsString(this.iconName):this.iconName="","string"==typeof this.instruction?this.instruction=p.sanitizeToJsString(this.instruction):this.instruction="","number"!=typeof this.distance&&(this.distance=e.defaultValue),"number"!=typeof this.duration&&(this.duration=e.defaultValue),"number"!=typeof this.itineraryPointObjId&&(this.itineraryPointObjId=-1)}}function F(){return new V}const k=w("Itinerary"),U=new WeakMap;function B(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+k.name);k.validate(e.objType),k.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.hasProfile=!1,e.ascent=0,e.descent=0;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+k.name)}}(e);let t=Object.getOwnPropertyNames(e);return["hasProfile","ascent","descent","itineraryPoints","maneuvers","provider","transitMode","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+k.name)}),e}class W{constructor(){this.hasProfile=!1,this.ascent=0,this.descent=0,this.provider="",this.transitMode="",this.itineraryPoints=j(z),this.maneuvers=j(F),U.set(this,b()),Object.seal(this)}get objType(){return k}get objId(){return U.get(this)}get jsonObject(){return{hasProfile:this.hasProfile,ascent:this.ascent,descent:this.descent,itineraryPoints:this.itineraryPoints.jsonObject,maneuvers:this.maneuvers.jsonObject,provider:this.provider,transitMode:this.transitMode,objId:U.get(this),objType:k.jsonObject}}set jsonObject(e){let t=B(e);this.hasProfile=t.hasProfile||!1,this.ascent=t.ascent||0,this.descent=t.descent||0,this.itineraryPoints.jsonObject=t.itineraryPoints||[],this.maneuvers.jsonObject=t.maneuvers||[],this.provider=t.provider||"",this.transitMode=t.transitMode||"",U.set(this,b());let o=new Map,a=0,n=this.itineraryPoints.iterator;for(;!n.done;)o.set(t.itineraryPoints[a].objId,n.value.objId),a++;let r=this.maneuvers.iterator;for(;!r.done;)r.value.itineraryPointObjId=o.get(r.value.itineraryPointObjId);this.validateData()}validateData(){"boolean"!=typeof this.hasProfile&&(this.hasProfile=!1),"number"!=typeof this.ascent&&(this.ascent=0),"number"!=typeof this.descent&&(this.descent=0),"string"==typeof this.provider?this.provider=p.sanitizeToJsString(this.provider):this.provider="","string"==typeof this.transitMode?this.transitMode=p.sanitizeToJsString(this.transitMode):this.transitMode=""}}function _(){return new W}const K=w("Note"),Z=new WeakMap;function J(e){return e.replaceAll(/style='color:white;background-color:red'/g,"class='TravelNotes-Note-WhiteRed'").replaceAll(/style='color:white;background-color:green'/g,"class='TravelNotes-Note-WhiteGreen'").replaceAll(/style='color:white;background-color:blue'/g,"class='TravelNotes-Note-WhiteBlue'").replaceAll(/style='color:white;background-color:brown'/g,"class='TravelNotes-Note-WhiteBrown'").replaceAll(/style='color:white;background-color:black'/g,"class='TravelNotes-Note-WhiteBlack'").replaceAll(/style='border:solid 0.1em'/g,"class='TravelNotes-Note-BlackWhite'").replaceAll(/style='background-color:white;'/g,"class='TravelNotes-Note-Knooppunt'").replaceAll(/style='fill:green;font:bold 120px sans-serif;'/g,"").replaceAll(/style='fill:none;stroke:green;stroke-width:10;'/g,"")}function q(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+K.name);K.validate(e.objType),K.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":"string"==typeof e.iconHeight&&(e.iconHeight=Number.parseInt(e.iconHeight)),"string"==typeof e.iconWidth&&(e.iconWidth=Number.parseInt(e.iconWidth)),e.iconContent=J(e.iconContent),e.popupContent=J(e.popupContent),e.tooltipContent=J(e.tooltipContent),e.phone=J(e.phone),e.address=J(e.address);case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+K.name)}}(e);let t=Object.getOwnPropertyNames(e);return["iconHeight","iconWidth","iconContent","popupContent","tooltipContent","phone","url","address","iconLat","iconLng","lat","lng","distance","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+K.name)}),e}class G{constructor(){this.iconHeight=0,this.iconWidth=0,this.iconContent="",this.popupContent="",this.tooltipContent="",this.phone="",this.url="",this.address="",this.iconLat=a.defaultValue,this.iconLng=a.defaultValue,this.lat=a.defaultValue,this.lng=a.defaultValue,this.distance=e.invalid,this.chainedDistance=e.defaultValue,Z.set(this,b()),Object.seal(this)}get isRouteNote(){return this.distance!==e.invalid}get iconLatLng(){return[this.iconLat,this.iconLng]}set iconLatLng(e){this.iconLat=e[0],this.iconLng=e[1]}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return K}get objId(){return Z.get(this)}get jsonObject(){return{iconHeight:this.iconHeight,iconWidth:this.iconWidth,iconContent:this.iconContent,popupContent:this.popupContent,tooltipContent:this.tooltipContent,phone:this.phone,url:this.url,address:this.address,iconLat:parseFloat(this.iconLat.toFixed(a.fixed)),iconLng:parseFloat(this.iconLng.toFixed(a.fixed)),lat:parseFloat(this.lat.toFixed(a.fixed)),lng:parseFloat(this.lng.toFixed(a.fixed)),distance:parseFloat(this.distance.toFixed(e.fixed)),chainedDistance:parseFloat(this.chainedDistance.toFixed(e.fixed)),objId:Z.get(this),objType:K.jsonObject}}set jsonObject(t){let o=q(t);this.iconHeight=o.iconHeight||0,this.iconWidth=o.iconWidth||0,this.iconContent=o.iconContent||"",this.popupContent=o.popupContent||"",this.tooltipContent=o.tooltipContent||"",this.phone=o.phone||"",this.url=o.url||"",this.address=o.address||"",this.iconLat=o.iconLat||a.defaultValue,this.iconLng=o.iconLng||a.defaultValue,this.lat=o.lat||a.defaultValue,this.lng=o.lng||a.defaultValue,this.distance=o.distance||e.invalid,this.chainedDistance=o.chainedDistance||e.defaultValue,Z.set(this,b()),this.validateData(!0)}validateData(t){if("number"!=typeof this.iconHeight&&(this.iconHeight=0),"number"!=typeof this.iconWidth&&(this.iconWidth=0),"string"==typeof this.iconContent){let e=p.sanitizeToHtmlString(this.iconContent);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.iconContent+")"),this.iconContent=e.htmlString}else this.iconContent="";if("string"==typeof this.popupContent){let e=p.sanitizeToHtmlString(this.popupContent);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.popupContent+")"),this.popupContent=e.htmlString}else this.popupContent="";if("string"==typeof this.tooltipContent){let e=p.sanitizeToHtmlString(this.tooltipContent);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.tooltipContent+")"),this.tooltipContent=e.htmlString}else this.tooltipContent="";if("string"==typeof this.phone){let e=p.sanitizeToHtmlString(this.phone);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.phone+")"),this.phone=e.htmlString}else this.phone="";if("string"==typeof this.url&&""!==this.url){let e=p.sanitizeToUrl(this.url);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.url+")"),this.url=encodeURI(e.url)}else this.url="";"string"==typeof this.address?this.address=p.sanitizeToHtmlString(this.address).htmlString:this.address="","number"!=typeof this.iconLat&&(this.iconLat=a.defaultValue),"number"!=typeof this.iconLng&&(this.iconLng=a.defaultValue),"number"!=typeof this.lat&&(this.lat=a.defaultValue),"number"!=typeof this.lng&&(this.lng=a.defaultValue),"number"!=typeof this.distance&&(this.distance=e.invalid),"number"!=typeof this.chainedDistance&&(this.chainedDistance=e.defaultValue)}}function X(){return new G}const $=w("Route"),Q=new WeakMap;function Y(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+$.name);$.validate(e.objType),$.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":e.dashArray=0,e.hidden=!1;case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.edited=n.notEdited;case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.editionStatus=e.edited;case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+$.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","wayPoints","notes","itinerary","width","color","dashArray","chain","distance","duration","editionStatus","hidden","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+$.name)}),e}class ee{constructor(){this.name="",this.wayPoints=j(M),this.wayPoints.add(M()),this.wayPoints.add(M()),this.notes=j(X),this.itinerary=_(),this.width=f.route.width,this.color=f.route.color,this.dashArray=f.route.dashArray,this.chain=!0,this.chainedDistance=e.defaultValue,this.distance=e.defaultValue,this.duration=e.defaultValue,this.editionStatus=n.notEdited,this.hidden=!1,Q.set(this,b()),Object.seal(this)}get computedName(){let e=this.name;return""===e&&(e=(""===this.wayPoints.first.fullName?"???":this.wayPoints.first.fullName)+" ⮞ "+(""===this.wayPoints.last.fullName?"???":this.wayPoints.last.fullName)),e}get objId(){return Q.get(this)}get objType(){return $}get jsonObject(){return{name:this.name,wayPoints:this.wayPoints.jsonObject,notes:this.notes.jsonObject,itinerary:this.itinerary.jsonObject,width:this.width,color:this.color,dashArray:this.dashArray,chain:this.chain,distance:parseFloat(this.distance.toFixed(e.fixed)),duration:this.duration,editionStatus:this.editionStatus,hidden:this.hidden,chainedDistance:parseFloat(this.chainedDistance.toFixed(e.fixed)),objId:Q.get(this),objType:$.jsonObject}}set jsonObject(e){let t=Y(e);this.name=t.name||"",this.wayPoints.jsonObject=t.wayPoints||[],this.notes.jsonObject=t.notes||[],this.itinerary.jsonObject=t.itinerary||_().jsonObject,this.width=t.width||f.route.width,this.color=t.color||"#000000",this.dashArray=t.dashArray||0,this.chain=t.chain||!1,this.distance=t.distance,this.duration=t.duration,this.editionStatus=t.editionStatus||n.notEdited,this.hidden=t.hidden||!1,this.chainedDistance=t.chainedDistance,Q.set(this,b()),this.validateData()}validateData(){"string"==typeof this.name?this.name=p.sanitizeToJsString(this.name):this.name="","number"!=typeof this.width&&(this.width=f.route.width),"string"==typeof this.color?this.color=p.sanitizeToColor(this.color)||f.route.color:this.color=f.route.color,"number"!=typeof this.dashArray&&(this.dashArray=0),this.dashArray>=f.route.dashChoices.length&&(this.dashArray=0),"boolean"!=typeof this.chain&&(this.chain=!1),"number"!=typeof this.distance&&(this.distance=e.defaultValue),"number"!=typeof this.duration&&(this.duration=e.defaultValue),"number"!=typeof this.editionStatus&&(this.editionStatus=n.notEdited),"boolean"!=typeof this.hidden&&(this.hidden=!1),"number"!=typeof this.chainedDistance&&(this.chainedDistance=e.defaultValue)}}function te(){return new ee}const oe=w("Travel"),ae=new WeakMap;function ne(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+oe.name);oe.validate(e.objType),oe.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.editedRoute=te();case"1.5.0":if(e.userData.layerId){let t=[{layerId:"0",layerName:"OSM - Color"},{layerId:"1",layerName:"OSM - Black and White"},{layerId:"2",layerName:"Thunderforest - Transport"},{layerId:"3",layerName:"Thunderforest - OpenCycleMap"},{layerId:"4",layerName:"Thunderforest - Outdoors"},{layerId:"5",layerName:"Esri - Aerial view"},{layerId:"6",layerName:"Kartverket - Norway"},{layerId:"7",layerName:"IGN-NGI - Belgium now"},{layerId:"12",layerName:"Thunderforest - Landscape"},{layerId:"24",layerName:"Lantmäteriet - Sweden"},{layerId:"25",layerName:"Maanmittauslaitos - Finland"}].find(t=>t.layerId===e.userData.layerId);e.layerName=t?t.layerName:"OSM - Color"}else e.layerName="OSM - Color";case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+oe.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","editedRoute","routes","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+oe.name)}),e}class re{constructor(){this.editedRoute=te(),this.routes=j(te),this.notes=j(X),this.layerName="OSM - Color",this.name="",this.readOnly=!1,ae.set(this,b()),Object.seal(this)}get objId(){return ae.get(this)}get objType(){return oe}get jsonObject(){return{editedRoute:this.editedRoute.jsonObject,layerName:this.layerName,name:this.name,routes:this.routes.jsonObject,notes:this.notes.jsonObject,readOnly:this.readOnly,objId:ae.get(this),objType:oe.jsonObject}}set jsonObject(e){let t=ne(e);this.editedRoute.jsonObject=t.editedRoute,this.layerName=e.layerName||"OSM - Color",this.name=t.name||"",this.readOnly=t.readOnly||!1,this.routes.jsonObject=t.routes||[],this.notes.jsonObject=t.notes||[],ae.set(this,b()),this.validateData()}validateData(){"string"==typeof this.layerName?this.layerName=p.sanitizeToJsString(this.layerName):this.layerName="OSM - Color","string"==typeof this.name?this.name=p.sanitizeToJsString(this.name):this.name="TravelNotes","boolean"!=typeof this.readOnly&&(this.readOnly=!0)}}function ie(){return new re}let se=new Map,le=new Map,ce=Object.seal({provider:"",transitMode:""}),de=L.UUID;const ue=new class{constructor(){this.map=null,this.travel=ie(),this.editedRouteObjId=-1,this.searchData=[],Object.seal(this)}get providers(){return se}get mapObjects(){return le}get routing(){return ce}get UUID(){return de}};const he=new class{constructor(){Object.freeze(this)}getRoute(e){let t=null;return t=ue.travel.routes.getAt(e),t||e===ue.travel.editedRoute.objId&&(t=ue.travel.editedRoute),t}getNoteAndRoute(e){let t=null,o=null;if(t=ue.travel.notes.getAt(e),!t){let a=ue.travel.routes.iterator;for(;!a.done&&!t;)t=a.value.notes.getAt(e),t&&(o=a.value);t||(t=ue.travel.editedRoute.notes.getAt(e),t&&(o=ue.travel.editedRoute))}return Object.freeze({note:t,route:o})}getWayPoint(e){let t=ue.travel.editedRoute.wayPoints.getAt(e);if(!t){let o=ue.travel.routes.iterator;for(;!o.done&&!t;)t=o.value.wayPoints.getAt(e)}return t}};const ge=new class{constructor(){Object.freeze(this)}getLatLngElevAtDist(e,t){if(e.distance<=t||0>=t)return null;let o=0,a=e.itinerary.itineraryPoints.iterator;for(;o{t.lat=Math.min(t.lat,e[0]),t.lng=Math.min(t.lng,e[1]),o.lat=Math.max(o.lat,e[0]),o.lng=Math.max(o.lng,e[1])}),window.L.latLngBounds(t,o)}getSquareBoundingBox(e,t){let o=t/6371e3*s.fromRadians,a=e[0]*s.toRadians,n=Math.acos((Math.cos(t/6371e3)-Math.sin(a)**2)/Math.cos(a)**2)*s.fromRadians;return window.L.latLngBounds(window.L.latLng([e[0]-o,e[1]-n]),window.L.latLng([e[0]+o,e[1]+n]))}project(e,t){let o=ue.map.project(window.L.latLng(e),t);return[o.x,o.y]}screenCoordToLatLng(e,t){let o=ue.map.containerPointToLatLng(window.L.point(e,t));return[o.lat,o.lng]}addPoints(e,t){return[e[0]+t[0],e[1]+t[1]]}subtrackPoints(e,t){return[e[0]-t[0],e[1]-t[1]]}},pe=r.margin.toFixed(0),me=(r.margin+r.height).toFixed(0),fe=(r.margin+r.width).toFixed(0),ve=r.margin.toFixed(0),ye=(r.margin+r.width+r.xDeltaText).toFixed(0),be=(r.margin-r.xDeltaText).toFixed(0),we=r.margin+r.height+r.margin/2;function je(){let t=null,o=1,a=1,n=Number.MAX_VALUE,i=0,s=0,c=null,d=0,u=f.route.elev.smoothCoefficient,h=f.route.elev.smoothPoints;function g(){let e=function(){let e=0,t=0,o=[],a=c.itinerary.itineraryPoints.iterator,n=0,r=a.done;for(o.push({distance:e,elev:a.value.elev}),n+=a.value.distance,r=a.done;!r;){for(e+=d;e>=n&&!r;)n+=a.value.distance,r=a.done;if(!r){let r=(a.value.elev-a.previous.elev)/a.previous.distance;t=a.value.elev-(n-e)*r,o.push({distance:e,elev:t})}}return o.push({distance:n,elev:c.itinerary.itineraryPoints.last.elev}),o}(),t=new Map,o=(e[h].elev-e[0].elev)/h,a=0;for(a=0;a=t;t++)o+=e[t].elev;t.set(e[a].distance,{distance:e[a].distance,elev:o/(2*h+1)})}return a--,o=d*(e[e.length-1].elev-e[e.length-1-h].elev)/(e[e.length-1].distance-e[e.length-1-h].distance),t.set(e[a].distance+d,{distance:e[a].distance+d,elev:e[a].elev+o}),t.set(e[a].distance+2*d,{distance:e[a].distance+2*d,elev:e[a].elev+2*o}),t}function p(d){return c=d,n=Number.MAX_VALUE,i=0,c.itinerary.itineraryPoints.forEach(e=>{i=Math.max(i,e.elev),n=Math.min(n,e.elev)}),s=i-n,o=r.height/s,a=r.width/c.distance,t=document.createElementNS(l,"svg"),t.setAttributeNS(null,"viewBox","0 0 "+(r.width+2*r.margin)+" "+(r.height+2*r.margin)),t.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile"),function(){let e="",n=0,s=0,d=0;c.itinerary.itineraryPoints.forEach(t=>{s=(r.margin+a*n).toFixed(0),d=(r.margin+o*(i-t.elev)).toFixed(0),e+=s+","+d+" ",n+=t.distance});let u=document.createElementNS(l,"polyline");u.setAttributeNS(null,"points",e),u.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-profilePolyline"),t.appendChild(u)}(),function(){let e=pe+","+ve+" "+pe+","+me+" "+fe+","+me+" "+fe+","+ve,o=document.createElementNS(l,"polyline");o.setAttributeNS(null,"points",e),o.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-framePolyline"),t.appendChild(o)}(),function(){let e=Number.MAX_VALUE,a=0;r.vScales.forEach(t=>{let o=Math.abs(s/4-t);o{let t=Math.abs(c.distance/8-e);t"+N.getText("HTMLViewsFactory - Address")+" : "+o.address,v.create("div",{className:e+"NoteHtml-Address"},a)),0!==o.url.length&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Link")+"'+o.url.substr(0,40)+"...",v.create("div",{className:e+"NoteHtml-Url"},a)),0!==o.phone.length){let t=o.phone;if(o.phone.match(/^\+[0-9, ,*,#]*$/)){let e=o.phone.replaceAll(/\u0020/g,""),a=o.phone.replaceAll(/\u0020/g," ");t=N.getText("HTMLViewsFactory - Phone")+" : "+N.getText("HTMLViewsFactory - call")+''+a+""+N.getText("HTMLViewsFactory - Send a sms to")+''+a+""}else t=N.getText("HTMLViewsFactory - Phone")+" : "+o.phone;p.sanitizeToHtmlElement(t,v.create("div",{className:e+"NoteHtml-Phone"},a))}if(p.sanitizeToHtmlElement(L.formatLatLng(o.latLng),v.create("div",{className:e+"NoteHtml-LatLng"},a)),t.route){t.route.chain&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of travel")+" : "+L.formatDistance(o.chainedDistance+o.distance),v.create("div",{className:e+"NoteHtml-Distance"},a)),p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of route")+" : "+L.formatDistance(o.distance),v.create("div",{className:e+"NoteHtml-Distance"},a));let n=t.route.notes.next(o.objId);if(n){let t=n.distance-o.distance;9"+N.getText("HTMLViewsFactory - Next note after")+" : "+L.formatDistance(t),v.create("div",{className:e+"NoteHtml-NextDistance"},a))}}return a}function Ne(e,t){let o=v.create("div"),a=v.create("div",{className:e+(t.route?"Route-ManeuversAndNotes-IconCell":"Travel-Notes-IconCell")},o),n=1;p.sanitizeToHtmlElement(t.note.iconContent,a),"TravelNotes-Roadbook-"===e&&a.firstChild?("svg"===a.firstChild.tagName?(a.firstChild.setAttributeNS(null,"viewBox","0 0 "+i.svgViewboxDim+" "+i.svgViewboxDim),n=f.note.svgIcon.roadbookFactor):a.firstChild.classList.contains("TravelNotes-MapNoteCategory-0073")&&(n=f.note.svgIcon.roadbookFactor),a.setAttribute("tanwidth",String(t.note.iconWidth*n)+"px"),a.setAttribute("tanheight",String(t.note.iconWidth*n)+"px")):(a.style.width=String(t.note.iconWidth)+"px",a.style.height=String(t.note.iconHeight)+"px");let r=Te(e,t);return r.className=e+(t.route?"Route-ManeuversAndNotes-Cell":"Travel-Notes-Cell"),o.appendChild(r),o.noteObjId=t.note.objId,o}function Le(e){let t=v.create("div",{className:e+"Travel-Notes"}),o=ue.travel.notes.iterator;for(;!o.done;){let a=Ne(e,{note:o.value,route:null});a.className=e+"Travel-Notes-Row",t.appendChild(a)}return t}function Oe(e,t){let o=v.create("div",{className:e+"Route-Header",id:"route"+t.objId});return p.sanitizeToHtmlElement(t.computedName,v.create("div",{className:e+"Route-Header-Name"},o)),0!==t.distance&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Route distance")+" : "+L.formatDistance(t.distance),v.create("div",{className:e+"Route-Header-Distance"},o)),ue.travel.readOnly||"bike"===t.itinerary.transitMode||p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Duration")+" : "+L.formatTime(t.duration),v.create("div",{className:e+"Route-Header-Duration"},o)),t.itinerary.hasProfile&&(p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Ascent")+" : "+String(t.itinerary.ascent.toFixed(0))+" m.",v.create("div",{className:e+"Route-Header-Ascent"},o)),p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Descent")+" : "+String(t.itinerary.descent.toFixed(0))+" m.",v.create("div",{className:e+"Route-Header-Descent"},o))),o}function xe(t,o){let a=v.create("div");v.create("div",{className:t+"Route-ManeuversAndNotes-IconCell TravelNotes-ManeuverNote-"+o.maneuver.iconName},a);let n=v.create("div",{className:t+"Route-ManeuversAndNotes-Cell"},a);return p.sanitizeToHtmlElement(o.maneuver.instruction,v.create("div",null,n)),o.route.chain&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of travel")+" : "+L.formatDistance(o.route.chainedDistance+o.maneuverDistance),v.create("div",{className:t+"Route-Maneuver-Distance"},n)),p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of route")+" : "+L.formatDistance(o.maneuverDistance),v.create("div",{className:t+"Route-Maneuver-Distance"},n)),e.defaultValue"+N.getText("HTMLViewsFactory - Next maneuver after")+" : "+L.formatDistance(o.maneuver.distance),v.create("div",{className:t+"Route-Maneuver-Distance"},n)),a}function Ie(e,t){let o=[],a=t.notes.iterator;for(;!a.done;){let n=Ne(e,{note:a.value,route:t});n.className=e+"Route-Notes-Row",n.objId=b(),n.latLng=a.value.latLng,n.noteObjId=a.value.objId,n.distance=a.value.distance,o.push(n)}let n=t.itinerary.maneuvers.iterator,r=0;for(;!n.done;){let a=xe(e,{route:t,maneuver:n.value,maneuverDistance:r});a.className=e+"Route-Maneuvers-Row",a.objId=b(),a.latLng=t.itinerary.itineraryPoints.getAt(n.value.itineraryPointObjId).latLng,a.maneuverObjId=n.value.objId,a.distance=r,o.push(a),r+=n.value.distance}o.sort((e,t)=>e.distance-t.distance);let i=v.create("div",{className:e+"Route-ManeuversAndNotes"});return o.forEach(e=>i.appendChild(e)),i}function Ae(e,t){let o="";""!==t.itinerary.provider&&""!==t.itinerary.transitMode&&(o=N.getText("HTMLViewsFactory - Itinerary computed by {provider} and optimized for {transitMode}",{provider:t.itinerary.provider,transitMode:N.getText("HTMLViewsFactory - TransitMode "+t.itinerary.transitMode)}));let a=v.create("div",{className:e+"RouteFooter"});return p.sanitizeToHtmlElement(o,a),a}function Me(e,t){let o=v.create("div",{className:e+"RouteProfile"});return p.sanitizeToHtmlElement(N.getText("HTMLViewsFactory - Profile"),o),o.appendChild(je().createSvg(t)),o}function Se(t){let o=v.create("div",{className:t+"Travel"});o.appendChild(function(t){let o=v.create("div",{className:t+"Travel-Header"});p.sanitizeToHtmlElement(ue.travel.name,v.create("div",{className:t+"Travel-Header-Name"},o));let a=e.defaultValue,n=0,r=0,i=ue.travel.routes.iterator;for(;!i.done;){let e=i.value.objId===ue.editedRouteObjId&&f.routeEditor.showEditedRouteInRoadbook?ue.travel.editedRoute:i.value;p.sanitizeToHtmlElement(''+e.computedName+" : "+L.formatDistance(e.distance)+".",v.create("div",{className:t+"Travel-Header-RouteName"},o)),e.chain&&(a+=e.distance,n+=e.itinerary.ascent,r+=e.itinerary.descent)}return p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Travel distance")+" : "+L.formatDistance(a),v.create("div",{className:t+"Travel-Header-TravelDistance"},o)),0!==n&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Travel ascent")+" : "+String(n.toFixed(0))+" m.",v.create("div",{className:t+"Travel-Header-TravelAscent"},o)),0!==r&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Travel descent")+" : "+String(r.toFixed(0))+" m.",v.create("div",{className:t+"Travel-Header-TravelDescent"},o)),o}(t)),o.appendChild(Le(t));let a=ue.travel.routes.iterator;for(;!a.done;){let e=f.routeEditor.showEditedRouteInRoadbook&&a.value.objId===ue.editedRouteObjId?ue.travel.editedRoute:a.value;o.appendChild(Oe(t,e)),e.itinerary.hasProfile&&o.appendChild(Me(t,e)),o.appendChild(Ie(t,e)),o.appendChild(Ae(t,e))}return o.appendChild(function(e){let t=N.getText("HTMLViewsFactory - Travel footer")+'Travel & Notes, © wwwouaiebe 2017 2021 © '+N.getText("HTMLViewsFactory - OpenStreetMap contributors")+"",o=v.create("div",{className:e+"TravelFooter"});return p.sanitizeToHtmlElement(t,o),o}(t)),o}const Pe=new class{constructor(){Object.freeze(this)}getTravelHTML(e){return Se(e)}getNoteTextAndIconHTML(e,t){return Ne(e,t)}getNoteTextHTML(e,t){return Te(e,t)}getEditedRouteManeuversAndNotesHTML(e){return Ie(e,ue.travel.editedRoute)}getTravelNotesHTML(e){return Le(e)}getRouteHeaderHTML(e,t){return Oe(e,t)}};let Ee=null,Ce=null;function ze(e){let t=he.getRoute(e.target.objId),o=ge.getClosestLatLngDistance(t,[e.latlng.lat,e.latlng.lng]).distance;o+=t.chainedDistance,o=L.formatDistance(o);let a=ue.mapObjects.get(e.target.objId);a.closeTooltip();let n=t.computedName;ue.travel.readOnly||(n+=0===n.length?"":" - ",n+=o),a.setTooltipContent(n),a.openTooltip(e.latlng)}function De(e,t){t.objId=e,t.addTo(ue.map),ue.mapObjects.set(e,t)}function Re(e){let t=he.getNoteAndRoute(e).note,o=window.L.marker(t.latLng,{icon:window.L.divIcon({iconSize:[f.note.grip.size,f.note.grip.size],iconAnchor:[f.note.grip.size/2,f.note.grip.size/2],html:"
",className:"TravelNotes-Map-Note-Bullet"}),opacity:f.note.grip.opacity,draggable:!ue.travel.readOnly});o.objId=t.objId;let a=window.L.divIcon({iconSize:[t.iconWidth,t.iconHeight],iconAnchor:[t.iconWidth/2,t.iconHeight/2],popupAnchor:[0,-t.iconHeight/2],html:t.iconContent,className:"TravelNotes-Map-AllNotes "}),n=window.L.marker(t.iconLatLng,{zIndexOffset:100,icon:a,draggable:!ue.travel.readOnly});n.objId=t.objId,n.bindPopup(e=>Pe.getNoteTextHTML("TravelNotes-Map-",he.getNoteAndRoute(e.objId))),0!==t.tooltipContent.length&&(n.bindTooltip(e=>he.getNoteAndRoute(e.objId).note.tooltipContent),n.getTooltip().options.offset[0]=t.iconWidth/2);let r=window.L.polyline([t.latLng,t.iconLatLng],f.note.polyline);r.objId=t.objId;let i=window.L.layerGroup([n,r,o]);return i.markerId=window.L.Util.stamp(n),i.polylineId=window.L.Util.stamp(r),i.bulletId=window.L.Util.stamp(o),De(t.objId,i),f.note.haveBackground&&document.querySelectorAll(".TravelNotes-MapNote,.TravelNotes-SvgIcon").forEach(e=>e.classList.add("TravelNotes-Map-Note-Background")),Object.freeze({marker:n,polyline:r,bullet:o})}function He(e){e.dashArray>=f.route.dashChoices.length&&(e.dashArray=0);let t=f.route.dashChoices[e.dashArray].iDashArray;if(t){let o="",a=0;for(a=0;a{let t=he.getRoute(e.objId);return Pe.getRouteHeaderHTML("TravelNotes-Map-",t)}),window.L.DomEvent.on(r,"click",e=>e.target.openPopup(e.latlng));let i=t.notes.iterator;for(;!i.done;)Re(i.value.objId);return t}addNote(e){return Re(e)}getDashArray(e){return He(e)}zoomTo(e,t){if(t){let e=[];t.forEach(t=>e=e.concat(t)),ue.map.fitBounds(ge.getLatLngBounds(e))}else ue.map.setView(e,f.itineraryPoint.zoomFactor)}setLayer(e,t){let o=null;o="wmts"===e.service.toLowerCase()?window.L.tileLayer(t):window.L.tileLayer.wms(t,e.wmsOptions),Ee&&ue.map.removeLayer(Ee),ue.map.addLayer(o),Ee=o,ue.travel.readOnly||(ue.map.getZoom()<(e.minZoom||0)&&ue.map.setZoom(e.minZoom||0),ue.map.setMinZoom(e.minZoom||0),ue.map.getZoom()>(e.maxZoom||18)&&ue.map.setZoom(e.maxZoom||18),ue.map.setMaxZoom(e.maxZoom||18),e.bounds?(ue.map.getBounds().intersects(e.bounds)&&!ue.map.getBounds().contains(e.bounds)||(ue.map.setMaxBounds(null),ue.map.fitBounds(e.bounds),ue.map.setZoom(e.minZoom||0)),ue.map.setMaxBounds(e.bounds)):ue.map.setMaxBounds(null)),ue.map.fire("baselayerchange",o)}onGeolocationStatusChanged(e){t.active!==e&&Ce&&(ue.map.removeLayer(Ce),Ce=null)}onGeolocationPositionChanged(e){let t=f.geoLocation.zoomToPosition;Ce&&(ue.map.removeLayer(Ce),t=!1),Ce=window.L.circleMarker(window.L.latLng(e.coords.latitude,e.coords.longitude),f.geoLocation.marker).bindTooltip(L.formatLatLng([e.coords.latitude,e.coords.longitude])).addTo(ue.map),t&&ue.map.setView(window.L.latLng(e.coords.latitude,e.coords.longitude),f.geoLocation.zoomFactor)}};const Fe=new class{constructor(){Object.freeze(this)}dispatch(e,t){let o=function(e){return-1<["showitinerary","updateitinerary","showtravelnotes","updatetravelnotes","showsearch","updatesearch","setrouteslist","setprovider","providersadded","travelnameupdated","settransitmode"].indexOf(e)?document.getElementById("TravelNotes-UI-MainDiv"):-1<["removeobject","removeallobjects","zoomto","additinerarypointmarker","addsearchpointmarker","addrectangle","addwaypoint","layerchange","geolocationstatuschanged","geolocationpositionchanged","routeupdated","routepropertiesupdated","noteupdated","roadbookupdate","profileclosed"].indexOf(e)?document:null}(e);if(o){let a=new Event(e);t&&(a.data=t),o.dispatchEvent(a)}}};function ke(e){return Math.floor(Math.abs(e)+.5)*(0<=e?1:-1)}const Ue=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=ke(e*o),n=ke(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 s(){let t=null,o=0,n=0;do{t=e.charCodeAt(a++)-63,n|=(31&t)<>1):n>>1}for(;ae.push(t.latLng)),o.notes.forEach(e=>t(e))}return new class{constructor(){Object.freeze(this)}zoomToLatLng(e){Fe.dispatch("zoomto",{latLng:e})}zoomToManeuver(e){let t=ue.travel.editedRoute.itinerary.maneuvers.getAt(e).itineraryPointObjId,o=ue.travel.editedRoute.itinerary.itineraryPoints.getAt(t).latLng;Fe.dispatch("zoomto",{latLng:o})}zoomToNote(o){e=[],t(he.getNoteAndRoute(o).note),Fe.dispatch("zoomto",{geometry:[e]})}zoomToRoute(t){e=[],o(he.getRoute(t)),Fe.dispatch("zoomto",{geometry:[e]})}zoomToTravel(){e=[],ue.travel.routes.forEach(e=>o(e)),-1!==ue.travel.editedRouteObjId&&o(ue.travel.editedRoute),ue.travel.notes.forEach(e=>t(e)),Fe.dispatch("zoomto",{geometry:[e]})}zoomToPoi(e){Fe.dispatch("zoomto",e)}}}function We(){return new class{constructor(){Object.freeze(this)}openDistantFile(t){(function(){function t(e){let t={};0!==e.itinerary.itineraryPoints.length&&(t=e.itinerary.itineraryPoints[0].objType);let o={values:"",objType:t},n=[];e.itinerary.itineraryPoints.forEach(e=>{n.push([e.lat,e.lng,e.distance,e.elev,e.objId])}),o.values=Ue.encode(n,[a.fixed,a.fixed,2,2,0]),e.itinerary.itineraryPoints=o}function r(t){let n=[];if(t.itinerary.itineraryPoints.values)Ue.decode(t.itinerary.itineraryPoints.values,[a.fixed,a.fixed,2,2,0]).forEach(r=>{let i={lat:a.defaultValue,lng:a.defaultValue,distance:e.defaultValue,elev:o.defaultValue,objId:-1};[i.lat,i.lng,i.distance,i.elev,i.objId]=r,i.objType=t.itinerary.itineraryPoints.objType,n.push(i)});else{t.itinerary.itineraryPoints.latLngs=Ue.decode(t.itinerary.itineraryPoints.latLngs,[a.fixed,a.fixed]);let e=0;t.itinerary.itineraryPoints.latLngs.forEach(a=>{let r={};r.lat=a[0],r.lng=a[1],r.distance=t.itinerary.itineraryPoints.distances[e],t.itinerary.itineraryPoints.elevs?r.elev=t.itinerary.itineraryPoints.elevs[e]:r.elev=o.defaultValue,r.objId=t.itinerary.itineraryPoints.objIds[e],r.objType=t.itinerary.itineraryPoints.objType,n.push(r),e++})}t.itinerary.itineraryPoints=n}function i(e){e.routes.forEach(r),e.editedRoute&&r(e.editedRoute)}return new class{constructor(){Object.freeze(this)}decompress(e){i(e),ue.travel.jsonObject=e,ue.editedRouteObjId=-1,ue.travel.routes.forEach(e=>{n.notEdited!==e.editionStatus&&(ue.editedRouteObjId=e.objId)})}decompressMerge(e){i(e);let t=ie();t.jsonObject=e;let o=t.routes.iterator;for(;!o.done;)ue.travel.routes.add(o.value);let a=t.notes.iterator;for(;!a.done;)ue.travel.notes.add(a.value)}compress(){let e=ue.travel.jsonObject;return e.routes.forEach(t),t(e.editedRoute),e}}})().decompress(t),ue.travel.readOnly=!0,this.display()}display(){document.title="Travel & Notes"+(""===ue.travel.name?"":" - "+ue.travel.name);let e=ue.travel.routes.iterator;for(;!e.done;)n.notEdited===e.value.editionStatus&&Fe.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e.value.objId});-1!==ue.editedRouteObjId&&Fe.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:ue.travel.editedRoute.objId});let t=ue.travel.notes.iterator;for(;!t.done;)Fe.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:t.value.objId});Be().zoomToTravel()}}}const _e=new class{constructor(){Object.freeze(this)}createUI(){v.create("div",{id:"TravelNotes-AttributionsUI"},document.querySelector("body")),this.attributions=""}set attributions(e){let t='© Leaflet | © OpenStreetMap contributors '+e+'| © Travel & Notes',o=document.getElementById("TravelNotes-AttributionsUI");for(;o.firstChild;)o.removeChild(o.firstChild);p.sanitizeToHtmlElement(t,o)}};let Ke="geolocation"in navigator?t.inactive:t.disabled,Ze=null;function Je(e){Fe.dispatch("geolocationpositionchanged",{position:e})}function qe(){t.active===Ke&&(Ke=t.inactive),Fe.dispatch("geolocationstatuschanged",{status:Ke}),navigator.geolocation.clearWatch(Ze),Ze=null}function Ge(e){1===e.code&&(Ke=t.refusedByUser),qe()}const Xe=new class{constructor(){Object.freeze(this)}get status(){return Ke}switch(){switch(Ke){case t.inactive:Ke=t.active,Fe.dispatch("geolocationstatuschanged",{status:Ke}),navigator.geolocation.getCurrentPosition(Je,Ge,f.geoLocation.options),Ze=navigator.geolocation.watchPosition(Je,Ge,f.geoLocation.options);break;case t.active:qe()}return Ke}};let $e=null,Qe=[{service:"wmts",url:"https://{s}.tile.osm.org/{z}/{x}/{y}.png",name:"OSM - Color",toolbar:{text:"OSM",color:"red",backgroundColor:"white"},providerName:"OSM",providerKeyNeeded:!1,attribution:""}];function Ye(e){e.stopPropagation(),Fe.dispatch("layerchange",{layer:e.target.layer}),_e.attributions=e.target.layer.attribution}function et(e){e.stopPropagation(),Xe.switch()}function tt(e){e.stopPropagation(),Be().zoomToTravel()}function ot(e){v.create("div",{className:"TravelNotes-ViewerLayersToolbarUI-Button",title:e.name,layer:e,textContent:e.toolbar.text,style:"color:"+e.toolbar.color+";background-color:"+e.toolbar.backgroundColor},$e).addEventListener("click",Ye,!1)}const at=new class{constructor(){Object.freeze(this)}createUI(){$e=v.create("div",{id:"TravelNotes-ViewerLayersToolbarUI"},document.querySelector("body")),v.create("div",{className:"TravelNotes-ViewerLayersToolbarUI-Button",title:"My position",textContent:"🌐",style:"color:black;background-color:white"},$e).addEventListener("click",et,!1),v.create("div",{className:"TravelNotes-ViewerLayersToolbarUI-Button",title:"Zoom on the travel",textContent:"🔍",style:"color:black;background-color:white"},$e).addEventListener("click",tt,!1),Qe.forEach(ot)}setLayer(e){let t=Qe.find(t=>t.name===e)||Qe[0];Fe.dispatch("layerchange",{layer:t}),_e.attributions=t.attribution}addLayers(e){e.forEach(e=>{e.providerKeyNeeded||Qe.push(e)})}};let nt=!1;const rt=new class{constructor(){Object.freeze(this)}addReadOnlyMap(e,t){nt||(nt=!0,document.addEventListener("routeupdated",e=>{e.data&&Ve.addRoute(e.data.addedRouteObjId)},!1),document.addEventListener("noteupdated",e=>{e.data&&Ve.addNote(e.data.addedNoteObjId)},!1),document.addEventListener("zoomto",e=>{e.data&&Ve.zoomTo(e.data.latLng,e.data.geometry)},!1),document.addEventListener("layerchange",e=>{e.data&&Ve.setLayer(e.data.layer,e.data.layer.url)}),document.addEventListener("geolocationpositionchanged",e=>{e.data&&Ve.onGeolocationPositionChanged(e.data.position)},!1),document.addEventListener("geolocationstatuschanged",e=>{e.data&&Ve.onGeolocationStatusChanged(e.data.status)},!1),_e.createUI(),t&&at.createUI(),at.setLayer("OSM - Color"),e&&async function(e){let t=await fetch(e);if(200===t.status&&t.ok){let e=await t.json();We().openDistantFile(e)}else ue.map.setView([a.defaultValue,a.defaultValue],2),document.title="Travel & Notes"}(e))}};!function(){let e=null,t=null,o=!1,n=window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"TravelNotes";!async function(){!function(){let a=new URL(window.location),n=a.searchParams.get("fil");if(n&&0!==n.length)try{if(n=atob(n),n.match(/[^\w-%:./]/))throw new Error("invalid char in the url encoded in the fil parameter");let e=new URL(n);if(!(a.protocol&&e.protocol&&a.protocol===e.protocol&&a.hostname&&e.hostname&&a.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 r=a.searchParams.get("lng");r&&r.match(/^[A-Z,a-z]{2}$/)&&(e=r.toLowerCase()),""===a.searchParams.get("lay")&&(o=!0)}(),await async function(){let t=await fetch(n+"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.note.haveBackground=!0),f.overload(o),!0}return!1}()?(e=e||f.language,await async function(){let t=await fetch(n+e.toUpperCase()+".json");return!(200!==t.status||!t.ok)&&(N.setTranslations(await t.json()),!0)}()?await async function(){let e=await fetch(n+"Layers.json");return!(200!==e.status||!e.ok)&&(at.addLayers(await e.json()),!0)}()?function(){v.create("div",{id:"TravelNotes-Map"},document.querySelector("body"));let e=window.L.map("TravelNotes-Map",{attributionControl:!1,zoomControl:!1}).setView([a.defaultValue,a.defaultValue],2);ue.map=e,rt.addReadOnlyMap(t,o)}():document.body.textContent="Not possible to load the TravelNotesLayers.json file. ":document.body.textContent="Not possible to load the TravelNotesConfig"+e.toUpperCase()+".json file. "):document.body.textContent="Not possible to load the TravelNotesConfig.json file. "}()}()}(); \ No newline at end of file + */function w(e){const t=e;return new class{constructor(){Object.freeze(this)}get name(){return t}get version(){return"2.2.0"}get jsonObject(){return{name:t,version:"2.2.0"}}validate(e){if(!Object.getOwnPropertyNames(e).includes("name"))throw new Error("No name for "+t);if(t!==e.name)throw new Error("Invalid name for "+t);if(!Object.getOwnPropertyNames(e).includes("version"))throw new Error("No version for "+t)}}}function j(e){const t=e;let o=[];const a=function(){let e=t();if(!e.objType||!e.objType.name)throw new Error("invalid object name for collection");return e.objType.name}();function n(e){if(!e.objType||!e.objType.name||e.objType.name!==a)throw new Error("invalid object name for add function");o.push(e)}function r(){let e=-1;return Object.freeze({get value(){return e=e?null:o[e-1]},get next(){return e=o.length},get first(){return 0===e},get last(){return e>=o.length-1},get index(){return e}})}function i(e){return o.findIndex(t=>t.objId===e)}function s(e,t,a){let n=i(e);if(-1===n)throw new Error("invalid objId for next or previous function");if(1!==a&&-1!==a)throw new Error("invalid direction");let r=t;for(r||(r=()=>!0),n+=a;-1{a=t(),a.jsonObject=e,n(a)})}}}let T=new Map;const N=new class{constructor(){Object.freeze(this)}setTranslations(e){e.forEach(e=>T.set(e.msgid,p.sanitizeToJsString(e.msgstr)))}getText(e,t){let o=T.get(e);return t&&o&&Object.getOwnPropertyNames(t).forEach(e=>o=o.replace("{"+e+"}",t[e])),o||e}};const L=new class{constructor(){Object.freeze(this)}get UUID(){let e=new Uint16Array(8);const t=["","-","-","-","-","","",""];window.crypto.getRandomValues(e);let o="";for(let a=0;a<8;a++)o+=e[a].toString(16).padStart(4,"0")+t[a];return o}storageAvailable(e){try{let t=window[e],o="__storage_test__";return t.setItem(o,o),t.removeItem(o),!0}catch(e){return!1}}saveFile(e,t,o){try{let a=window.URL.createObjectURL(new File([t],e,{type:o||"text/plain"})),n=document.createElement("a");n.setAttribute("href",a),n.setAttribute("download",e),n.click(),window.URL.revokeObjectURL(a)}catch(e){e instanceof Error&&console.error(e)}}formatTime(e){let t=Math.floor(e);if(0===t)return"";let o=Math.floor(t/86400),a=Math.floor(t%86400/3600),n=Math.floor(t%3600/60),r=Math.floor(t%60);return 0=o?"0 km":Math.floor(o/e.metersInKm)+","+Math.floor(o%e.metersInKm/10).toFixed(0).padStart(2,"0").padEnd(3,"0")+" km"}formatLat(e){return e>0?e.toFixed(a.fixed)+" N":(-e).toFixed(a.fixed)+" S"}formatLng(e){return e>0?e.toFixed(a.fixed)+" E":(-e).toFixed(a.fixed)+" W"}formatLatLng(e){return 0===e[0]&&0===e[1]?"":this.formatLat(e[0])+" - "+this.formatLng(e[1])}},O=w("WayPoint"),x=new WeakMap;function I(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+O.name);O.validate(e.objType),O.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.address=e.name,e.name="";case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+O.name)}}(e);let t=Object.getOwnPropertyNames(e);return["address","name","lat","lng","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+O.name)}),e}class A{constructor(){this.name="",this.address="",this.lat=a.defaultValue,this.lng=a.defaultValue,x.set(this,b()),Object.seal(this)}get fullName(){let e=""===this.name?this.address:this.name+", "+this.address;return""===e&&(e=L.formatLatLng([this.lat,this.lng])),e}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objId(){return x.get(this)}get objType(){return O}get jsonObject(){return{name:this.name,address:this.address,lat:parseFloat(this.lat.toFixed(a.fixed)),lng:parseFloat(this.lng.toFixed(a.fixed)),objId:x.get(this),objType:O.jsonObject}}set jsonObject(e){let t=I(e);this.address=t.address||"",this.name=t.name||"",this.lat=t.lat||a.defaultValue,this.lng=t.lng||a.defaultValue,x.set(this,b()),this.validateData()}validateData(){"string"==typeof this.address?this.address=p.sanitizeToJsString(this.address):this.address="","string"==typeof this.name?this.name=p.sanitizeToJsString(this.name):this.name="","number"!=typeof this.lat&&(this.lat=a.defaultValue),"number"!=typeof this.lng&&(this.lng=a.defaultValue)}}function M(){return new A}const S=w("ItineraryPoint"),P=new WeakMap;function E(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+S.name);S.validate(e.objType),S.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.elev=o.defaultValue;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+S.name)}}(e);let t=Object.getOwnPropertyNames(e);return["lat","lng","distance","elev","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+S.name)}),e}class C{constructor(){this.lat=a.defaultValue,this.lng=a.defaultValue,this.distance=e.defaultValue,this.elev=o.defaultValue,P.set(this,b()),Object.seal(this)}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return S}get objId(){return P.get(this)}get jsonObject(){return{lat:parseFloat(this.lat.toFixed(a.fixed)),lng:parseFloat(this.lng.toFixed(a.fixed)),distance:parseFloat(this.distance.toFixed(e.fixed)),elev:parseFloat(this.elev.toFixed(o.fixed)),objId:P.get(this),objType:S.jsonObject}}set jsonObject(t){let n=E(t);this.lat=n.lat||a.defaultValue,this.lng=n.lng||a.defaultValue,this.distance=n.distance||e.defaultValue,this.elev=n.elev||o.defaultValue,P.set(this,b()),this.validateData()}validateData(){"number"!=typeof this.lat&&(this.lat=a.defaultValue),"number"!=typeof this.lng&&(this.lng=a.defaultValue),"number"!=typeof this.distance&&(this.distance=e.defaultValue),"number"!=typeof this.elev&&(this.elev=o.defaultValue)}}function z(){return new C}const D=w("Maneuver"),R=new WeakMap;function H(t){if(!Object.getOwnPropertyNames(t).includes("objType"))throw new Error("No objType for "+D.name);D.validate(t.objType),D.version!==t.objType.version&&function(t){switch(t.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":"kArriveDefault"===t.iconName&&(t.distance=e.defaultValue);case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":t.objType.version="2.2.0";break;default:throw new Error("invalid version for "+D.name)}}(t);let o=Object.getOwnPropertyNames(t);return["iconName","instruction","distance","duration","itineraryPointObjId","objId"].forEach(e=>{if(!o.includes(e))throw new Error("No "+e+" for "+D.name)}),t}class V{constructor(){this.iconName="",this.instruction="",this.itineraryPointObjId=-1,this.distance=e.defaultValue,this.duration=e.defaultValue,R.set(this,b()),Object.seal(this)}get objType(){return D}get objId(){return R.get(this)}get jsonObject(){return{iconName:this.iconName,instruction:this.instruction,distance:parseFloat(this.distance.toFixed(e.fixed)),duration:this.duration,itineraryPointObjId:this.itineraryPointObjId,objId:R.get(this),objType:D.jsonObject}}set jsonObject(t){let o=H(t);this.iconName=o.iconName||"",this.instruction=o.instruction||"",this.distance=o.distance||e.defaultValue,this.duration=o.duration||e.defaultValue,this.itineraryPointObjId=o.itineraryPointObjId||-1,R.set(this,b()),this.validateData()}validateData(){"string"==typeof this.iconName?this.iconName=p.sanitizeToJsString(this.iconName):this.iconName="","string"==typeof this.instruction?this.instruction=p.sanitizeToJsString(this.instruction):this.instruction="","number"!=typeof this.distance&&(this.distance=e.defaultValue),"number"!=typeof this.duration&&(this.duration=e.defaultValue),"number"!=typeof this.itineraryPointObjId&&(this.itineraryPointObjId=-1)}}function k(){return new V}const F=w("Itinerary"),U=new WeakMap;function B(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+F.name);F.validate(e.objType),F.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":e.hasProfile=!1,e.ascent=0,e.descent=0;case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+F.name)}}(e);let t=Object.getOwnPropertyNames(e);return["hasProfile","ascent","descent","itineraryPoints","maneuvers","provider","transitMode","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+F.name)}),e}class W{constructor(){this.hasProfile=!1,this.ascent=0,this.descent=0,this.provider="",this.transitMode="",this.itineraryPoints=j(z),this.maneuvers=j(k),U.set(this,b()),Object.seal(this)}get objType(){return F}get objId(){return U.get(this)}get jsonObject(){return{hasProfile:this.hasProfile,ascent:this.ascent,descent:this.descent,itineraryPoints:this.itineraryPoints.jsonObject,maneuvers:this.maneuvers.jsonObject,provider:this.provider,transitMode:this.transitMode,objId:U.get(this),objType:F.jsonObject}}set jsonObject(e){let t=B(e);this.hasProfile=t.hasProfile||!1,this.ascent=t.ascent||0,this.descent=t.descent||0,this.itineraryPoints.jsonObject=t.itineraryPoints||[],this.maneuvers.jsonObject=t.maneuvers||[],this.provider=t.provider||"",this.transitMode=t.transitMode||"",U.set(this,b());let o=new Map,a=0,n=this.itineraryPoints.iterator;for(;!n.done;)o.set(t.itineraryPoints[a].objId,n.value.objId),a++;let r=this.maneuvers.iterator;for(;!r.done;)r.value.itineraryPointObjId=o.get(r.value.itineraryPointObjId);this.validateData()}validateData(){"boolean"!=typeof this.hasProfile&&(this.hasProfile=!1),"number"!=typeof this.ascent&&(this.ascent=0),"number"!=typeof this.descent&&(this.descent=0),"string"==typeof this.provider?this.provider=p.sanitizeToJsString(this.provider):this.provider="","string"==typeof this.transitMode?this.transitMode=p.sanitizeToJsString(this.transitMode):this.transitMode=""}}function _(){return new W}const Z=w("Note"),K=new WeakMap;function G(e){return e.replaceAll(/style='color:white;background-color:red'/g,"class='TravelNotes-Note-WhiteRed'").replaceAll(/style='color:white;background-color:green'/g,"class='TravelNotes-Note-WhiteGreen'").replaceAll(/style='color:white;background-color:blue'/g,"class='TravelNotes-Note-WhiteBlue'").replaceAll(/style='color:white;background-color:brown'/g,"class='TravelNotes-Note-WhiteBrown'").replaceAll(/style='color:white;background-color:black'/g,"class='TravelNotes-Note-WhiteBlack'").replaceAll(/style='border:solid 0.1em'/g,"class='TravelNotes-Note-BlackWhite'").replaceAll(/style='background-color:white;'/g,"class='TravelNotes-Note-Knooppunt'").replaceAll(/style='fill:green;font:bold 120px sans-serif;'/g,"").replaceAll(/style='fill:none;stroke:green;stroke-width:10;'/g,"")}function J(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+Z.name);Z.validate(e.objType),Z.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":"string"==typeof e.iconHeight&&(e.iconHeight=Number.parseInt(e.iconHeight)),"string"==typeof e.iconWidth&&(e.iconWidth=Number.parseInt(e.iconWidth)),e.iconContent=G(e.iconContent),e.popupContent=G(e.popupContent),e.tooltipContent=G(e.tooltipContent),e.phone=G(e.phone),e.address=G(e.address);case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+Z.name)}}(e);let t=Object.getOwnPropertyNames(e);return["iconHeight","iconWidth","iconContent","popupContent","tooltipContent","phone","url","address","iconLat","iconLng","lat","lng","distance","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+Z.name)}),e}class q{constructor(){this.iconHeight=0,this.iconWidth=0,this.iconContent="",this.popupContent="",this.tooltipContent="",this.phone="",this.url="",this.address="",this.iconLat=a.defaultValue,this.iconLng=a.defaultValue,this.lat=a.defaultValue,this.lng=a.defaultValue,this.distance=e.invalid,this.chainedDistance=e.defaultValue,K.set(this,b()),Object.seal(this)}get isRouteNote(){return this.distance!==e.invalid}get iconLatLng(){return[this.iconLat,this.iconLng]}set iconLatLng(e){this.iconLat=e[0],this.iconLng=e[1]}get latLng(){return[this.lat,this.lng]}set latLng(e){this.lat=e[0],this.lng=e[1]}get objType(){return Z}get objId(){return K.get(this)}get jsonObject(){return{iconHeight:this.iconHeight,iconWidth:this.iconWidth,iconContent:this.iconContent,popupContent:this.popupContent,tooltipContent:this.tooltipContent,phone:this.phone,url:this.url,address:this.address,iconLat:parseFloat(this.iconLat.toFixed(a.fixed)),iconLng:parseFloat(this.iconLng.toFixed(a.fixed)),lat:parseFloat(this.lat.toFixed(a.fixed)),lng:parseFloat(this.lng.toFixed(a.fixed)),distance:parseFloat(this.distance.toFixed(e.fixed)),chainedDistance:parseFloat(this.chainedDistance.toFixed(e.fixed)),objId:K.get(this),objType:Z.jsonObject}}set jsonObject(t){let o=J(t);this.iconHeight=o.iconHeight||0,this.iconWidth=o.iconWidth||0,this.iconContent=o.iconContent||"",this.popupContent=o.popupContent||"",this.tooltipContent=o.tooltipContent||"",this.phone=o.phone||"",this.url=o.url||"",this.address=o.address||"",this.iconLat=o.iconLat||a.defaultValue,this.iconLng=o.iconLng||a.defaultValue,this.lat=o.lat||a.defaultValue,this.lng=o.lng||a.defaultValue,this.distance=o.distance||e.invalid,this.chainedDistance=o.chainedDistance||e.defaultValue,K.set(this,b()),this.validateData(!0)}validateData(t){if("number"!=typeof this.iconHeight&&(this.iconHeight=0),"number"!=typeof this.iconWidth&&(this.iconWidth=0),"string"==typeof this.iconContent){let e=p.sanitizeToHtmlString(this.iconContent);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.iconContent+")"),this.iconContent=e.htmlString}else this.iconContent="";if("string"==typeof this.popupContent){let e=p.sanitizeToHtmlString(this.popupContent);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.popupContent+")"),this.popupContent=e.htmlString}else this.popupContent="";if("string"==typeof this.tooltipContent){let e=p.sanitizeToHtmlString(this.tooltipContent);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.tooltipContent+")"),this.tooltipContent=e.htmlString}else this.tooltipContent="";if("string"==typeof this.phone){let e=p.sanitizeToHtmlString(this.phone);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.phone+")"),this.phone=e.htmlString}else this.phone="";if("string"==typeof this.url&&""!==this.url){let e=p.sanitizeToUrl(this.url);t&&""!==e.errorsString&&console.log(e.errorsString+" ("+this.url+")"),this.url=encodeURI(e.url)}else this.url="";"string"==typeof this.address?this.address=p.sanitizeToHtmlString(this.address).htmlString:this.address="","number"!=typeof this.iconLat&&(this.iconLat=a.defaultValue),"number"!=typeof this.iconLng&&(this.iconLng=a.defaultValue),"number"!=typeof this.lat&&(this.lat=a.defaultValue),"number"!=typeof this.lng&&(this.lng=a.defaultValue),"number"!=typeof this.distance&&(this.distance=e.invalid),"number"!=typeof this.chainedDistance&&(this.chainedDistance=e.defaultValue)}}function X(){return new q}const $=w("Route"),Q=new WeakMap;function Y(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+$.name);$.validate(e.objType),$.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":e.dashArray=0,e.hidden=!1;case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.edited=n.notEdited;case"1.5.0":case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":e.editionStatus=e.edited;case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+$.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","wayPoints","notes","itinerary","width","color","dashArray","chain","distance","duration","editionStatus","hidden","chainedDistance","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+$.name)}),e}class ee{constructor(){this.name="",this.wayPoints=j(M),this.wayPoints.add(M()),this.wayPoints.add(M()),this.notes=j(X),this.itinerary=_(),this.width=f.route.width,this.color=f.route.color,this.dashArray=f.route.dashArray,this.chain=!0,this.chainedDistance=e.defaultValue,this.distance=e.defaultValue,this.duration=e.defaultValue,this.editionStatus=n.notEdited,this.hidden=!1,Q.set(this,b()),Object.seal(this)}get computedName(){let e=this.name;return""===e&&(e=(""===this.wayPoints.first.fullName?"???":this.wayPoints.first.fullName)+" ⮞ "+(""===this.wayPoints.last.fullName?"???":this.wayPoints.last.fullName)),e}get objId(){return Q.get(this)}get objType(){return $}get jsonObject(){return{name:this.name,wayPoints:this.wayPoints.jsonObject,notes:this.notes.jsonObject,itinerary:this.itinerary.jsonObject,width:this.width,color:this.color,dashArray:this.dashArray,chain:this.chain,distance:parseFloat(this.distance.toFixed(e.fixed)),duration:this.duration,editionStatus:this.editionStatus,hidden:this.hidden,chainedDistance:parseFloat(this.chainedDistance.toFixed(e.fixed)),objId:Q.get(this),objType:$.jsonObject}}set jsonObject(e){let t=Y(e);this.name=t.name||"",this.wayPoints.jsonObject=t.wayPoints||[],this.notes.jsonObject=t.notes||[],this.itinerary.jsonObject=t.itinerary||_().jsonObject,this.width=t.width||f.route.width,this.color=t.color||"#000000",this.dashArray=t.dashArray||0,this.chain=t.chain||!1,this.distance=t.distance,this.duration=t.duration,this.editionStatus=t.editionStatus||n.notEdited,this.hidden=t.hidden||!1,this.chainedDistance=t.chainedDistance,Q.set(this,b()),this.validateData()}validateData(){"string"==typeof this.name?this.name=p.sanitizeToJsString(this.name):this.name="","number"!=typeof this.width&&(this.width=f.route.width),"string"==typeof this.color?this.color=p.sanitizeToColor(this.color)||f.route.color:this.color=f.route.color,"number"!=typeof this.dashArray&&(this.dashArray=0),this.dashArray>=f.route.dashChoices.length&&(this.dashArray=0),"boolean"!=typeof this.chain&&(this.chain=!1),"number"!=typeof this.distance&&(this.distance=e.defaultValue),"number"!=typeof this.duration&&(this.duration=e.defaultValue),"number"!=typeof this.editionStatus&&(this.editionStatus=n.notEdited),"boolean"!=typeof this.hidden&&(this.hidden=!1),"number"!=typeof this.chainedDistance&&(this.chainedDistance=e.defaultValue)}}function te(){return new ee}const oe=w("Travel"),ae=new WeakMap;function ne(e){if(!Object.getOwnPropertyNames(e).includes("objType"))throw new Error("No objType for "+oe.name);oe.validate(e.objType),oe.version!==e.objType.version&&function(e){switch(e.objType.version){case"1.0.0":case"1.1.0":case"1.2.0":case"1.3.0":case"1.4.0":e.editedRoute=te();case"1.5.0":if(e.userData.layerId){let t=[{layerId:"0",layerName:"OSM - Color"},{layerId:"1",layerName:"OSM - Black and White"},{layerId:"2",layerName:"Thunderforest - Transport"},{layerId:"3",layerName:"Thunderforest - OpenCycleMap"},{layerId:"4",layerName:"Thunderforest - Outdoors"},{layerId:"5",layerName:"Esri - Aerial view"},{layerId:"6",layerName:"Kartverket - Norway"},{layerId:"7",layerName:"IGN-NGI - Belgium now"},{layerId:"12",layerName:"Thunderforest - Landscape"},{layerId:"24",layerName:"Lantmäteriet - Sweden"},{layerId:"25",layerName:"Maanmittauslaitos - Finland"}].find(t=>t.layerId===e.userData.layerId);e.layerName=t?t.layerName:"OSM - Color"}else e.layerName="OSM - Color";case"1.6.0":case"1.7.0":case"1.7.1":case"1.8.0":case"1.9.0":case"1.10.0":case"1.11.0":case"1.12.0":case"1.13.0":case"2.0.0":case"2.1.0":e.objType.version="2.2.0";break;default:throw new Error("invalid version for "+oe.name)}}(e);let t=Object.getOwnPropertyNames(e);return["name","editedRoute","routes","objId"].forEach(e=>{if(!t.includes(e))throw new Error("No "+e+" for "+oe.name)}),e}class re{constructor(){this.editedRoute=te(),this.routes=j(te),this.notes=j(X),this.layerName="OSM - Color",this.name="",this.readOnly=!1,ae.set(this,b()),Object.seal(this)}get objId(){return ae.get(this)}get objType(){return oe}get jsonObject(){return{editedRoute:this.editedRoute.jsonObject,layerName:this.layerName,name:this.name,routes:this.routes.jsonObject,notes:this.notes.jsonObject,readOnly:this.readOnly,objId:ae.get(this),objType:oe.jsonObject}}set jsonObject(e){let t=ne(e);this.editedRoute.jsonObject=t.editedRoute,this.layerName=e.layerName||"OSM - Color",this.name=t.name||"",this.readOnly=t.readOnly||!1,this.routes.jsonObject=t.routes||[],this.notes.jsonObject=t.notes||[],ae.set(this,b()),this.validateData()}validateData(){"string"==typeof this.layerName?this.layerName=p.sanitizeToJsString(this.layerName):this.layerName="OSM - Color","string"==typeof this.name?this.name=p.sanitizeToJsString(this.name):this.name="TravelNotes","boolean"!=typeof this.readOnly&&(this.readOnly=!0)}}function ie(){return new re}let se=new Map,le=new Map,ce=Object.seal({provider:"",transitMode:""}),de=L.UUID;const ue=new class{constructor(){this.map=null,this.travel=ie(),this.editedRouteObjId=-1,this.searchData=[],Object.seal(this)}get providers(){return se}get mapObjects(){return le}get routing(){return ce}get UUID(){return de}};const he=new class{constructor(){Object.freeze(this)}getRoute(e){let t=null;return t=ue.travel.routes.getAt(e),t||e===ue.travel.editedRoute.objId&&(t=ue.travel.editedRoute),t}getNoteAndRoute(e){let t=null,o=null;if(t=ue.travel.notes.getAt(e),!t){let a=ue.travel.routes.iterator;for(;!a.done&&!t;)t=a.value.notes.getAt(e),t&&(o=a.value);t||(t=ue.travel.editedRoute.notes.getAt(e),t&&(o=ue.travel.editedRoute))}return Object.freeze({note:t,route:o})}getWayPoint(e){let t=ue.travel.editedRoute.wayPoints.getAt(e);if(!t){let o=ue.travel.routes.iterator;for(;!o.done&&!t;)t=o.value.wayPoints.getAt(e)}return t}};const ge=new class{constructor(){Object.freeze(this)}getLatLngElevAtDist(e,t){if(e.distance<=t||0>=t)return null;let o=0,a=e.itinerary.itineraryPoints.iterator;for(;o{t.lat=Math.min(t.lat,e[0]),t.lng=Math.min(t.lng,e[1]),o.lat=Math.max(o.lat,e[0]),o.lng=Math.max(o.lng,e[1])}),window.L.latLngBounds(t,o)}getSquareBoundingBox(e,t){let o=t/6371e3*s.fromRadians,a=e[0]*s.toRadians,n=Math.acos((Math.cos(t/6371e3)-Math.sin(a)**2)/Math.cos(a)**2)*s.fromRadians;return window.L.latLngBounds(window.L.latLng([e[0]-o,e[1]-n]),window.L.latLng([e[0]+o,e[1]+n]))}project(e,t){let o=ue.map.project(window.L.latLng(e),t);return[o.x,o.y]}screenCoordToLatLng(e,t){let o=ue.map.containerPointToLatLng(window.L.point(e,t));return[o.lat,o.lng]}addPoints(e,t){return[e[0]+t[0],e[1]+t[1]]}subtrackPoints(e,t){return[e[0]-t[0],e[1]-t[1]]}},pe=r.margin.toFixed(0),me=(r.margin+r.height).toFixed(0),fe=(r.margin+r.width).toFixed(0),ve=r.margin.toFixed(0),ye=(r.margin+r.width+r.xDeltaText).toFixed(0),be=(r.margin-r.xDeltaText).toFixed(0),we=r.margin+r.height+r.margin/2;function je(){let t=null,o=1,a=1,n=Number.MAX_VALUE,i=0,s=0,c=null,d=0,u=f.route.elev.smoothCoefficient,h=f.route.elev.smoothPoints;function g(){let e=function(){let e=0,t=0,o=[],a=c.itinerary.itineraryPoints.iterator,n=0,r=a.done;for(o.push({distance:e,elev:a.value.elev}),n+=a.value.distance,r=a.done;!r;){for(e+=d;e>=n&&!r;)n+=a.value.distance,r=a.done;if(!r){let r=(a.value.elev-a.previous.elev)/a.previous.distance;t=a.value.elev-(n-e)*r,o.push({distance:e,elev:t})}}return o.push({distance:n,elev:c.itinerary.itineraryPoints.last.elev}),o}(),t=new Map,o=(e[h].elev-e[0].elev)/h,a=0;for(a=0;a=t;t++)o+=e[t].elev;t.set(e[a].distance,{distance:e[a].distance,elev:o/(2*h+1)})}return a--,o=d*(e[e.length-1].elev-e[e.length-1-h].elev)/(e[e.length-1].distance-e[e.length-1-h].distance),t.set(e[a].distance+d,{distance:e[a].distance+d,elev:e[a].elev+o}),t.set(e[a].distance+2*d,{distance:e[a].distance+2*d,elev:e[a].elev+2*o}),t}function p(d){return c=d,n=Number.MAX_VALUE,i=0,c.itinerary.itineraryPoints.forEach(e=>{i=Math.max(i,e.elev),n=Math.min(n,e.elev)}),s=i-n,o=r.height/s,a=r.width/c.distance,t=document.createElementNS(l,"svg"),t.setAttributeNS(null,"viewBox","0 0 "+(r.width+2*r.margin)+" "+(r.height+2*r.margin)),t.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile"),function(){let e="",n=0,s=0,d=0;c.itinerary.itineraryPoints.forEach(t=>{s=(r.margin+a*n).toFixed(0),d=(r.margin+o*(i-t.elev)).toFixed(0),e+=s+","+d+" ",n+=t.distance});let u=document.createElementNS(l,"polyline");u.setAttributeNS(null,"points",e),u.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-profilePolyline"),t.appendChild(u)}(),function(){let e=pe+","+ve+" "+pe+","+me+" "+fe+","+me+" "+fe+","+ve,o=document.createElementNS(l,"polyline");o.setAttributeNS(null,"points",e),o.setAttributeNS(null,"class","TravelNotes-Route-SvgProfile-framePolyline"),t.appendChild(o)}(),function(){let e=Number.MAX_VALUE,a=0;r.vScales.forEach(t=>{let o=Math.abs(s/4-t);o{let t=Math.abs(c.distance/8-e);t"+N.getText("HTMLViewsFactory - Address")+" : "+o.address,v.create("div",{className:e+"NoteHtml-Address"},a)),0!==o.url.length&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Link")+"'+o.url.substr(0,40)+"...",v.create("div",{className:e+"NoteHtml-Url"},a)),0!==o.phone.length){let t=o.phone;if(o.phone.match(/^\+[0-9, ,*,#]*$/)){let e=o.phone.replaceAll(/\u0020/g,""),a=o.phone.replaceAll(/\u0020/g," ");t=N.getText("HTMLViewsFactory - Phone")+" : "+N.getText("HTMLViewsFactory - call")+''+a+""+N.getText("HTMLViewsFactory - Send a sms to")+''+a+""}else t=N.getText("HTMLViewsFactory - Phone")+" : "+o.phone;p.sanitizeToHtmlElement(t,v.create("div",{className:e+"NoteHtml-Phone"},a))}if(p.sanitizeToHtmlElement(L.formatLatLng(o.latLng),v.create("div",{className:e+"NoteHtml-LatLng"},a)),t.route){t.route.chain&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of travel")+" : "+L.formatDistance(o.chainedDistance+o.distance),v.create("div",{className:e+"NoteHtml-Distance"},a)),p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of route")+" : "+L.formatDistance(o.distance),v.create("div",{className:e+"NoteHtml-Distance"},a));let n=t.route.notes.next(o.objId);if(n){let t=n.distance-o.distance;9"+N.getText("HTMLViewsFactory - Next note after")+" : "+L.formatDistance(t),v.create("div",{className:e+"NoteHtml-NextDistance"},a))}}return a}function Ne(e,t){let o=v.create("div"),a=v.create("div",{className:e+(t.route?"Route-ManeuversAndNotes-IconCell":"Travel-Notes-IconCell")},o),n=1;p.sanitizeToHtmlElement(t.note.iconContent,a),"TravelNotes-Roadbook-"===e&&a.firstChild?("svg"===a.firstChild.tagName?(a.firstChild.setAttributeNS(null,"viewBox","0 0 "+i.svgViewboxDim+" "+i.svgViewboxDim),n=f.note.svgIcon.roadbookFactor):a.firstChild.classList.contains("TravelNotes-MapNoteCategory-0073")&&(n=f.note.svgIcon.roadbookFactor),a.setAttribute("tanwidth",String(t.note.iconWidth*n)+"px"),a.setAttribute("tanheight",String(t.note.iconWidth*n)+"px")):(a.style.width=String(t.note.iconWidth)+"px",a.style.height=String(t.note.iconHeight)+"px");let r=Te(e,t);return r.className=e+(t.route?"Route-ManeuversAndNotes-Cell":"Travel-Notes-Cell"),o.appendChild(r),o.noteObjId=t.note.objId,o}function Le(e){let t=v.create("div",{className:e+"Travel-Notes"}),o=ue.travel.notes.iterator;for(;!o.done;){let a=Ne(e,{note:o.value,route:null});a.className=e+"Travel-Notes-Row",t.appendChild(a)}return t}function Oe(e,t){let o=v.create("div",{className:e+"Route-Header",id:"route"+t.objId});return p.sanitizeToHtmlElement(t.computedName,v.create("div",{className:e+"Route-Header-Name"},o)),0!==t.distance&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Route distance")+" : "+L.formatDistance(t.distance),v.create("div",{className:e+"Route-Header-Distance"},o)),ue.travel.readOnly||"bike"===t.itinerary.transitMode||p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Duration")+" : "+L.formatTime(t.duration),v.create("div",{className:e+"Route-Header-Duration"},o)),t.itinerary.hasProfile&&(p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Ascent")+" : "+String(t.itinerary.ascent.toFixed(0))+" m.",v.create("div",{className:e+"Route-Header-Ascent"},o)),p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Descent")+" : "+String(t.itinerary.descent.toFixed(0))+" m.",v.create("div",{className:e+"Route-Header-Descent"},o))),o}function xe(t,o){let a=v.create("div");v.create("div",{className:t+"Route-ManeuversAndNotes-IconCell TravelNotes-ManeuverNote-"+o.maneuver.iconName},a);let n=v.create("div",{className:t+"Route-ManeuversAndNotes-Cell"},a);return p.sanitizeToHtmlElement(o.maneuver.instruction,v.create("div",null,n)),o.route.chain&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of travel")+" : "+L.formatDistance(o.route.chainedDistance+o.maneuverDistance),v.create("div",{className:t+"Route-Maneuver-Distance"},n)),p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Distance from start of route")+" : "+L.formatDistance(o.maneuverDistance),v.create("div",{className:t+"Route-Maneuver-Distance"},n)),e.defaultValue"+N.getText("HTMLViewsFactory - Next maneuver after")+" : "+L.formatDistance(o.maneuver.distance),v.create("div",{className:t+"Route-Maneuver-Distance"},n)),a}function Ie(e,t){let o=[],a=t.notes.iterator;for(;!a.done;){let n=Ne(e,{note:a.value,route:t});n.className=e+"Route-Notes-Row",n.objId=b(),n.latLng=a.value.latLng,n.noteObjId=a.value.objId,n.distance=a.value.distance,o.push(n)}let n=t.itinerary.maneuvers.iterator,r=0;for(;!n.done;){let a=xe(e,{route:t,maneuver:n.value,maneuverDistance:r});a.className=e+"Route-Maneuvers-Row",a.objId=b(),a.latLng=t.itinerary.itineraryPoints.getAt(n.value.itineraryPointObjId).latLng,a.maneuverObjId=n.value.objId,a.distance=r,o.push(a),r+=n.value.distance}o.sort((e,t)=>e.distance-t.distance);let i=v.create("div",{className:e+"Route-ManeuversAndNotes"});return o.forEach(e=>i.appendChild(e)),i}function Ae(e,t){let o="";""!==t.itinerary.provider&&""!==t.itinerary.transitMode&&(o=N.getText("HTMLViewsFactory - Itinerary computed by {provider} and optimized for {transitMode}",{provider:t.itinerary.provider,transitMode:N.getText("HTMLViewsFactory - TransitMode "+t.itinerary.transitMode)}));let a=v.create("div",{className:e+"RouteFooter"});return p.sanitizeToHtmlElement(o,a),a}function Me(e,t){let o=v.create("div",{className:e+"RouteProfile"});return p.sanitizeToHtmlElement(N.getText("HTMLViewsFactory - Profile"),o),o.appendChild(je().createSvg(t)),o}function Se(t){let o=v.create("div",{className:t+"Travel"});o.appendChild(function(t){let o=v.create("div",{className:t+"Travel-Header"});p.sanitizeToHtmlElement(ue.travel.name,v.create("div",{className:t+"Travel-Header-Name"},o));let a=e.defaultValue,n=0,r=0,i=ue.travel.routes.iterator;for(;!i.done;){let e=i.value.objId===ue.editedRouteObjId&&f.routeEditor.showEditedRouteInRoadbook?ue.travel.editedRoute:i.value;p.sanitizeToHtmlElement(''+e.computedName+" : "+L.formatDistance(e.distance)+".",v.create("div",{className:t+"Travel-Header-RouteName"},o)),e.chain&&(a+=e.distance,n+=e.itinerary.ascent,r+=e.itinerary.descent)}return p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Travel distance")+" : "+L.formatDistance(a),v.create("div",{className:t+"Travel-Header-TravelDistance"},o)),0!==n&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Travel ascent")+" : "+String(n.toFixed(0))+" m.",v.create("div",{className:t+"Travel-Header-TravelAscent"},o)),0!==r&&p.sanitizeToHtmlElement(""+N.getText("HTMLViewsFactory - Travel descent")+" : "+String(r.toFixed(0))+" m.",v.create("div",{className:t+"Travel-Header-TravelDescent"},o)),o}(t)),o.appendChild(Le(t));let a=ue.travel.routes.iterator;for(;!a.done;){let e=f.routeEditor.showEditedRouteInRoadbook&&a.value.objId===ue.editedRouteObjId?ue.travel.editedRoute:a.value;o.appendChild(Oe(t,e)),e.itinerary.hasProfile&&o.appendChild(Me(t,e)),o.appendChild(Ie(t,e)),o.appendChild(Ae(t,e))}return o.appendChild(function(e){let t=N.getText("HTMLViewsFactory - Travel footer")+'Travel & Notes, © wwwouaiebe 2017 2021 © '+N.getText("HTMLViewsFactory - OpenStreetMap contributors")+"",o=v.create("div",{className:e+"TravelFooter"});return p.sanitizeToHtmlElement(t,o),o}(t)),o}const Pe=new class{constructor(){Object.freeze(this)}getTravelHTML(e){return Se(e)}getNoteTextAndIconHTML(e,t){return Ne(e,t)}getNoteTextHTML(e,t){return Te(e,t)}getEditedRouteManeuversAndNotesHTML(e){return Ie(e,ue.travel.editedRoute)}getTravelNotesHTML(e){return Le(e)}getRouteHeaderHTML(e,t){return Oe(e,t)}};let Ee=null,Ce=null;function ze(e){let t=he.getRoute(e.target.objId),o=ge.getClosestLatLngDistance(t,[e.latlng.lat,e.latlng.lng]).distance;o+=t.chainedDistance,o=L.formatDistance(o);let a=ue.mapObjects.get(e.target.objId);a.closeTooltip();let n=t.computedName;ue.travel.readOnly||(n+=0===n.length?"":" - ",n+=o),a.setTooltipContent(n),a.openTooltip(e.latlng)}function De(e,t){t.objId=e,t.addTo(ue.map),ue.mapObjects.set(e,t)}function Re(e){let t=he.getNoteAndRoute(e).note,o=window.L.marker(t.latLng,{icon:window.L.divIcon({iconSize:[f.note.grip.size,f.note.grip.size],iconAnchor:[f.note.grip.size/2,f.note.grip.size/2],html:"
",className:"TravelNotes-Map-Note-Bullet"}),opacity:f.note.grip.opacity,draggable:!ue.travel.readOnly});o.objId=t.objId;let a=window.L.divIcon({iconSize:[t.iconWidth,t.iconHeight],iconAnchor:[t.iconWidth/2,t.iconHeight/2],popupAnchor:[0,-t.iconHeight/2],html:t.iconContent,className:"TravelNotes-Map-AllNotes "}),n=window.L.marker(t.iconLatLng,{zIndexOffset:100,icon:a,draggable:!ue.travel.readOnly});n.objId=t.objId,n.bindPopup(e=>Pe.getNoteTextHTML("TravelNotes-Map-",he.getNoteAndRoute(e.objId))),0!==t.tooltipContent.length&&(n.bindTooltip(e=>he.getNoteAndRoute(e.objId).note.tooltipContent),n.getTooltip().options.offset[0]=t.iconWidth/2);let r=window.L.polyline([t.latLng,t.iconLatLng],f.note.polyline);r.objId=t.objId;let i=window.L.layerGroup([n,r,o]);return i.markerId=window.L.Util.stamp(n),i.polylineId=window.L.Util.stamp(r),i.bulletId=window.L.Util.stamp(o),De(t.objId,i),f.note.haveBackground&&document.querySelectorAll(".TravelNotes-MapNote,.TravelNotes-SvgIcon").forEach(e=>e.classList.add("TravelNotes-Map-Note-Background")),Object.freeze({marker:n,polyline:r,bullet:o})}function He(e){e.dashArray>=f.route.dashChoices.length&&(e.dashArray=0);let t=f.route.dashChoices[e.dashArray].iDashArray;if(t){let o="",a=0;for(a=0;a{let t=he.getRoute(e.objId);return Pe.getRouteHeaderHTML("TravelNotes-Map-",t)}),window.L.DomEvent.on(r,"click",e=>e.target.openPopup(e.latlng));let i=t.notes.iterator;for(;!i.done;)Re(i.value.objId);return t}addNote(e){return Re(e)}getDashArray(e){return He(e)}zoomTo(e,t){if(t){let e=[];t.forEach(t=>e=e.concat(t)),ue.map.fitBounds(ge.getLatLngBounds(e))}else ue.map.setView(e,f.itineraryPoint.zoomFactor)}setLayer(e,t){let o=null;o="wmts"===e.service.toLowerCase()?window.L.tileLayer(t):window.L.tileLayer.wms(t,e.wmsOptions),Ee&&ue.map.removeLayer(Ee),ue.map.addLayer(o),Ee=o,ue.travel.readOnly||(ue.map.getZoom()<(e.minZoom||0)&&ue.map.setZoom(e.minZoom||0),ue.map.setMinZoom(e.minZoom||0),ue.map.getZoom()>(e.maxZoom||18)&&ue.map.setZoom(e.maxZoom||18),ue.map.setMaxZoom(e.maxZoom||18),e.bounds?(ue.map.getBounds().intersects(e.bounds)&&!ue.map.getBounds().contains(e.bounds)||(ue.map.setMaxBounds(null),ue.map.fitBounds(e.bounds),ue.map.setZoom(e.minZoom||0)),ue.map.setMaxBounds(e.bounds)):ue.map.setMaxBounds(null)),ue.map.fire("baselayerchange",o)}onGeolocationStatusChanged(e){t.active!==e&&Ce&&(ue.map.removeLayer(Ce),Ce=null)}onGeolocationPositionChanged(e){let t=f.geoLocation.zoomToPosition;Ce&&(ue.map.removeLayer(Ce),t=!1),Ce=window.L.circleMarker(window.L.latLng(e.coords.latitude,e.coords.longitude),f.geoLocation.marker).bindTooltip(L.formatLatLng([e.coords.latitude,e.coords.longitude])).addTo(ue.map),t&&ue.map.setView(window.L.latLng(e.coords.latitude,e.coords.longitude),f.geoLocation.zoomFactor)}};const ke=new class{constructor(){Object.freeze(this)}dispatch(e,t){let o=function(e){return-1<["showitinerary","updateitinerary","showtravelnotes","updatetravelnotes","showsearch","updatesearch","setrouteslist","setprovider","providersadded","travelnameupdated","settransitmode"].indexOf(e)?document.getElementById("TravelNotes-UI-MainDiv"):-1<["removeobject","removeallobjects","zoomto","additinerarypointmarker","addsearchpointmarker","addrectangle","addwaypoint","layerchange","geolocationstatuschanged","geolocationpositionchanged","routeupdated","routepropertiesupdated","noteupdated","roadbookupdate","profileclosed"].indexOf(e)?document:null}(e);if(o){let a=new Event(e);t&&(a.data=t),o.dispatchEvent(a)}}};function Fe(e){return Math.floor(Math.abs(e)+.5)*(0<=e?1:-1)}const Ue=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=Fe(e*o),n=Fe(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 s(){let t=null,o=0,n=0;do{t=e.charCodeAt(a++)-63,n|=(31&t)<>1):n>>1}for(;ae.push(t.latLng)),o.notes.forEach(e=>t(e))}return new class{constructor(){Object.freeze(this)}zoomToLatLng(e){ke.dispatch("zoomto",{latLng:e})}zoomToManeuver(e){let t=ue.travel.editedRoute.itinerary.maneuvers.getAt(e).itineraryPointObjId,o=ue.travel.editedRoute.itinerary.itineraryPoints.getAt(t).latLng;ke.dispatch("zoomto",{latLng:o})}zoomToNote(o){e=[],t(he.getNoteAndRoute(o).note),ke.dispatch("zoomto",{geometry:[e]})}zoomToRoute(t){e=[],o(he.getRoute(t)),ke.dispatch("zoomto",{geometry:[e]})}zoomToTravel(){e=[],ue.travel.routes.forEach(e=>o(e)),-1!==ue.travel.editedRouteObjId&&o(ue.travel.editedRoute),ue.travel.notes.forEach(e=>t(e)),ke.dispatch("zoomto",{geometry:[e]})}zoomToPoi(e){ke.dispatch("zoomto",e)}}}function We(){return new class{constructor(){Object.freeze(this)}openDistantFile(t){(function(){function t(e){let t={};0!==e.itinerary.itineraryPoints.length&&(t=e.itinerary.itineraryPoints[0].objType);let o={values:"",objType:t},n=[];e.itinerary.itineraryPoints.forEach(e=>{n.push([e.lat,e.lng,e.distance,e.elev,e.objId])}),o.values=Ue.encode(n,[a.fixed,a.fixed,2,2,0]),e.itinerary.itineraryPoints=o}function r(t){let n=[];if(t.itinerary.itineraryPoints.values)Ue.decode(t.itinerary.itineraryPoints.values,[a.fixed,a.fixed,2,2,0]).forEach(r=>{let i={lat:a.defaultValue,lng:a.defaultValue,distance:e.defaultValue,elev:o.defaultValue,objId:-1};[i.lat,i.lng,i.distance,i.elev,i.objId]=r,i.objType=t.itinerary.itineraryPoints.objType,n.push(i)});else{t.itinerary.itineraryPoints.latLngs=Ue.decode(t.itinerary.itineraryPoints.latLngs,[a.fixed,a.fixed]);let e=0;t.itinerary.itineraryPoints.latLngs.forEach(a=>{let r={};r.lat=a[0],r.lng=a[1],r.distance=t.itinerary.itineraryPoints.distances[e],t.itinerary.itineraryPoints.elevs?r.elev=t.itinerary.itineraryPoints.elevs[e]:r.elev=o.defaultValue,r.objId=t.itinerary.itineraryPoints.objIds[e],r.objType=t.itinerary.itineraryPoints.objType,n.push(r),e++})}t.itinerary.itineraryPoints=n}function i(e){e.routes.forEach(r),e.editedRoute&&r(e.editedRoute)}return new class{constructor(){Object.freeze(this)}decompress(e){i(e),ue.travel.jsonObject=e,ue.editedRouteObjId=-1,ue.travel.routes.forEach(e=>{n.notEdited!==e.editionStatus&&(ue.editedRouteObjId=e.objId)})}decompressMerge(e){i(e);let t=ie();t.jsonObject=e;let o=t.routes.iterator;for(;!o.done;)ue.travel.routes.add(o.value);let a=t.notes.iterator;for(;!a.done;)ue.travel.notes.add(a.value)}compress(e){let o=e.jsonObject;return o.routes.forEach(t),t(o.editedRoute),o}}})().decompress(t),ue.travel.readOnly=!0,this.display()}display(){document.title="Travel & Notes"+(""===ue.travel.name?"":" - "+ue.travel.name);let e=ue.travel.routes.iterator;for(;!e.done;)n.notEdited===e.value.editionStatus&&ke.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:e.value.objId});-1!==ue.editedRouteObjId&&ke.dispatch("routeupdated",{removedRouteObjId:-1,addedRouteObjId:ue.travel.editedRoute.objId});let t=ue.travel.notes.iterator;for(;!t.done;)ke.dispatch("noteupdated",{removedNoteObjId:-1,addedNoteObjId:t.value.objId});Be().zoomToTravel()}}}const _e=new class{constructor(){Object.freeze(this)}createUI(){v.create("div",{id:"TravelNotes-AttributionsUI"},document.querySelector("body")),this.attributions=""}set attributions(e){let t='© Leaflet | © OpenStreetMap contributors '+e+'| © Travel & Notes',o=document.getElementById("TravelNotes-AttributionsUI");for(;o.firstChild;)o.removeChild(o.firstChild);p.sanitizeToHtmlElement(t,o)}};let Ze="geolocation"in navigator?t.inactive:t.disabled,Ke=null;function Ge(e){ke.dispatch("geolocationpositionchanged",{position:e})}function Je(){t.active===Ze&&(Ze=t.inactive),ke.dispatch("geolocationstatuschanged",{status:Ze}),navigator.geolocation.clearWatch(Ke),Ke=null}function qe(e){1===e.code&&(Ze=t.refusedByUser),Je()}const Xe=new class{constructor(){Object.freeze(this)}get status(){return Ze}switch(){switch(Ze){case t.inactive:Ze=t.active,ke.dispatch("geolocationstatuschanged",{status:Ze}),navigator.geolocation.getCurrentPosition(Ge,qe,f.geoLocation.options),Ke=navigator.geolocation.watchPosition(Ge,qe,f.geoLocation.options);break;case t.active:Je()}return Ze}};let $e=null,Qe=[{service:"wmts",url:"https://{s}.tile.osm.org/{z}/{x}/{y}.png",name:"OSM - Color",toolbar:{text:"OSM",color:"red",backgroundColor:"white"},providerName:"OSM",providerKeyNeeded:!1,attribution:""}];function Ye(e){e.stopPropagation(),ke.dispatch("layerchange",{layer:e.target.layer}),_e.attributions=e.target.layer.attribution}function et(e){e.stopPropagation(),Xe.switch()}function tt(e){e.stopPropagation(),Be().zoomToTravel()}function ot(e){v.create("div",{className:"TravelNotes-ViewerLayersToolbarUI-Button",title:e.name,layer:e,textContent:e.toolbar.text,style:"color:"+e.toolbar.color+";background-color:"+e.toolbar.backgroundColor},$e).addEventListener("click",Ye,!1)}const at=new class{constructor(){Object.freeze(this)}createUI(){$e=v.create("div",{id:"TravelNotes-ViewerLayersToolbarUI"},document.querySelector("body")),v.create("div",{className:"TravelNotes-ViewerLayersToolbarUI-Button",title:"My position",textContent:"🌐",style:"color:black;background-color:white"},$e).addEventListener("click",et,!1),v.create("div",{className:"TravelNotes-ViewerLayersToolbarUI-Button",title:"Zoom on the travel",textContent:"🔍",style:"color:black;background-color:white"},$e).addEventListener("click",tt,!1),Qe.forEach(ot)}setLayer(e){let t=e.match(/^[0-9]$/)?Qe[Number.parseInt(e)]||Qe[0]:Qe.find(t=>t.name===e)||Qe[0];ke.dispatch("layerchange",{layer:t}),_e.attributions=t.attribution}addLayers(e){e.forEach(e=>{e.providerKeyNeeded||Qe.push(e)})}};let nt=!1;function rt(e){if("Z"===e.key||"z"===e.key)Be().zoomToTravel();else if("G"===e.key||"g"===e.key)Xe.switch();else{let t=e.key.charCodeAt(0);47t&&at.setLayer(e.key)}}const it=new class{constructor(){Object.freeze(this)}addReadOnlyMap(e,t){nt||(nt=!0,document.addEventListener("keydown",rt,!0),document.addEventListener("routeupdated",e=>{e.data&&Ve.addRoute(e.data.addedRouteObjId)},!1),document.addEventListener("noteupdated",e=>{e.data&&Ve.addNote(e.data.addedNoteObjId)},!1),document.addEventListener("zoomto",e=>{e.data&&Ve.zoomTo(e.data.latLng,e.data.geometry)},!1),document.addEventListener("layerchange",e=>{e.data&&Ve.setLayer(e.data.layer,e.data.layer.url)}),document.addEventListener("geolocationpositionchanged",e=>{e.data&&Ve.onGeolocationPositionChanged(e.data.position)},!1),document.addEventListener("geolocationstatuschanged",e=>{e.data&&Ve.onGeolocationStatusChanged(e.data.status)},!1),_e.createUI(),t&&at.createUI(),at.setLayer("OSM - Color"),e&&async function(e){let t=await fetch(e);if(200===t.status&&t.ok){let e=await t.json();We().openDistantFile(e)}else ue.map.setView([a.defaultValue,a.defaultValue],2),document.title="Travel & Notes"}(e))}};!function(){let e=null,t=null,o=!1,n=window.location.href.substr(0,window.location.href.lastIndexOf("/")+1)+"TravelNotes";!async function(){!function(){let a=new URL(window.location),n=a.searchParams.get("fil");if(n&&0!==n.length)try{if(n=atob(n),n.match(/[^\w-%:./]/))throw new Error("invalid char in the url encoded in the fil parameter");let e=new URL(n);if(!(a.protocol&&e.protocol&&a.protocol===e.protocol&&a.hostname&&e.hostname&&a.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 r=a.searchParams.get("lng");r&&r.match(/^[A-Z,a-z]{2}$/)&&(e=r.toLowerCase()),""===a.searchParams.get("lay")&&(o=!0)}(),await async function(){let t=await fetch(n+"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.note.haveBackground=!0),f.overload(o),!0}return!1}()?(e=e||f.travelNotes.language,await async function(){let t=await fetch(n+e.toUpperCase()+".json");return!(200!==t.status||!t.ok)&&(N.setTranslations(await t.json()),!0)}()?await async function(){let e=await fetch(n+"Layers.json");return!(200!==e.status||!e.ok)&&(at.addLayers(await e.json()),!0)}()?function(){let e=v.create("div",{id:"TravelNotes-Map"},document.querySelector("body")),n=window.L.map("TravelNotes-Map",{attributionControl:!1,zoomControl:!1}).setView([a.defaultValue,a.defaultValue],2);ue.map=n,it.addReadOnlyMap(t,o),e.focus()}():document.body.textContent="Not possible to load the TravelNotesLayers.json file. ":document.body.textContent="Not possible to load the TravelNotesConfig"+e.toUpperCase()+".json file. "):document.body.textContent="Not possible to load the TravelNotesConfig.json file. "}()}()}(); \ No newline at end of file