on master help sign in
Add new keyboard signals:

shift, ctrl, space :: Signal Bool

commitb6fc63e9c814e5b2648042c36b323882d6cb5709 authorevancz <info@elm-lang.org> dateSun 6 Jan 2013, 16:54 (14 years ago) parentd4ba806
1 file changed+37−21
core-js/Signal/Keyboard.js+37−21
core-js/Signal/Keyboard.js+37−21
@@ -1,8 +1,6 @@
11
22Elm.Keyboard = { Raw : function() {
33 var keysDown = Elm.Signal.constant(["Nil"]);
4− keysDown.defaultNumberOfKids = 2;
5−
64 var charPressed = Elm.Signal.constant(["Nothing"]);
75
86 function remove(x,xs) {
@@ -46,27 +44,45 @@ Elm.Keyboard = { Raw : function() {
4644};
4745
4846(function() {
47+ function keySignal(f) {
48+ var signal = Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown);
49+ Elm.Keyboard.Raw.keysDown.defaultNumberOfKids += 1;
50+ signal.defaultNumberOfKids = 0;
51+ return signal;
52+ }
53+
4954 function dir(left,right,up,down) {
50− function f(ks) {
51− var x = 0, y = 0;
52− while (ks[0] == "Cons") {
53− switch (ks[1]) {
54− case left : --x; break;
55− case right: ++x; break;
56− case up : ++y; break;
57− case down : --y; break;
58− }
59− ks = ks[2];
60− }
61− return { _:[true], x:[x], y:[y] };
55+ function f(ks) {
56+ var x = 0, y = 0;
57+ while (ks[0] == "Cons") {
58+ switch (ks[1]) {
59+ case left : --x; break;
60+ case right: ++x; break;
61+ case up : ++y; break;
62+ case down : --y; break;
63+ }
64+ ks = ks[2];
6265 }
63− return Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown);
66+ return { _:[true], x:[x], y:[y] };
67+ }
68+ return keySignal(f);
6469 }
65− var arrows = dir(37,39,38,40);
66− arrows.defaultNumberOfKids = 0;
67− var wasd = dir(65,68,87,83);
68− wasd.defaultNumberOfKids = 0;
6970
70− Elm.Keyboard.arrows = arrows;
71− Elm.Keyboard.wasd = wasd;
71+ function is(key) {
72+ function f(ks) {
73+ while (ks[0] == "Cons") {
74+ if (key == ks[1]) return true;
75+ ks = ks[2];
76+ }
77+ return false;
78+ }
79+ return keySignal(f);
80+ }
81+
82+ Elm.Keyboard.arrows = dir(37,39,38,40);
83+ Elm.Keyboard.wasd = dir(65,68,87,83);
84+ Elm.Keyboard.shift = is(16);
85+ Elm.Keyboard.ctrl = is(17);
86+ Elm.Keyboard.space = is(32);
87+
7288}());