Files
sori.studio/lib/markdown-editor-keyboard.js

45 lines
1.4 KiB
JavaScript

/**
* 키보드 이벤트가 Cmd/Ctrl 조합인지 확인한다.
* @param {KeyboardEvent|Object} event - 키보드 이벤트
* @returns {boolean} Cmd/Ctrl 조합 여부
*/
export const hasEditorCommandModifier = (event) => Boolean(event?.metaKey || event?.ctrlKey)
/**
* 에디터 히스토리 단축키 동작을 계산한다.
* @param {KeyboardEvent|Object} event - 키보드 이벤트
* @returns {'undo'|'redo'|''} 히스토리 동작
*/
export const getEditorHistoryKeyboardAction = (event) => {
const key = String(event?.key ?? '').toLowerCase()
if (!hasEditorCommandModifier(event) || event?.altKey) {
return ''
}
if (!event?.shiftKey && key === 'z') {
return 'undo'
}
if (event?.shiftKey && key === 'z' || key === 'y') {
return 'redo'
}
return ''
}
/**
* 에디터 작성/미리보기 모드 전환 단축키인지 확인한다.
* @param {KeyboardEvent|Object} event - 키보드 이벤트
* @returns {boolean} 모드 전환 단축키 여부
*/
export const isEditorModeToggleShortcut = (event) => hasEditorCommandModifier(event)
&& String(event?.key ?? '').toLowerCase() === 'e'
/**
* 미디어 선택 모달을 닫는 키 입력인지 확인한다.
* @param {KeyboardEvent|Object} event - 키보드 이벤트
* @returns {boolean} 닫기 키 여부
*/
export const isMediaPickerCloseShortcut = (event) => event?.key === 'Escape'