diff options
author | 0neGal <mail@0negal.com> | 2023-01-29 22:22:22 +0100 |
---|---|---|
committer | 0neGal <mail@0negal.com> | 2023-01-29 22:22:22 +0100 |
commit | 052d121b06021729274ee7ac68b3d306c968687d (patch) | |
tree | 352b491b746555171a8bb7ce5e880b2d39c38b15 /src/app/js/settings.js | |
parent | 64aad4e22abd95b67ee657723e31257419bed662 (diff) | |
parent | 4b94ba7ae03317e1dee75d637f7355f49c1f2086 (diff) | |
download | Viper-052d121b06021729274ee7ac68b3d306c968687d.tar.gz Viper-052d121b06021729274ee7ac68b3d306c968687d.zip |
Merge branch 'main' into linux-launch
Diffstat (limited to 'src/app/js/settings.js')
-rw-r--r-- | src/app/js/settings.js | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/src/app/js/settings.js b/src/app/js/settings.js new file mode 100644 index 0000000..34975fe --- /dev/null +++ b/src/app/js/settings.js @@ -0,0 +1,144 @@ +var Settings = { + toggle: (state) => { + if (state) { + Settings.load(); + options.scrollTo(0, 0); + overlay.classList.add("shown"); + options.classList.add("shown"); + + return + } else if (! state) { + if (state != undefined) { + overlay.classList.remove("shown"); + options.classList.remove("shown"); + return + } + } + + Settings.load(); + options.scrollTo(0, 0); + overlay.classList.toggle("shown"); + options.classList.toggle("shown"); + }, + apply: () => { + settings = {...settings, ...Settings.get()}; + ipcRenderer.send("save-settings", Settings.get()); + }, + reloadSwitches: () => { + let switches = document.querySelectorAll(".switch"); + + for (let i = 0; i < switches.length; i++) { + switches[i].setAttribute("onclick", `Settings.switch(${i})`); + } + }, + switch: (element, state) => { + let switches = document.querySelectorAll(".switch"); + if (switches[element]) { + element = switches[element]; + } + + let on = () => { + element.classList.add("on"); + element.classList.remove("off"); + } + + let off = () => { + element.classList.add("off"); + element.classList.remove("on"); + } + + if (state != undefined) { + if (state) {on()} else {off()} + } else { + if (element.classList.contains("on")) {off()} else {on()} + } + + Settings.reloadSwitches(); + }, + get: () => { + let opts = {}; + let options = document.querySelectorAll(".option"); + + for (let i = 0; i < options.length; i++) { + let optName = options[i].getAttribute("name"); + if (options[i].querySelector(".actions input")) { + let input = options[i].querySelector(".actions input").value; + if (options[i].getAttribute("type")) { + opts[optName] = input.split(" "); + } else { + opts[optName] = input; + } + } else if (options[i].querySelector(".actions select")) { + opts[optName] = options[i].querySelector(".actions select").value; + } else if (options[i].querySelector(".actions .switch")) { + if (options[i].querySelector(".actions .switch.on")) { + opts[optName] = true; + } else { + opts[optName] = false; + } + } + } + + return opts; + }, + load: () => { + let options = document.querySelectorAll(".option"); + + for (let i = 0; i < options.length; i++) { + let optName = options[i].getAttribute("name"); + if (optName == "forcedlang") { + let div = options[i].querySelector("select"); + + div.innerHTML = ""; + let langs = fs.readdirSync(__dirname + "/../lang"); + for (let i in langs) { + title = JSON.parse(fs.readFileSync(__dirname + `/../lang/${langs[i]}`, "utf8"))["lang.title"]; + if (title) { + div.innerHTML += `<option value="${langs[i].replace(/\..*$/, '')}">${title}</option>` + } + + } + + div.value = settings.forcedlang; + continue; + } + + if (settings[optName] != undefined) { + switch(typeof settings[optName]) { + case "string": + options[i].querySelector(".actions input").value = settings[optName]; + break + case "object": + options[i].querySelector(".actions input").value = settings[optName].join(" "); + break + case "boolean": + let switchDiv = options[i].querySelector(".actions .switch"); + if (settings[optName]) { + switchDiv.classList.add("on"); + switchDiv.classList.remove("off"); + } else { + switchDiv.classList.add("off"); + switchDiv.classList.remove("on"); + } + break + + } + } + } + + if (process.platform == "win32") { + let linuxopts = document.querySelectorAll(".options .linuxopt"); + for (let i = 0; i < linuxopts.length; i++) { + linuxopts[i].style.display = "none"; + } + } + + ipcRenderer.send("can-autoupdate"); + ipcRenderer.on("cant-autoupdate", () => { + document.querySelector(".option[name=autoupdate]").style.display = "none"; + }) + } +} + +Settings.reloadSwitches(); +Settings.load(); |