on master help sign in
Convert the Keyboard.Raw module and do minor fixes.
commit6551ef14b2bd640fb5d7d0ba6817c2c3a5d5f8d9 authorevancz <info@elm-lang.org> dateSat 9 Mar 2013, 00:39 (14 years ago) parent76e83e0
3 files changed+49−37
libraries/Native/Keyboard/Raw.js+46−35 libraries/Native/Misc.js+1−1 libraries/Native/Signal/Touch.js+2−1
libraries/Native/Keyboard/Raw.js+46−35
@@ -1,40 +1,51 @@
1−/*
2−import Signal
3−import List
4−*/
51
6−(function() {
2+Elm.Native.Keyboard.Raw = function(elm) {
73 'use strict';
84
9− var keysDown = Elm.Signal.constant(Elm.Native.List.Nil);
10− var charPressed = Elm.Signal.constant(Elm.Maybe.Nothing);
5+ var Signal = Elm.Signal(elm);
6+ var NList = Elm.Native.List(elm);
7+ var List = Elm.List(elm);
8+ var Maybe = Elm.Maybe(elm);
9+ var Misc = Elm.Native.Misc(elm);
1110
12− Value.addListener(document, 'keydown', function(e) {
13− if (Elm.List.member(e.keyCode)(keysDown.value)) return;
14− var list = Elm.Native.List.Cons(e.keyCode, keysDown.value);
15− var hasListener = Dispatcher.notify(keysDown.id, list);
16− if (!hasListener)
17− this.removeEventListener('keydown',arguments.callee,false);
18− });
19− Value.addListener(document, 'keyup', function(e) {
20− function notEq(kc) { return kc !== e.keyCode; }
21− var codes = Elm.List.filter(notEq)(keysDown.value);
22− var hasListener = Dispatcher.notify(keysDown.id, codes);
23− if (!hasListener)
24− this.removeEventListener('keyup',arguments.callee,false);
25− });
26− Value.addListener(window, 'blur', function(e) {
27− var hasListener = Dispatcher.notify(keysDown.id, ["Nil"]);
28− if (!hasListener)
29− this.removeEventListener('blur',arguments.callee,false);
30− });
31− Value.addListener(document, 'keypress', function(e) {
32− var next = Elm.Maybe.Just(e.charCode || e.keyCode);
33− var hasListener = Dispatcher.notify(charPressed.id, next);
34− Dispatcher.notify(charPressed.id, Elm.Maybe.Nothing);
35− if (!hasListener)
36− this.removeEventListener('keypress',arguments.callee,false);
37− });
11+ var keysDown = Signal.constant(NList.Nil);
12+ var charPressed = Signal.constant(Maybe.Nothing);
3813
39− Elm.Native.Keyboard.Raw = {keysDown:keysDown, charPressed:charPressed};
40−}());
14+ function down(e) {
15+ if (List.member(e.keyCode)(keysDown.value)) return;
16+ var list = NList.Cons(e.keyCode, keysDown.value);
17+ var hasListener = elm.notify(keysDown.id, list);
18+ if (!hasListener)
19+ this.removeEventListener('keydown',arguments.callee,false);
20+ }
21+ function up(e) {
22+ function notEq(kc) { return kc !== e.keyCode; }
23+ var codes = List.filter(notEq)(keysDown.value);
24+ var hasListener = elm.notify(keysDown.id, codes);
25+ if (!hasListener)
26+ this.removeEventListener('keyup',arguments.callee,false);
27+ }
28+ function blur(e) {
29+ var hasListener = elm.notify(keysDown.id, NList.Nil);
30+ if (!hasListener)
31+ this.removeEventListener('blur',arguments.callee,false);
32+ }
33+ function press(e) {
34+ var next = Maybe.Just(e.charCode || e.keyCode);
35+ var hasListener = elm.notify(charPressed.id, next);
36+ elm.notify(charPressed.id, Maybe.Nothing);
37+ if (!hasListener)
38+ this.removeEventListener('keypress',arguments.callee,false);
39+ }
40+
41+ Misc.addListener(document, 'keydown' , down );
42+ Misc.addListener(document, 'keyup' , up );
43+ Misc.addListener(window , 'blur' , blur );
44+ Misc.addListener(document, 'keypress', press);
45+
46+ return elm.Native.Keyboard.Raw = {
47+ keysDown:keysDown,
48+ charPressed:charPressed
49+ };
50+
51+};
libraries/Native/Misc.js+1−1
@@ -181,7 +181,7 @@ Elm.Native.Misc = function(elm) {
181181 }
182182 }();
183183
184− elm.Native.Misc = {
184+ return elm.Native.Misc = {
185185 eq:eq,
186186 show:show,
187187 Tuple0:Tuple0,
libraries/Native/Signal/Touch.js+2−1
@@ -7,6 +7,7 @@ Elm.Native.Touch = function(elm) {
77
88 var Signal = Elm.Signal(elm);
99 var JS = Elm.JavaScript(elm);
10+ var Misc = Elm.Native.Misc(elm);
1011
1112 function Dict() {
1213 this.keys = [];
@@ -68,7 +69,7 @@ Elm.Native.Touch = function(elm) {
6869 if (!hasListener) return document.removeEventListener(name, update);
6970 e.preventDefault();
7071 }
71− Value.addListener(document, name, update);
72+ Misc.addListener(document, name, update);
7273 }
7374
7475 listen("touchstart", start);