2 OSM.downloadBlob = function (blob, filename) {
3 const url = URL.createObjectURL(blob);
4 const a = document.createElement("a");
7 document.body.appendChild(a);
9 document.body.removeChild(a);
10 URL.revokeObjectURL(url);
14 static async handleExportSuccess(fetchResponse, filename) {
16 const blob = await fetchResponse.response.blob();
17 OSM.downloadBlob(blob, filename);
19 // eslint-disable-next-line no-alert
20 alert(OSM.i18n.t("javascripts.share.export_failed", { reason: "(blob error)" }));
24 static async handleExportError(event) {
27 detailMessage = event?.detail?.error?.message;
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)";
35 detailMessage = "(unknown)";
37 // eslint-disable-next-line no-alert
38 alert(OSM.i18n.t("javascripts.share.export_failed", { reason: detailMessage }));
41 static getTurboBlobHandler(filename) {
42 return function (event) {
43 if (event.detail.success) {
44 DownloadUtil.handleExportSuccess(event.detail.fetchResponse, filename);
46 DownloadUtil.handleExportError(event);
52 OSM.getTurboBlobHandler = DownloadUtil.getTurboBlobHandler;