Skip to content

Commit

Permalink
config.js: config change event listeners
Browse files Browse the repository at this point in the history
  • Loading branch information
throwaway96 committed Mar 29, 2024
1 parent f82dc8f commit f6dc7c0
Showing 1 changed file with 41 additions and 1 deletion.
42 changes: 41 additions & 1 deletion src/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,15 @@ const defaultConfig = (() => {
return ret;
})();

/** @type {Record<string, DocumentFragment>} as const */
const configFrags = (() => {
let ret = {};
for (const k of configOptions.keys()) {
ret[k] = new DocumentFragment();
}
return ret;
})();

function loadStoredConfig() {
const storage = window.localStorage.getItem(CONFIG_KEY);

Expand Down Expand Up @@ -95,7 +104,38 @@ export function configWrite(key, value) {
throw new Error('tried to write unknown config key: ' + key);
}

console.info('Setting key', key, 'to', value);
const oldValue =
localConfig[key] !== undefined ? localConfig[key] : defaultConfig[key];

console.info('Changing key', key, 'from', oldValue, 'to', value);
localConfig[key] = value;
window.localStorage[CONFIG_KEY] = JSON.stringify(localConfig);

configFrags[key].dispatchEvent(
new CustomEvent('ytafConfigChange', {
detail: { key, newValue: value, oldValue }
})
);
}

/**
* Add a listener for changes in the value of a specified config option
* @param {string} key Config option to monitor
* @param {(evt: Event) => void} callback Function to be called on change
*/
export function configAddChangeListener(key, callback) {
const frag = configFrags[key];

frag.addEventListener('ytafConfigChange', callback);
}

/**
* Remove a listener for changes in the value of a specified config option
* @param {string} key Config option to monitor
* @param {(evt: Event) => void} callback Function to be called on change
*/
export function configRemoveChangeListener(key, callback) {
const frag = configFrags[key];

frag.removeEventListener('ytafConfigChange', callback);
}

0 comments on commit f6dc7c0

Please sign in to comment.