@wordpress/block-library
Version:
Block library for the WordPress editor.
95 lines (92 loc) • 3.87 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _element = require("@wordpress/element");
var _data = require("@wordpress/data");
var _keyboardShortcuts = require("@wordpress/keyboard-shortcuts");
var _i18n = require("@wordpress/i18n");
var _blocks = require("@wordpress/blocks");
var _blockEditor = require("@wordpress/block-editor");
/**
* WordPress dependencies
*/
function BlockKeyboardShortcuts() {
const {
registerShortcut
} = (0, _data.useDispatch)(_keyboardShortcuts.store);
const {
replaceBlocks
} = (0, _data.useDispatch)(_blockEditor.store);
const {
getBlockName,
getSelectedBlockClientId,
getBlockAttributes
} = (0, _data.useSelect)(_blockEditor.store);
const handleTransformHeadingAndParagraph = (event, level) => {
event.preventDefault();
const currentClientId = getSelectedBlockClientId();
if (currentClientId === null) {
return;
}
const blockName = getBlockName(currentClientId);
const isParagraph = blockName === 'core/paragraph';
const isHeading = blockName === 'core/heading';
if (!isParagraph && !isHeading) {
return;
}
const destinationBlockName = level === 0 ? 'core/paragraph' : 'core/heading';
const attributes = getBlockAttributes(currentClientId);
// Avoid unnecessary block transform when attempting to transform to
// the same block type and/or same level.
if (isParagraph && level === 0 || isHeading && attributes.level === level) {
return;
}
const textAlign = blockName === 'core/paragraph' ? 'align' : 'textAlign';
const destinationTextAlign = destinationBlockName === 'core/paragraph' ? 'align' : 'textAlign';
replaceBlocks(currentClientId, (0, _blocks.createBlock)(destinationBlockName, {
level,
content: attributes.content,
...{
[destinationTextAlign]: attributes[textAlign]
}
}));
};
(0, _element.useEffect)(() => {
registerShortcut({
name: 'core/block-editor/transform-heading-to-paragraph',
category: 'block-library',
description: (0, _i18n.__)('Transform heading to paragraph.'),
keyCombination: {
modifier: 'access',
character: '0'
},
aliases: [{
modifier: 'access',
character: '7'
}]
});
[1, 2, 3, 4, 5, 6].forEach(level => {
registerShortcut({
name: `core/block-editor/transform-paragraph-to-heading-${level}`,
category: 'block-library',
description: (0, _i18n.__)('Transform paragraph to heading.'),
keyCombination: {
modifier: 'access',
character: `${level}`
}
});
});
}, [registerShortcut]);
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-heading-to-paragraph', event => handleTransformHeadingAndParagraph(event, 0));
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-paragraph-to-heading-1', event => handleTransformHeadingAndParagraph(event, 1));
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-paragraph-to-heading-2', event => handleTransformHeadingAndParagraph(event, 2));
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-paragraph-to-heading-3', event => handleTransformHeadingAndParagraph(event, 3));
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-paragraph-to-heading-4', event => handleTransformHeadingAndParagraph(event, 4));
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-paragraph-to-heading-5', event => handleTransformHeadingAndParagraph(event, 5));
(0, _keyboardShortcuts.useShortcut)('core/block-editor/transform-paragraph-to-heading-6', event => handleTransformHeadingAndParagraph(event, 6));
return null;
}
var _default = exports.default = BlockKeyboardShortcuts;
//# sourceMappingURL=index.js.map
;