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);
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"));
21 static async handleExportSuccess(fetchResponse, filename) {
23 const blob = await fetchResponse.response.blob();
24 OSM.downloadBlob(blob, filename);
26 OSM.showAlert(OSM.i18n.t("javascripts.share.export_failed", { reason: "(blob error)" }));
30 static async handleExportError(event) {
33 detailMessage = event?.detail?.error?.message;
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)";
41 detailMessage = "(unknown)";
43 OSM.showAlert(OSM.i18n.t("javascripts.share.export_failed", { reason: detailMessage }));
46 static getTurboBlobHandler(filename) {
47 return function (event) {
48 if (event.detail.success) {
49 DownloadUtil.handleExportSuccess(event.detail.fetchResponse, filename);
51 DownloadUtil.handleExportError(event);
57 OSM.getTurboBlobHandler = DownloadUtil.getTurboBlobHandler;