UNPKG

@wordpress/editor

Version:
117 lines (111 loc) 3.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = EditorKeyboardShortcuts; var _keyboardShortcuts = require("@wordpress/keyboard-shortcuts"); var _data = require("@wordpress/data"); var _interface = require("@wordpress/interface"); var _blockEditor = require("@wordpress/block-editor"); var _store = require("../../store"); /** * WordPress dependencies */ /** * Internal dependencies */ /** * Handles the keyboard shortcuts for the editor. * * It provides functionality for various keyboard shortcuts such as toggling editor mode, * toggling distraction-free mode, undo/redo, saving the post, toggling list view, * and toggling the sidebar. */ function EditorKeyboardShortcuts() { const isModeToggleDisabled = (0, _data.useSelect)(select => { const { richEditingEnabled, codeEditingEnabled } = select(_store.store).getEditorSettings(); return !richEditingEnabled || !codeEditingEnabled; }, []); const { getBlockSelectionStart } = (0, _data.useSelect)(_blockEditor.store); const { getActiveComplementaryArea } = (0, _data.useSelect)(_interface.store); const { enableComplementaryArea, disableComplementaryArea } = (0, _data.useDispatch)(_interface.store); const { redo, undo, savePost, setIsListViewOpened, switchEditorMode, toggleDistractionFree } = (0, _data.useDispatch)(_store.store); const { isEditedPostDirty, isPostSavingLocked, isListViewOpened, getEditorMode } = (0, _data.useSelect)(_store.store); (0, _keyboardShortcuts.useShortcut)('core/editor/toggle-mode', () => { switchEditorMode(getEditorMode() === 'visual' ? 'text' : 'visual'); }, { isDisabled: isModeToggleDisabled }); (0, _keyboardShortcuts.useShortcut)('core/editor/toggle-distraction-free', () => { toggleDistractionFree(); }); (0, _keyboardShortcuts.useShortcut)('core/editor/undo', event => { undo(); event.preventDefault(); }); (0, _keyboardShortcuts.useShortcut)('core/editor/redo', event => { redo(); event.preventDefault(); }); (0, _keyboardShortcuts.useShortcut)('core/editor/save', event => { event.preventDefault(); /** * Do not save the post if post saving is locked. */ if (isPostSavingLocked()) { return; } // TODO: This should be handled in the `savePost` effect in // considering `isSaveable`. See note on `isEditedPostSaveable` // selector about dirtiness and meta-boxes. // // See: `isEditedPostSaveable` if (!isEditedPostDirty()) { return; } savePost(); }); // Only opens the list view. Other functionality for this shortcut happens in the rendered sidebar. (0, _keyboardShortcuts.useShortcut)('core/editor/toggle-list-view', event => { if (!isListViewOpened()) { event.preventDefault(); setIsListViewOpened(true); } }); (0, _keyboardShortcuts.useShortcut)('core/editor/toggle-sidebar', event => { // This shortcut has no known clashes, but use preventDefault to prevent any // obscure shortcuts from triggering. event.preventDefault(); const isEditorSidebarOpened = ['edit-post/document', 'edit-post/block'].includes(getActiveComplementaryArea('core')); if (isEditorSidebarOpened) { disableComplementaryArea('core'); } else { const sidebarToOpen = getBlockSelectionStart() ? 'edit-post/block' : 'edit-post/document'; enableComplementaryArea('core', sidebarToOpen); } }); return null; } //# sourceMappingURL=index.js.map