mirror of
https://github.com/Karaka-Management/jsOMS.git
synced 2026-02-14 16:38:39 +00:00
make tables tabable
This commit is contained in:
parent
e2da1506a7
commit
5f7beed155
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user