mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-05-01 19:16:59 +00:00
* wip * wip * wip * wip * wip * wip * wip * wip * fix * fix * fix * fix size * fix register logs * fix img autosize * fix row selection * support delete * fix border rendering * fix display:none * tweak comments * support choose pc file and drive file * support directory drag-drop * fix * fix comment * support context menu on data area * fix autogen * wip イベント整理 * イベントの整理 * refactor grid * fix cell re-render bugs * fix row remove * fix comment * fix validation * fix utils * list maximum * add mimetype check * fix * fix number cell focus * fix over 100 file drop * remove log * fix patchData * fix performance * fix * support update and delete * support remote import * fix layout * heightやめる * fix performance * add list v2 endpoint * support pagination * fix api call * fix no clickable input text * fix limit * fix paging * fix * fix * support search * tweak logs * tweak cell selection * fix range select * block delete * add comment * fix * support import log * fix dialog * refactor * add confirm dialog * fix name * fix autogen * wip * support image change and highlight row * add columns * wip * support sort * add role name * add index to emoji * refine context menu setting * support role select * remove unused buttons * fix url * fix MkRoleSelectDialog.vue * add route * refine remote page * enter key search * fix paste bugs * fix copy/paste * fix keyEvent * fix copy/paste and delete * fix comment * fix MkRoleSelectDialog.vue and storybook scenario * fix MkRoleSelectDialog.vue and storybook scenario * add MkGrid.stories.impl.ts * fix * [wip] add custom-emojis-manager2.stories.impl.ts * [wip] add custom-emojis-manager2.stories.impl.ts * wip * 課題はまだ残っているが、ひとまず完了 * fix validation and register roles * fix upload * optimize import * patch from dev * i18n * revert excess fixes * separate sort order component * add SPDX * revert excess fixes * fix pre test * fix bugs * add type column * fix types * fix CHANGELOG.md * fix lit * lint * tweak style * refactor * fix ci * autogen * Update types.ts * CSS Module化 * fix log * 縦スクロールを無効化 * MkStickyContainer化 * regenerate locales index.d.ts * fix * fix * テスト * ランダム値によるUI変更の抑制 * テスト * tableタグやめる * fix last-child css * fix overflow css * fix endpoint.ts * tweak css * 最新への追従とレイアウト微調整 * ソートキーの指定方法を他と合わせた * fix focus * fix layout * v2エンドポイントのルールに対応 * 表示条件などを微調整 * fix MkDataCell.vue * fix error code * fix error * add comment to MkModal.vue * Update index.d.ts * fix CHANGELOG.md * fix color theme * fix CHANGELOG.md * fix CHANGELOG.md * fix center * fix: テーブルにフォーカスがあり、通常状態であるときはキーイベントの伝搬を止める * fix: ロール選択用のダイアログにてコンディショナルロールを×ボタンで除外できなかったのを修正 * fix remote list folder * sticky footers * chore: fix ci error(just single line-break diff) * fix loading * fix like * comma to space * fix ci * fix ci * removed align-center --------- Co-authored-by: osamu <46447427+sam-osamu@users.noreply.github.com> Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> Co-authored-by: Sayamame-beans <61457993+Sayamame-beans@users.noreply.github.com>
153 lines
2.5 KiB
TypeScript
153 lines
2.5 KiB
TypeScript
/*
|
|
* 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);
|
|
}
|
|
}
|
|
}
|