From 75941de449014c02012bd4890c8fe68b1d4efef6 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 17:42:03 +0200 Subject: [PATCH 1/7] Replace the "Existing backups" bulleted list with a table --- .../widgets/type_widgets/options/backup.js | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index fc3c070a4..1cdfddad9 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -42,7 +42,17 @@ const TPL = `

${t('backup.existing_backups')}

- + + + + + + + + + +
Date and timePath
+
`; @@ -73,7 +83,7 @@ export default class BackupOptions extends OptionsWidget { this.$monthlyBackupEnabled.on('change', () => this.updateCheckboxOption('monthlyBackupEnabled', this.$monthlyBackupEnabled)); - this.$existingBackupList = this.$widget.find(".existing-backup-list"); + this.$existingBackupList = this.$widget.find(".existing-backup-list-items"); } optionsLoaded(options) { @@ -89,7 +99,12 @@ export default class BackupOptions extends OptionsWidget { } for (const {filePath, mtime} of backupFiles) { - this.$existingBackupList.append($("
  • ").text(`${filePath} ${mtime ? ` - ${mtime}` : ''}`)); + this.$existingBackupList.append($(` + + ${(mtime) ? mtime : "-"} + ${filePath} + + `)); } }); } From 970c3bd7adec4183cfcef1c2e36e0331b69dcdd5 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 17:54:34 +0200 Subject: [PATCH 2/7] Format date and time --- src/public/app/widgets/type_widgets/options/backup.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index 1cdfddad9..027453faf 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -98,10 +98,15 @@ export default class BackupOptions extends OptionsWidget { backupFiles = [{filePath: t('backup.no_backup_yet'), mtime: ''}]; } + const dateTimeFormatter = new Intl.DateTimeFormat(navigator.language, { + dateStyle: "medium", + timeStyle: "medium" + }); + for (const {filePath, mtime} of backupFiles) { this.$existingBackupList.append($(` - ${(mtime) ? mtime : "-"} + ${(mtime) ? dateTimeFormatter.format(new Date(mtime)) : "-"} ${filePath} `)); From 22b768e5e88b2bb2716c87764b115ed4d6ecaeb9 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 18:00:23 +0200 Subject: [PATCH 3/7] Add translation --- src/public/app/widgets/type_widgets/options/backup.js | 4 ++-- src/public/translations/en/translation.json | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index 027453faf..dd51d0d7f 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -45,8 +45,8 @@ const TPL = ` - - + + diff --git a/src/public/translations/en/translation.json b/src/public/translations/en/translation.json index 9847b0e24..c949fd588 100644 --- a/src/public/translations/en/translation.json +++ b/src/public/translations/en/translation.json @@ -1183,6 +1183,8 @@ "backup_now": "Backup now", "backup_database_now": "Backup database now", "existing_backups": "Existing backups", + "date-and-time": "Date & time", + "path": "Path", "database_backed_up_to": "Database has been backed up to", "no_backup_yet": "no backup yet" }, From 32a4a9c072d17972fc6fc99fc5fb6db74d6301f7 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 18:07:42 +0200 Subject: [PATCH 4/7] Sort the backup files by date & time --- src/public/app/widgets/type_widgets/options/backup.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index dd51d0d7f..f68fcb0dd 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -98,6 +98,13 @@ export default class BackupOptions extends OptionsWidget { backupFiles = [{filePath: t('backup.no_backup_yet'), mtime: ''}]; } + // Sort the backup files by modification date & time in a desceding order + backupFiles.sort((a, b) => { + if (a.mtime < b.mtime) return 1; + if (a.mtime > b.mtime) return -1; + return 0; + }); + const dateTimeFormatter = new Intl.DateTimeFormat(navigator.language, { dateStyle: "medium", timeStyle: "medium" From e94942d665519a84641b7568c6f791b101424b45 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 20:22:10 +0200 Subject: [PATCH 5/7] Handle the situation where no backups are available --- src/public/app/widgets/type_widgets/options/backup.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index f68fcb0dd..dc647437b 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -95,7 +95,13 @@ export default class BackupOptions extends OptionsWidget { this.$existingBackupList.empty(); if (!backupFiles.length) { - backupFiles = [{filePath: t('backup.no_backup_yet'), mtime: ''}]; + this.$existingBackupList.append($(` + + + + `)); + + return; } // Sort the backup files by modification date & time in a desceding order From 349b1c1d78ad68043837828afc34acab0301d5f3 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 20:28:47 +0200 Subject: [PATCH 6/7] Improve appeareance --- src/public/app/widgets/type_widgets/options/backup.js | 6 +++++- src/public/stylesheets/style.css | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/public/app/widgets/type_widgets/options/backup.js b/src/public/app/widgets/type_widgets/options/backup.js index dc647437b..35cd4b829 100644 --- a/src/public/app/widgets/type_widgets/options/backup.js +++ b/src/public/app/widgets/type_widgets/options/backup.js @@ -43,6 +43,10 @@ const TPL = `

    ${t('backup.existing_backups')}

    Date and timePath${t("backup.date-and-time")}${t("backup.path")}
    ${t('backup.no_backup_yet')}
    + + + + @@ -97,7 +101,7 @@ export default class BackupOptions extends OptionsWidget { if (!backupFiles.length) { this.$existingBackupList.append($(` - + `)); diff --git a/src/public/stylesheets/style.css b/src/public/stylesheets/style.css index 60cda7349..bdcd6a7d8 100644 --- a/src/public/stylesheets/style.css +++ b/src/public/stylesheets/style.css @@ -1238,3 +1238,7 @@ textarea { padding: 1rem; } +.empty-table-placeholder { + text-align: center; + color: var(--muted-text-color); +} \ No newline at end of file From 70be4cd1c25fc7a2969e1978e5c685a834c6bc47 Mon Sep 17 00:00:00 2001 From: Adorian Doran Date: Tue, 19 Nov 2024 20:34:54 +0200 Subject: [PATCH 7/7] Update the Romanian translation --- src/public/translations/ro/translation.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/public/translations/ro/translation.json b/src/public/translations/ro/translation.json index 9bd9b0ccf..13d0ea3cf 100644 --- a/src/public/translations/ro/translation.json +++ b/src/public/translations/ro/translation.json @@ -254,6 +254,8 @@ "enable_monthly_backup": "Activează copia de siguranță lunară", "enable_weekly_backup": "Activează copia de siguranță săptămânală", "existing_backups": "Copii de siguranță existente", + "date-and-time": "Data și ora", + "path": "Calea fișierului", "no_backup_yet": "nu există încă nicio copie de siguranță" }, "basic_properties": {
    ${t("backup.date-and-time")}
    ${t('backup.no_backup_yet')}${t('backup.no_backup_yet')}