localStorageView = (
key,
{ bindTo = undefined, defaultValue = null, json = false } = {}
) => {
const id = DOM.uid().id;
const ui = htl.html`<div class="observablehq--inspect" style="display:flex">
<code>localStorageView(<span class="observablehq--string">"${key}"</span>): </code><span id="${id}">${inspect(
localStorage.getItem(key) || defaultValue
)}</span>
</div>`;
const holder = ui.querySelector(`#${id}`);
const view = Object.defineProperty(ui, "value", {
get: () => {
const val = json
? JSON.parse(localStorage.getItem(key))
: localStorage.getItem(key);
return val || defaultValue;
},
set: (value) => {
value = json ? JSON.stringify(value) : value;
holder.removeChild(holder.firstChild);
holder.appendChild(inspect(localStorage.getItem(key) || defaultValue));
localStorage.setItem(key, value);
},
enumerable: true
});
if (bindTo) {
Inputs.bind(bindTo, view);
}
return view;
}