UNPKG

json-joy

Version:

Collection of libraries for building collaborative editing apps.

41 lines (40 loc) 1.12 kB
import { Log } from '../../../json-crdt/log/Log'; import { DomController } from '../dom/DomController'; import { ValueSyncStore } from '../../../util/events/sync-store'; export class PeritextSurfaceState { events; el; plugins; peritext; dom; log; render = new ValueSyncStore(0); rerender = () => { const { peritext, render } = this; peritext.refresh(); render.next(render.value + 1); }; constructor(events, el, plugins) { this.events = events; this.el = el; this.plugins = plugins; const peritext = (this.peritext = events.txt); const log = (this.log = Log.from(peritext.model)); this.dom = new DomController({ events, log, source: el, }); } start() { const { dom, rerender } = this; const et = dom.et; const stopDom = dom.start(); et.addEventListener('change', rerender); return () => { this.log.destroy(); stopDom(); et.removeEventListener('change', rerender); }; } }