@@ -8,11 +8,11 @@ Elm.Touch = function() {
8 this.insert = function(key,value) {
8 this.insert = function(key,value) {
9 this.keys.push(key);
9 this.keys.push(key);
10 this.values.push(value);
10 this.values.push(value);
12 this.lookup = function(key) {
12 this.lookup = function(key) {
13 var i = this.keys.indexOf(key)
13 var i = this.keys.indexOf(key)
14 return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
14 return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
16 this.remove = function(key) {
16 this.remove = function(key) {
17 var i = this.keys.indexOf(key);
17 var i = this.keys.indexOf(key);
18 if (i < 0) return;
18 if (i < 0) return;
@@ -20,7 +20,7 @@ Elm.Touch = function() {
20 this.keys.splice(i,1);
20 this.keys.splice(i,1);
21 this.values.splice(i,1);
21 this.values.splice(i,1);
26 var root = Elm.Signal.constant([]),
26 var root = Elm.Signal.constant([]),
@@ -28,7 +28,7 @@ Elm.Touch = function() {
28 hasTap = false,
28 hasTap = false,
29 tap = {_:[true],x:[0],y:[0]},
29 tap = {_:[true],x:[0],y:[0]},
30 dict = new Dict();
30 dict = new Dict();
32 function touch(t) {
32 function touch(t) {
33 var r = dict.lookup(t.identifier);
33 var r = dict.lookup(t.identifier);
34 return {_ : [true], id: [t.identifier],
34 return {_ : [true], id: [t.identifier],
@@ -54,8 +54,7 @@ Elm.Touch = function() {
54 var ts = new Array(e.touches.length);
54 var ts = new Array(e.touches.length);
55 for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
55 for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
56 var hasListener = Dispatcher.notify(root.id, ts);
56 var hasListener = Dispatcher.notify(root.id, ts);
58− return this.removeEventListener(name,arguments.callee,false);
57+ if (!hasListener) return document.removeEventListener(name, update);
59 e.preventDefault();
58 e.preventDefault();
61 Value.addListener(document, name, update);
60 Value.addListener(document, name, update);
@@ -68,19 +67,22 @@ Elm.Touch = function() {
68 listen("touchleave", end);
67 listen("touchleave", end);
70 function dependency(f) {
69 function dependency(f) {
71− var signal = Elm.Signal.lift(f)(root);
70+ var sig = Elm.Signal.lift(f)(root);
72− root.defaultNumberOfKids += 1;
71+ root.defaultNumberOfKids += 1;
73− signal.defaultNumberOfKids = 0;
72+ sig.defaultNumberOfKids = 0;
74− return signal;
73+ return sig;
77 var touches = dependency(function(ts) {
76 var touches = dependency(function(ts) {
78 return Elm.JavaScript.castJSArrayToList(ts);
77 return Elm.JavaScript.castJSArrayToList(ts);
80 var taps = function() {
79 var taps = function() {
81− function pred(_) { var b = hasTap; hasTap = false; return b; }
82 var sig = dependency(function(_) { return tap; });
80 var sig = dependency(function(_) { return tap; });
81+ sig.defaultNumberOfKids = 1;
82+ function pred(_) { var b = hasTap; hasTap = false; return b; }
83− return Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);
83+ var sig2 = Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);
84+ sig2.defaultNumberOfKids = 0;
86 return { touches: touches, taps: taps };
88 return { touches: touches, taps: taps };