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); 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);

View file

@ -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;

View file

@ -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)

View file

@ -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;
} }

View file

@ -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>

View file

@ -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>

View file

@ -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"