65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
/*
|
|
* 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();
|
|
}
|
|
});
|
|
};
|