make tables tabable

This commit is contained in:
Dennis Eichhorn 2020-05-31 18:03:29 +02:00
parent e2da1506a7
commit 5f7beed155
3 changed files with 35 additions and 31 deletions

View File

@ -22,8 +22,8 @@ export class KeyboardManager
/** /**
* Add input listener. * Add input listener.
* *
* @param {string} element Container id * @param {string} element Container id
* @param {Array} keys Keyboard keys * @param {Array} keys Keyboard keys
* @param {callback} callback Callback * @param {callback} callback Callback
* *
* @return {void} * @return {void}
@ -52,22 +52,23 @@ export class KeyboardManager
*/ */
bind (element) bind (element)
{ {
const elements = document.querySelectorAll(element); const self = this;
const self = this, const elements = element === '' ? [document] : document.querySelectorAll(element),
length = elements.length; length = elements.length;
for (let i = 0; i < length; ++i) { for (let i = 0; i < length; ++i) {
elements[i].addEventListener('keydown', function keyBind(event) elements[i].addEventListener('keydown', function keyBind(event)
{ {
self.down.push(event.keyCode); self.down.push(event.keyCode);
self.run(element, event);
}); });
elements[i].addEventListener('keyup', function keyBind(event) elements[i].addEventListener('keyup', function keyBind(event)
{ {
if (self.down.length > 0) { let index = self.down.indexOf(event.keyCode);
self.run(element, event); while (index > -1) {
self.down = []; self.down.splice(index, 1);
index = self.down.indexOf(event.keyCode);
} }
}); });
} }
@ -77,7 +78,7 @@ export class KeyboardManager
* Execute callback based on key presses. * Execute callback based on key presses.
* *
* @param {string} element Container id * @param {string} element Container id
* @param {Object} event Key event * @param {Object} event Key event
* *
* @return {void} * @return {void}
* *
@ -91,25 +92,35 @@ export class KeyboardManager
throw 'Unexpected elmenet!'; throw 'Unexpected elmenet!';
} }
const actions = this.elements[element], const actions = this.elements[element].concat(this.elements['']),
length = actions.length, actionsLength = actions.length,
keyLength = this.down.length; downKeyLength = this.down.length;
let match = false;
for (let i = 0; i < length; ++i) { for (let i = 0; i < actionsLength; ++i) {
for (let j = 0; j < keyLength; ++j) { const actionKeyLength = actions[i].keys.length;
if (actions[i].keys.indexOf(this.down[j]) === -1) { let match = true;
for (let j = 0; j < actionKeyLength; ++j) {
if (this.down.indexOf(actions[i].keys[j]) === -1) {
match = false; match = false;
break; 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) { if (match) {
jsOMS.preventAll(event); jsOMS.preventAll(event);
actions[i].callback(); actions[i].callback(event);
break; break;
} }

View File

@ -133,14 +133,9 @@
*/ */
jsOMS.preventAll = function (event) jsOMS.preventAll = function (event)
{ {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
event.preventDefault(); event.preventDefault();
}; event.stopImmediatePropagation();
event.cancelBubble = true;
/** /**
* Ready invoke * Ready invoke

View File

@ -309,13 +309,11 @@
*/ */
jsOMS.preventAll = function (event) jsOMS.preventAll = function (event)
{ {
if (event.stopPropagation) {
event.stopPropagation();
} else {
event.cancelBubble = true;
}
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation();
event.cancelBubble = true;
return false;
}; };
/** /**