Created
December 16, 2011 11:42
-
-
Save cburgdorf/1485758 to your computer and use it in GitHub Desktop.
How to listen for STRG + UP / STRG + DOWN the Rx way
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var keys = { | |
UP: 38, | |
DOWN: 40, | |
CTRL: 17 | |
} | |
var selectKeyCode = function(event){ return event.keyCode; }; | |
var selectDown = function(){ return "down";}; | |
var selectUp = function() { return "up" }; | |
var areBothKeysDown = function(x, y) { return x === "down" && y === "down" }; | |
var matchesKey = function(key){ | |
return function(x){ | |
return x === key; | |
}; | |
}; | |
var observableKeyDowns = $(window).toObservable('keydown').Select(selectKeyCode); | |
var observableKeyUps = $(window).toObservable('keyup').Select(selectKeyCode); | |
var observableCtrlKeyDowns = observableKeyDowns.Where(matchesKey(keys['CTRL'])).Select(selectDown); | |
var observableCtrlKeyUps = observableKeyUps.Where(matchesKey(keys['CTRL'])).Select(selectUp); | |
var observableCtrlKeyState = Rx.Observable.Merge([observableCtrlKeyDowns, observableCtrlKeyUps]) | |
var observableUpKeyDowns = observableKeyDowns.Where(matchesKey(keys['UP'])).Select(selectDown); | |
var observableUpKeyUps = observableKeyUps.Where(matchesKey(keys['UP'])).Select(selectUp); | |
var observableUpKeyState = Rx.Observable.Merge([observableUpKeyDowns, observableUpKeyUps]); | |
var observableDownKeyDowns = observableKeyDowns.Where(matchesKey(keys['DOWN'])).Select(selectDown); | |
var observableDownKeyUps = observableKeyUps.Where(matchesKey(keys['DOWN'])).Select(selectUp); | |
var observableDownKeyState = Rx.Observable.Merge([observableDownKeyDowns, observableDownKeyUps]); | |
var observableCtrlAndUp = observableCtrlKeyState | |
.CombineLatest(observableUpKeyState, areBothKeysDown) | |
.Where(function(x){ return x === true;}) | |
.Select(function(){ return "CtrlAndUp"; }); | |
var observableCtrlAndDown = observableCtrlKeyState | |
.CombineLatest(observableDownKeyState, areBothKeysDown) | |
.Where(function(x){ return x === true;}) | |
.Select(function(){ return "CtrlAndDown"; }); | |
var observableShortcuts = Rx.Observable.Merge([observableCtrlAndUp, observableCtrlAndDown]); | |
observableShortcuts.Subscribe(function(shortcut) { console.log(shortcut); }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment