mirror of
https://github.com/logseq/logseq.git
synced 2026-05-27 22:24:09 +00:00
33 lines
985 B
TypeScript
33 lines
985 B
TypeScript
import Mousetrap from 'mousetrap'
|
|
|
|
type AvailableTags = 'INPUT' | 'TEXTAREA' | 'SELECT'
|
|
|
|
const tagFilter = ({ target }: KeyboardEvent, enableOnTags?: AvailableTags[]) => {
|
|
const targetTagName = target && (target as HTMLElement).tagName
|
|
return Boolean(
|
|
targetTagName && enableOnTags && enableOnTags.includes(targetTagName as AvailableTags)
|
|
)
|
|
}
|
|
|
|
export class KeyUtils {
|
|
static registerShortcut(
|
|
keys: string | string[],
|
|
callback: (keyboardEvent: Mousetrap.ExtendedKeyboardEvent, combo: string) => void
|
|
) {
|
|
const fn = (keyboardEvent: Mousetrap.ExtendedKeyboardEvent, combo: string): void => {
|
|
keyboardEvent.preventDefault()
|
|
if (
|
|
tagFilter(keyboardEvent, ['INPUT', 'TEXTAREA', 'SELECT']) ||
|
|
(keyboardEvent.target as HTMLElement)?.isContentEditable
|
|
) {
|
|
return
|
|
}
|
|
callback(keyboardEvent, combo)
|
|
}
|
|
Mousetrap.bind(keys, fn, 'keydown')
|
|
return () => {
|
|
Mousetrap.unbind(keys, 'keydown')
|
|
}
|
|
}
|
|
}
|