jellyfish-web/src/components/keyboardnavigation.js

110 lines
3.2 KiB
JavaScript
Raw Normal View History

define(["inputManager", "layoutManager"], function (inputManager, layoutManager) {
"use strict";
console.log("keyboardnavigation");
/**
* Key name mapping.
*/
// Add more to support old browsers
var KeyNames = {
13: "Enter",
19: "Pause",
27: "Escape",
32: "Space",
37: "ArrowLeft",
38: "ArrowUp",
39: "ArrowRight",
40: "ArrowDown",
412: "MediaRewind", // MediaRewind (Tizen/WebOS)
413: "MediaStop", // MediaStop (Tizen/WebOS)
415: "MediaPlay", // MediaPlay (Tizen/WebOS)
417: "MediaFastForward", // MediaFastForward (Tizen/WebOS)
461: "Back", // Back (WebOS)
10009: "Back", // Back (Tizen)
10232: "MediaTrackPrevious", // MediaTrackPrevious (Tizen)
10233: "MediaTrackNext", // MediaTrackNext (Tizen)
10252: "MediaPlayPause" // MediaPlayPause (Tizen)
};
/**
* Returns key name from event.
*
* @param {KeyboardEvent} keyboard event
* @return {string} key name
*/
function getKeyName(event) {
return KeyNames[event.keyCode] || event.key;
}
function enable() {
document.addEventListener("keydown", function (e) {
var capture = true;
switch (getKeyName(e)) {
case "ArrowLeft":
inputManager.handle("left");
break;
case "ArrowUp":
inputManager.handle("up");
break;
case "ArrowRight":
inputManager.handle("right");
break;
case "ArrowDown":
inputManager.handle("down");
break;
case "Back":
inputManager.handle("back");
break;
case "Escape":
if (layoutManager.tv) {
inputManager.handle("back");
} else {
capture = false;
}
break;
case "MediaPlay":
inputManager.handle("play");
break;
case "Pause":
inputManager.handle("pause");
break;
case "MediaPlayPause":
inputManager.handle("playpause");
break;
case "MediaRewind":
inputManager.handle("rewind");
break;
case "MediaFastForward":
inputManager.handle("fastforward");
break;
case "MediaStop":
inputManager.handle("stop");
break;
case "MediaTrackPrevious":
inputManager.handle("previoustrack");
break;
case "MediaTrackNext":
inputManager.handle("nexttrack");
break;
default:
capture = false;
}
if (capture) {
console.log("Disabling default event handling");
e.preventDefault();
}
});
}
return {
enable: enable
};
});