X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/6bc4b207315992645292c7b3bfc0cfbef87c152f..3fbc8a3d3224a4f5bb4a222aa820d885944a60fe:/app/assets/javascripts/index/directions.js diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index 391c1f931..356dc6271 100644 --- a/app/assets/javascripts/index/directions.js +++ b/app/assets/javascripts/index/directions.js @@ -1,7 +1,6 @@ //= require ./directions-endpoint //= require_self //= require_tree ./directions -//= require qs/dist/qs OSM.Directions = function (map) { var routeRequest = null; // jqXHR object of an ongoing route request or null @@ -65,10 +64,9 @@ OSM.Directions = function (map) { if (coordTo) { routeTo = coordTo.lat + "," + coordTo.lng; } + endpoints[0].swapCachedReverseGeocodes(endpoints[1]); - OSM.router.route("/directions?" + Qs.stringify({ - from: $("#route_to").val(), - to: $("#route_from").val(), + OSM.router.route("/directions?" + new URLSearchParams({ route: routeTo + ";" + routeFrom })); }); @@ -81,13 +79,10 @@ OSM.Directions = function (map) { }); function formatDistance(m) { - 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) }); - } + 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) }); } function formatHeight(m) { @@ -116,18 +111,14 @@ OSM.Directions = function (map) { // Cancel any route that is already in progress if (routeRequest) routeRequest.abort(); - var o = endpoints[0].latlng, - d = endpoints[1].latlng; + const points = endpoints.map(p => p.latlng); - if (!o || !d) return; + if (!points[0] || !points[1]) return; $("header").addClass("closed"); - var precision = OSM.zoomPrecision(map.getZoom()); - - OSM.router.replace("/directions?" + Qs.stringify({ + OSM.router.replace("/directions?" + new URLSearchParams({ engine: chosenEngine.id, - route: o.lat.toFixed(precision) + "," + o.lng.toFixed(precision) + ";" + - d.lat.toFixed(precision) + "," + d.lng.toFixed(precision) + route: points.map(p => OSM.cropLocation(p, map.getZoom()).join()).join(";") })); // copy loading item to sidebar and display it. we copy it, rather than @@ -136,7 +127,7 @@ OSM.Directions = function (map) { $("#sidebar_content").html($(".directions_form .loader_copy").html()); map.setSidebarOverlaid(false); - routeRequest = chosenEngine.getRoute([o, d], function (err, route) { + routeRequest = chosenEngine.getRoute(points, function (err, route) { routeRequest = null; if (err) { @@ -185,28 +176,12 @@ OSM.Directions = function (map) { // Add each row route.steps.forEach(function (step) { - var ll = step[0], - direction = step[1], - instruction = step[2], - dist = step[3], - lineseg = step[4]; - - if (dist < 5) { - dist = ""; - } else if (dist < 200) { - dist = String(Math.round(dist / 10) * 10) + "m"; - } else if (dist < 1500) { - dist = String(Math.round(dist / 100) * 100) + "m"; - } else if (dist < 5000) { - dist = String(Math.round(dist / 100) / 10) + "km"; - } else { - dist = String(Math.round(dist / 1000)) + "km"; - } + const [ll, direction, instruction, dist, lineseg] = step; var row = $("