@@ -1,55 +1,4 @@
1−
2−Elm.Keyboard = { Raw : function() {
3− var keysDown = Elm.Signal.constant(["Nil"]);
4− var charPressed = Elm.Signal.constant(["Nothing"]);
5−
6− function remove(x,xs) {
7− if (xs[0] === "Nil") return xs;
8− if (xs[1] === x) return xs[2];
9− return ["Cons", xs[1], remove(x,xs[2])];
10− }
11− function has(x,xs) {
12− while (xs[0] !== "Nil") {
13− if (xs[1] === x) return true;
14− xs = xs[2];
15− }
16− return false;
17− }
18− Value.addListener(document, 'keydown', function(e) {
19− if (has(e.keyCode, keysDown.value)) return;
20− var hasListener = Dispatcher.notify(keysDown.id, ["Cons", e.keyCode, keysDown.value]);
21− if (!hasListener)
22− this.removeEventListener('keydown',arguments.callee,false);
23− });
24− Value.addListener(document, 'keyup', function(e) {
25− var codes = remove(e.keyCode, keysDown.value);
26− var hasListener = Dispatcher.notify(keysDown.id, codes);
27− if (!hasListener)
28− this.removeEventListener('keyup',arguments.callee,false);
29− });
30− Value.addListener(window, 'blur', function(e) {
31− var hasListener = Dispatcher.notify(keysDown.id, ["Nil"]);
32− if (!hasListener)
33− this.removeEventListener('blur',arguments.callee,false);
34− });
35− Value.addListener(document, 'keypress', function(e) {
36− var hasListener = Dispatcher.notify(charPressed.id, ["Just",e.charCode || e.keyCode]);
37− Dispatcher.notify(charPressed.id, ["Nothing"]);
38− if (!hasListener)
39− this.removeEventListener('keypress',arguments.callee,false);
40− });
41− return {keysDown:keysDown,
42− charPressed:charPressed};
43− }()
44−};
45−
46−/*! Keyboard
47−These are nicely curated inputs from the keyboard. See the
48−[Keyboard.Raw library](/docs/Signal/KeyboardRaw.elm) for a
49−lower-level interface that will let you define more complicated behavior.
50−!*/
51−
52−function nativeKeyboard(elm) {
1+function nativeKeyboard() {
532 'use strict';
543
554 function keySignal(f) {
@@ -78,17 +27,8 @@ function nativeKeyboard(elm) {
7827 }}}
7928 }
8029
81− function is(key) {
82− function f(ks) {
83− while (ks.ctor == "Cons") {
84− if (key == ks._0) return true;
85− ks = ks._1;
86− }
87− return false;
88− }
89− return keySignal(f);
90− }
30+ function is(key) { return keySignal(Elm.List.member(key)); }
9131
92− elm.Native.Keyboard = { isDown:is, dir:dir };
32+ Elm.Native.Keyboard = { isDown:is, dir:dir };
9333
9434}