Settings refactor / add birb
This commit is contained in:
64
public/js/main.js
Normal file
64
public/js/main.js
Normal 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();
|
||||
}
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user