From a1a82be39d7ae331ce6c81e59592dec27049d6e3 Mon Sep 17 00:00:00 2001 From: mmd-osm Date: Sun, 3 Aug 2025 21:16:33 +0200 Subject: [PATCH] Handle html error message for map xml export --- app/assets/javascripts/download_util.js | 11 +++++++++++ app/assets/javascripts/index/export.js | 3 +++ app/assets/javascripts/leaflet.share.js | 13 ++----------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/assets/javascripts/download_util.js b/app/assets/javascripts/download_util.js index d425c421f..d0bed1bce 100644 --- a/app/assets/javascripts/download_util.js +++ b/app/assets/javascripts/download_util.js @@ -50,3 +50,14 @@ OSM.getTurboBlobHandler = function (filename) { } }; }; + +OSM.turboHtmlResponseHandler = function (event) { + const response = event.detail.fetchResponse.response; + const contentType = response.headers.get("content-type"); + if (!response.ok && contentType?.includes("text/html")) { + // Prevent Turbo from replacing the current page with an error HTML response + // from the export endpoint + event.preventDefault(); + event.stopPropagation(); + } +}; diff --git a/app/assets/javascripts/index/export.js b/app/assets/javascripts/index/export.js index 21a6435dc..4e4e0b5ab 100644 --- a/app/assets/javascripts/index/export.js +++ b/app/assets/javascripts/index/export.js @@ -75,6 +75,9 @@ OSM.Export = function (map) { document.querySelector(".export_form") .addEventListener("turbo:submit-end", OSM.getTurboBlobHandler("map.osm")); + document.querySelector(".export_form") + .addEventListener("turbo:before-fetch-response", OSM.turboHtmlResponseHandler); + document.querySelector(".export_form") .addEventListener("turbo:before-fetch-request", function (event) { event.detail.fetchOptions.headers.Accept = "application/xml"; diff --git a/app/assets/javascripts/leaflet.share.js b/app/assets/javascripts/leaflet.share.js index 8c32872ea..5896eed9e 100644 --- a/app/assets/javascripts/leaflet.share.js +++ b/app/assets/javascripts/leaflet.share.js @@ -34,17 +34,8 @@ L.OSM.share = function (options) { .addEventListener("turbo:submit-end", OSM.getTurboBlobHandler(OSM.i18n.t("javascripts.share.filename"))); - document.getElementById("export-image").addEventListener("turbo:before-fetch-response", function (event) { - const response = event.detail.fetchResponse.response; - const contentType = response.headers.get("content-type"); - - if (!response.ok && contentType?.includes("text/html")) { - // Prevent Turbo from replacing the current page with an error HTML response - // from the image export endpoint - event.preventDefault(); - event.stopPropagation(); - } - }); + document.getElementById("export-image") + .addEventListener("turbo:before-fetch-response", OSM.turboHtmlResponseHandler); locationFilter .on("change", update) -- 2.39.5