X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/cf3c627c1ab7c64c219acc8ecff526f21db0c5e1..09d31dc6be38d0bbd7cb0531b2596d20bfa78dc4:/app/assets/javascripts/index/directions.js diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index 40ca85d96..89888bbd1 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -134,7 +134,7 @@ OSM.Directions = function (map) { // copy loading item to sidebar and display it. we copy it, rather than // just using it in-place and replacing it in case it has to be used // again. - $("#sidebar_content").html($(".directions_form .loader_copy").html()); + $("#directions_content").html($(".directions_form .loader_copy").html()); map.setSidebarOverlaid(false); controller = new AbortController(); chosenEngine.getRoute(points, controller.signal).then(function (route) { @@ -158,16 +158,10 @@ OSM.Directions = function (map) { const turnByTurnTable = $("") .append($("")); - const directionsCloseButton = $(""); - row.append(" "); + if (direction) { + row.append(""); + } else { + row.append("
"); + } row.append("" + instruction); row.append("" + getDistText(dist)); @@ -203,27 +201,19 @@ OSM.Directions = function (map) { URL.revokeObjectURL(downloadURL); downloadURL = URL.createObjectURL(blob); - $("#sidebar_content").append(`

${ I18n.t("javascripts.directions.download") }

`); - $("#sidebar_content").append("

" + + $("#directions_content").append("

" + I18n.t("javascripts.directions.instructions.courtesy", { link: chosenEngine.creditline }) + "

"); - - directionsCloseButton.on("click", function () { - map.removeLayer(polyline); - $("#sidebar_content").html(""); - popup.close(); - map.setSidebarOverlaid(true); - // TODO: collapse width of sidebar back to previous - }); }).catch(function () { map.removeLayer(polyline); if (reportErrors) { - $("#sidebar_content").html("
" + I18n.t("javascripts.directions.errors.no_route") + "
"); + $("#directions_content").html("
" + I18n.t("javascripts.directions.errors.no_route") + "
"); } }).finally(function () { controller = null; @@ -238,6 +228,15 @@ OSM.Directions = function (map) { } } + function hideRoute(e) { + e.stopPropagation(); + map.removeLayer(polyline); + $("#directions_content").html(""); + popup.close(); + map.setSidebarOverlaid(true); + // TODO: collapse width of sidebar back to previous + } + setEngine("fossgis_osrm_car"); setEngine(Cookies.get("_osm_directions_engine")); @@ -284,11 +283,18 @@ OSM.Directions = function (map) { map.once("startinglocation", startingLocationListener); }); - const page = {}; + function initializeFromParams() { + const params = new URLSearchParams(location.search), + route = (params.get("route") || "").split(";"); - page.pushstate = page.popstate = function () { - $(".search_form").hide(); - $(".directions_form").show(); + if (params.has("engine")) setEngine(params.get("engine")); + + endpoints[0].setValue(params.get("from") || route[0] || lastLocation.join(", ")); + endpoints[1].setValue(params.get("to") || route[1] || ""); + } + + function enableListeners() { + $("#sidebar_content").on("click", ".btn-close", hideRoute); $("#map").on("dragend dragover", function (e) { e.preventDefault(); @@ -308,32 +314,51 @@ OSM.Directions = function (map) { map.on("locationfound", sendstartinglocation); - endpoints[0].enable(); - endpoints[1].enable(); + endpoints[0].enableListeners(); + endpoints[1].enableListeners(); + } - const params = new URLSearchParams(location.search), - route = (params.get("route") || "").split(";"); + const page = {}; - if (params.has("engine")) setEngine(params.get("engine")); + page.pushstate = page.popstate = function () { + if ($("#directions_content").length) { + page.load(); + } else { + initializeFromParams(); - endpoints[0].setValue(params.get("from") || route[0] || lastLocation.join(", ")); - endpoints[1].setValue(params.get("to") || route[1] || ""); + $(".search_form").hide(); + $(".directions_form").show(); - map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng); + OSM.loadSidebarContent("/directions", enableListeners); + + map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng); + } }; page.load = function () { - page.pushstate(); + initializeFromParams(); + + $(".search_form").hide(); + $(".directions_form").show(); + + enableListeners(); + + map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng); }; page.unload = function () { $(".search_form").show(); $(".directions_form").hide(); + + $("#sidebar_content").off("click", ".btn-close", hideRoute); $("#map").off("dragend dragover drop"); map.off("locationfound", sendstartinglocation); - endpoints[0].disable(); - endpoints[1].disable(); + endpoints[0].disableListeners(); + endpoints[1].disableListeners(); + + endpoints[0].clearValue(); + endpoints[1].clearValue(); map .removeLayer(popup)