www.spaceplanner.app

Web client to the spaceplanner API
git clone git://jacobedwards.org/www.spaceplanner.app
Log | Files | Refs

commit d1f7c01c47857a2c667a5b3ba976b1dc6126dd0d
parent 5b607cce87925f3cadac170ed162a827fc4ca7fe
Author: Jacob R. Edwards <jacob@jacobedwards.org>
Date:   Wed,  2 Oct 2024 10:43:12 -0700

Add developer settings api

These are persistent per-device settings meant to be used for aiding
development. The api exports one function to get and set settings
and an object representing all the settings.

Diffstat:
Afiles/lib/dev.js | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+), 0 deletions(-)

diff --git a/files/lib/dev.js b/files/lib/dev.js @@ -0,0 +1,53 @@ +let _settings = { + devapi: { name: "Developer API", type: "bool", brief: "Don't use the production API" } +} + +for (let k in _settings) { + switch (_settings[k].type) { + case "bool": + case "string": + break; + default: + console.error(`"${k}" developer setting has an invalid type (${_settings[k].type}); deleting`) + delete _settings[k] + continue + } + _settings[k].key = k +} + +export const settings = _settings + +export function setting(k, v) { + if (v === undefined) { + if (settings[k] == undefined) { + console.error(`Tried to access undefined setting "${k}": ${new Error("").stack}`) + return undefined + } + return getValue(k) + } + setValue(k, v) +} + +function getValue(k) { + let v = localStorage.getItem(storageKey(k)) + console.log("dev.getValue", k, v) + if (settings[k].type === "bool") { + return v == "true" + } else if (settings[k].type === "string") { + return v + } + throw new Error("Invalid setting type") +} + +function setValue(k, v) { + console.log("dev.setValue", k, v) + if (v == null) { + localStorage.removeItem(storageKey(k)) + } else { + localStorage.setItem(storageKey(k), v) + } +} + +function storageKey(k) { + return "dev-" + k +}