From 1449d608d1ffe6338c2bb015f27f6d98efd6210b Mon Sep 17 00:00:00 2001 From: nanaya Date: Mon, 13 Jan 2025 16:58:31 +0900 Subject: [PATCH] Clean up on_key with modern js --- app/javascript/src/utils/on_key.js | 75 ++++++++++-------------------- 1 file changed, 25 insertions(+), 50 deletions(-) diff --git a/app/javascript/src/utils/on_key.js b/app/javascript/src/utils/on_key.js index 037c6230..065100fe 100644 --- a/app/javascript/src/utils/on_key.js +++ b/app/javascript/src/utils/on_key.js @@ -1,59 +1,34 @@ -var keysDown; - -keysDown = new Map(); +const keysDown = new Map(); // Many browsers eat keyup events if focus is lost while the button // is pressed. -document.addEventListener('blur', function() { - return keysDown.clear(); +document.addEventListener('blur', function () { + keysDown.clear(); }); -export var onKey = function(key, options, press, release) { - var element, ref; - if (options == null) { - options = {}; - } - element = (ref = options.Element) != null ? ref : document; - element.addEventListener('keyup', function(e) { - if (e.keyCode !== key) { - return; - } +export function onKey (key, options, press, release) { + options ??= {}; + const element = options.Element ?? document; + + element.addEventListener('keyup', function (e) { + if (e.keyCode !== key) return; keysDown.set(e.keyCode, false); - if (release) { - release(e); - } + release?.(e); }); - return element.addEventListener('keydown', function(e) { - var target; - if (e.keyCode !== key) { - return; - } - if (e.metaKey) { - return; - } - if (e.shiftKey !== !!options.shiftKey) { - return; - } - if (e.altKey !== !!options.altKey) { - return; - } - if (e.ctrlKey !== !!options.ctrlKey) { - return; - } - if (!options.allowRepeat && keysDown.get(e.keyCode) === true) { - return; - } + + element.addEventListener('keydown', function (e) { + if (e.keyCode !== key) return; + if (e.metaKey) return; + if (e.shiftKey !== !!options.shiftKey) return; + if (e.altKey !== !!options.altKey) return; + if (e.ctrlKey !== !!options.ctrlKey) return; + if (!options.allowRepeat && keysDown.get(e.keyCode)) return; + keysDown.set(e.keyCode, true); - target = e.target; - if (!options.AllowTextAreaFields && target.tagName === 'TEXTAREA') { - return; - } - if (!options.AllowInputFields && target.tagName === 'INPUT') { - return; - } - if ((press != null) && !press(e)) { - return; - } - return e.preventDefault(); + if (!options.AllowTextAreaFields && e.target.tagName === 'TEXTAREA') return; + if (!options.AllowInputFields && e.target.tagName === 'INPUT') return; + if (press != null && press(e) === false) return; + + e.preventDefault(); }); -}; +}