summaryrefslogtreecommitdiff
path: root/packages/frontend/src/utility
diff options
context:
space:
mode:
author果物リン <fruitriin@riinswork.space>2025-10-09 09:29:47 +0900
committerGitHub <noreply@github.com>2025-10-09 09:29:47 +0900
commit41aa0c8efebf2e443ba7372762948b5e56cfd990 (patch)
tree513daf97c8fd128ea73892f739a2babe73aa9a57 /packages/frontend/src/utility
parentfix: aliasesの区切り文字が一致していないのを修正 (#16622) (diff)
downloadmisskey-41aa0c8efebf2e443ba7372762948b5e56cfd990.tar.gz
misskey-41aa0c8efebf2e443ba7372762948b5e56cfd990.tar.bz2
misskey-41aa0c8efebf2e443ba7372762948b5e56cfd990.zip
[カスタム絵文字beta]MacのCmdキー対応とCtrl/Cmd+Arrowキー対応 (#16621)
* [カスタム絵文字beta]MacのCmdキー対応とCtrl/Cmd+Arrowキー対応 * Update packages/frontend/src/components/grid/MkGrid.vue Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> --------- Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src/utility')
-rw-r--r--packages/frontend/src/utility/hotkey.ts4
-rw-r--r--packages/frontend/src/utility/key-event.ts153
2 files changed, 2 insertions, 155 deletions
diff --git a/packages/frontend/src/utility/hotkey.ts b/packages/frontend/src/utility/hotkey.ts
index d728cdfcb0..9c1e66a22e 100644
--- a/packages/frontend/src/utility/hotkey.ts
+++ b/packages/frontend/src/utility/hotkey.ts
@@ -50,12 +50,12 @@ let latestHotkey: Pattern & { callback: CallbackFunction } | null = null;
//#endregion
//#region impl
-export const makeHotkey = (keymap: Keymap) => {
+export const makeHotkey = (keymap: Keymap, ignoreElements = IGNORE_ELEMENTS) => {
const actions = parseKeymap(keymap);
return (ev: KeyboardEvent) => {
if ('pswp' in window && window.pswp != null) return;
if (window.document.activeElement != null) {
- if (IGNORE_ELEMENTS.includes(window.document.activeElement.tagName.toLowerCase())) return;
+ if (ignoreElements.includes(window.document.activeElement.tagName.toLowerCase())) return;
if (getHTMLElementOrNull(window.document.activeElement)?.isContentEditable) return;
}
for (const action of actions) {
diff --git a/packages/frontend/src/utility/key-event.ts b/packages/frontend/src/utility/key-event.ts
deleted file mode 100644
index 020a6c2174..0000000000
--- a/packages/frontend/src/utility/key-event.ts
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * SPDX-FileCopyrightText: syuilo and misskey-project
- * SPDX-License-Identifier: AGPL-3.0-only
- */
-
-/**
- * {@link KeyboardEvent.code} の値を表す文字列。不足分は適宜追加する
- * @see https://developer.mozilla.org/en-US/docs/Web/API/UI_Events/Keyboard_event_code_values
- */
-export type KeyCode = (
- | 'Backspace'
- | 'Tab'
- | 'Enter'
- | 'Shift'
- | 'Control'
- | 'Alt'
- | 'Pause'
- | 'CapsLock'
- | 'Escape'
- | 'Space'
- | 'PageUp'
- | 'PageDown'
- | 'End'
- | 'Home'
- | 'ArrowLeft'
- | 'ArrowUp'
- | 'ArrowRight'
- | 'ArrowDown'
- | 'Insert'
- | 'Delete'
- | 'Digit0'
- | 'Digit1'
- | 'Digit2'
- | 'Digit3'
- | 'Digit4'
- | 'Digit5'
- | 'Digit6'
- | 'Digit7'
- | 'Digit8'
- | 'Digit9'
- | 'KeyA'
- | 'KeyB'
- | 'KeyC'
- | 'KeyD'
- | 'KeyE'
- | 'KeyF'
- | 'KeyG'
- | 'KeyH'
- | 'KeyI'
- | 'KeyJ'
- | 'KeyK'
- | 'KeyL'
- | 'KeyM'
- | 'KeyN'
- | 'KeyO'
- | 'KeyP'
- | 'KeyQ'
- | 'KeyR'
- | 'KeyS'
- | 'KeyT'
- | 'KeyU'
- | 'KeyV'
- | 'KeyW'
- | 'KeyX'
- | 'KeyY'
- | 'KeyZ'
- | 'MetaLeft'
- | 'MetaRight'
- | 'ContextMenu'
- | 'F1'
- | 'F2'
- | 'F3'
- | 'F4'
- | 'F5'
- | 'F6'
- | 'F7'
- | 'F8'
- | 'F9'
- | 'F10'
- | 'F11'
- | 'F12'
- | 'NumLock'
- | 'ScrollLock'
- | 'Semicolon'
- | 'Equal'
- | 'Comma'
- | 'Minus'
- | 'Period'
- | 'Slash'
- | 'Backquote'
- | 'BracketLeft'
- | 'Backslash'
- | 'BracketRight'
- | 'Quote'
- | 'Meta'
- | 'AltGraph'
-);
-
-/**
- * 修飾キーを表す文字列。不足分は適宜追加する。
- */
-export type KeyModifier = (
- | 'Shift'
- | 'Control'
- | 'Alt'
- | 'Meta'
-);
-
-/**
- * 押下されたキー以外の状態を表す文字列。不足分は適宜追加する。
- */
-export type KeyState = (
- | 'composing'
- | 'repeat'
-);
-
-export type KeyEventHandler = {
- modifiers?: KeyModifier[];
- states?: KeyState[];
- code: KeyCode | 'any';
- handler: (event: KeyboardEvent) => void;
-};
-
-export function handleKeyEvent(event: KeyboardEvent, handlers: KeyEventHandler[]) {
- function checkModifier(ev: KeyboardEvent, modifiers? : KeyModifier[]) {
- if (modifiers) {
- return modifiers.every(modifier => ev.getModifierState(modifier));
- }
- return true;
- }
-
- function checkState(ev: KeyboardEvent, states?: KeyState[]) {
- if (states) {
- return states.every(state => ev.getModifierState(state));
- }
- return true;
- }
-
- let hit = false;
- for (const handler of handlers.filter(it => it.code === event.code)) {
- if (checkModifier(event, handler.modifiers) && checkState(event, handler.states)) {
- handler.handler(event);
- hit = true;
- break;
- }
- }
-
- if (!hit) {
- for (const handler of handlers.filter(it => it.code === 'any')) {
- handler.handler(event);
- }
- }
-}