X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/415f497d89b75466679841101bc14b0bb9662dcc..7cf9bf0e553a141acab2afea53842f97eddd0a40:/app/assets/javascripts/index/directions.js diff --git a/app/assets/javascripts/index/directions.js b/app/assets/javascripts/index/directions.js index ccd4a68c2..acba02d83 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 @@ -28,13 +27,13 @@ OSM.Directions = function (map) { getRoute(false, !dragging); }; - var endpointGeocodeCallback = function () { + var endpointChangeCallback = function () { getRoute(true, true); }; var endpoints = [ - OSM.DirectionsEndpoint(map, $("input[name='route_from']"), OSM.MARKER_GREEN, endpointDragCallback, endpointGeocodeCallback), - OSM.DirectionsEndpoint(map, $("input[name='route_to']"), OSM.MARKER_RED, endpointDragCallback, endpointGeocodeCallback) + OSM.DirectionsEndpoint(map, $("input[name='route_from']"), OSM.MARKER_GREEN, endpointDragCallback, endpointChangeCallback), + OSM.DirectionsEndpoint(map, $("input[name='route_to']"), OSM.MARKER_RED, endpointDragCallback, endpointChangeCallback) ]; var expiry = new Date(); @@ -65,22 +64,18 @@ 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 })); }); $(".directions_form .btn-close").on("click", function (e) { e.preventDefault(); - var route_from = endpoints[0].value; - if (route_from) { - OSM.router.route("/?query=" + encodeURIComponent(route_from) + OSM.formatHash(map)); - } else { - OSM.router.route("/" + OSM.formatHash(map)); - } + $(".describe_location").toggle(!endpoints[0].value); + $(".search_form input[name='query']").val(endpoints[0].value); + OSM.router.route("/" + OSM.formatHash(map)); }); function formatDistance(m) { @@ -119,30 +114,14 @@ OSM.Directions = function (map) { // Cancel any route that is already in progress if (routeRequest) routeRequest.abort(); - // go fetch geocodes for any endpoints which have not already - // been geocoded. - for (var ep_i = 0; ep_i < 2; ++ep_i) { - var endpoint = endpoints[ep_i]; - if (!endpoint.hasGeocode && !endpoint.awaitingGeocode) { - endpoint.getGeocode(); - } - } - if (endpoints[0].awaitingGeocode || endpoints[1].awaitingGeocode) { - return; - } - - 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 @@ -151,7 +130,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) { @@ -300,29 +279,28 @@ OSM.Directions = function (map) { var pt = L.DomEvent.getMousePosition(oe, map.getContainer()); // co-ordinates of the mouse pointer at present pt.y += 20; var ll = map.containerPointToLatLng(pt); - endpoints[type === "from" ? 0 : 1].setLatLng(ll); - getRoute(true, true); + const llWithPrecision = OSM.cropLocation(ll, map.getZoom()); + endpoints[type === "from" ? 0 : 1].setValue(llWithPrecision.join(", ")); }); - var params = Qs.parse(location.search.substring(1)), - route = (params.route || "").split(";"), - from = route[0] && L.latLng(route[0].split(",")), - to = route[1] && L.latLng(route[1].split(",")); + endpoints[0].enable(); + endpoints[1].enable(); + + const params = new URLSearchParams(location.search), + route = (params.get("route") || "").split(";"); - if (params.engine) { - var engineIndex = findEngine(params.engine); + if (params.has("engine")) { + var engineIndex = findEngine(params.get("engine")); if (engineIndex >= 0) { setEngine(engineIndex); } } - endpoints[0].setValue(params.from || "", from); - endpoints[1].setValue(params.to || "", to); - - map.setSidebarOverlaid(!from || !to); + endpoints[0].setValue(params.get("from") || route[0] || ""); + endpoints[1].setValue(params.get("to") || route[1] || ""); - getRoute(true, true); + map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng); }; page.load = function () { @@ -334,11 +312,12 @@ OSM.Directions = function (map) { $(".directions_form").hide(); $("#map").off("dragend dragover drop"); + endpoints[0].disable(); + endpoints[1].disable(); + map .removeLayer(popup) - .removeLayer(polyline) - .removeLayer(endpoints[0].marker) - .removeLayer(endpoints[1].marker); + .removeLayer(polyline); }; return page;