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