From 5f7beed155aedd85eac10bd04a34d8ee4822c419 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 31 May 2020 18:03:29 +0200 Subject: [PATCH] make tables tabable --- UI/Input/Keyboard/KeyboardManager.js | 47 +++++++++++++++++----------- Utils/UiUtils.js | 9 ++---- Utils/oLib.js | 10 +++--- 3 files changed, 35 insertions(+), 31 deletions(-) diff --git a/UI/Input/Keyboard/KeyboardManager.js b/UI/Input/Keyboard/KeyboardManager.js index 868e287..aebc44a 100644 --- a/UI/Input/Keyboard/KeyboardManager.js +++ b/UI/Input/Keyboard/KeyboardManager.js @@ -22,8 +22,8 @@ export class KeyboardManager /** * Add input listener. * - * @param {string} element Container id - * @param {Array} keys Keyboard keys + * @param {string} element Container id + * @param {Array} keys Keyboard keys * @param {callback} callback Callback * * @return {void} @@ -52,22 +52,23 @@ export class KeyboardManager */ bind (element) { - const elements = document.querySelectorAll(element); - const self = this, + const self = this; + const elements = element === '' ? [document] : document.querySelectorAll(element), length = elements.length; - for (let i = 0; i < length; ++i) { elements[i].addEventListener('keydown', function keyBind(event) { self.down.push(event.keyCode); + self.run(element, event); }); elements[i].addEventListener('keyup', function keyBind(event) { - if (self.down.length > 0) { - self.run(element, event); - self.down = []; + let index = self.down.indexOf(event.keyCode); + while (index > -1) { + self.down.splice(index, 1); + index = self.down.indexOf(event.keyCode); } }); } @@ -77,7 +78,7 @@ export class KeyboardManager * Execute callback based on key presses. * * @param {string} element Container id - * @param {Object} event Key event + * @param {Object} event Key event * * @return {void} * @@ -91,25 +92,35 @@ export class KeyboardManager throw 'Unexpected elmenet!'; } - const actions = this.elements[element], - length = actions.length, - keyLength = this.down.length; - let match = false; + const actions = this.elements[element].concat(this.elements['']), + actionsLength = actions.length, + downKeyLength = this.down.length; - for (let i = 0; i < length; ++i) { - for (let j = 0; j < keyLength; ++j) { - if (actions[i].keys.indexOf(this.down[j]) === -1) { + for (let i = 0; i < actionsLength; ++i) { + const actionKeyLength = actions[i].keys.length; + let match = true; + + for (let j = 0; j < actionKeyLength; ++j) { + if (this.down.indexOf(actions[i].keys[j]) === -1) { match = false; break; } + } - match = true; + if (match) { + for (let j = 0; j < downKeyLength; ++j) { + if (actions[i].keys.indexOf(this.down[j]) === -1) { + match = false; + + break; + } + } } if (match) { jsOMS.preventAll(event); - actions[i].callback(); + actions[i].callback(event); break; } diff --git a/Utils/UiUtils.js b/Utils/UiUtils.js index 61ab486..15b798d 100644 --- a/Utils/UiUtils.js +++ b/Utils/UiUtils.js @@ -133,14 +133,9 @@ */ jsOMS.preventAll = function (event) { - if (event.stopPropagation) { - event.stopPropagation(); - } else { - event.cancelBubble = true; - } - event.preventDefault(); - }; + event.stopImmediatePropagation(); + event.cancelBubble = true; /** * Ready invoke diff --git a/Utils/oLib.js b/Utils/oLib.js index 6b2468c..7a27f8a 100644 --- a/Utils/oLib.js +++ b/Utils/oLib.js @@ -309,13 +309,11 @@ */ jsOMS.preventAll = function (event) { - if (event.stopPropagation) { - event.stopPropagation(); - } else { - event.cancelBubble = true; - } - event.preventDefault(); + event.stopImmediatePropagation(); + event.cancelBubble = true; + + return false; }; /**