UNPKG

@wordpress/block-editor

Version:
122 lines 4.73 kB
/** * External dependencies */ import { I18nManager } from 'react-native'; /** * WordPress dependencies */ import { __, sprintf } from '@wordpress/i18n'; import { arrowUp, arrowDown, arrowLeft, arrowRight } from '@wordpress/icons'; const horizontalMover = { backwardButtonIcon: arrowLeft, forwardButtonIcon: arrowRight, backwardButtonHint: __('Double tap to move the block to the left'), forwardButtonHint: __('Double tap to move the block to the right'), firstBlockTitle: __('Move block left'), lastBlockTitle: __('Move block right'), /* translators: accessibility text. %1: current block position (number). %2: next block position (number) */ backwardButtonTitle: __('Move block left from position %1$s to position %2$s'), /* translators: accessibility text. %1: current block position (number). %2: next block position (number) */ forwardButtonTitle: __('Move block right from position %1$s to position %2$s') }; const verticalMover = { backwardButtonIcon: arrowUp, forwardButtonIcon: arrowDown, backwardButtonHint: __('Double tap to move the block up'), forwardButtonHint: __('Double tap to move the block down'), firstBlockTitle: __('Move block up'), lastBlockTitle: __('Move block down'), /* translators: accessibility text. %1: current block position (number). %2: next block position (number) */ backwardButtonTitle: __('Move block up from row %1$s to row %2$s'), /* translators: accessibility text. %1: current block position (number). %2: next block position (number) */ forwardButtonTitle: __('Move block down from row %1$s to row %2$s') }; const KEYS = ['description', 'icon', 'title', 'actionTitle']; const SETUP_GETTER = { description: getMoverDescription, icon: getArrowIcon, title: getMoverButtonTitle, actionTitle: getMoverActionTitle }; export function getMoversSetup(isStackedHorizontally, { firstIndex, keys = KEYS }) { return keys.reduce((setup, key) => { if (KEYS.includes(key)) { Object.assign(setup, { [key]: getSetup(key, isStackedHorizontally, { firstIndex }) }); } return setup; }, {}); } function switchButtonPropIfRTL(isBackwardButton, forwardButtonProp, backwardButtonProp, isStackedHorizontally) { if (I18nManager.isRTL && isStackedHorizontally) { // For RTL and horizontal direction switch prop between forward and backward button. if (isBackwardButton) { return forwardButtonProp; // Set forwardButtonProp for backward button. } return backwardButtonProp; // Set backwardButtonProp for forward button. } return isBackwardButton ? backwardButtonProp : forwardButtonProp; } function getSetup() { const [key, ...args] = arguments; return SETUP_GETTER[key].apply(null, [...args]); } function applyRTLSetup(isBackwardButton, args) { return switchButtonPropIfRTL.apply(null, [isBackwardButton, ...args]); } function getMoverDescription(isStackedHorizontally) { return isStackedHorizontally ? horizontalMover : verticalMover; } function getArrowIcon(isStackedHorizontally) { const { forwardButtonIcon, backwardButtonIcon } = getMoverDescription(isStackedHorizontally); const args = [forwardButtonIcon, backwardButtonIcon, isStackedHorizontally]; return { backward: applyRTLSetup(true, args), forward: applyRTLSetup(false, args) }; } function getMoverActionTitle(isStackedHorizontally) { const { firstBlockTitle, lastBlockTitle } = getMoverDescription(isStackedHorizontally); const args = [lastBlockTitle, firstBlockTitle, isStackedHorizontally]; const actionTitlePrev = applyRTLSetup(true, args); const actionTitleNext = applyRTLSetup(false, args); return { backward: sprintf(actionTitlePrev, firstBlockTitle), forward: sprintf(actionTitleNext, lastBlockTitle) }; } function getMoverButtonTitle(isStackedHorizontally, { firstIndex }) { const getIndexes = isBackwardButton => { const fromIndex = firstIndex + 1; // Current position based on index // for backwardButton decrease index (move left/up) for forwardButton increase index (move right/down) const direction = isBackwardButton ? -1 : 1; const toIndex = fromIndex + direction; // Position after move. return [fromIndex, toIndex]; }; const { backwardButtonTitle, forwardButtonTitle } = getMoverDescription(isStackedHorizontally); const args = [forwardButtonTitle, backwardButtonTitle, isStackedHorizontally]; const buttonTitlePrev = applyRTLSetup(true, args); const buttonTitleNext = applyRTLSetup(false, args); return { backward: sprintf(buttonTitlePrev, ...getIndexes(true)), forward: sprintf(buttonTitleNext, ...getIndexes(false)) }; } //# sourceMappingURL=mover-description.native.js.map