on master help sign in
Ensure that touch listener is detached if it is not used.
commitd8f8bf5c3943e66000a34c36202566c40e5da523 authorevancz <info@elm-lang.org> dateMon 14 Jan 2013, 00:14 (14 years ago) parent589a16c
2 files changed+17−13
core-js/Prelude.js+3−1 core-js/Signal/Touch.js+14−12
core-js/Prelude.js+3−1
@@ -12,7 +12,9 @@ Value.addListener(document, 'elm_viewport', function(e) {
1212 node.name = 'viewport';
1313 document.head.appendChild(node);
1414 }
15− node.content = e.value; //'width=device-width, initial-scale=1';
15+ node.content = e.value;
16+ Dispatcher.notify(Elm.Window.dimensions.id,
17+ Value.Tuple(window.innerWidth, window.innerHeight));
1618 });
1719
1820Elm.Prelude = function() {
core-js/Signal/Touch.js+14−12
@@ -8,11 +8,11 @@ Elm.Touch = function() {
88 this.insert = function(key,value) {
99 this.keys.push(key);
1010 this.values.push(value);
11− }
11+ };
1212 this.lookup = function(key) {
1313 var i = this.keys.indexOf(key)
1414 return i >= 0 ? this.values[i] : {x:0,y:0,t:0};
15− }
15+ };
1616 this.remove = function(key) {
1717 var i = this.keys.indexOf(key);
1818 if (i < 0) return;
@@ -20,7 +20,7 @@ Elm.Touch = function() {
2020 this.keys.splice(i,1);
2121 this.values.splice(i,1);
2222 return t;
23− }
23+ };
2424 }
2525
2626 var root = Elm.Signal.constant([]),
@@ -28,7 +28,7 @@ Elm.Touch = function() {
2828 hasTap = false,
2929 tap = {_:[true],x:[0],y:[0]},
3030 dict = new Dict();
31−
31+
3232 function touch(t) {
3333 var r = dict.lookup(t.identifier);
3434 return {_ : [true], id: [t.identifier],
@@ -54,8 +54,7 @@ Elm.Touch = function() {
5454 var ts = new Array(e.touches.length);
5555 for (var i = e.touches.length; i--; ) { ts[i] = touch(e.touches[i]); }
5656 var hasListener = Dispatcher.notify(root.id, ts);
57− if (!hasListener)
58− return this.removeEventListener(name,arguments.callee,false);
57+ if (!hasListener) return document.removeEventListener(name, update);
5958 e.preventDefault();
6059 }
6160 Value.addListener(document, name, update);
@@ -68,19 +67,22 @@ Elm.Touch = function() {
6867 listen("touchleave", end);
6968
7069 function dependency(f) {
71− var signal = Elm.Signal.lift(f)(root);
72− root.defaultNumberOfKids += 1;
73− signal.defaultNumberOfKids = 0;
74− return signal;
70+ var sig = Elm.Signal.lift(f)(root);
71+ root.defaultNumberOfKids += 1;
72+ sig.defaultNumberOfKids = 0;
73+ return sig;
7574 }
7675
7776 var touches = dependency(function(ts) {
7877 return Elm.JavaScript.castJSArrayToList(ts);
7978 });
8079 var taps = function() {
81− function pred(_) { var b = hasTap; hasTap = false; return b; }
8280 var sig = dependency(function(_) { return tap; });
83− return Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);
81+ sig.defaultNumberOfKids = 1;
82+ function pred(_) { var b = hasTap; hasTap = false; return b; }
83+ var sig2 = Elm.Signal.keepIf(pred)({_:[true],x:[0],y:[0]})(sig);
84+ sig2.defaultNumberOfKids = 0;
85+ return sig2;
8486 }();
8587
8688 return { touches: touches, taps: taps };