elm/core/Native/Keyboard/Raw.js
evancz d53cecf3ba List module dependencies in elm and js code.
Planning on having the compiler crawl through to determine dependencies, then compile everything in an appropriate order. This will also let me print out compiler progress in a reasonable order.
2013-02-23 00:19:40 +01:00

40 lines
No EOL
1.4 KiB
JavaScript

/*
import Signal
import List
*/
(function() {
'use strict';
var keysDown = Elm.Signal.constant(Elm.Native.List.Nil);
var charPressed = Elm.Signal.constant(Elm.Maybe.Nothing);
Value.addListener(document, 'keydown', function(e) {
if (Elm.List.member(e.keyCode)(keysDown.value)) return;
var list = Elm.Native.List.Cons(e.keyCode, keysDown.value);
var hasListener = Dispatcher.notify(keysDown.id, list);
if (!hasListener)
this.removeEventListener('keydown',arguments.callee,false);
});
Value.addListener(document, 'keyup', function(e) {
function notEq(kc) { return kc !== e.keyCode; }
var codes = Elm.List.filter(notEq)(keysDown.value);
var hasListener = Dispatcher.notify(keysDown.id, codes);
if (!hasListener)
this.removeEventListener('keyup',arguments.callee,false);
});
Value.addListener(window, 'blur', function(e) {
var hasListener = Dispatcher.notify(keysDown.id, ["Nil"]);
if (!hasListener)
this.removeEventListener('blur',arguments.callee,false);
});
Value.addListener(document, 'keypress', function(e) {
var next = Elm.Maybe.Just(e.charCode || e.keyCode);
var hasListener = Dispatcher.notify(charPressed.id, next);
Dispatcher.notify(charPressed.id, Elm.Maybe.Nothing);
if (!hasListener)
this.removeEventListener('keypress',arguments.callee,false);
});
Elm.Native.Keyboard.Raw = {keysDown:keysDown, charPressed:charPressed};
}());