diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/static/client3.js | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/static/client3.js b/src/static/client3.js index 7d6544a0..64f5b377 100644 --- a/src/static/client3.js +++ b/src/static/client3.js @@ -18,7 +18,7 @@ const clientSteps = { addPageListeners: [], }; -function initInfo(key, description) { +function initInfo(infoKey, description) { const object = {...description}; for (const obj of [ @@ -31,7 +31,47 @@ function initInfo(key, description) { Object.preventExtensions(obj); } - clientInfo[key] = object; + if (object.session) { + const sessionDefaults = object.session; + + object.session = {}; + + for (const [key, defaultValue] of Object.entries(sessionDefaults)) { + const storageKey = `hsmusic.${infoKey}.${key}`; + + let fallbackValue = defaultValue; + + Object.defineProperty(object.session, key, { + get: () => { + try { + return sessionStorage.getItem(storageKey) ?? defaultValue; + } catch (error) { + if (error instanceof DOMException) { + return fallbackValue; + } else { + throw error; + } + } + }, + + set: (value) => { + try { + sessionStorage.setItem(storageKey, value); + } catch (error) { + if (error instanceof DOMException) { + fallbackValue = value; + } else { + throw error; + } + } + }, + }); + } + + Object.preventExtensions(object.session); + } + + clientInfo[infoKey] = object; return object; } |