MCPcopy Create free account
hub / github.com/cyclejs/cyclejs / makeDOMDriver

Function makeDOMDriver

dom/src/makeDOMDriver.ts:48–92  ·  view source on GitHub ↗
(container: string | Element, options?: DOMDriverOptions)

Source from the content-addressed store, hash-verified

46}
47
48function makeDOMDriver(container: string | Element, options?: DOMDriverOptions) {
49 if (!options) { options = {}; }
50 const modules = options.modules || defaultModules;
51 const isolateModule = new IsolateModule();
52 const patch = init([isolateModule.createModule()].concat(modules));
53 const rootElement = getElement(container) || document.body;
54 const vnodeWrapper = new VNodeWrapper(rootElement);
55 const delegators = new MapPolyfill<string, EventDelegator>();
56 makeDOMDriverInputGuard(modules);
57
58 function DOMDriver(vnode$: Stream<VNode>, name = 'DOM'): DOMSource {
59 domDriverInputGuard(vnode$);
60 const sanitation$ = xs.create<null>();
61 const rootElement$ = xs.merge(vnode$.endWhen(sanitation$), sanitation$)
62 .map(vnode => vnodeWrapper.call(vnode))
63 .fold(patch, toVNode(rootElement))
64 .drop(1)
65 .map(unwrapElementFromVNode)
66 .compose(dropCompletion) // don't complete this stream
67 .startWith(rootElement);
68
69 // Start the snabbdom patching, over time
70 const listener = {error: reportSnabbdomError};
71 if (document.readyState === 'loading') {
72 document.addEventListener('readystatechange', () => {
73 if (document.readyState === 'interactive') {
74 rootElement$.addListener(listener);
75 }
76 });
77 } else {
78 rootElement$.addListener(listener);
79 }
80
81 return new MainDOMSource(
82 rootElement$,
83 sanitation$,
84 [],
85 isolateModule,
86 delegators,
87 name,
88 );
89 };
90
91 return DOMDriver;
92}
93
94export {makeDOMDriver}

Callers 15

startPanelFunction · 0.90
client.jsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90
index.tsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90
main.jsFile · 0.90

Calls 3

createModuleMethod · 0.95
getElementFunction · 0.90
makeDOMDriverInputGuardFunction · 0.85

Tested by

no test coverage detected