diff --git a/public/s/js/settings.js b/public/s/js/settings.js index 6b7603f..2371cd5 100644 --- a/public/s/js/settings.js +++ b/public/s/js/settings.js @@ -1402,8 +1402,10 @@ const exportProgressContainer = document.getElementById('export-progress-container'); const exportProgressBar = document.getElementById('export-progress-bar'); const exportStatusText = document.getElementById('export-status-text'); + const exportStatusMsg = document.getElementById('export-status-msg'); const chkExportUploads = document.getElementById('export_uploads'); const chkExportFavorites = document.getElementById('export_favorites'); + const exportAnimatedDots = document.getElementById('export-animated-dots'); if (btnStartExport) { btnStartExport.addEventListener('click', async () => { @@ -1411,14 +1413,14 @@ const exportFavorites = chkExportFavorites.checked; if (!exportUploads && !exportFavorites) { - alert('Please select at least one option to export.'); + alert(exportStatusText.dataset.selectOption || 'Please select at least one option to export.'); return; } btnStartExport.disabled = true; exportProgressContainer.style.display = 'block'; exportProgressBar.style.width = '0%'; - exportStatusText.textContent = 'Fetching data list...'; + exportStatusMsg.textContent = exportStatusText.dataset.fetching || 'Fetching data list...'; try { const res = await fetch('/settings/export-data'); @@ -1433,7 +1435,7 @@ } if (filesToDownload.length === 0) { - alert('No data found to export.'); + alert(exportStatusText.dataset.noData || 'No data found to export.'); btnStartExport.disabled = false; exportProgressContainer.style.display = 'none'; return; @@ -1463,7 +1465,10 @@ completed++; const percent = Math.round((completed / total) * 100); exportProgressBar.style.width = percent + '%'; - exportStatusText.textContent = `Processing files: ${completed} / ${total}`; + const msg = (exportStatusText.dataset.processing || 'Processing files: {completed} / {total}') + .replace('{completed}', completed) + .replace('{total}', total); + exportStatusMsg.textContent = msg; return; } @@ -1478,7 +1483,10 @@ completed++; const percent = Math.round((completed / total) * 100); exportProgressBar.style.width = percent + '%'; - exportStatusText.textContent = `Processing files: ${completed} / ${total}`; + const msg = (exportStatusText.dataset.processing || 'Processing files: {completed} / {total}') + .replace('{completed}', completed) + .replace('{total}', total); + exportStatusMsg.textContent = msg; } }; @@ -1489,7 +1497,8 @@ await Promise.all(batch.map(downloadFile)); } - exportStatusText.textContent = 'Generating ZIP file...'; + exportStatusMsg.textContent = exportStatusText.dataset.generating || 'Generating ZIP file'; + exportAnimatedDots.style.display = 'inline'; const content = await new Promise((resolve, reject) => { const chunks = []; zip.generateInternalStream({ type: 'uint8array', compression: 'DEFLATE', compressionOptions: { level: 6 } }) @@ -1504,6 +1513,7 @@ }) .resume(); }); + exportAnimatedDots.style.display = 'none'; const link = document.createElement('a'); link.href = URL.createObjectURL(content); @@ -1512,13 +1522,13 @@ link.click(); document.body.removeChild(link); - exportStatusText.textContent = 'Export complete!'; + exportStatusMsg.textContent = exportStatusText.dataset.complete || 'Export complete!'; btnStartExport.disabled = false; } catch (err) { console.error('Export failed:', err); - alert('Export failed. See console for details.'); + alert(exportStatusText.dataset.failedAlert || 'Export failed. See console for details.'); btnStartExport.disabled = false; - exportStatusText.textContent = 'Export failed.'; + exportStatusMsg.textContent = exportStatusText.dataset.failed || 'Export failed.'; } }); } diff --git a/src/inc/locales/de.json b/src/inc/locales/de.json index 2a156f0..08e2688 100644 --- a/src/inc/locales/de.json +++ b/src/inc/locales/de.json @@ -213,6 +213,14 @@ "export_uploads": "Meine Uploads", "export_favorites": "Meine Favoriten", "export_preparing": "Wird vorbereitet...", + "export_fetching_data": "Datenliste wird abgerufen...", + "export_processing_files": "Dateien werden verarbeitet: {completed} / {total}", + "export_generating_zip": "ZIP-Datei wird generiert", + "export_complete": "Export abgeschlossen!", + "export_failed": "Export fehlgeschlagen.", + "export_select_option": "Bitte wähle mindestens eine Option zum Exportieren aus.", + "export_no_data": "Keine Daten zum Exportieren gefunden.", + "export_failed_alert": "Export fehlgeschlagen. Details findest du in der Konsole.", "start_export": "Export generieren (ZIP)" }, "filter": { diff --git a/src/inc/locales/en.json b/src/inc/locales/en.json index 8f62c09..862235b 100644 --- a/src/inc/locales/en.json +++ b/src/inc/locales/en.json @@ -213,6 +213,14 @@ "export_uploads": "My Uploads", "export_favorites": "My Favorites", "export_preparing": "Preparing...", + "export_fetching_data": "Fetching data list...", + "export_processing_files": "Processing files: {completed} / {total}", + "export_generating_zip": "Generating ZIP file", + "export_complete": "Export complete!", + "export_failed": "Export failed.", + "export_select_option": "Please select at least one option to export.", + "export_no_data": "No data found to export.", + "export_failed_alert": "Export failed. See console for details.", "start_export": "Generate Export (ZIP)" }, "filter": { diff --git a/src/inc/locales/nl.json b/src/inc/locales/nl.json index a8ab557..b2921e4 100644 --- a/src/inc/locales/nl.json +++ b/src/inc/locales/nl.json @@ -213,6 +213,14 @@ "export_uploads": "Jouw uploads", "export_favorites": "Jouw favorieten", "export_preparing": "Voorbereiden...", + "export_fetching_data": "Gegevenslijst ophalen...", + "export_processing_files": "Bestanden verwerken: {completed} / {total}", + "export_generating_zip": "ZIP-bestand genereren", + "export_complete": "Export voltooid!", + "export_failed": "Export mislukt.", + "export_select_option": "Selecteer ten minste één optie om te exporteren.", + "export_no_data": "Geen gegevens gevonden om te exporteren.", + "export_failed_alert": "Export mislukt. Zie console voor details.", "start_export": "Export genereren (ZIP)" }, "filter": { diff --git a/src/inc/locales/zange.json b/src/inc/locales/zange.json index ccfa187..555d105 100644 --- a/src/inc/locales/zange.json +++ b/src/inc/locales/zange.json @@ -212,6 +212,14 @@ "export_uploads": "Meine Aufladungen", "export_favorites": "Meine Favorisierungen", "export_preparing": "Vorbereitung wird getroffen...", + "export_fetching_data": "Holt die ganze Liste...", + "export_processing_files": "Verpackt Dateien: {completed} / {total}", + "export_generating_zip": "Paket wird geschnürt...", + "export_complete": "Paket fertig!", + "export_failed": "Paket kaputt.", + "export_select_option": "Bitte wählen Sie etwas zum verpacken aus.", + "export_no_data": "Nix da zum verpacken.", + "export_failed_alert": "Auf dem Weg gestorben :(", "start_export": "Paket schnüren" }, "filter": { diff --git a/views/settings.html b/views/settings.html index a0226e4..be8621b 100644 --- a/views/settings.html +++ b/views/settings.html @@ -278,7 +278,17 @@
-