Merge remote-tracking branch 'upstream/pull/5754'
This commit is contained in:
commit
31ff609020
7 changed files with 77 additions and 51 deletions
|
@ -37,7 +37,7 @@ $(function () {
|
||||||
|
|
||||||
map.setSidebarOverlaid(false);
|
map.setSidebarOverlaid(false);
|
||||||
|
|
||||||
$("#sidebar_loader").show().addClass("delayed-fade-in");
|
$("#sidebar_loader").prop("hidden", false).addClass("delayed-fade-in");
|
||||||
|
|
||||||
// Prevent caching the XHR response as a full-page URL
|
// Prevent caching the XHR response as a full-page URL
|
||||||
// https://github.com/openstreetmap/openstreetmap-website/issues/5663
|
// https://github.com/openstreetmap/openstreetmap-website/issues/5663
|
||||||
|
@ -53,7 +53,7 @@ $(function () {
|
||||||
fetch(content_path, { headers: { "accept": "text/html", "x-requested-with": "XMLHttpRequest" } })
|
fetch(content_path, { headers: { "accept": "text/html", "x-requested-with": "XMLHttpRequest" } })
|
||||||
.then(response => {
|
.then(response => {
|
||||||
$("#flash").empty();
|
$("#flash").empty();
|
||||||
$("#sidebar_loader").removeClass("delayed-fade-in").hide();
|
$("#sidebar_loader").removeClass("delayed-fade-in").prop("hidden", true);
|
||||||
|
|
||||||
const title = response.headers.get("X-Page-Title");
|
const title = response.headers.get("X-Page-Title");
|
||||||
if (title) document.title = decodeURIComponent(title);
|
if (title) document.title = decodeURIComponent(title);
|
||||||
|
|
|
@ -14,23 +14,16 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
|
||||||
autoPan: true
|
autoPan: true
|
||||||
});
|
});
|
||||||
|
|
||||||
endpoint.enable = function () {
|
endpoint.enableListeners = function () {
|
||||||
endpoint.marker.on("drag dragend", markerDragListener);
|
endpoint.marker.on("drag dragend", markerDragListener);
|
||||||
input.on("keydown", inputKeydownListener);
|
input.on("keydown", inputKeydownListener);
|
||||||
input.on("change", inputChangeListener);
|
input.on("change", inputChangeListener);
|
||||||
};
|
};
|
||||||
|
|
||||||
endpoint.disable = function () {
|
endpoint.disableListeners = function () {
|
||||||
endpoint.marker.off("drag dragend", markerDragListener);
|
endpoint.marker.off("drag dragend", markerDragListener);
|
||||||
input.off("keydown", inputKeydownListener);
|
input.off("keydown", inputKeydownListener);
|
||||||
input.off("change", inputChangeListener);
|
input.off("change", inputChangeListener);
|
||||||
|
|
||||||
if (endpoint.geocodeRequest) endpoint.geocodeRequest.abort();
|
|
||||||
delete endpoint.geocodeRequest;
|
|
||||||
removeLatLng();
|
|
||||||
delete endpoint.value;
|
|
||||||
input.val("");
|
|
||||||
map.removeLayer(endpoint.marker);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function markerDragListener(e) {
|
function markerDragListener(e) {
|
||||||
|
@ -91,6 +84,15 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
endpoint.clearValue = function () {
|
||||||
|
if (endpoint.geocodeRequest) endpoint.geocodeRequest.abort();
|
||||||
|
delete endpoint.geocodeRequest;
|
||||||
|
removeLatLng();
|
||||||
|
delete endpoint.value;
|
||||||
|
input.val("");
|
||||||
|
map.removeLayer(endpoint.marker);
|
||||||
|
};
|
||||||
|
|
||||||
endpoint.swapCachedReverseGeocodes = function (otherEndpoint) {
|
endpoint.swapCachedReverseGeocodes = function (otherEndpoint) {
|
||||||
const g0 = endpoint.cachedReverseGeocode;
|
const g0 = endpoint.cachedReverseGeocode;
|
||||||
const g1 = otherEndpoint.cachedReverseGeocode;
|
const g1 = otherEndpoint.cachedReverseGeocode;
|
||||||
|
|
|
@ -134,7 +134,7 @@ OSM.Directions = function (map) {
|
||||||
// copy loading item to sidebar and display it. we copy it, rather than
|
// 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
|
// just using it in-place and replacing it in case it has to be used
|
||||||
// again.
|
// again.
|
||||||
$("#sidebar_content").html($(".directions_form .loader_copy").html());
|
$("#directions_content").html($(".directions_form .loader_copy").html());
|
||||||
map.setSidebarOverlaid(false);
|
map.setSidebarOverlaid(false);
|
||||||
controller = new AbortController();
|
controller = new AbortController();
|
||||||
chosenEngine.getRoute(points, controller.signal).then(function (route) {
|
chosenEngine.getRoute(points, controller.signal).then(function (route) {
|
||||||
|
@ -158,16 +158,10 @@ OSM.Directions = function (map) {
|
||||||
|
|
||||||
const turnByTurnTable = $("<table class='table table-hover table-sm mb-3'>")
|
const turnByTurnTable = $("<table class='table table-hover table-sm mb-3'>")
|
||||||
.append($("<tbody>"));
|
.append($("<tbody>"));
|
||||||
const directionsCloseButton = $("<button type='button' class='btn-close'>")
|
|
||||||
.attr("aria-label", I18n.t("javascripts.close"));
|
|
||||||
|
|
||||||
$("#sidebar_content")
|
$("#directions_content")
|
||||||
.empty()
|
.empty()
|
||||||
.append(
|
.append(
|
||||||
$("<div class='d-flex'>").append(
|
|
||||||
$("<h2 class='flex-grow-1 text-break'>")
|
|
||||||
.text(I18n.t("javascripts.directions.directions")),
|
|
||||||
$("<div>").append(directionsCloseButton)),
|
|
||||||
distanceText,
|
distanceText,
|
||||||
turnByTurnTable
|
turnByTurnTable
|
||||||
);
|
);
|
||||||
|
@ -203,27 +197,19 @@ OSM.Directions = function (map) {
|
||||||
URL.revokeObjectURL(downloadURL);
|
URL.revokeObjectURL(downloadURL);
|
||||||
downloadURL = URL.createObjectURL(blob);
|
downloadURL = URL.createObjectURL(blob);
|
||||||
|
|
||||||
$("#sidebar_content").append(`<p class="text-center"><a href="${downloadURL}" download="${
|
$("#directions_content").append(`<p class="text-center"><a href="${downloadURL}" download="${
|
||||||
I18n.t("javascripts.directions.filename")
|
I18n.t("javascripts.directions.filename")
|
||||||
}">${
|
}">${
|
||||||
I18n.t("javascripts.directions.download")
|
I18n.t("javascripts.directions.download")
|
||||||
}</a></p>`);
|
}</a></p>`);
|
||||||
|
|
||||||
$("#sidebar_content").append("<p class=\"text-center\">" +
|
$("#directions_content").append("<p class=\"text-center\">" +
|
||||||
I18n.t("javascripts.directions.instructions.courtesy", { link: chosenEngine.creditline }) +
|
I18n.t("javascripts.directions.instructions.courtesy", { link: chosenEngine.creditline }) +
|
||||||
"</p>");
|
"</p>");
|
||||||
|
|
||||||
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 () {
|
}).catch(function () {
|
||||||
map.removeLayer(polyline);
|
map.removeLayer(polyline);
|
||||||
if (reportErrors) {
|
if (reportErrors) {
|
||||||
$("#sidebar_content").html("<div class=\"alert alert-danger\">" + I18n.t("javascripts.directions.errors.no_route") + "</div>");
|
$("#directions_content").html("<div class=\"alert alert-danger\">" + I18n.t("javascripts.directions.errors.no_route") + "</div>");
|
||||||
}
|
}
|
||||||
}).finally(function () {
|
}).finally(function () {
|
||||||
controller = null;
|
controller = null;
|
||||||
|
@ -238,6 +224,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("fossgis_osrm_car");
|
||||||
setEngine(Cookies.get("_osm_directions_engine"));
|
setEngine(Cookies.get("_osm_directions_engine"));
|
||||||
|
|
||||||
|
@ -284,11 +279,18 @@ OSM.Directions = function (map) {
|
||||||
map.once("startinglocation", startingLocationListener);
|
map.once("startinglocation", startingLocationListener);
|
||||||
});
|
});
|
||||||
|
|
||||||
const page = {};
|
function initializeFromParams() {
|
||||||
|
const params = new URLSearchParams(location.search),
|
||||||
|
route = (params.get("route") || "").split(";");
|
||||||
|
|
||||||
page.pushstate = page.popstate = function () {
|
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] || "");
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableListeners() {
|
||||||
|
$("#sidebar_content").on("click", ".btn-close", hideRoute);
|
||||||
|
|
||||||
$("#map").on("dragend dragover", function (e) {
|
$("#map").on("dragend dragover", function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -308,32 +310,51 @@ OSM.Directions = function (map) {
|
||||||
|
|
||||||
map.on("locationfound", sendstartinglocation);
|
map.on("locationfound", sendstartinglocation);
|
||||||
|
|
||||||
endpoints[0].enable();
|
endpoints[0].enableListeners();
|
||||||
endpoints[1].enable();
|
endpoints[1].enableListeners();
|
||||||
|
}
|
||||||
|
|
||||||
const params = new URLSearchParams(location.search),
|
const page = {};
|
||||||
route = (params.get("route") || "").split(";");
|
|
||||||
|
|
||||||
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(", "));
|
$(".search_form").hide();
|
||||||
endpoints[1].setValue(params.get("to") || route[1] || "");
|
$(".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.load = function () {
|
||||||
page.pushstate();
|
initializeFromParams();
|
||||||
|
|
||||||
|
$(".search_form").hide();
|
||||||
|
$(".directions_form").show();
|
||||||
|
|
||||||
|
enableListeners();
|
||||||
|
|
||||||
|
map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng);
|
||||||
};
|
};
|
||||||
|
|
||||||
page.unload = function () {
|
page.unload = function () {
|
||||||
$(".search_form").show();
|
$(".search_form").show();
|
||||||
$(".directions_form").hide();
|
$(".directions_form").hide();
|
||||||
|
|
||||||
|
$("#sidebar_content").off("click", ".btn-close", hideRoute);
|
||||||
$("#map").off("dragend dragover drop");
|
$("#map").off("dragend dragover drop");
|
||||||
map.off("locationfound", sendstartinglocation);
|
map.off("locationfound", sendstartinglocation);
|
||||||
|
|
||||||
endpoints[0].disable();
|
endpoints[0].disableListeners();
|
||||||
endpoints[1].disable();
|
endpoints[1].disableListeners();
|
||||||
|
|
||||||
|
endpoints[0].clearValue();
|
||||||
|
endpoints[1].clearValue();
|
||||||
|
|
||||||
map
|
map
|
||||||
.removeLayer(popup)
|
.removeLayer(popup)
|
||||||
|
|
|
@ -336,10 +336,6 @@ body.small-nav {
|
||||||
#sidebar {
|
#sidebar {
|
||||||
float: left;
|
float: left;
|
||||||
width: $sidebarWidth;
|
width: $sidebarWidth;
|
||||||
|
|
||||||
#sidebar_loader {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.overlay-sidebar #sidebar {
|
.overlay-sidebar #sidebar {
|
||||||
|
@ -355,6 +351,7 @@ body.small-nav {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#sidebar_loader,
|
||||||
#sidebar_content {
|
#sidebar_content {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1,5 @@
|
||||||
<% content_for(:content_class) { "overlay-sidebar" } %>
|
<% content_for(:content_class) { "overlay-sidebar" } %>
|
||||||
|
|
||||||
|
<%= render "sidebar_header", :title => t(".title") %>
|
||||||
|
|
||||||
|
<div id="directions_content"></div>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
<div id="browse_status"></div>
|
<div id="browse_status"></div>
|
||||||
|
|
||||||
<div id="sidebar_loader" class="my-3 text-center loader">
|
<div id="sidebar_loader" class="my-3 text-center loader" hidden>
|
||||||
<div class="spinner-border" role="status">
|
<div class="spinner-border" role="status">
|
||||||
<span class="visually-hidden"><%= t("browse.start_rjs.loading") %></span>
|
<span class="visually-hidden"><%= t("browse.start_rjs.loading") %></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1509,6 +1509,9 @@ en:
|
||||||
results:
|
results:
|
||||||
no_results: "No results found"
|
no_results: "No results found"
|
||||||
more_results: "More results"
|
more_results: "More results"
|
||||||
|
directions:
|
||||||
|
search:
|
||||||
|
title: Directions
|
||||||
issues:
|
issues:
|
||||||
index:
|
index:
|
||||||
title: Issues
|
title: Issues
|
||||||
|
@ -3245,7 +3248,6 @@ en:
|
||||||
directions:
|
directions:
|
||||||
ascend: "Ascend"
|
ascend: "Ascend"
|
||||||
descend: "Descend"
|
descend: "Descend"
|
||||||
directions: "Directions"
|
|
||||||
distance: "Distance"
|
distance: "Distance"
|
||||||
distance_m: "%{distance}m"
|
distance_m: "%{distance}m"
|
||||||
distance_km: "%{distance}km"
|
distance_km: "%{distance}km"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue