From ae5b15baba6911af335cedf8bf78b2c285b8b908 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 5 Jan 2018 10:55:12 -0500 Subject: [PATCH] reuse timeout function --- src/generators/nodes/Window.ts | 8 +++++--- test/js/samples/window-binding-scroll/expected-bundle.js | 4 ++-- test/js/samples/window-binding-scroll/expected.js | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/generators/nodes/Window.ts b/src/generators/nodes/Window.ts index f8741464c2..c8b044bb2d 100644 --- a/src/generators/nodes/Window.ts +++ b/src/generators/nodes/Window.ts @@ -107,6 +107,7 @@ export default class Window extends Node { }); const lock = block.getUniqueName(`window_updating`); + const clear = block.getUniqueName(`clear_window_updating`); const timeout = block.getUniqueName(`window_updating_timeout`); Object.keys(events).forEach(event => { @@ -116,7 +117,8 @@ export default class Window extends Node { if (event === 'scroll') { // TODO other bidirectional bindings... block.addVariable(lock, 'false'); - block.addVariable(timeout,); + block.addVariable(clear, `function() { ${lock} = false; }`); + block.addVariable(timeout); } const handlerBody = deindent` @@ -161,7 +163,7 @@ export default class Window extends Node { ? `#component.get("${bindings.scrollY}")` : `window.scrollY`}; window.scrollTo(x, y); - ${timeout} = setTimeout(function() { ${lock} = false; }, 100); + ${timeout} = setTimeout(${clear}, 100); } `); @@ -181,7 +183,7 @@ export default class Window extends Node { ${lock} = true; clearTimeout(${timeout}); window.scrollTo(${isX ? 'x, window.scrollY' : 'window.scrollX, y'}); - ${timeout} = setTimeout(function() { ${lock} = false; }, 100); + ${timeout} = setTimeout(${clear}, 100); }); `); } diff --git a/test/js/samples/window-binding-scroll/expected-bundle.js b/test/js/samples/window-binding-scroll/expected-bundle.js index 66bdfbdfb6..43760c21f0 100644 --- a/test/js/samples/window-binding-scroll/expected-bundle.js +++ b/test/js/samples/window-binding-scroll/expected-bundle.js @@ -190,7 +190,7 @@ var proto = { /* generated by Svelte vX.Y.Z */ function create_main_fragment(state, component) { - var window_updating = false, window_updating_timeout, p, text, text_1; + var window_updating = false, clear_window_updating = function() { window_updating = false; }, window_updating_timeout, p, text, text_1; function onwindowscroll(event) { if (window_updating) return; @@ -207,7 +207,7 @@ function create_main_fragment(state, component) { window_updating = true; clearTimeout(window_updating_timeout); window.scrollTo(window.scrollX, y); - window_updating_timeout = setTimeout(function() { window_updating = false; }, 100); + window_updating_timeout = setTimeout(clear_window_updating, 100); }); return { diff --git a/test/js/samples/window-binding-scroll/expected.js b/test/js/samples/window-binding-scroll/expected.js index 8316428617..70eae003d7 100644 --- a/test/js/samples/window-binding-scroll/expected.js +++ b/test/js/samples/window-binding-scroll/expected.js @@ -2,7 +2,7 @@ import { appendNode, assign, createElement, createText, detachNode, init, insertNode, proto } from "svelte/shared.js"; function create_main_fragment(state, component) { - var window_updating = false, window_updating_timeout, p, text, text_1; + var window_updating = false, clear_window_updating = function() { window_updating = false; }, window_updating_timeout, p, text, text_1; function onwindowscroll(event) { if (window_updating) return; @@ -19,7 +19,7 @@ function create_main_fragment(state, component) { window_updating = true; clearTimeout(window_updating_timeout); window.scrollTo(window.scrollX, y); - window_updating_timeout = setTimeout(function() { window_updating = false; }, 100); + window_updating_timeout = setTimeout(clear_window_updating, 100); }); return {