Published
Edited
Mar 31, 2019
1 fork
Importers
7 stars
Insert cell
Insert cell
Insert cell
Insert cell
viewof width = {
const view = html`<span class="observablehq--inspect"><span class="observablehq--number">`;
const resized = function resized() {
const w = document.body.clientWidth;
if (w !== view.value) {
view.firstChild.textContent = view.value = w;
view.dispatchEvent(new CustomEvent("input"));
}
}
window.addEventListener('resize', resized);
invalidation.then(() => window.removeEventListener('resize', resized));
return resized(), view;
}
Insert cell
Insert cell
viewof width.value // not reactive
Insert cell
width
Insert cell
Insert cell
resized = () => new Promise(resolve =>
viewof width.addEventListener(
'input', () => resolve(viewof width.value), {once: true}));
Insert cell
{
yield viewof width.value;
while (true) yield await resized();
}
Insert cell
Insert cell
widthObserver = () => Generators.observe(callback => {
let currentWidth, previousWidth;
const resized = () => {
if ((currentWidth = document.body.clientWidth) !== previousWidth)
callback(previousWidth = currentWidth); };
resized(), window.addEventListener('resize', resized);
return () => window.removeEventListener('resize', resized);
})
Insert cell
widthObserver()
Insert cell
{
for (const w of widthObserver()) {
yield w;
}
}
Insert cell
Insert cell
viewof widthView = {
const view = html`<span class="observablehq--inspect"><span class="observablehq--number">`;
(async function (){
for await (const w of widthObserver()) {
view.firstChild.textContent = view.value = w;
view.dispatchEvent(new CustomEvent("input")); }
})();
return view;
}
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