on master help sign in
Add new keyboard signals:
b6fc63eevancz
core-js/Signal/Keyboard.js+37−21
@@ -1,8 +1,6 @@
1
1
2Elm.Keyboard = { Raw : function() {
2Elm.Keyboard = { Raw : function() {
3 var keysDown = Elm.Signal.constant(["Nil"]);
3 var keysDown = Elm.Signal.constant(["Nil"]);
4− keysDown.defaultNumberOfKids = 2;
5−
6 var charPressed = Elm.Signal.constant(["Nothing"]);
4 var charPressed = Elm.Signal.constant(["Nothing"]);
7
5
8 function remove(x,xs) {
6 function remove(x,xs) {
@@ -46,27 +44,45 @@ Elm.Keyboard = { Raw : function() {
46};
44};
47
45
48(function() {
46(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+
49 function dir(left,right,up,down) {
54 function dir(left,right,up,down) {
50− function f(ks) {
55+ function f(ks) {
51− var x = 0, y = 0;
56+ var x = 0, y = 0;
52− while (ks[0] == "Cons") {
57+ while (ks[0] == "Cons") {
53− switch (ks[1]) {
58+ switch (ks[1]) {
54− case left : --x; break;
59+ case left : --x; break;
55− case right: ++x; break;
60+ case right: ++x; break;
56− case up : ++y; break;
61+ case up : ++y; break;
57− case down : --y; break;
62+ case down : --y; break;
58− }
63+ }
59− ks = ks[2];
64+ ks = ks[2];
60− }
61− return { _:[true], x:[x], y:[y] };
62 }
65 }
63− return Elm.Signal.lift(f)(Elm.Keyboard.Raw.keysDown);
66+ return { _:[true], x:[x], y:[y] };
67+ }
68+ return keySignal(f);
64 }
69 }
65− var arrows = dir(37,39,38,40);
66− arrows.defaultNumberOfKids = 0;
67− var wasd = dir(65,68,87,83);
68− wasd.defaultNumberOfKids = 0;
69
70
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+
70− Elm.Keyboard.arrows = arrows;
82+ Elm.Keyboard.arrows = dir(37,39,38,40);
71− Elm.Keyboard.wasd = wasd;
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+
72}());
88}());