🔨 Convert backup setting modal to bootstrap

This commit is contained in:
SebClem 2021-01-08 19:05:12 +01:00
parent 7d4b796950
commit 039d01bf64
7 changed files with 201 additions and 310 deletions

View File

@ -2323,7 +2323,7 @@ textarea.form-control-lg {
color: #b58e51;
vertical-align: middle;
background-color: #343a40;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23b58e51' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");
background-repeat: no-repeat;
background-position: right 0.75rem center;
background-size: 16px 12px;
@ -2732,7 +2732,7 @@ textarea.form-control-lg {
.was-validated .form-select:valid, .form-select.is-valid {
border-color: #198754;
padding-right: calc(0.75em + 2.3125rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23b58e51' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
background-position: right 0.75rem center, center right 1.75rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
@ -2808,7 +2808,7 @@ textarea.form-control-lg {
.was-validated .form-select:invalid, .form-select.is-invalid {
border-color: #dc3545;
padding-right: calc(0.75em + 2.3125rem);
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23b58e51' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");
background-position: right 0.75rem center, center right 1.75rem;
background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
}
@ -10668,4 +10668,8 @@ textarea.form-control-lg {
color: #b58e51;
}
input[type=time]::-webkit-calendar-picker-indicator {
filter: invert(63%) sepia(23%) saturate(819%) hue-rotate(358deg) brightness(88%) contrast(91%);
}
/*# sourceMappingURL=custom_bootstrap.css.map */

File diff suppressed because one or more lines are too long

View File

@ -6,6 +6,7 @@ var last_auto_back = "";
const default_toast_timeout = 10000;
let loadingModal = null;
let nextcloud_setting_modal;
let backup_setting_modal;
document.addEventListener('DOMContentLoaded', function () {
$.ajaxSetup({ traditional: true });
updateLocalSnaps();
@ -15,6 +16,7 @@ document.addEventListener('DOMContentLoaded', function () {
backdrop: 'static'
});
nextcloud_setting_modal = new bootstrap.Modal(document.getElementById('modal-settings-nextcloud'));
backup_setting_modal = new bootstrap.Modal(document.getElementById('modal-settings-backup'));
setInterval(update_status, 500);
setInterval(updateLocalSnaps, 5000);
@ -171,12 +173,10 @@ function listeners() {
$('#trigger-backup-settings').click(getBackupSettings);
$('#btn-backup-now').click(backupNow);
$('#btn-clean-now').click(cleanNow);
$('#cron-drop-settings').change(updateDropVisibility);
$('#save-backup-settings').click(sendBackupSettings);
$('#cron-drop-day-month').on('input', function () {
$('#cron-drop-day-month-read').val($(this).val());
});
$('#local-snap-keep').on('input', function () {
$('#local-snap-keep-read').val($(this).val());
@ -236,7 +236,8 @@ function sendNextcloudSettings() {
.done((data) => {
console.log('Saved');
$('#nextcloud_settings_message').parent().addClass("d-none");
create_toast("success", "Nextcloud settings saved !", default_toast_timeout);0
create_toast("success", "Nextcloud settings saved !", default_toast_timeout);
0
})
.fail((data) => {
if (data.status == 406) {
@ -334,47 +335,26 @@ function getBackupSettings() {
}
}
changeSelect('#cron-drop-settings', data.settings.cron_base);
$('#cron-drop-settings').change(updateDropVisibility);
$('#cron-drop-settings').val(data.settings.cron_base);
$('#name-template').val(data.settings.name_template);
$('#name-template + label').removeClass("active");
$('#name-template + label').addClass("active");
let timepicker = document.querySelector('#timepicker');
$('#timepicker').val(data.settings.cron_hour);
$('#timepicker + label').removeClass("active");
$('#timepicker + label').addClass("active");
if (M.Timepicker.getInstance(timepicker) != null)
M.Timepicker.getInstance(timepicker).destroy();
M.Timepicker.init(timepicker, {
defaultTime: data.settings.cron_hour,
twelveHour: false,
container: 'body'
});
$('#cron-drop-day-month-read').val(data.settings.cron_month_day);
$('#cron-drop-day-month').val(data.settings.cron_month_day);
$('#cron-drop-day-month-read + label').removeClass("active");
$('#cron-drop-day-month-read + label').addClass("active");
$('#auto_clean_local').prop('checked', data.settings.auto_clean_local == "true");
$('#auto_clean_local').prop('checked', data.settings.auto_clean_local === "true");
$('#local-snap-keep').val(data.settings.auto_clean_local_keep);
$('#auto_clean_backup').prop('checked', data.settings.auto_clean_backup == "true");
$('#auto_clean_backup').prop('checked', data.settings.auto_clean_backup === "true");
$('#backup-snap-keep').val(data.settings.auto_clean_backup_keep);
$('#backup-snap-keep + label').removeClass("active");
$('#backup-snap-keep + label').addClass("active");
$('#local-snap-keep + label').removeClass("active");
$('#local-snap-keep + label').addClass("active");
changeSelect('#cron-drop-day', data.settings.cron_weekday);
$('#cron-drop-day').val(data.settings.cron_weekday);
let folder_html = ""
for (let index in data.folders) {
let thisFolder = data.folders[index];
let exclude = data.settings.exclude_folder.includes(thisFolder.slug);
folder_html += `<li><label><input type="checkbox" class="folders-box" id="${thisFolder.slug}" ${exclude ? "" : "checked=checked"}/><span>${thisFolder.name}</span></label></li>`
folder_html += `<li class="list-group-item"><div class="form-check"><input class="form-check-input addons-box" type="checkbox" id="${thisFolder.slug}" ${exclude ? "" : "checked"}><label class="form-label mb-0" for="${thisFolder.slug}">${thisFolder.name}</label></div></li>`
}
$("#folders-div").html(folder_html);
@ -382,12 +362,13 @@ function getBackupSettings() {
for (let index in data.addonList) {
let thisAddon = data.addonList[index];
let exclude = data.settings.exclude_addon.includes(thisAddon.slug);
addons_html += `<li><label><input type="checkbox" class="addons-box" id="${thisAddon.slug}" ${exclude ? "" : "checked=checked"}/><span>${thisAddon.name}</span></label></li>`
addons_html += `<li class="list-group-item"><div class="form-check"><input class="form-check-input addons-box" type="checkbox" id="${thisAddon.slug}" ${exclude ? "" : "checked"}><label class="form-label mb-0" for="${thisAddon.slug}">${thisAddon.name}</label></div></li>`
}
$("#addons-div").html(addons_html);
updateDropVisibility();
loadingModal.hide();
M.Modal.getInstance(document.querySelector("#modal-settings-backup")).open()
backup_setting_modal.show();
});
@ -398,25 +379,25 @@ function updateDropVisibility() {
switch (cronBase) {
case "3":
$('#timepicker').parent().parent().removeClass("hide");
$('#cron-drop-day').parent().parent().parent().addClass("hide");
$('#cron-drop-day-month').parent().parent().parent().removeClass("hide");
$('#timepicker').parent().parent().removeClass("d-none");
$('#cron-drop-day').parent().parent().addClass("d-none");
$('#cron-drop-day-month').parent().parent().removeClass("d-none");
break;
case "2":
$('#timepicker').parent().parent().removeClass("hide");
$('#cron-drop-day').parent().parent().parent().removeClass("hide");
$('#cron-drop-day-month').parent().parent().parent().addClass("hide");
$('#timepicker').parent().parent().removeClass("d-none");
$('#cron-drop-day').parent().parent().removeClass("d-none");
$('#cron-drop-day-month').parent().parent().addClass("d-none");
break;
case "1":
$('#timepicker').parent().parent().removeClass("hide");
$('#cron-drop-day').parent().parent().parent().addClass("hide");
$('#cron-drop-day-month').parent().parent().parent().addClass("hide");
$('#timepicker').parent().parent().removeClass("d-none");
$('#cron-drop-day').parent().parent().addClass("d-none");
$('#cron-drop-day-month').parent().parent().addClass("d-none");
break;
case "0":
$('#timepicker').parent().parent().addClass("hide");
$('#cron-drop-day').parent().parent().parent().addClass("hide");
$('#cron-drop-day-month').parent().parent().parent().addClass("hide");
$('#timepicker').parent().parent().addClass("d-none");
$('#cron-drop-day').parent().parent().addClass("d-none");
$('#cron-drop-day-month').parent().parent().addClass("d-none");
break;
}
}
@ -445,6 +426,7 @@ function sendBackupSettings() {
}
loadingModal.show();
backup_setting_modal.hide();
$.post('./api/backup-settings',
{
name_template: name_template,
@ -461,25 +443,13 @@ function sendBackupSettings() {
})
.done(() => {
create_toast("success", "Backup settings saved !", default_toast_timeout);
M.Modal.getInstance(document.querySelector('#modal-settings-backup')).close();
})
.fail(() => {
create_toast("error", "Can't save backup settings !", default_toast_timeout);
M.toast({
html: '<i class="material-icons" style="margin-right:10px">warning</i> Can\'t save backup settings !',
classes: "red"
});
}).always(() => {
backup_setting_modal.show();
})
.always(() => {
loadingModal.hide();
});
}
function changeSelect(selector, value) {
let selectBaseRaw = document.querySelector(selector);
if (M.FormSelect.getInstance(selectBaseRaw) != null)
M.FormSelect.getInstance(selectBaseRaw).destroy();
$(selector + ' option[selected]').removeAttr('selected');
$(selector + ' option[value=' + value + ']').attr('selected', "true");
M.FormSelect.init(selectBaseRaw, {});
}

View File

@ -1,4 +1,3 @@
$body-bg: #222222;
$dark: #292929;
$secondary: #343a40;
@ -13,6 +12,8 @@ $input-color: $accent;
$input-bg: $secondary;
$input-border-color: $secondary;
$form-select-indicator-color: $accent;
$form-switch-color: $accent;
$form-switch-bg-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color}'/></svg>");
$form-check-input-border: 1px solid $accent !default;
@ -33,9 +34,15 @@ $alert-color-scale: -100%;
.bg-accent {
background-color: $accent;
}
.text-accent {
color: $accent;
}
input[type="time"]::-webkit-calendar-picker-indicator {
filter: invert(63%) sepia(23%) saturate(819%) hue-rotate(358deg) brightness(88%) contrast(91%);
}
//.form-switch .form-check-input{
// //background-color: $white;
// border-color: $white;

View File

@ -11,76 +11,10 @@
<link rel='stylesheet' href='./css/style.css'/>
<link rel="stylesheet" href="./css/custom_bootstrap.css">
<link rel="stylesheet" href="./css/fa-all.min.css">
<!-- <link rel="stylesheet" href="./css/toast.min.css">-->
<!-- <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">-->
<!-- <style>-->
<!-- .modal input[disabled] {-->
<!-- color: #757575 !important;-->
<!-- border-color: #616161 !important;-->
<!-- }-->
<!-- -->
<!-- .modal .input-field span.helper-text {-->
<!-- color: #9e9e9e;-->
<!-- -->
<!-- }-->
<!-- -->
<!-- .modal div.row:last-child {-->
<!-- margin-bottom: 0;-->
<!-- }-->
<!-- -->
<!-- .modal div.col:last-child {-->
<!-- margin-bottom: 0;-->
<!-- }-->
<!-- -->
<!-- @media (min-width: 601px) {-->
<!-- .header-box {-->
<!-- height: 150px;-->
<!-- }-->
<!-- }-->
<!-- -->
<!-- .header-box .col {-->
<!-- height: 100%;-->
<!-- }-->
<!-- -->
<!-- .header-box .col .card {-->
<!-- height: 100%;-->
<!-- }-->
<!-- -->
<!-- .header-box .card-content {-->
<!-- padding-top: 10px;-->
<!-- }-->
<!-- -->
<!-- .header-box .card-content h5 {-->
<!-- margin-top: 10px;-->
<!-- }-->
<!-- -->
<!-- ul.dropdown-content a:hover {-->
<!-- background-color: #101619 !important;-->
<!-- }-->
<!-- -->
<!-- ul.dropdown-content li:hover {-->
<!-- background-color: #101619 !important;-->
<!-- }-->
<!-- -->
<!-- /* change autocomplete color */-->
<!-- input:-webkit-autofill,-->
<!-- input:-webkit-autofill:hover,-->
<!-- input:-webkit-autofill:focus,-->
<!-- input:-webkit-autofill:active {-->
<!-- -webkit-box-shadow: 0 0 0 30px #263238 inset !important;-->
<!-- -webkit-text-fill-color: white !important;-->
<!-- }-->
<!-- -->
<!-- .select-dropdown {-->
<!-- color: white;-->
<!-- }-->
<!-- </style>-->
</head>
<body class="">
<nav class="navbar navbar-dark navbar-expand-lg">
<nav class="navbar navbar-dark navbar-expand">
<div class="container">
<a href="#" class="navbar-brand p-0">
<img src="./images/Nextcloud_Logo.svg" height="40">
@ -93,13 +27,12 @@
data-bs-toggle="dropdown" aria-expanded="false">
<i class="fas fa-cogs"></i>
</a>
<ul class="dropdown-menu dropdown-menu-dark" aria-labelledby="dropdown-settings">
<li><a href="#modal-settings-nextcloud" id="trigger-nextcloud-settings"
<ul class="dropdown-menu dropdown-menu-dark dropdown-menu-end" aria-labelledby="dropdown-settings">
<li><a href="#" id="trigger-nextcloud-settings"
class="modal-trigger dropdown-item">Nextcloud</a>
</li>
<li><a href="#" id="trigger-backup-settings" class="dropdown-item">Backup</a></li>
</ul>
</li>
</ul>
</div>

View File

@ -1,44 +1,49 @@
<div id="modal-settings-backup" class="modal modal-fixed-footer blue-grey darken-4 white-text">
<div class="modal-content">
<div class="row" style="margin-bottom: 5px;">
<div class="col s12 center" >
<h4>Backup Settings</h2>
</div>
<div id="modal-settings-backup" class="modal fade">
<div class="modal-dialog modal-lg">
<div class="modal-content bg-dark text-white">
<div class="modal-header border-secondary">
<h5 class="modal-title" id="exampleModalLabel">Backup Settings</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"
aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col s12 center divider">
</div>
</div>
<div class="row">
<div class="input-field col offset-xl2 xl8 offset-l1 l10 m12 s12">
<input id="name-template" type="text" class="white-text">
<label for="name-template">Backup name</label>
<span class="helper-text">You can find all available variables <a target="_blank"
href="https://github.com/Sebclem/hassio-nextcloud-backup/blob/master/naming_template.md">here</a></span>
<div class="col-12 col-lg-10 offset-lg-1">
<label for="name-template" class="form-label">Backup name</label>
<input id="name-template" type="text" class="form-control" aria-describedby="help-template">
<span id="help-template" class="form-text">
You can find all available variables
<a target="_blank"
href="https://github.com/Sebclem/hassio-nextcloud-backup/blob/master/naming_template.md">
here
</a>
</span>
</div>
</div>
<div class="row">
<div class="input-field col offset-xl2 xl8 offset-l1 l10 m12 s12">
<select id="cron-drop-settings">
<div class="row mt-2">
<div class="col-12 col-lg-10 offset-lg-1">
<label for="cron-drop-settings" class="form-label">Auto Backup</label>
<select id="cron-drop-settings" class="form-select">
<option value="0">Disable</option>
<option value="1">Daily</option>
<option value="2">Weekly</option>
<option value="3">Monthly</option>
</select>
<label>Auto Backup</label>
</div>
</div>
<div class="row hide">
<div class="input-field col offset-xl2 xl8 offset-l1 l10 m12 s12">
<input type="text" class="timepicker white-text" readonly="true" id="timepicker">
<label>Hour </label>
<div class="row d-none mt-2">
<div class="col-12 col-lg-10 offset-lg-1">
<label for="timepicker" class="form-label">Hour </label>
<input type="time" class="form-control" id="timepicker">
</div>
</div>
<div class="row hide">
<div class="input-field col offset-xl2 xl8 offset-l1 l10 m12 s12">
<select id="cron-drop-day">
<div class="row d-none mt-2">
<div class="col-12 col-lg-10 offset-lg-1">
<label for="cron-drop-day" class="form-label">Day</label>
<select id="cron-drop-day" class="form-select">
<option value="1">Monday</option>
<option value="2">Tuesday</option>
<option value="3">Wednesday</option>
@ -47,101 +52,82 @@
<option value="6">Saturday</option>
<option value="0">Sunday</option>
</select>
<label>Day</label>
</div>
</div>
<div class="row hide">
<div class="input-field col s2">
<input type="text" class="white-text" disabled readonly="true" id="cron-drop-day-month-read">
<label class="white-text active">Day of month</label>
<div class="row d-none mt-2">
<div class="col-12 col-lg-10 offset-lg-1">
<label for="cron-drop-day-month" class="form-label">Day of month</label>
<input type="number" class="form-control" id="cron-drop-day-month" min="1" max="28">
</div>
<div class="input-field col s10">
<p class="range-field">
<input type="range" id="cron-drop-day-month" min="1" max="28" style="border: none;" />
</p>
</div>
</div>
<div class="row mt-3">
<div class="col-12 col-lg-6">
<div class="row">
<div class="col offset-xl1 xl5 l6 m12 s12">
<div class="row">
<div class="col s12 center">
<div class="col-12 text-center">
<h5>Folders</h5>
</div>
</div>
<div class="row">
<div class="col offset-s1 s11 xl10 offset-xl2" >
<ul id="folders-div">
<div class="col-12">
<ul id="folders-div" class="list-group">
</ul>
</div>
</div>
</div>
<div class="col xl5 l6 m12 s12" >
<div class="col-12 col-lg-6">
<div class="row">
<div class="col s12 center">
<div class="col-12 text-center">
<h5>Addons</h5>
</div>
</div>
<div class="row">
<div class="col offset-s1 s11 xl10 offset-xl2">
<ul id="addons-div">
<div class="col-12">
<ul id="addons-div" class="list-group">
</ul>
</div>
</div>
</div>
</div>
<div class="row" style="margin-bottom: 5px;">
<div class="col s12 center">
<h4>Auto Clean Settings</h2>
<div class="row mt-3">
<div class="col-12 text-center">
<h4>Auto Clean Settings</h4>
</div>
</div>
<div class="row mt-3">
<div class="col-12 col-md-5 offset-md-1">
<div class="row">
<div class="col s12 center divider">
<div class="col-12">
<div class="form-check form-switch">
<input class="form-check-input" id="auto_clean_local" type="checkbox">
<label class="form-check-label" for="auto_clean_local">Auto Clean Local Snapshots</label>
</div>
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<label for="local-snap-keep" class="form-label">Local snapshot to keep</label>
<input type="number" class="form-control" id="local-snap-keep" min="0">
</div>
</div>
</div>
<div class="col-12 col-md-5">
<div class="row">
<div class="col offset-xl1 xl5 l6 m12 s12">
<div class="row" style="margin-bottom: 10px;">
<div class="col s12">
<div style="color: #9e9e9e; display: inline;">Auto Clean Local Snapshots</div>
<div class="switch" style="display: inline;">
<label>
<input id="auto_clean_local" type="checkbox">
<span class="lever"></span>
</label>
</div>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input type="number" class="white-text" id="local-snap-keep">
<label class="active">Local snapshot to keep</label>
<div class="col-12">
<div class="form-check form-switch">
<input class="form-check-input" id="auto_clean_backup" type="checkbox">
<label class="form-check-label" for="auto_clean_backup">Auto Clean Nextcloud Snapshots</label>
</div>
</div>
</div>
<div class="col xl5 l6 m12 s12" >
<div class="row" style="margin-bottom: 10px;">
<div class="col s12">
<div style="color: #9e9e9e; display: inline;">Auto Clean Nextcloud Snapshots</div>
<div class="switch" style="display: inline;">
<label>
<input id="auto_clean_backup" type="checkbox">
<span class="lever"></span>
</label>
</div>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input type="number" class="white-text" id="backup-snap-keep">
<label class="active">Nextcloud snapshot to keep</label>
<div class="row mt-2">
<div class="col-12">
<label for="backup-snap-keep" class="form-label">Nextcloud snapshot to keep</label>
<input type="number" class="form-control" id="backup-snap-keep" min="0">
</div>
</div>
@ -149,21 +135,12 @@
</div>
</div>
<div class="row" style="margin-bottom: 10px;">
</div>
<div class="row">
</div>
</div>
<div class="modal-footer blue-grey darken-4">
<a href="#" class="modal-close waves-effect btn red"><b>Cancel</b></a>
<a href="#" class="btn green waves-effect" style="margin-left: 5px;" id="save-backup-settings"><b>Save</b></a>
<button data-bs-dismiss="modal" class="btn btn-danger"><b>Cancel</b></button>
<button class="btn btn-success" id="save-backup-settings"><b>Save</b></button>
</div>
</div>
</div>
</div>