Public
Edited
Nov 13
2 forks
Importers
35 stars
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
viewof example1storage = localStorageView("example1")
Insert cell
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;
}
Insert cell
localStorageView.value
Insert cell
Insert cell
// Note you need to get these the right way round to have the page load work correctly
Inputs.bind(viewof example1, viewof example1storage)
Insert cell
Insert cell
Insert cell
viewof jsonView = localStorageView("json", {
json: true
})
Insert cell
jsonView
Insert cell
viewof jsonView.value
Insert cell
Insert cell
{
viewof jsonView.value = {
rnd: Math.random()
};
viewof jsonView.dispatchEvent(new Event("input", { bubbles: true }));
}
Insert cell
Insert cell
viewof example2 = Inputs.textarea()
Insert cell
localStorageView("example2", {
bindTo: viewof example2
})
Insert cell
Insert cell
viewof example3 = Inputs.bind(Inputs.textarea(), localStorageView("example3"))
Insert cell
Insert cell
//import { footer } from "@endpointservices/endpoint-services-footer"
Insert cell
footer
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more