yet-another-blog/frontend/public/js/admin.js

33 lines
1.2 KiB
JavaScript

async function toggleState(setting_name, new_value, element_id) {
// Show spinner
qs(`#${element_id}`).parentNode.querySelector(".spinner").classList.remove("hidden");
// Send request
const form = new FormData();
form.append("setting_name", setting_name);
form.append("value", new_value);
const response = await request("/setting", "POST", form);
// Check response for errors
if (response.body.success) {
qs(`#${element_id}`).parentNode.querySelector(".spinner").classList.add("hidden");
// Update visual to reflect current setting
// Class
const add_class = new_value ? "good" : "bad";
const remove_class = new_value ? "bad" : "good";
qs(`#${element_id}`).classList.remove(remove_class);
qs(`#${element_id}`).classList.add(add_class);
// Text
const new_text = new_value ? "Enabled" : "Disabled";
qs(`#${element_id}`).children[0].innerText = new_text;
// Function
const add_function = new_value ? "toggleState('ACCOUNT_REGISTRATION', false, this.id)" : "toggleState('ACCOUNT_REGISTRATION', true, this.id)";
qs(`#${element_id}`).removeAttribute("onclick");
qs(`#${element_id}`).setAttribute("onclick", add_function);
}
}