From bc0f381b348eb45cc09f64ef55dc11400137e3da Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 23 Nov 2018 23:27:45 -0500 Subject: [PATCH] document events --- src/compile/render-dom/wrappers/Document.ts | 54 +++---------------- .../_config.js | 2 - .../runtime/samples/document-event/_config.js | 8 +-- test/runtime/samples/document-event/main.html | 2 +- 4 files changed, 12 insertions(+), 54 deletions(-) diff --git a/src/compile/render-dom/wrappers/Document.ts b/src/compile/render-dom/wrappers/Document.ts index 81c8d7ac94..59a69fba33 100644 --- a/src/compile/render-dom/wrappers/Document.ts +++ b/src/compile/render-dom/wrappers/Document.ts @@ -1,6 +1,4 @@ -import Renderer from '../Renderer'; import Block from '../Block'; -import Node from '../../nodes/shared/Node'; import Wrapper from './shared/Wrapper'; import deindent from '../../../utils/deindent'; import Document from '../../nodes/Document'; @@ -8,55 +6,15 @@ import Document from '../../nodes/Document'; export default class DocumentWrapper extends Wrapper { node: Document; - constructor(renderer: Renderer, block: Block, parent: Wrapper, node: Node) { - super(renderer, block, parent, node); - } - render(block: Block, parentNode: string, parentNodes: string) { - const { renderer } = this; - const { component } = renderer; - this.node.handlers.forEach(handler => { - // TODO verify that it's a valid callee (i.e. built-in or declared method) - component.addSourcemapLocations(handler.expression); - - const isCustomEvent = false; // TODO!!! - - let usesState = handler.expression.dependencies.size > 0; - - handler.render(component, block, 'document', false); // TODO hoist? - - const handlerName = block.getUniqueName(`onwindow${handler.name}`); - const handlerBody = deindent` - ${usesState && `var ctx = #component.get();`} - ${handler.snippet}; - `; - - if (isCustomEvent) { - // TODO dry this out - block.addVariable(handlerName); - - block.builders.hydrate.addBlock(deindent` - ${handlerName} = %events-${handler.name}.call(#component, document, function(event) { - ${handlerBody} - }); - `); - - block.builders.destroy.addLine(deindent` - ${handlerName}.destroy(); - `); - } else { - block.builders.init.addBlock(deindent` - function ${handlerName}(event) { - ${handlerBody} - } - document.addEventListener("${handler.name}", ${handlerName}); - `); + block.builders.init.addBlock(deindent` + document.addEventListener("${handler.name}", ${handler.snippet}); + `); - block.builders.destroy.addBlock(deindent` - document.removeEventListener("${handler.name}", ${handlerName}); - `); - } + block.builders.destroy.addBlock(deindent` + document.removeEventListener("${handler.name}", ${handler.snippet}); + `); }); } } \ No newline at end of file diff --git a/test/runtime/samples/dev-warning-readonly-window-binding/_config.js b/test/runtime/samples/dev-warning-readonly-window-binding/_config.js index 91c7959e98..3736ca57c0 100644 --- a/test/runtime/samples/dev-warning-readonly-window-binding/_config.js +++ b/test/runtime/samples/dev-warning-readonly-window-binding/_config.js @@ -1,6 +1,4 @@ export default { - solo: 1, - compileOptions: { dev: true }, diff --git a/test/runtime/samples/document-event/_config.js b/test/runtime/samples/document-event/_config.js index fdde064d65..8e3b90f99b 100644 --- a/test/runtime/samples/document-event/_config.js +++ b/test/runtime/samples/document-event/_config.js @@ -1,11 +1,13 @@ export default { test(assert, component, target, window) { - assert.equal(component.events.toString(), ''); + assert.deepEqual(component.events, []); + const event1 = new window.Event('mouseenter'); window.document.dispatchEvent(event1); - assert.equal(component.events.toString(), 'enter'); + assert.deepEqual(component.events, ['enter']); + const event2 = new window.Event('mouseleave'); window.document.dispatchEvent(event2); - assert.equal(component.events.toString(), 'enter,leave'); + assert.deepEqual(component.events, ['enter', 'leave']); }, }; \ No newline at end of file diff --git a/test/runtime/samples/document-event/main.html b/test/runtime/samples/document-event/main.html index 104c6f4a9b..6e7ab3a47c 100644 --- a/test/runtime/samples/document-event/main.html +++ b/test/runtime/samples/document-event/main.html @@ -2,7 +2,7 @@ export let events = []; function log(event) { - events = this.get().events.concat(event); + events.push(event); }