1 OSM.downloadBlob = function (blob, filename) {
2 const url = URL.createObjectURL(blob);
3 const a = document.createElement("a");
6 document.body.appendChild(a);
8 document.body.removeChild(a);
9 URL.revokeObjectURL(url);
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"));
19 OSM.getTurboBlobHandler = function (filename) {
20 async function handleExportSuccess(fetchResponse, filename) {
22 const blob = await fetchResponse.response.blob();
23 OSM.downloadBlob(blob, filename);
25 notifyExportFailure("(blob error)");
29 async function handleExportError(event) {
32 detailMessage = event?.detail?.error?.message;
34 const responseText = await event.detail.fetchResponse.responseText;
35 detailMessage = extractTextFromHTML(responseText);
38 detailMessage = "(unknown)";
40 notifyExportFailure(detailMessage);
43 function extractTextFromHTML(htmlString) {
44 const parser = new DOMParser();
45 const doc = parser.parseFromString(htmlString, "text/html");
46 return doc.body ? doc.body.textContent.trim() : "(unknown)";
49 function notifyExportFailure(reason) {
50 OSM.showAlert(OSM.i18n.t("javascripts.share.export_failed", { reason }));
53 return function (event) {
54 if (event.detail.success) {
55 handleExportSuccess(event.detail.fetchResponse, filename);
57 handleExportError(event);