//= 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
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();
+ $(".describe_location").toggle(!endpoints[0].value);
$(".search_form input[name='query']").val(endpoints[0].value);
OSM.router.route("/" + OSM.formatHash(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
$("#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) {
var pt = L.DomEvent.getMousePosition(oe, map.getContainer()); // co-ordinates of the mouse pointer at present
pt.y += 20;
var ll = map.containerPointToLatLng(pt);
- var precision = OSM.zoomPrecision(map.getZoom());
- var value = ll.lat.toFixed(precision) + ", " + ll.lng.toFixed(precision);
- endpoints[type === "from" ? 0 : 1].setValue(value, ll);
+ const llWithPrecision = OSM.cropLocation(ll, map.getZoom());
+ endpoints[type === "from" ? 0 : 1].setValue(llWithPrecision.join(", "));
});
endpoints[0].enable();
endpoints[1].enable();
- 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(","));
+ 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);
+ endpoints[0].setValue(params.get("from") || route[0] || "");
+ endpoints[1].setValue(params.get("to") || route[1] || "");
- map.setSidebarOverlaid(!from || !to);
+ map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng);
};
page.load = function () {
map
.removeLayer(popup)
- .removeLayer(polyline)
- .removeLayer(endpoints[0].marker)
- .removeLayer(endpoints[1].marker);
+ .removeLayer(polyline);
};
return page;