Write directions sidebar header using .erb template

This commit is contained in:
Anton Khorev 2024-06-14 18:45:29 +03:00
parent 1c66d7f50f
commit 18f03fe59b
2 changed files with 37 additions and 23 deletions

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"));
@ -295,6 +290,8 @@ OSM.Directions = function (map) {
}
function enableListeners() {
$("#sidebar_content").on("click", ".btn-close", hideRoute);
$("#map").on("dragend dragover", function (e) {
e.preventDefault();
});
@ -320,6 +317,21 @@ OSM.Directions = function (map) {
const page = {};
page.pushstate = page.popstate = function () {
if ($("#directions_content").length) {
page.load();
} else {
initializeFromParams();
$(".search_form").hide();
$(".directions_form").show();
OSM.loadSidebarContent("/directions", enableListeners);
map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng);
}
};
page.load = function () {
initializeFromParams();
$(".search_form").hide();
@ -330,13 +342,11 @@ OSM.Directions = function (map) {
map.setSidebarOverlaid(!endpoints[0].latlng || !endpoints[1].latlng);
};
page.load = function () {
page.pushstate();
};
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);

View file

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