]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/download_util.js
Merge remote-tracking branch 'upstream/pull/6236'
[rails.git] / app / assets / javascripts / download_util.js
1 OSM.downloadBlob = function (blob, filename) {
2   const url = URL.createObjectURL(blob);
3   const a = document.createElement("a");
4   a.href = url;
5   a.download = filename;
6   document.body.appendChild(a);
7   a.click();
8   document.body.removeChild(a);
9   URL.revokeObjectURL(url);
10 };
11
12 OSM.showAlert = function (message) {
13   const modalBody = document.getElementById("osm_alert_message");
14   modalBody.textContent = message;
15   const alertModal = new bootstrap.Modal(document.getElementById("osm_alert_modal"));
16   alertModal.show();
17 };
18
19 OSM.getTurboBlobHandler = function (filename) {
20   function handleExportSuccess({ fetchResponse }) {
21     fetchResponse.response.blob()
22       .then(blob => OSM.downloadBlob(blob, filename))
23       .catch(() => notifyExportFailure("(blob error)"));
24   }
25
26   function handleExportError({ error, fetchResponse }) {
27     Promise.resolve(
28       error?.message ||
29       fetchResponse.responseText.then(extractTextFromHTML)
30     )
31       .then(notifyExportFailure)
32       .catch(() => notifyExportFailure("(unknown)"));
33   }
34
35   function extractTextFromHTML(htmlString) {
36     const parser = new DOMParser();
37     const doc = parser.parseFromString(htmlString, "text/html");
38     return doc.body ? doc.body.textContent.trim() : "(unknown)";
39   }
40
41   function notifyExportFailure(reason) {
42     OSM.showAlert(OSM.i18n.t("javascripts.share.export_failed", { reason }));
43   }
44
45   return function ({ detail }) {
46     if (detail.success) {
47       handleExportSuccess(detail);
48     } else {
49       handleExportError(detail);
50     }
51   };
52 };