/* * 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(); } }); };