2
0
mirror of https://github.com/moebooru/moebooru synced 2025-08-22 01:47:48 +00:00

Clean up on_key with modern js

This commit is contained in:
nanaya 2025-01-13 16:58:31 +09:00
parent caa784c724
commit 1449d608d1

View File

@ -1,59 +1,34 @@
var keysDown; const keysDown = new Map();
keysDown = new Map();
// Many browsers eat keyup events if focus is lost while the button // Many browsers eat keyup events if focus is lost while the button
// is pressed. // is pressed.
document.addEventListener('blur', function () { document.addEventListener('blur', function () {
return keysDown.clear(); keysDown.clear();
}); });
export var onKey = function(key, options, press, release) { export function onKey (key, options, press, release) {
var element, ref; options ??= {};
if (options == null) { const element = options.Element ?? document;
options = {};
}
element = (ref = options.Element) != null ? ref : document;
element.addEventListener('keyup', function (e) { element.addEventListener('keyup', function (e) {
if (e.keyCode !== key) { if (e.keyCode !== key) return;
return;
}
keysDown.set(e.keyCode, false); keysDown.set(e.keyCode, false);
if (release) { release?.(e);
release(e);
}
}); });
return element.addEventListener('keydown', function(e) {
var target; element.addEventListener('keydown', function (e) {
if (e.keyCode !== key) { if (e.keyCode !== key) return;
return; if (e.metaKey) return;
} if (e.shiftKey !== !!options.shiftKey) return;
if (e.metaKey) { if (e.altKey !== !!options.altKey) return;
return; if (e.ctrlKey !== !!options.ctrlKey) return;
} if (!options.allowRepeat && keysDown.get(e.keyCode)) 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;
}
keysDown.set(e.keyCode, true); keysDown.set(e.keyCode, true);
target = e.target; if (!options.AllowTextAreaFields && e.target.tagName === 'TEXTAREA') return;
if (!options.AllowTextAreaFields && target.tagName === 'TEXTAREA') { if (!options.AllowInputFields && e.target.tagName === 'INPUT') return;
return; if (press != null && press(e) === false) return;
}
if (!options.AllowInputFields && target.tagName === 'INPUT') { e.preventDefault();
return;
}
if ((press != null) && !press(e)) {
return;
}
return e.preventDefault();
}); });
}; }