Merge remote-tracking branch 'upstream/pull/5754'

This commit is contained in:
Tom Hughes 2025-03-06 16:36:26 +00:00
commit 31ff609020
7 changed files with 77 additions and 51 deletions

View file

@ -37,7 +37,7 @@ $(function () {
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
// https://github.com/openstreetmap/openstreetmap-website/issues/5663
@ -53,7 +53,7 @@ $(function () {
fetch(content_path, { headers: { "accept": "text/html", "x-requested-with": "XMLHttpRequest" } })
.then(response => {
$("#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");
if (title) document.title = decodeURIComponent(title);

View file

@ -14,23 +14,16 @@ OSM.DirectionsEndpoint = function Endpoint(map, input, iconUrl, dragCallback, ch
autoPan: true
});
endpoint.enable = function () {
endpoint.enableListeners = function () {
endpoint.marker.on("drag dragend", markerDragListener);
input.on("keydown", inputKeydownListener);
input.on("change", inputChangeListener);
};
endpoint.disable = function () {
endpoint.disableListeners = function () {
endpoint.marker.off("drag dragend", markerDragListener);
input.off("keydown", inputKeydownListener);
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) {
@ -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) {
const g0 = endpoint.cachedReverseGeocode;
const g1 = otherEndpoint.cachedReverseGeocode;

View file

@ -134,7 +134,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 +158,10 @@ OSM.Directions = function (map) {
const turnByTurnTable = $("<table class='table table-hover table-sm mb-3'>")
.append($("<tbody>"));
const directionsCloseButton = $("<button type='button' class='btn-close'>")
.attr("aria-label", I18n.t("javascripts.close"));
$("#sidebar_content")
$("#directions_content")
.empty()
.append(
$("<div class='d-flex'>").append(
$("<h2 class='flex-grow-1 text-break'>")
.text(I18n.t("javascripts.directions.directions")),
$("<div>").append(directionsCloseButton)),
distanceText,
turnByTurnTable
);
@ -203,27 +197,19 @@ OSM.Directions = function (map) {
URL.revokeObjectURL(downloadURL);
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.download")
}</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 }) +
"</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 () {
map.removeLayer(polyline);
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 () {
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(Cookies.get("_osm_directions_engine"));
@ -284,11 +279,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_content").on("click", ".btn-close", hideRoute);
$("#map").on("dragend dragover", function (e) {
e.preventDefault();
@ -308,32 +310,51 @@ OSM.Directions = function (map) {
map.on("locationfound", sendstartinglocation);
endpoints[0].enable();
endpoints[1].enable();
endpoints[0].enableListeners();
endpoints[1].enableListeners();
}
const params = new URLSearchParams(location.search),
route = (params.get("route") || "").split(";");
const page = {};
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(", "));
endpoints[1].setValue(params.get("to") || route[1] || "");
$(".search_form").hide();
$(".directions_form").show();
OSM.loadSidebarContent("/directions", enableListeners);
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_content").off("click", ".btn-close", 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)

View file

@ -336,10 +336,6 @@ body.small-nav {
#sidebar {
float: left;
width: $sidebarWidth;
#sidebar_loader {
display: none;
}
}
.overlay-sidebar #sidebar {
@ -355,6 +351,7 @@ body.small-nav {
display: block;
}
#sidebar_loader,
#sidebar_content {
display: none;
}

View file

@ -1 +1,5 @@
<% content_for(:content_class) { "overlay-sidebar" } %>
<%= render "sidebar_header", :title => t(".title") %>
<div id="directions_content"></div>

View file

@ -18,7 +18,7 @@
<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">
<span class="visually-hidden"><%= t("browse.start_rjs.loading") %></span>
</div>

View file

@ -1509,6 +1509,9 @@ en:
results:
no_results: "No results found"
more_results: "More results"
directions:
search:
title: Directions
issues:
index:
title: Issues
@ -3245,7 +3248,6 @@ en:
directions:
ascend: "Ascend"
descend: "Descend"
directions: "Directions"
distance: "Distance"
distance_m: "%{distance}m"
distance_km: "%{distance}km"