super-productivity/app/scripts/keyboard-key-input/keyboard-key-input-d.js
Johannes Millan b07c99711a fix lint
2017-02-03 01:59:08 +01:00

72 lines
1.8 KiB
JavaScript

/**
* @ngdoc directive
* @name superProductivity.directive:keyboardKeyInput
* @description
* # keyboardKeyInput
*/
(function () {
'use strict';
angular
.module('superProductivity')
.directive('keyboardKeyInput', keyboardKeyInput);
/* @ngInject */
function keyboardKeyInput($parse) {
return {
link: linkFn,
restrict: 'A'
};
function linkFn(scope, element, attrs) {
const modelGetter = $parse(attrs.ngModel);
const modelSetter = modelGetter.assign;
let prevVal = modelGetter(scope);
element.on('keydown', ($event) => {
// the tab key should continue to behave normally
if ($event.keyCode === 9 || $event.key === 'Tab') {
return;
}
$event.preventDefault();
$event.stopPropagation();
// focus out on escape
if ($event.keyCode === 27 || $event.key === 'Escape') {
modelSetter(scope, prevVal);
element.blur();
}
else if ($event.keyCode === 13 || $event.key === 'Enter') {
element.blur();
}
// don't update if event is for ctrl alt or shift down itself
else if ($event.keyCode === 16 || $event.keyCode === 17 || $event.keyCode === 18) {
return;
}
else {
if (attrs.keyboardKeyInputControlKeys) {
let val = '';
if ($event.ctrlKey) {
val += 'Ctrl+';
}
if ($event.altKey) {
val += 'Alt+';
}
if ($event.shiftKey) {
val += 'Shift+';
}
modelSetter(scope, val + $event.key);
}
else {
modelSetter(scope, $event.key);
}
}
scope.$apply();
});
}
}
})();