import { _get, _post, _delete, rmAttr, addAttr } from "../modules/common.js"; import { Focus, Unfocus } from "../modules/admin.js"; interface Profile { Admin: boolean; LibraryAccess: string; FromUser: string; } export const populateProfiles = (noTable?: boolean): void => _get("/profiles", null, function (): void { if (this.readyState == 4 && this.status == 200) { const profileList = document.getElementById('profileList'); profileList.textContent = ''; window.availableProfiles = [this.response["default_profile"]]; for (let name in this.response["profiles"]) { if (name != window.availableProfiles[0]) { window.availableProfiles.push(name); } const reqProfile = this.response["profiles"][name]; if (!noTable && name != "default_profile") { const profile: Profile = { Admin: reqProfile["admin"], LibraryAccess: reqProfile["libraries"], FromUser: reqProfile["fromUser"] }; profileList.innerHTML += ` ${name} ${profile.FromUser} ${profile.Admin ? "Yes" : "No"} ${profile.LibraryAccess} `; } } } }); export const openSettings = (settingsList: HTMLElement, settingsContent: HTMLElement, callback?: () => void): void => _get("/config", null, function (): void { if (this.readyState == 4 && this.status == 200) { settingsList.textContent = ''; window.config = this.response; for (const i in window.config["order"]) { const section: string = window.config["order"][i] const sectionCollapse = document.createElement('div') as HTMLDivElement; Unfocus(sectionCollapse); sectionCollapse.id = section; const title: string = window.config[section]["meta"]["name"]; const description: string = window.config[section]["meta"]["description"]; const entryListID: string = `${section}_entryList`; // const footerID: string = `${section}_footer`; sectionCollapse.innerHTML = `
${description}
`; for (const x in config[section]["order"]) { const entry: string = config[section]["order"][x]; if (entry == "meta") { continue; } let entryName: string = window.config[section][entry]["name"]; let required = false; if (window.config[section][entry]["required"]) { entryName += ` *`; required = true; } if (window.config[section][entry]["requires_restart"]) { entryName += ` R`; } if ("description" in window.config[section][entry]) { entryName +=` `; } const entryValue: boolean | string = window.config[section][entry]["value"]; const entryType: string = window.config[section][entry]["type"]; const entryGroup = document.createElement('div'); if (entryType == "bool") { entryGroup.classList.add("form-check"); entryGroup.innerHTML = ` `; (entryGroup.querySelector('input[type=checkbox]') as HTMLInputElement).onclick = function (): void { const me = this as HTMLInputElement; for (const y in window.config["order"]) { const sect: string = window.config["order"][y]; for (const z in window.config[sect]["order"]) { const ent: string = window.config[sect]["order"][z]; if (`${sect}_${window.config[sect][ent]['depends_true']}` == me.id) { (document.getElementById(`${sect}_${ent}`) as HTMLInputElement).disabled = !(me.checked); } else if (`${sect}_${window.config[sect][ent]['depends_false']}` == me.id) { (document.getElementById(`${sect}_${ent}`) as HTMLInputElement).disabled = me.checked; } } } }; } else if ((entryType == 'text') || (entryType == 'email') || (entryType == 'password') || (entryType == 'number')) { entryGroup.classList.add("form-group"); entryGroup.innerHTML = ` `; } else if (entryType == 'select') { entryGroup.classList.add("form-group"); const entryOptions: Array = window.config[section][entry]["options"]; let innerGroup = ` `; entryGroup.innerHTML = innerGroup; } sectionCollapse.getElementsByClassName(entryListID)[0].appendChild(entryGroup); } settingsList.innerHTML += ` `; settingsContent.appendChild(sectionCollapse); } if (callback) { callback(); } } }); export function showSetting(id: string, runBefore?: () => void): void { const els = document.getElementById('settingsLeft').querySelectorAll("button[type=button]:not(.static)") as NodeListOf; for (let i = 0; i < els.length; i++) { const el = els[i]; if (el.id != `${id}_button`) { rmAttr(el, "active"); } const sectEl = document.getElementById(el.id.replace("_button", "")); if (sectEl.id != id) { Unfocus(sectEl); } } addAttr(document.getElementById(`${id}_button`), "active"); const section = document.getElementById(id); if (runBefore) { runBefore(); } Focus(section); if (screen.width <= 1100) { // ugly setTimeout((): void => section.scrollIntoView({ block: "center", behavior: "smooth" }), 200); } }