]> git.openstreetmap.org Git - rails.git/blob - app/assets/javascripts/download_util.js
Merge remote-tracking branch 'upstream/pull/6255'
[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   class DownloadUtil {
14     static async handleExportSuccess(fetchResponse, filename) {
15       try {
16         const blob = await fetchResponse.response.blob();
17         OSM.downloadBlob(blob, filename);
18       } catch (err) {
19         // eslint-disable-next-line no-alert
20         alert(OSM.i18n.t("javascripts.share.export_failed", { reason: "(blob error)" }));
21       }
22     }
23
24     static async handleExportError(event) {
25       let detailMessage;
26       try {
27         detailMessage = event?.detail?.error?.message;
28         if (!detailMessage) {
29           const responseText = await event.detail.fetchResponse.responseText;
30           const parser = new DOMParser();
31           const doc = parser.parseFromString(responseText, "text/html");
32           detailMessage = doc.body ? doc.body.textContent.trim() : "(unknown)";
33         }
34       } catch (err) {
35         detailMessage = "(unknown)";
36       }
37       // eslint-disable-next-line no-alert
38       alert(OSM.i18n.t("javascripts.share.export_failed", { reason: detailMessage }));
39     }
40
41     static getTurboBlobHandler(filename) {
42       return function (event) {
43         if (event.detail.success) {
44           DownloadUtil.handleExportSuccess(event.detail.fetchResponse, filename);
45         } else {
46           DownloadUtil.handleExportError(event);
47         }
48       };
49     }
50   }
51
52   OSM.getTurboBlobHandler = DownloadUtil.getTurboBlobHandler;
53 }());