X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/614542ad7fe896e158384c7b3cf580e1b6fc4435..06ac13de3c9e024befc7964cd0aad3d3d2f7a608:/app/assets/javascripts/index/directions.js diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index 83995fee3..a2b383ba0 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -71,10 +71,13 @@ OSM.Directions = function (map) { }); function formatDistance(m) { - const unitTemplate = "javascripts.directions.distance_"; - if (m < 1000) return I18n.t(unitTemplate + "m", { distance: Math.round(m) }); - if (m < 10000) return I18n.t(unitTemplate + "km", { distance: (m / 1000.0).toFixed(1) }); - return I18n.t(unitTemplate + "km", { distance: Math.round(m / 1000) }); + if (m < 1000) { + return I18n.t("javascripts.directions.distance_m", { distance: Math.round(m) }); + } else if (m < 10000) { + return I18n.t("javascripts.directions.distance_km", { distance: (m / 1000.0).toFixed(1) }); + } else { + return I18n.t("javascripts.directions.distance_km", { distance: Math.round(m / 1000) }); + } } function formatHeight(m) { @@ -134,7 +137,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 +161,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 +204,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 +231,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 +286,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 .sidebar-close-controls button").on("click", hideRoute); $("#map").on("dragend dragover", function (e) { e.preventDefault(); @@ -308,32 +317,51 @@ OSM.Directions = function (map) { map.on("locationfound", sendstartinglocation); - endpoints[0].enable(); - endpoints[1].enable(); + endpoints[0].enableListeners(); + endpoints[1].enableListeners(); + } + + const page = {}; - const params = new URLSearchParams(location.search), - route = (params.get("route") || "").split(";"); + page.pushstate = page.popstate = function () { + if ($("#directions_content").length) { + page.load(); + } else { + initializeFromParams(); - if (params.has("engine")) setEngine(params.get("engine")); + $(".search_form").hide(); + $(".directions_form").show(); - endpoints[0].setValue(params.get("from") || route[0] || lastLocation.join(", ")); - endpoints[1].setValue(params.get("to") || route[1] || ""); + OSM.loadSidebarContent("/directions", enableListeners); - map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng); + 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 .sidebar-close-controls button").off("click", 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) @@ -346,7 +374,7 @@ OSM.Directions = function (map) { OSM.Directions.engines = []; OSM.Directions.addEngine = function (engine, supportsHTTPS) { - if (document.location.protocol === "http:" || supportsHTTPS) { + if (location.protocol === "http:" || supportsHTTPS) { engine.id = engine.provider + "_" + engine.mode; OSM.Directions.engines.push(engine); }