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) {
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;
} else if (filtered.length == 1) {
let map = filtered[0];
if (map.keys.length == this.data.length) {
this.data = [];
return map.action
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 };