Files
MIND/frontend/static/js/settings.js
2025-09-03 15:28:36 +02:00

141 lines
4.5 KiB
JavaScript

const settingsEls = {
settings: {
showClock: document.querySelector('#clock-input'),
locale: document.querySelector('#locale-input'),
defaultService: document.querySelector('#default-service-input'),
},
editAccount: {
start: document.querySelector("#start-edit-account"),
dialog: document.querySelector("#edit-account-dialog"),
form: document.querySelector("#edit-account-form"),
close: document.querySelector("#close-edit-account"),
inputContainers: {
username: document.querySelector("#edit-account-form .checked-input-container:has(input[type='text'])")
},
inputs: {
username: document.querySelector("#edit-account-username-input"),
password: document.querySelector("#edit-account-password-input")
},
errors: {
usernameInvalid: document.querySelector('#edit-invalid-username-error'),
usernameTaken: document.querySelector('#edit-taken-username-error')
}
},
deleteAccount: {
dialog: document.querySelector('#delete-user-dialog'),
close: document.querySelector('#close-delete-user'),
confirm: document.querySelector('#confirm-delete-user'),
button: document.querySelector('#delete-account-button')
}
}
function loadSettings() {
const values = getLocalStorage()
settingsEls.settings.locale.value = values['locale']
settingsEls.settings.showClock.value = values['show_clock']
// Default Service is handled by notification.fillNotificationSelection()
}
function updateLocale() {
setLocalStorage({'locale': settingsEls.settings.locale.value})
fillLibrary(reminderTypes.reminder)
setupClock()
}
function updateDefaultService() {
setLocalStorage({'default_service': parseInt(settingsEls.settings.defaultService.value)})
// Add window is handled by show.showAdd()
}
function updateClockSetting() {
setLocalStorage({'show_clock': settingsEls.settings.showClock.value})
setupClock()
}
function openEditAccount() {
settingsEls.editAccount.inputContainers.username.classList.remove('error-input-container')
hide([settingsEls.editAccount.errors.usernameInvalid, settingsEls.editAccount.errors.usernameTaken])
settingsEls.editAccount.inputs.username.value = ''
settingsEls.editAccount.inputs.password.value = ''
settingsEls.editAccount.dialog.showModal()
}
function closeEditAccount() {
settingsEls.editAccount.dialog.close()
}
function editAccount() {
settingsEls.editAccount.inputContainers.username.classList.remove('error-input-container')
hide([settingsEls.editAccount.errors.usernameInvalid, settingsEls.editAccount.errors.usernameTaken])
const data = {}
if (settingsEls.editAccount.inputs.username.value !== '')
data.new_username = settingsEls.editAccount.inputs.username.value
if (settingsEls.editAccount.inputs.password.value !== '')
data.new_password = settingsEls.editAccount.inputs.password.value
if (Object.keys(data).length === 0) {
// Nothing changed
closeEditAccount()
return
}
sendAPI("PUT", "/user", {}, data)
.then(json => {
closeEditAccount()
})
.catch(e => {
e.json().then(e => {
if (e.error === 'UsernameInvalid') {
settingsEls.editAccount.errors.usernameInvalid.innerText = e.result.reason
hide([], [settingsEls.editAccount.errors.usernameInvalid])
settingsEls.editAccount.inputContainers.username.classList.add('error-input-container')
} else if (e.error === 'UsernameTaken') {
hide([], [settingsEls.editAccount.errors.usernameTaken])
settingsEls.editAccount.inputContainers.username.classList.add('error-input-container')
} else {
console.log(e)
}
})
})
}
function deleteAccount() {
sendAPI("DELETE", "/user")
.then(response => {
window.location.href = `${urlPrefix}/`
})
}
loadSettings()
settingsEls.settings.showClock.onchange = e => updateClockSetting()
settingsEls.settings.locale.onchange = e => updateLocale()
settingsEls.settings.defaultService.onchange = e => updateDefaultService()
settingsEls.deleteAccount.button.onclick = e =>
settingsEls.deleteAccount.dialog.showModal()
settingsEls.editAccount.start.onclick = e => openEditAccount()
settingsEls.editAccount.dialog.onclick = e => {
if (e.target === e.currentTarget) {
e.stopPropagation()
closeEditAccount()
}
}
settingsEls.editAccount.form.action = 'javascript:editAccount()'
settingsEls.editAccount.close.onclick = e => closeEditAccount()
settingsEls.deleteAccount.dialog.onclick = e => {
if (e.target === e.currentTarget) {
e.stopPropagation()
settingsEls.deleteAccount.dialog.close()
}
}
settingsEls.deleteAccount.close.onclick = e => settingsEls.deleteAccount.dialog.close()
settingsEls.deleteAccount.confirm.onclick = e => deleteAccount()