同じホットキーが連続で発動しないように (#6082)

* add cooldown to hotkey

* remove blank

* use repeat flag

* format

* Add Repeatable option to Hotkey

* Boolean型のみに

* console.log消すの忘れてた
This commit is contained in:
Oni-Men 2020-02-26 17:22:43 +09:00 committed by GitHub
parent 03f54c5b02
commit 569be15705
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 1 deletions

View File

@ -12,14 +12,22 @@ type action = {
patterns: pattern[]; patterns: pattern[];
callback: Function; callback: Function;
allowRepeat: boolean;
}; };
const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): action => { const getKeyMap = keymap => Object.entries(keymap).map(([patterns, callback]): action => {
const result = { const result = {
patterns: [], patterns: [],
callback: callback callback: callback,
allowRepeat: true
} as action; } as action;
if (patterns.match(/^\(.*\)$/) !== null) {
result.allowRepeat = false;
patterns = patterns.slice(1, -1);
}
result.patterns = patterns.split('|').map(part => { result.patterns = patterns.split('|').map(part => {
const pattern = { const pattern = {
which: [], which: [],
@ -77,6 +85,7 @@ export default {
const matched = match(e, action.patterns); const matched = match(e, action.patterns);
if (matched) { if (matched) {
if (!action.allowRepeat && e.repeat) return;
if (el._hotkey_global && match(e, targetReservedKeys)) return; if (el._hotkey_global && match(e, targetReservedKeys)) return;
e.preventDefault(); e.preventDefault();