Settings refactor / add birb

This commit is contained in:
2026-05-13 12:30:45 -05:00
parent e728ddac2c
commit 82f47093a7
13 changed files with 192 additions and 74 deletions

64
public/js/main.js Normal file
View File

@@ -0,0 +1,64 @@
/*
* Function to handle settings toggles and the effects they control
* handleOnToggle: Function to be called if user turns the setting on
* handleOnDefault: Function to be called if the setting is on by default
* handleOffToggle: Function to be called if user turns the setting off
* handleOffDefault: Function to be called if the setting is off by default
* settingToggle: String - ID of the user-facing toggle element to control the effect
* preferenceName: String - Name to be used to record the user's setting preference in local storage'
* defaultSetting: Boolean
* forcedOn: Boolean - whether to ignore the user preference if defaultSetting = true
*/
const settingHandler = (settingsObject) => {
const toggle = document.getElementById(settingsObject.settingToggle);
const preference = localStorage.getItem(settingsObject.preferenceName);
// Report settings
console.info(
`
Settings: ${settingsObject.preferenceName}
----------
Default: ${settingsObject.defaultSetting}
Forced on: ${settingsObject.forcedOn}
User preference: ${preference}
`,
);
// User preference is positive
if (preference === "1") {
toggle.checked = true;
settingsObject.forcedOn ? (toggle.disabled = true) : null;
settingsObject.handleOnDefault();
} else if (settingsObject.defaultSetting && settingsObject.forcedOn) {
// Default on, user preference ignored
toggle.checked = true;
toggle.disabled = true;
settingsObject.handleOnDefault();
} else if (settingsObject.defaultSetting && !preference) {
// Default on, no user preference
toggle.checked = true;
settingsObject.forcedOn ? (toggle.disabled = true) : null;
settingsObject.handleOnDefault();
} else {
toggle.checked = false;
settingsObject.handleOffDefault();
}
// Handle setting toggle
toggle.addEventListener("change", function () {
if (this.checked) {
console.info(
`Settings: User turned on ${settingsObject.preferenceName}.`,
);
localStorage.setItem(settingsObject.preferenceName, 1);
settingsObject.handleOnToggle();
} else {
console.info(
`Settings: User turned off ${settingsObject.preferenceName}.`,
);
localStorage.setItem(settingsObject.preferenceName, 0);
settingsObject.handleOffToggle();
}
});
};