flush input queue when no key-maps matched

jh-changes
Shin'ya Ueoka 7 years ago
parent 082450928a
commit 3c1b33add3
  1. 14
      src/background/key-queue.js
  2. 19
      src/background/keys.js

@ -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 };