on master help sign in
Get timers to detach themselves when a swap occurs.
b30482aevancz
libraries/Native/Signal/Time.js+5−2
@@ -32,8 +32,11 @@ Elm.Native.Time = function(elm) {
32
32
33 function everyWhen(t, isOn) {
33 function everyWhen(t, isOn) {
34 var clock = Signal.constant(Date.now());
34 var clock = Signal.constant(Date.now());
35+ var id = setInterval(function tellTime() {
35− function tellTime() { elm.notify(clock.id, Date.now()); }
36+ if (!elm.notify(clock.id, Date.now())) {
36− setInterval(tellTime, t);
37+ clearInterval(id);
38+ }
39+ }, t);
37 return clock;
40 return clock;
38 }
41 }
39
42
runtime/Init.js+5−1
@@ -33,9 +33,12 @@ function init(display, container, module, moduleToReplace) {
33
33
34 function notify(id, v) {
34 function notify(id, v) {
35 var timestep = Date.now();
35 var timestep = Date.now();
36+ var changed = false;
36 for (var i = inputs.length; i--; ) {
37 for (var i = inputs.length; i--; ) {
38+ // order is important here to avoid short-circuiting
37− inputs[i].recv(timestep, id, v);
39+ changed = inputs[i].recv(timestep, id, v) || changed;
38 }
40 }
41+ return changed;
39 }
42 }
40
43
41 container.offsetX = 0;
44 container.offsetX = 0;
@@ -86,6 +89,7 @@ function init(display, container, module, moduleToReplace) {
86 removeListeners(listeners);
89 removeListeners(listeners);
87 var div = document.createElement('div');
90 var div = document.createElement('div');
88 var newElm = init(display, div, newModule, elm);
91 var newElm = init(display, div, newModule, elm);
92+ inputs = [];
89 // elm.send = newElm.send;
93 // elm.send = newElm.send;
90 // elm.recv = newElm.recv;
94 // elm.recv = newElm.recv;
91 // elm.swap = newElm.swap;
95 // elm.swap = newElm.swap;