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) {
|
push(key) {
|
||||||
this.data.push(key);
|
this.data.push(key);
|
||||||
for (let map of DEFAULT_KEYMAP) {
|
let filtered = DEFAULT_KEYMAP.filter((map) => {
|
||||||
if (keys.keysEquals(map.keys, this.data)) {
|
return keys.hasPrefix(map.keys, this.data)
|
||||||
|
});
|
||||||
|
|
||||||
|
if (filtered.length == 0) {
|
||||||
|
this.data = [];
|
||||||
|
return;
|
||||||
|
} else if (filtered.length == 1) {
|
||||||
|
let map = filtered[0];
|
||||||
|
if (map.keys.length == this.data.length) {
|
||||||
this.data = [];
|
this.data = [];
|
||||||
return map.action
|
return map.action;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
const keyEquals = (key1, key2) => {
|
const identifyKey = (key1, key2) => {
|
||||||
return (key1.code === key2.code) &&
|
return (key1.code === key2.code) &&
|
||||||
((key1.shift || false) === (key2.shift || false)) &&
|
((key1.shift || false) === (key2.shift || false)) &&
|
||||||
((key1.ctrl || false) === (key2.ctrl || false)) &&
|
((key1.ctrl || false) === (key2.ctrl || false)) &&
|
||||||
|
@ -6,16 +6,23 @@ const keyEquals = (key1, key2) => {
|
||||||
((key1.meta || false) === (key2.meta || false));
|
((key1.meta || false) === (key2.meta || false));
|
||||||
};
|
};
|
||||||
|
|
||||||
const keysEquals = (keys1, keys2) => {
|
const hasPrefix = (keys, prefix) => {
|
||||||
if (keys1.length !== keys2.length) {
|
if (keys.length < prefix.length) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (let i = 0; i < keys1.length; ++i) {
|
for (let i = 0; i < keys.length; ++i) {
|
||||||
if (!keyEquals(keys1[i], keys2[i])) {
|
if (!identifyKey(keys[i], prefix[i])) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
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