flush input queue when no key-maps matched
This commit is contained in:
parent
082450928a
commit
3c1b33add3
2 changed files with 24 additions and 9 deletions
|
@ -17,10 +17,18 @@ export default class KeyQueue {
|
|||
|
||||
push(key) {
|
||||
this.data.push(key);
|
||||
for (let map of DEFAULT_KEYMAP) {
|
||||
if (keys.keysEquals(map.keys, this.data)) {
|
||||
let filtered = DEFAULT_KEYMAP.filter((map) => {
|
||||
return keys.hasPrefix(map.keys, this.data)
|
||||
});
|
||||
|
||||
if (filtered.length == 0) {
|
||||
this.data = [];
|
||||
return map.action
|
||||
return;
|
||||
} else if (filtered.length == 1) {
|
||||
let map = filtered[0];
|
||||
if (map.keys.length == this.data.length) {
|
||||
this.data = [];
|
||||
return map.action;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const keyEquals = (key1, key2) => {
|
||||
const identifyKey = (key1, key2) => {
|
||||
return (key1.code === key2.code) &&
|
||||
((key1.shift || false) === (key2.shift || false)) &&
|
||||
((key1.ctrl || false) === (key2.ctrl || false)) &&
|
||||
|
@ -6,16 +6,23 @@ const keyEquals = (key1, key2) => {
|
|||
((key1.meta || false) === (key2.meta || false));
|
||||
};
|
||||
|
||||
const keysEquals = (keys1, keys2) => {
|
||||
if (keys1.length !== keys2.length) {
|
||||
const hasPrefix = (keys, prefix) => {
|
||||
if (keys.length < prefix.length) {
|
||||
return false;
|
||||
}
|
||||
for (let i = 0; i < keys1.length; ++i) {
|
||||
if (!keyEquals(keys1[i], keys2[i])) {
|
||||
for (let i = 0; i < keys.length; ++i) {
|
||||
if (!identifyKey(keys[i], prefix[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export { keyEquals, keysEquals };
|
||||
const identifyKeys = (keys1, keys2) => {
|
||||
if (keys1.length !== keys2.length) {
|
||||
return false;
|
||||
}
|
||||
return hasPrefix(keys1, keys2);
|
||||
}
|
||||
|
||||
export { identifyKey, identifyKeys, hasPrefix };
|
||||
|
|
Reference in a new issue