import { upperFirst } from './helpers.js'; import { getDefaultLanguage } from './translate.js'; import { getDefaultProfile } from './hafasClient.js'; let state = {}; const subscribers = new Set(); const defaultSettings = { language: getDefaultLanguage(), profile: getDefaultProfile(), products: {}, accessibility: 'none', walkingSpeed: 'normal', transferTime: 0, loyaltyCard: 'NONE', ageGroup: 'E', journeysViewMode: 'canvas', bikeFriendly: false, combineDateTime: false, showVia: false, showPrices: true, showDS100: true, }; export const settings = {}; export const initSettings = async () => { let properties = { subscribe: { value: callback => { subscribers.add(callback); return () => subscribers.delete(callback); }}, toggleProduct: { value: product => { let products = state.products; products[product] = !products[product]; localStorage[`products.${product}`] = JSON.stringify(products[product]); state.products = products; }, }, }; Object.keys(defaultSettings).forEach(key => { if (typeof defaultSettings[key] === 'object') { let prefix = `${key}.`; state[key] = {}; Object.keys(localStorage) .filter(element => element.startsWith(prefix)) .forEach(element => { state[key][element.slice(prefix.length)] = JSON.parse(localStorage[element]); }); } else { state[key] = localStorage[key] ? JSON.parse(localStorage[key]) : defaultSettings[key]; } properties[key] = { enumerable: true, get: () => state[key], set: newValue => { state[key] = newValue; if (typeof newValue === 'object') { Object.keys(newValue).forEach(objKey => { localStorage[`${key}.${objKey}`] = JSON.stringify(newValue[objKey]); }); } else { localStorage[key] = JSON.stringify(newValue); } subscribers.forEach(callback => callback(settings)); }, }; properties[`set${upperFirst(key)}`] = { value: newValue => { settings[key] = newValue; }, }; if (typeof defaultSettings[key] === 'boolean') properties[`toggle${upperFirst(key)}`] = { value: () => { settings[key] = !settings[key]; } }; }); Object.defineProperties(settings, properties); };