@wordpress/block-editor 12.19.4 → 12.19.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/components/block-actions/index.js +45 -32
- package/build/components/block-actions/index.js.map +1 -1
- package/build/components/block-bindings-toolbar-indicator/index.js +25 -0
- package/build/components/block-bindings-toolbar-indicator/index.js.map +1 -0
- package/build/components/block-list/use-block-props/index.js +8 -1
- package/build/components/block-list/use-block-props/index.js.map +1 -1
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
- package/build/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build/components/block-settings-menu/block-settings-dropdown.js +12 -10
- package/build/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build/components/block-toolbar/index.js +14 -5
- package/build/components/block-toolbar/index.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +13 -13
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/list-view/block-select-button.js +10 -2
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/components/list-view/use-clipboard-handler.js +2 -1
- package/build/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build/components/rich-text/index.js +1 -1
- package/build/components/rich-text/index.js.map +1 -1
- package/build/components/url-popover/index.js +3 -3
- package/build/components/url-popover/index.js.map +1 -1
- package/build/components/use-moving-animation/index.js +4 -0
- package/build/components/use-moving-animation/index.js.map +1 -1
- package/build/components/writing-flow/use-clipboard-handler.js +2 -1
- package/build/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build/components/writing-flow/utils.js +23 -6
- package/build/components/writing-flow/utils.js.map +1 -1
- package/build/hooks/block-hooks.js +26 -2
- package/build/hooks/block-hooks.js.map +1 -1
- package/build/hooks/use-bindings-attributes.js +171 -46
- package/build/hooks/use-bindings-attributes.js.map +1 -1
- package/build/private-apis.js +2 -0
- package/build/private-apis.js.map +1 -1
- package/build/store/actions.js +40 -6
- package/build/store/actions.js.map +1 -1
- package/build-module/components/block-actions/index.js +45 -32
- package/build-module/components/block-actions/index.js.map +1 -1
- package/build-module/components/block-bindings-toolbar-indicator/index.js +18 -0
- package/build-module/components/block-bindings-toolbar-indicator/index.js.map +1 -0
- package/build-module/components/block-list/use-block-props/index.js +9 -2
- package/build-module/components/block-list/use-block-props/index.js.map +1 -1
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -3
- package/build-module/components/block-list/use-block-props/use-selected-block-event-handlers.js.map +1 -1
- package/build-module/components/block-settings-menu/block-settings-dropdown.js +12 -10
- package/build-module/components/block-settings-menu/block-settings-dropdown.js.map +1 -1
- package/build-module/components/block-toolbar/index.js +14 -5
- package/build-module/components/block-toolbar/index.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +13 -13
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +11 -3
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/components/list-view/use-clipboard-handler.js +3 -2
- package/build-module/components/list-view/use-clipboard-handler.js.map +1 -1
- package/build-module/components/rich-text/index.js +2 -2
- package/build-module/components/rich-text/index.js.map +1 -1
- package/build-module/components/url-popover/index.js +3 -3
- package/build-module/components/url-popover/index.js.map +1 -1
- package/build-module/components/use-moving-animation/index.js +4 -0
- package/build-module/components/use-moving-animation/index.js.map +1 -1
- package/build-module/components/writing-flow/use-clipboard-handler.js +3 -2
- package/build-module/components/writing-flow/use-clipboard-handler.js.map +1 -1
- package/build-module/components/writing-flow/utils.js +22 -7
- package/build-module/components/writing-flow/utils.js.map +1 -1
- package/build-module/hooks/block-hooks.js +26 -2
- package/build-module/hooks/block-hooks.js.map +1 -1
- package/build-module/hooks/use-bindings-attributes.js +171 -46
- package/build-module/hooks/use-bindings-attributes.js.map +1 -1
- package/build-module/private-apis.js +2 -0
- package/build-module/private-apis.js.map +1 -1
- package/build-module/store/actions.js +40 -6
- package/build-module/store/actions.js.map +1 -1
- package/build-style/content-rtl.css +1 -0
- package/build-style/content.css +1 -0
- package/build-style/default-editor-styles-rtl.css +1 -0
- package/build-style/default-editor-styles.css +1 -0
- package/build-style/style-rtl.css +23 -0
- package/build-style/style.css +23 -0
- package/package.json +8 -8
- package/src/components/block-actions/index.js +57 -47
- package/src/components/block-bindings-toolbar-indicator/index.js +20 -0
- package/src/components/block-bindings-toolbar-indicator/style.scss +14 -0
- package/src/components/block-list/use-block-props/index.js +12 -2
- package/src/components/block-list/use-block-props/use-selected-block-event-handlers.js +3 -7
- package/src/components/block-settings-menu/block-settings-dropdown.js +12 -9
- package/src/components/block-toolbar/index.js +14 -4
- package/src/components/global-styles/use-global-styles-output.js +11 -11
- package/src/components/list-view/block-select-button.js +16 -2
- package/src/components/list-view/style.scss +8 -0
- package/src/components/list-view/use-clipboard-handler.js +3 -2
- package/src/components/rich-text/index.js +2 -2
- package/src/components/url-popover/index.js +5 -5
- package/src/components/use-moving-animation/index.js +1 -0
- package/src/components/writing-flow/use-clipboard-handler.js +3 -2
- package/src/components/writing-flow/utils.js +31 -16
- package/src/hooks/block-hooks.js +36 -3
- package/src/hooks/use-bindings-attributes.js +214 -62
- package/src/private-apis.js +2 -0
- package/src/store/actions.js +54 -14
- package/src/style.scss +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_dom","require","_blocks2","_pasting","setClipboardBlocks","event","blocks","_blocks","
|
|
1
|
+
{"version":3,"names":["_dom","require","_blocks2","_pasting","_store","requiresWrapperOnCopy","exports","Symbol","setClipboardBlocks","event","blocks","registry","_blocks","firstBlock","firstBlockType","select","blocksStore","getBlockType","name","getBlockRootClientId","getBlockName","getBlockAttributes","blockEditorStore","wrapperBlockClientId","clientId","wrapperBlockName","createBlock","serialized","serialize","clipboardData","setData","toPlainText","getPasteBlocks","canUserUseUnfilteredHTML","plainText","html","files","getPasteEventData","length","fromTransforms","getBlockTransforms","reduce","accumulator","file","transformation","findTransform","transform","type","isMatch","push","flat","pasteHandler","HTML","mode","replace","stripHTML","trim"],"sources":["@wordpress/block-editor/src/components/writing-flow/utils.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __unstableStripHTML as stripHTML } from '@wordpress/dom';\nimport {\n\tserialize,\n\tcreateBlock,\n\tpasteHandler,\n\tfindTransform,\n\tgetBlockTransforms,\n\tstore as blocksStore,\n} from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport { getPasteEventData } from '../../utils/pasting';\nimport { store as blockEditorStore } from '../../store';\n\nexport const requiresWrapperOnCopy = Symbol( 'requiresWrapperOnCopy' );\n\n/**\n * Sets the clipboard data for the provided blocks, with both HTML and plain\n * text representations.\n *\n * @param {ClipboardEvent} event Clipboard event.\n * @param {WPBlock[]} blocks Blocks to set as clipboard data.\n * @param {Object} registry The registry to select from.\n */\nexport function setClipboardBlocks( event, blocks, registry ) {\n\tlet _blocks = blocks;\n\n\tconst [ firstBlock ] = blocks;\n\n\tif ( firstBlock ) {\n\t\tconst firstBlockType = registry\n\t\t\t.select( blocksStore )\n\t\t\t.getBlockType( firstBlock.name );\n\n\t\tif ( firstBlockType[ requiresWrapperOnCopy ] ) {\n\t\t\tconst { getBlockRootClientId, getBlockName, getBlockAttributes } =\n\t\t\t\tregistry.select( blockEditorStore );\n\t\t\tconst wrapperBlockClientId = getBlockRootClientId(\n\t\t\t\tfirstBlock.clientId\n\t\t\t);\n\t\t\tconst wrapperBlockName = getBlockName( wrapperBlockClientId );\n\n\t\t\tif ( wrapperBlockName ) {\n\t\t\t\t_blocks = createBlock(\n\t\t\t\t\twrapperBlockName,\n\t\t\t\t\tgetBlockAttributes( wrapperBlockClientId ),\n\t\t\t\t\t_blocks\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst serialized = serialize( _blocks );\n\n\tevent.clipboardData.setData( 'text/plain', toPlainText( serialized ) );\n\tevent.clipboardData.setData( 'text/html', serialized );\n}\n\n/**\n * Returns the blocks to be pasted from the clipboard event.\n *\n * @param {ClipboardEvent} event The clipboard event.\n * @param {boolean} canUserUseUnfilteredHTML Whether the user can or can't post unfiltered HTML.\n * @return {Array|string} A list of blocks or a string, depending on `handlerMode`.\n */\nexport function getPasteBlocks( event, canUserUseUnfilteredHTML ) {\n\tconst { plainText, html, files } = getPasteEventData( event );\n\tlet blocks = [];\n\n\tif ( files.length ) {\n\t\tconst fromTransforms = getBlockTransforms( 'from' );\n\t\tblocks = files\n\t\t\t.reduce( ( accumulator, file ) => {\n\t\t\t\tconst transformation = findTransform(\n\t\t\t\t\tfromTransforms,\n\t\t\t\t\t( transform ) =>\n\t\t\t\t\t\ttransform.type === 'files' &&\n\t\t\t\t\t\ttransform.isMatch( [ file ] )\n\t\t\t\t);\n\t\t\t\tif ( transformation ) {\n\t\t\t\t\taccumulator.push( transformation.transform( [ file ] ) );\n\t\t\t\t}\n\t\t\t\treturn accumulator;\n\t\t\t}, [] )\n\t\t\t.flat();\n\t} else {\n\t\tblocks = pasteHandler( {\n\t\t\tHTML: html,\n\t\t\tplainText,\n\t\t\tmode: 'BLOCKS',\n\t\t\tcanUserUseUnfilteredHTML,\n\t\t} );\n\t}\n\n\treturn blocks;\n}\n\n/**\n * Given a string of HTML representing serialized blocks, returns the plain\n * text extracted after stripping the HTML of any tags and fixing line breaks.\n *\n * @param {string} html Serialized blocks.\n * @return {string} The plain-text content with any html removed.\n */\nfunction toPlainText( html ) {\n\t// Manually handle BR tags as line breaks prior to `stripHTML` call\n\thtml = html.replace( /<br>/g, '\\n' );\n\n\tconst plainText = stripHTML( html ).trim();\n\n\t// Merge any consecutive line breaks\n\treturn plainText.replace( /\\n\\n+/g, '\\n\\n' );\n}\n"],"mappings":"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"}
|
|
@@ -23,12 +23,21 @@ var _store = require("../store");
|
|
|
23
23
|
const EMPTY_OBJECT = {};
|
|
24
24
|
function BlockHooksControlPure({
|
|
25
25
|
name,
|
|
26
|
-
clientId
|
|
26
|
+
clientId,
|
|
27
|
+
metadata: {
|
|
28
|
+
ignoredHookedBlocks = []
|
|
29
|
+
} = {}
|
|
27
30
|
}) {
|
|
28
31
|
const blockTypes = (0, _data.useSelect)(select => select(_blocks.store).getBlockTypes(), []);
|
|
32
|
+
|
|
33
|
+
// A hooked block added via a filter will not be exposed through a block
|
|
34
|
+
// type's `blockHooks` property; however, if the containing layout has been
|
|
35
|
+
// modified, it will be present in the anchor block's `ignoredHookedBlocks`
|
|
36
|
+
// metadata.
|
|
29
37
|
const hookedBlocksForCurrentBlock = (0, _element.useMemo)(() => blockTypes?.filter(({
|
|
38
|
+
name: blockName,
|
|
30
39
|
blockHooks
|
|
31
|
-
}) => blockHooks && name in blockHooks), [blockTypes, name]);
|
|
40
|
+
}) => blockHooks && name in blockHooks || ignoredHookedBlocks.includes(blockName)), [blockTypes, name, ignoredHookedBlocks]);
|
|
32
41
|
const {
|
|
33
42
|
blockIndex,
|
|
34
43
|
rootClientId,
|
|
@@ -73,6 +82,12 @@ function BlockHooksControlPure({
|
|
|
73
82
|
// inserted and then moved around a bit by the user.
|
|
74
83
|
candidates = getBlocks(clientId);
|
|
75
84
|
break;
|
|
85
|
+
case undefined:
|
|
86
|
+
// If we haven't found a blockHooks field with a relative position for the hooked
|
|
87
|
+
// block, it means that it was added by a filter. In this case, we look for the block
|
|
88
|
+
// both among the current block's siblings and its children.
|
|
89
|
+
candidates = [...getBlocks(rootClientId), ...getBlocks(clientId)];
|
|
90
|
+
break;
|
|
76
91
|
}
|
|
77
92
|
const hookedBlock = candidates?.find(candidate => candidate.name === block.name);
|
|
78
93
|
|
|
@@ -127,6 +142,14 @@ function BlockHooksControlPure({
|
|
|
127
142
|
// Insert as a child of the current block.
|
|
128
143
|
false);
|
|
129
144
|
break;
|
|
145
|
+
case undefined:
|
|
146
|
+
// If we do not know the relative position, it is because the block was
|
|
147
|
+
// added via a filter. In this case, we default to inserting it after the
|
|
148
|
+
// current block.
|
|
149
|
+
insertBlock(block, blockIndex + 1, rootClientId,
|
|
150
|
+
// Insert as a child of the current block's parent
|
|
151
|
+
false);
|
|
152
|
+
break;
|
|
130
153
|
}
|
|
131
154
|
};
|
|
132
155
|
return (0, _react.createElement)(_components2.InspectorControls, null, (0, _react.createElement)(_components.PanelBody, {
|
|
@@ -165,6 +188,7 @@ function BlockHooksControlPure({
|
|
|
165
188
|
}
|
|
166
189
|
var _default = exports.default = {
|
|
167
190
|
edit: BlockHooksControlPure,
|
|
191
|
+
attributeKeys: ['metadata'],
|
|
168
192
|
hasSupport() {
|
|
169
193
|
return true;
|
|
170
194
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_i18n","require","_element","_components","_blocks","_data","_components2","_store","EMPTY_OBJECT","BlockHooksControlPure","name","clientId","blockTypes","useSelect","select","blocksStore","getBlockTypes","hookedBlocksForCurrentBlock","useMemo","filter","blockHooks","blockIndex","rootClientId","innerBlocksLength","getBlocks","getBlockIndex","getBlockRootClientId","blockEditorStore","length","hookedBlockClientIds","getGlobalBlockCount","_hookedBlockClientIds","reduce","clientIds","block","relativePosition","candidates","hookedBlock","find","candidate","Object","values","insertBlock","removeBlock","useDispatch","groupedHookedBlocks","groups","namespace","split","push","insertBlockIntoDesignatedLocation","_react","createElement","InspectorControls","PanelBody","className","title","__","initialOpen","keys","map","vendor","Fragment","key","checked","ToggleControl","label","__experimentalHStack","justify","BlockIcon","icon","onChange","createBlock","_default","exports","default","edit","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport {\n\t__experimentalHStack as HStack,\n\tPanelBody,\n\tToggleControl,\n} from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { BlockIcon, InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( { name, clientId } ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { blockHooks } ) => blockHooks && name in blockHooks\n\t\t\t),\n\t\t[ blockTypes, name ]\n\t);\n\n\tconst { blockIndex, rootClientId, innerBlocksLength } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockIndex, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\tinnerBlocksLength: getBlocks( clientId )?.length,\n\t\t\t\trootClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId, rootClientId ]\n\t);\n\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\tclassName=\"block-editor-hooks__block-hooks\"\n\t\t\t\ttitle={ __( 'Plugins' ) }\n\t\t\t\tinitialOpen={ true }\n\t\t\t>\n\t\t\t\t<p className=\"block-editor-hooks__block-hooks-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t<HStack justify=\"flex-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ block.icon }\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{ block.title }</span>\n\t\t\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_i18n","require","_element","_components","_blocks","_data","_components2","_store","EMPTY_OBJECT","BlockHooksControlPure","name","clientId","metadata","ignoredHookedBlocks","blockTypes","useSelect","select","blocksStore","getBlockTypes","hookedBlocksForCurrentBlock","useMemo","filter","blockName","blockHooks","includes","blockIndex","rootClientId","innerBlocksLength","getBlocks","getBlockIndex","getBlockRootClientId","blockEditorStore","length","hookedBlockClientIds","getGlobalBlockCount","_hookedBlockClientIds","reduce","clientIds","block","relativePosition","candidates","undefined","hookedBlock","find","candidate","Object","values","insertBlock","removeBlock","useDispatch","groupedHookedBlocks","groups","namespace","split","push","insertBlockIntoDesignatedLocation","_react","createElement","InspectorControls","PanelBody","className","title","__","initialOpen","keys","map","vendor","Fragment","key","checked","ToggleControl","label","__experimentalHStack","justify","BlockIcon","icon","onChange","createBlock","_default","exports","default","edit","attributeKeys","hasSupport"],"sources":["@wordpress/block-editor/src/hooks/block-hooks.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { Fragment, useMemo } from '@wordpress/element';\nimport {\n\t__experimentalHStack as HStack,\n\tPanelBody,\n\tToggleControl,\n} from '@wordpress/components';\nimport { createBlock, store as blocksStore } from '@wordpress/blocks';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { BlockIcon, InspectorControls } from '../components';\nimport { store as blockEditorStore } from '../store';\n\nconst EMPTY_OBJECT = {};\n\nfunction BlockHooksControlPure( {\n\tname,\n\tclientId,\n\tmetadata: { ignoredHookedBlocks = [] } = {},\n} ) {\n\tconst blockTypes = useSelect(\n\t\t( select ) => select( blocksStore ).getBlockTypes(),\n\t\t[]\n\t);\n\n\t// A hooked block added via a filter will not be exposed through a block\n\t// type's `blockHooks` property; however, if the containing layout has been\n\t// modified, it will be present in the anchor block's `ignoredHookedBlocks`\n\t// metadata.\n\tconst hookedBlocksForCurrentBlock = useMemo(\n\t\t() =>\n\t\t\tblockTypes?.filter(\n\t\t\t\t( { name: blockName, blockHooks } ) =>\n\t\t\t\t\t( blockHooks && name in blockHooks ) ||\n\t\t\t\t\tignoredHookedBlocks.includes( blockName )\n\t\t\t),\n\t\t[ blockTypes, name, ignoredHookedBlocks ]\n\t);\n\n\tconst { blockIndex, rootClientId, innerBlocksLength } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getBlockIndex, getBlockRootClientId } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\treturn {\n\t\t\t\tblockIndex: getBlockIndex( clientId ),\n\t\t\t\tinnerBlocksLength: getBlocks( clientId )?.length,\n\t\t\t\trootClientId: getBlockRootClientId( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst hookedBlockClientIds = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlocks, getGlobalBlockCount } =\n\t\t\t\tselect( blockEditorStore );\n\n\t\t\tconst _hookedBlockClientIds = hookedBlocksForCurrentBlock.reduce(\n\t\t\t\t( clientIds, block ) => {\n\t\t\t\t\t// If the block doesn't exist anywhere in the block tree,\n\t\t\t\t\t// we know that we have to set the toggle to disabled.\n\t\t\t\t\tif ( getGlobalBlockCount( block.name ) === 0 ) {\n\t\t\t\t\t\treturn clientIds;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst relativePosition = block?.blockHooks?.[ name ];\n\t\t\t\t\tlet candidates;\n\n\t\t\t\t\tswitch ( relativePosition ) {\n\t\t\t\t\t\tcase 'before':\n\t\t\t\t\t\tcase 'after':\n\t\t\t\t\t\t\t// Any of the current block's siblings (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked block (inserted `before` or `after` the current one), as the block\n\t\t\t\t\t\t\t// might've been automatically inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( rootClientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'first_child':\n\t\t\t\t\t\tcase 'last_child':\n\t\t\t\t\t\t\t// Any of the current block's child blocks (with the right block type) qualifies\n\t\t\t\t\t\t\t// as a hooked first or last child block, as the block might've been automatically\n\t\t\t\t\t\t\t// inserted and then moved around a bit by the user.\n\t\t\t\t\t\t\tcandidates = getBlocks( clientId );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase undefined:\n\t\t\t\t\t\t\t// If we haven't found a blockHooks field with a relative position for the hooked\n\t\t\t\t\t\t\t// block, it means that it was added by a filter. In this case, we look for the block\n\t\t\t\t\t\t\t// both among the current block's siblings and its children.\n\t\t\t\t\t\t\tcandidates = [\n\t\t\t\t\t\t\t\t...getBlocks( rootClientId ),\n\t\t\t\t\t\t\t\t...getBlocks( clientId ),\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst hookedBlock = candidates?.find(\n\t\t\t\t\t\t( candidate ) => candidate.name === block.name\n\t\t\t\t\t);\n\n\t\t\t\t\t// If the block exists in the designated location, we consider it hooked\n\t\t\t\t\t// and show the toggle as enabled.\n\t\t\t\t\tif ( hookedBlock ) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...clientIds,\n\t\t\t\t\t\t\t[ block.name ]: hookedBlock.clientId,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no hooked block was found in any of its designated locations,\n\t\t\t\t\t// we set the toggle to disabled.\n\t\t\t\t\treturn clientIds;\n\t\t\t\t},\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tif ( Object.values( _hookedBlockClientIds ).length > 0 ) {\n\t\t\t\treturn _hookedBlockClientIds;\n\t\t\t}\n\n\t\t\treturn EMPTY_OBJECT;\n\t\t},\n\t\t[ hookedBlocksForCurrentBlock, name, clientId, rootClientId ]\n\t);\n\n\tconst { insertBlock, removeBlock } = useDispatch( blockEditorStore );\n\n\tif ( ! hookedBlocksForCurrentBlock.length ) {\n\t\treturn null;\n\t}\n\n\t// Group by block namespace (i.e. prefix before the slash).\n\tconst groupedHookedBlocks = hookedBlocksForCurrentBlock.reduce(\n\t\t( groups, block ) => {\n\t\t\tconst [ namespace ] = block.name.split( '/' );\n\t\t\tif ( ! groups[ namespace ] ) {\n\t\t\t\tgroups[ namespace ] = [];\n\t\t\t}\n\t\t\tgroups[ namespace ].push( block );\n\t\t\treturn groups;\n\t\t},\n\t\t{}\n\t);\n\n\tconst insertBlockIntoDesignatedLocation = ( block, relativePosition ) => {\n\t\tswitch ( relativePosition ) {\n\t\t\tcase 'before':\n\t\t\tcase 'after':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\trelativePosition === 'after' ? blockIndex + 1 : blockIndex,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase 'first_child':\n\t\t\tcase 'last_child':\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\t// TODO: It'd be great if insertBlock() would accept negative indices for insertion.\n\t\t\t\t\trelativePosition === 'first_child' ? 0 : innerBlocksLength,\n\t\t\t\t\tclientId, // Insert as a child of the current block.\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tcase undefined:\n\t\t\t\t// If we do not know the relative position, it is because the block was\n\t\t\t\t// added via a filter. In this case, we default to inserting it after the\n\t\t\t\t// current block.\n\t\t\t\tinsertBlock(\n\t\t\t\t\tblock,\n\t\t\t\t\tblockIndex + 1,\n\t\t\t\t\trootClientId, // Insert as a child of the current block's parent\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tbreak;\n\t\t}\n\t};\n\n\treturn (\n\t\t<InspectorControls>\n\t\t\t<PanelBody\n\t\t\t\tclassName=\"block-editor-hooks__block-hooks\"\n\t\t\t\ttitle={ __( 'Plugins' ) }\n\t\t\t\tinitialOpen={ true }\n\t\t\t>\n\t\t\t\t<p className=\"block-editor-hooks__block-hooks-helptext\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Manage the inclusion of blocks added automatically by plugins.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t{ Object.keys( groupedHookedBlocks ).map( ( vendor ) => {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Fragment key={ vendor }>\n\t\t\t\t\t\t\t<h3>{ vendor }</h3>\n\t\t\t\t\t\t\t{ groupedHookedBlocks[ vendor ].map( ( block ) => {\n\t\t\t\t\t\t\t\tconst checked =\n\t\t\t\t\t\t\t\t\tblock.name in hookedBlockClientIds;\n\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ToggleControl\n\t\t\t\t\t\t\t\t\t\tchecked={ checked }\n\t\t\t\t\t\t\t\t\t\tkey={ block.title }\n\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t<HStack justify=\"flex-start\">\n\t\t\t\t\t\t\t\t\t\t\t\t<BlockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\ticon={ block.icon }\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{ block.title }</span>\n\t\t\t\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tonChange={ () => {\n\t\t\t\t\t\t\t\t\t\t\tif ( ! checked ) {\n\t\t\t\t\t\t\t\t\t\t\t\t// Create and insert block.\n\t\t\t\t\t\t\t\t\t\t\t\tconst relativePosition =\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.blockHooks[ name ];\n\t\t\t\t\t\t\t\t\t\t\t\tinsertBlockIntoDesignatedLocation(\n\t\t\t\t\t\t\t\t\t\t\t\t\tcreateBlock( block.name ),\n\t\t\t\t\t\t\t\t\t\t\t\t\trelativePosition\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Remove block.\n\t\t\t\t\t\t\t\t\t\t\tremoveBlock(\n\t\t\t\t\t\t\t\t\t\t\t\thookedBlockClientIds[\n\t\t\t\t\t\t\t\t\t\t\t\t\tblock.name\n\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\tfalse\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t);\n\t\t\t\t} ) }\n\t\t\t</PanelBody>\n\t\t</InspectorControls>\n\t);\n}\n\nexport default {\n\tedit: BlockHooksControlPure,\n\tattributeKeys: [ 'metadata' ],\n\thasSupport() {\n\t\treturn true;\n\t},\n};\n"],"mappings":"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"}
|
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.canBindAttribute = canBindAttribute;
|
|
7
|
+
exports.canBindBlock = canBindBlock;
|
|
7
8
|
var _react = require("react");
|
|
8
9
|
var _blocks = require("@wordpress/blocks");
|
|
9
10
|
var _compose = require("@wordpress/compose");
|
|
10
11
|
var _data = require("@wordpress/data");
|
|
12
|
+
var _element = require("@wordpress/element");
|
|
11
13
|
var _hooks = require("@wordpress/hooks");
|
|
12
|
-
var
|
|
13
|
-
var _context = require("../components/block-edit/context");
|
|
14
|
+
var _richText = require("@wordpress/rich-text");
|
|
14
15
|
var _lockUnlock = require("../lock-unlock");
|
|
15
16
|
/**
|
|
16
17
|
* WordPress dependencies
|
|
@@ -30,68 +31,192 @@ var _lockUnlock = require("../lock-unlock");
|
|
|
30
31
|
* @return {WPHigherOrderComponent} Higher-order component.
|
|
31
32
|
*/
|
|
32
33
|
|
|
33
|
-
const BLOCK_BINDINGS_ALLOWED_BLOCKS =
|
|
34
|
+
const BLOCK_BINDINGS_ALLOWED_BLOCKS = {
|
|
34
35
|
'core/paragraph': ['content'],
|
|
35
36
|
'core/heading': ['content'],
|
|
36
37
|
'core/image': ['url', 'title', 'alt'],
|
|
37
38
|
'core/button': ['url', 'text', 'linkTarget']
|
|
38
39
|
};
|
|
39
|
-
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Based on the given block name,
|
|
43
|
+
* check if it is possible to bind the block.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} blockName - The block name.
|
|
46
|
+
* @return {boolean} Whether it is possible to bind the block to sources.
|
|
47
|
+
*/
|
|
48
|
+
function canBindBlock(blockName) {
|
|
49
|
+
return blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Based on the given block name and attribute name,
|
|
54
|
+
* check if it is possible to bind the block attribute.
|
|
55
|
+
*
|
|
56
|
+
* @param {string} blockName - The block name.
|
|
57
|
+
* @param {string} attributeName - The attribute name.
|
|
58
|
+
* @return {boolean} Whether it is possible to bind the block attribute.
|
|
59
|
+
*/
|
|
60
|
+
function canBindAttribute(blockName, attributeName) {
|
|
61
|
+
return canBindBlock(blockName) && BLOCK_BINDINGS_ALLOWED_BLOCKS[blockName].includes(attributeName);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* This component is responsible for detecting and
|
|
66
|
+
* propagating data changes from the source to the block.
|
|
67
|
+
*
|
|
68
|
+
* @param {Object} props - The component props.
|
|
69
|
+
* @param {string} props.attrName - The attribute name.
|
|
70
|
+
* @param {Object} props.blockProps - The block props with bound attribute.
|
|
71
|
+
* @param {Object} props.source - Source handler.
|
|
72
|
+
* @param {Object} props.args - The arguments to pass to the source.
|
|
73
|
+
* @param {Function} props.onPropValueChange - The function to call when the attribute value changes.
|
|
74
|
+
* @return {null} Data-handling component. Render nothing.
|
|
75
|
+
*/
|
|
76
|
+
const BindingConnector = ({
|
|
77
|
+
args,
|
|
78
|
+
attrName,
|
|
79
|
+
blockProps,
|
|
80
|
+
source,
|
|
81
|
+
onPropValueChange
|
|
82
|
+
}) => {
|
|
40
83
|
const {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
} = (
|
|
44
|
-
const blockBindingsSources = (0, _lockUnlock.unlock)((0, _data.useSelect)(_blocks.store)).getAllBlockBindingsSources();
|
|
84
|
+
placeholder,
|
|
85
|
+
value: propValue
|
|
86
|
+
} = source.useSource(blockProps, args);
|
|
45
87
|
const {
|
|
46
|
-
|
|
47
|
-
} =
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (htmlAttribute === 'src' || htmlAttribute === 'href') {
|
|
63
|
-
updatedAttributes[attributeName] = null;
|
|
64
|
-
} else {
|
|
65
|
-
updatedAttributes[attributeName] = placeholder;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
if (metaValue) {
|
|
69
|
-
updatedAttributes[attributeName] = metaValue;
|
|
70
|
-
}
|
|
88
|
+
name: blockName
|
|
89
|
+
} = blockProps;
|
|
90
|
+
const attrValue = blockProps.attributes[attrName];
|
|
91
|
+
const updateBoundAttibute = (0, _element.useCallback)((newAttrValue, prevAttrValue) => {
|
|
92
|
+
/*
|
|
93
|
+
* If the attribute is a RichTextData instance,
|
|
94
|
+
* (core/paragraph, core/heading, core/button, etc.)
|
|
95
|
+
* compare its HTML representation with the new value.
|
|
96
|
+
*
|
|
97
|
+
* To do: it looks like a workaround.
|
|
98
|
+
* Consider improving the attribute and metadata fields types.
|
|
99
|
+
*/
|
|
100
|
+
if (prevAttrValue instanceof _richText.RichTextData) {
|
|
101
|
+
// Bail early if the Rich Text value is the same.
|
|
102
|
+
if (prevAttrValue.toHTMLString() === newAttrValue) {
|
|
103
|
+
return;
|
|
71
104
|
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* To preserve the value type,
|
|
108
|
+
* convert the new value to a RichTextData instance.
|
|
109
|
+
*/
|
|
110
|
+
newAttrValue = _richText.RichTextData.fromHTMLString(newAttrValue);
|
|
111
|
+
}
|
|
112
|
+
if (prevAttrValue === newAttrValue) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
onPropValueChange({
|
|
116
|
+
[attrName]: newAttrValue
|
|
72
117
|
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
118
|
+
}, [attrName, onPropValueChange]);
|
|
119
|
+
(0, _element.useLayoutEffect)(() => {
|
|
120
|
+
if (typeof propValue !== 'undefined') {
|
|
121
|
+
updateBoundAttibute(propValue, attrValue);
|
|
122
|
+
} else if (placeholder) {
|
|
123
|
+
/*
|
|
124
|
+
* Placeholder fallback.
|
|
125
|
+
* If the attribute is `src` or `href`,
|
|
126
|
+
* a placeholder can't be used because it is not a valid url.
|
|
127
|
+
* Adding this workaround until
|
|
128
|
+
* attributes and metadata fields types are improved and include `url`.
|
|
129
|
+
*/
|
|
130
|
+
const htmlAttribute = (0, _blocks.getBlockType)(blockName).attributes[attrName].attribute;
|
|
131
|
+
if (htmlAttribute === 'src' || htmlAttribute === 'href') {
|
|
132
|
+
updateBoundAttibute(null);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
updateBoundAttibute(placeholder);
|
|
136
|
+
}
|
|
137
|
+
}, [updateBoundAttibute, propValue, attrValue, placeholder, blockName, attrName]);
|
|
138
|
+
return null;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* BlockBindingBridge acts like a component wrapper
|
|
143
|
+
* that connects the bound attributes of a block
|
|
144
|
+
* to the source handlers.
|
|
145
|
+
* For this, it creates a BindingConnector for each bound attribute.
|
|
146
|
+
*
|
|
147
|
+
* @param {Object} props - The component props.
|
|
148
|
+
* @param {Object} props.blockProps - The BlockEdit props object.
|
|
149
|
+
* @param {Object} props.bindings - The block bindings settings.
|
|
150
|
+
* @param {Function} props.onPropValueChange - The function to call when the attribute value changes.
|
|
151
|
+
* @return {null} Data-handling component. Render nothing.
|
|
152
|
+
*/
|
|
153
|
+
function BlockBindingBridge({
|
|
154
|
+
blockProps,
|
|
155
|
+
bindings,
|
|
156
|
+
onPropValueChange
|
|
157
|
+
}) {
|
|
158
|
+
const blockBindingsSources = (0, _lockUnlock.unlock)((0, _data.useSelect)(_blocks.store)).getAllBlockBindingsSources();
|
|
159
|
+
return (0, _react.createElement)(_react.Fragment, null, Object.entries(bindings).map(([attrName, boundAttribute]) => {
|
|
160
|
+
// Bail early if the block doesn't have a valid source handler.
|
|
161
|
+
const source = blockBindingsSources[boundAttribute.source];
|
|
162
|
+
if (!source?.useSource) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
return (0, _react.createElement)(BindingConnector, {
|
|
166
|
+
key: attrName,
|
|
167
|
+
attrName: attrName,
|
|
168
|
+
source: source,
|
|
169
|
+
blockProps: blockProps,
|
|
170
|
+
args: boundAttribute.args,
|
|
171
|
+
onPropValueChange: onPropValueChange
|
|
172
|
+
});
|
|
173
|
+
}));
|
|
174
|
+
}
|
|
175
|
+
const withBlockBindingSupport = (0, _compose.createHigherOrderComponent)(BlockEdit => props => {
|
|
176
|
+
/*
|
|
177
|
+
* Collect and update the bound attributes
|
|
178
|
+
* in a separate state.
|
|
179
|
+
*/
|
|
180
|
+
const [boundAttributes, setBoundAttributes] = (0, _element.useState)({});
|
|
181
|
+
const updateBoundAttributes = (0, _element.useCallback)(newAttributes => setBoundAttributes(prev => ({
|
|
182
|
+
...prev,
|
|
183
|
+
...newAttributes
|
|
184
|
+
})), []);
|
|
185
|
+
|
|
186
|
+
/*
|
|
187
|
+
* Create binding object filtering
|
|
188
|
+
* only the attributes that can be bound.
|
|
189
|
+
*/
|
|
190
|
+
const bindings = Object.fromEntries(Object.entries(props.attributes.metadata?.bindings || {}).filter(([attrName]) => canBindAttribute(props.name, attrName)));
|
|
191
|
+
return (0, _react.createElement)(_react.Fragment, null, Object.keys(bindings).length > 0 && (0, _react.createElement)(BlockBindingBridge, {
|
|
192
|
+
blockProps: props,
|
|
193
|
+
bindings: bindings,
|
|
194
|
+
onPropValueChange: updateBoundAttributes
|
|
195
|
+
}), (0, _react.createElement)(BlockEdit, {
|
|
76
196
|
...props,
|
|
77
|
-
attributes:
|
|
78
|
-
|
|
79
|
-
|
|
197
|
+
attributes: {
|
|
198
|
+
...props.attributes,
|
|
199
|
+
...boundAttributes
|
|
200
|
+
}
|
|
201
|
+
}));
|
|
202
|
+
}, 'withBlockBindingSupport');
|
|
80
203
|
|
|
81
204
|
/**
|
|
82
205
|
* Filters a registered block's settings to enhance a block's `edit` component
|
|
83
206
|
* to upgrade bound attributes.
|
|
84
207
|
*
|
|
85
|
-
* @param {WPBlockSettings} settings Registered block settings.
|
|
86
|
-
*
|
|
208
|
+
* @param {WPBlockSettings} settings - Registered block settings.
|
|
209
|
+
* @param {string} name - Block name.
|
|
87
210
|
* @return {WPBlockSettings} Filtered block settings.
|
|
88
211
|
*/
|
|
89
|
-
function shimAttributeSource(settings) {
|
|
90
|
-
if (!(
|
|
212
|
+
function shimAttributeSource(settings, name) {
|
|
213
|
+
if (!canBindBlock(name)) {
|
|
91
214
|
return settings;
|
|
92
215
|
}
|
|
93
|
-
|
|
94
|
-
|
|
216
|
+
return {
|
|
217
|
+
...settings,
|
|
218
|
+
edit: withBlockBindingSupport(settings.edit)
|
|
219
|
+
};
|
|
95
220
|
}
|
|
96
221
|
(0, _hooks.addFilter)('blocks.registerBlockType', 'core/editor/custom-sources-backwards-compatibility/shim-attribute-source', shimAttributeSource);
|
|
97
222
|
//# sourceMappingURL=use-bindings-attributes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_blocks","require","_compose","_data","_hooks","_store","_context","_lockUnlock","BLOCK_BINDINGS_ALLOWED_BLOCKS","exports","createEditFunctionWithBindingsAttribute","createHigherOrderComponent","BlockEdit","props","clientId","name","blockName","useBlockEditContext","blockBindingsSources","unlock","useSelect","blocksStore","getAllBlockBindingsSources","getBlockAttributes","blockEditorStore","updatedAttributes","metadata","bindings","Object","entries","forEach","attributeName","settings","source","useSource","placeholder","useValue","metaValue","args","htmlAttribute","getBlockType","attributes","attribute","_react","createElement","key","shimAttributeSource","edit","addFilter"],"sources":["@wordpress/block-editor/src/hooks/use-bindings-attributes.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { addFilter } from '@wordpress/hooks';\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../store';\nimport { useBlockEditContext } from '../components/block-edit/context';\nimport { unlock } from '../lock-unlock';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Given a binding of block attributes, returns a higher order component that\n * overrides its `attributes` and `setAttributes` props to sync any changes needed.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\n\nexport const BLOCK_BINDINGS_ALLOWED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/image': [ 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget' ],\n};\n\nconst createEditFunctionWithBindingsAttribute = () =>\n\tcreateHigherOrderComponent(\n\t\t( BlockEdit ) => ( props ) => {\n\t\t\tconst { clientId, name: blockName } = useBlockEditContext();\n\t\t\tconst blockBindingsSources = unlock(\n\t\t\t\tuseSelect( blocksStore )\n\t\t\t).getAllBlockBindingsSources();\n\t\t\tconst { getBlockAttributes } = useSelect( blockEditorStore );\n\n\t\t\tconst updatedAttributes = getBlockAttributes( clientId );\n\t\t\tif ( updatedAttributes?.metadata?.bindings ) {\n\t\t\t\tObject.entries( updatedAttributes.metadata.bindings ).forEach(\n\t\t\t\t\t( [ attributeName, settings ] ) => {\n\t\t\t\t\t\tconst source = blockBindingsSources[ settings.source ];\n\n\t\t\t\t\t\tif ( source && source.useSource ) {\n\t\t\t\t\t\t\t// Second argument (`updateMetaValue`) will be used to update the value in the future.\n\t\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\t\tplaceholder,\n\t\t\t\t\t\t\t\tuseValue: [ metaValue = null ] = [],\n\t\t\t\t\t\t\t} = source.useSource( props, settings.args );\n\n\t\t\t\t\t\t\tif ( placeholder && ! metaValue ) {\n\t\t\t\t\t\t\t\t// If the attribute is `src` or `href`, a placeholder can't be used because it is not a valid url.\n\t\t\t\t\t\t\t\t// Adding this workaround until attributes and metadata fields types are improved and include `url`.\n\t\t\t\t\t\t\t\tconst htmlAttribute =\n\t\t\t\t\t\t\t\t\tgetBlockType( blockName ).attributes[\n\t\t\t\t\t\t\t\t\t\tattributeName\n\t\t\t\t\t\t\t\t\t].attribute;\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\thtmlAttribute === 'src' ||\n\t\t\t\t\t\t\t\t\thtmlAttribute === 'href'\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tupdatedAttributes[ attributeName ] = null;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tupdatedAttributes[ attributeName ] =\n\t\t\t\t\t\t\t\t\t\tplaceholder;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( metaValue ) {\n\t\t\t\t\t\t\t\tupdatedAttributes[ attributeName ] = metaValue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn (\n\t\t\t\t<BlockEdit\n\t\t\t\t\tkey=\"edit\"\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tattributes={ updatedAttributes }\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t\t'useBoundAttributes'\n\t);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade bound attributes.\n *\n * @param {WPBlockSettings} settings Registered block settings.\n *\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings ) {\n\tif ( ! ( settings.name in BLOCK_BINDINGS_ALLOWED_BLOCKS ) ) {\n\t\treturn settings;\n\t}\n\tsettings.edit = createEditFunctionWithBindingsAttribute()( settings.edit );\n\n\treturn settings;\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_blocks","require","_compose","_data","_element","_hooks","_richText","_lockUnlock","BLOCK_BINDINGS_ALLOWED_BLOCKS","canBindBlock","blockName","canBindAttribute","attributeName","includes","BindingConnector","args","attrName","blockProps","source","onPropValueChange","placeholder","value","propValue","useSource","name","attrValue","attributes","updateBoundAttibute","useCallback","newAttrValue","prevAttrValue","RichTextData","toHTMLString","fromHTMLString","useLayoutEffect","htmlAttribute","getBlockType","attribute","BlockBindingBridge","bindings","blockBindingsSources","unlock","useSelect","blocksStore","getAllBlockBindingsSources","_react","createElement","Fragment","Object","entries","map","boundAttribute","key","withBlockBindingSupport","createHigherOrderComponent","BlockEdit","props","boundAttributes","setBoundAttributes","useState","updateBoundAttributes","newAttributes","prev","fromEntries","metadata","filter","keys","length","shimAttributeSource","settings","edit","addFilter"],"sources":["@wordpress/block-editor/src/hooks/use-bindings-attributes.js"],"sourcesContent":["/**\n * WordPress dependencies\n */\nimport { getBlockType, store as blocksStore } from '@wordpress/blocks';\nimport { createHigherOrderComponent } from '@wordpress/compose';\nimport { useSelect } from '@wordpress/data';\nimport { useLayoutEffect, useCallback, useState } from '@wordpress/element';\nimport { addFilter } from '@wordpress/hooks';\nimport { RichTextData } from '@wordpress/rich-text';\n\n/**\n * Internal dependencies\n */\nimport { unlock } from '../lock-unlock';\n\n/** @typedef {import('@wordpress/compose').WPHigherOrderComponent} WPHigherOrderComponent */\n/** @typedef {import('@wordpress/blocks').WPBlockSettings} WPBlockSettings */\n\n/**\n * Given a binding of block attributes, returns a higher order component that\n * overrides its `attributes` and `setAttributes` props to sync any changes needed.\n *\n * @return {WPHigherOrderComponent} Higher-order component.\n */\n\nconst BLOCK_BINDINGS_ALLOWED_BLOCKS = {\n\t'core/paragraph': [ 'content' ],\n\t'core/heading': [ 'content' ],\n\t'core/image': [ 'url', 'title', 'alt' ],\n\t'core/button': [ 'url', 'text', 'linkTarget' ],\n};\n\n/**\n * Based on the given block name,\n * check if it is possible to bind the block.\n *\n * @param {string} blockName - The block name.\n * @return {boolean} Whether it is possible to bind the block to sources.\n */\nexport function canBindBlock( blockName ) {\n\treturn blockName in BLOCK_BINDINGS_ALLOWED_BLOCKS;\n}\n\n/**\n * Based on the given block name and attribute name,\n * check if it is possible to bind the block attribute.\n *\n * @param {string} blockName - The block name.\n * @param {string} attributeName - The attribute name.\n * @return {boolean} Whether it is possible to bind the block attribute.\n */\nexport function canBindAttribute( blockName, attributeName ) {\n\treturn (\n\t\tcanBindBlock( blockName ) &&\n\t\tBLOCK_BINDINGS_ALLOWED_BLOCKS[ blockName ].includes( attributeName )\n\t);\n}\n\n/**\n * This component is responsible for detecting and\n * propagating data changes from the source to the block.\n *\n * @param {Object} props - The component props.\n * @param {string} props.attrName - The attribute name.\n * @param {Object} props.blockProps - The block props with bound attribute.\n * @param {Object} props.source - Source handler.\n * @param {Object} props.args - The arguments to pass to the source.\n * @param {Function} props.onPropValueChange - The function to call when the attribute value changes.\n * @return {null} Data-handling component. Render nothing.\n */\nconst BindingConnector = ( {\n\targs,\n\tattrName,\n\tblockProps,\n\tsource,\n\tonPropValueChange,\n} ) => {\n\tconst { placeholder, value: propValue } = source.useSource(\n\t\tblockProps,\n\t\targs\n\t);\n\n\tconst { name: blockName } = blockProps;\n\tconst attrValue = blockProps.attributes[ attrName ];\n\n\tconst updateBoundAttibute = useCallback(\n\t\t( newAttrValue, prevAttrValue ) => {\n\t\t\t/*\n\t\t\t * If the attribute is a RichTextData instance,\n\t\t\t * (core/paragraph, core/heading, core/button, etc.)\n\t\t\t * compare its HTML representation with the new value.\n\t\t\t *\n\t\t\t * To do: it looks like a workaround.\n\t\t\t * Consider improving the attribute and metadata fields types.\n\t\t\t */\n\t\t\tif ( prevAttrValue instanceof RichTextData ) {\n\t\t\t\t// Bail early if the Rich Text value is the same.\n\t\t\t\tif ( prevAttrValue.toHTMLString() === newAttrValue ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t/*\n\t\t\t\t * To preserve the value type,\n\t\t\t\t * convert the new value to a RichTextData instance.\n\t\t\t\t */\n\t\t\t\tnewAttrValue = RichTextData.fromHTMLString( newAttrValue );\n\t\t\t}\n\n\t\t\tif ( prevAttrValue === newAttrValue ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonPropValueChange( { [ attrName ]: newAttrValue } );\n\t\t},\n\t\t[ attrName, onPropValueChange ]\n\t);\n\n\tuseLayoutEffect( () => {\n\t\tif ( typeof propValue !== 'undefined' ) {\n\t\t\tupdateBoundAttibute( propValue, attrValue );\n\t\t} else if ( placeholder ) {\n\t\t\t/*\n\t\t\t * Placeholder fallback.\n\t\t\t * If the attribute is `src` or `href`,\n\t\t\t * a placeholder can't be used because it is not a valid url.\n\t\t\t * Adding this workaround until\n\t\t\t * attributes and metadata fields types are improved and include `url`.\n\t\t\t */\n\t\t\tconst htmlAttribute =\n\t\t\t\tgetBlockType( blockName ).attributes[ attrName ].attribute;\n\n\t\t\tif ( htmlAttribute === 'src' || htmlAttribute === 'href' ) {\n\t\t\t\tupdateBoundAttibute( null );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateBoundAttibute( placeholder );\n\t\t}\n\t}, [\n\t\tupdateBoundAttibute,\n\t\tpropValue,\n\t\tattrValue,\n\t\tplaceholder,\n\t\tblockName,\n\t\tattrName,\n\t] );\n\n\treturn null;\n};\n\n/**\n * BlockBindingBridge acts like a component wrapper\n * that connects the bound attributes of a block\n * to the source handlers.\n * For this, it creates a BindingConnector for each bound attribute.\n *\n * @param {Object} props - The component props.\n * @param {Object} props.blockProps - The BlockEdit props object.\n * @param {Object} props.bindings - The block bindings settings.\n * @param {Function} props.onPropValueChange - The function to call when the attribute value changes.\n * @return {null} Data-handling component. Render nothing.\n */\nfunction BlockBindingBridge( { blockProps, bindings, onPropValueChange } ) {\n\tconst blockBindingsSources = unlock(\n\t\tuseSelect( blocksStore )\n\t).getAllBlockBindingsSources();\n\n\treturn (\n\t\t<>\n\t\t\t{ Object.entries( bindings ).map(\n\t\t\t\t( [ attrName, boundAttribute ] ) => {\n\t\t\t\t\t// Bail early if the block doesn't have a valid source handler.\n\t\t\t\t\tconst source =\n\t\t\t\t\t\tblockBindingsSources[ boundAttribute.source ];\n\t\t\t\t\tif ( ! source?.useSource ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<BindingConnector\n\t\t\t\t\t\t\tkey={ attrName }\n\t\t\t\t\t\t\tattrName={ attrName }\n\t\t\t\t\t\t\tsource={ source }\n\t\t\t\t\t\t\tblockProps={ blockProps }\n\t\t\t\t\t\t\targs={ boundAttribute.args }\n\t\t\t\t\t\t\tonPropValueChange={ onPropValueChange }\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t) }\n\t\t</>\n\t);\n}\n\nconst withBlockBindingSupport = createHigherOrderComponent(\n\t( BlockEdit ) => ( props ) => {\n\t\t/*\n\t\t * Collect and update the bound attributes\n\t\t * in a separate state.\n\t\t */\n\t\tconst [ boundAttributes, setBoundAttributes ] = useState( {} );\n\t\tconst updateBoundAttributes = useCallback(\n\t\t\t( newAttributes ) =>\n\t\t\t\tsetBoundAttributes( ( prev ) => ( {\n\t\t\t\t\t...prev,\n\t\t\t\t\t...newAttributes,\n\t\t\t\t} ) ),\n\t\t\t[]\n\t\t);\n\n\t\t/*\n\t\t * Create binding object filtering\n\t\t * only the attributes that can be bound.\n\t\t */\n\t\tconst bindings = Object.fromEntries(\n\t\t\tObject.entries( props.attributes.metadata?.bindings || {} ).filter(\n\t\t\t\t( [ attrName ] ) => canBindAttribute( props.name, attrName )\n\t\t\t)\n\t\t);\n\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{ Object.keys( bindings ).length > 0 && (\n\t\t\t\t\t<BlockBindingBridge\n\t\t\t\t\t\tblockProps={ props }\n\t\t\t\t\t\tbindings={ bindings }\n\t\t\t\t\t\tonPropValueChange={ updateBoundAttributes }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t<BlockEdit\n\t\t\t\t\t{ ...props }\n\t\t\t\t\tattributes={ { ...props.attributes, ...boundAttributes } }\n\t\t\t\t/>\n\t\t\t</>\n\t\t);\n\t},\n\t'withBlockBindingSupport'\n);\n\n/**\n * Filters a registered block's settings to enhance a block's `edit` component\n * to upgrade bound attributes.\n *\n * @param {WPBlockSettings} settings - Registered block settings.\n * @param {string} name - Block name.\n * @return {WPBlockSettings} Filtered block settings.\n */\nfunction shimAttributeSource( settings, name ) {\n\tif ( ! canBindBlock( name ) ) {\n\t\treturn settings;\n\t}\n\n\treturn {\n\t\t...settings,\n\t\tedit: withBlockBindingSupport( settings.edit ),\n\t};\n}\n\naddFilter(\n\t'blocks.registerBlockType',\n\t'core/editor/custom-sources-backwards-compatibility/shim-attribute-source',\n\tshimAttributeSource\n);\n"],"mappings":";;;;;;;;AAGA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AAKA,IAAAM,WAAA,GAAAN,OAAA;AAbA;AACA;AACA;;AAQA;AACA;AACA;;AAGA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMO,6BAA6B,GAAG;EACrC,gBAAgB,EAAE,CAAE,SAAS,CAAE;EAC/B,cAAc,EAAE,CAAE,SAAS,CAAE;EAC7B,YAAY,EAAE,CAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAE;EACvC,aAAa,EAAE,CAAE,KAAK,EAAE,MAAM,EAAE,YAAY;AAC7C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,YAAYA,CAAEC,SAAS,EAAG;EACzC,OAAOA,SAAS,IAAIF,6BAA6B;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,gBAAgBA,CAAED,SAAS,EAAEE,aAAa,EAAG;EAC5D,OACCH,YAAY,CAAEC,SAAU,CAAC,IACzBF,6BAA6B,CAAEE,SAAS,CAAE,CAACG,QAAQ,CAAED,aAAc,CAAC;AAEtE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,gBAAgB,GAAGA,CAAE;EAC1BC,IAAI;EACJC,QAAQ;EACRC,UAAU;EACVC,MAAM;EACNC;AACD,CAAC,KAAM;EACN,MAAM;IAAEC,WAAW;IAAEC,KAAK,EAAEC;EAAU,CAAC,GAAGJ,MAAM,CAACK,SAAS,CACzDN,UAAU,EACVF,IACD,CAAC;EAED,MAAM;IAAES,IAAI,EAAEd;EAAU,CAAC,GAAGO,UAAU;EACtC,MAAMQ,SAAS,GAAGR,UAAU,CAACS,UAAU,CAAEV,QAAQ,CAAE;EAEnD,MAAMW,mBAAmB,GAAG,IAAAC,oBAAW,EACtC,CAAEC,YAAY,EAAEC,aAAa,KAAM;IAClC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;IACG,IAAKA,aAAa,YAAYC,sBAAY,EAAG;MAC5C;MACA,IAAKD,aAAa,CAACE,YAAY,CAAC,CAAC,KAAKH,YAAY,EAAG;QACpD;MACD;;MAEA;AACJ;AACA;AACA;MACIA,YAAY,GAAGE,sBAAY,CAACE,cAAc,CAAEJ,YAAa,CAAC;IAC3D;IAEA,IAAKC,aAAa,KAAKD,YAAY,EAAG;MACrC;IACD;IAEAV,iBAAiB,CAAE;MAAE,CAAEH,QAAQ,GAAIa;IAAa,CAAE,CAAC;EACpD,CAAC,EACD,CAAEb,QAAQ,EAAEG,iBAAiB,CAC9B,CAAC;EAED,IAAAe,wBAAe,EAAE,MAAM;IACtB,IAAK,OAAOZ,SAAS,KAAK,WAAW,EAAG;MACvCK,mBAAmB,CAAEL,SAAS,EAAEG,SAAU,CAAC;IAC5C,CAAC,MAAM,IAAKL,WAAW,EAAG;MACzB;AACH;AACA;AACA;AACA;AACA;AACA;MACG,MAAMe,aAAa,GAClB,IAAAC,oBAAY,EAAE1B,SAAU,CAAC,CAACgB,UAAU,CAAEV,QAAQ,CAAE,CAACqB,SAAS;MAE3D,IAAKF,aAAa,KAAK,KAAK,IAAIA,aAAa,KAAK,MAAM,EAAG;QAC1DR,mBAAmB,CAAE,IAAK,CAAC;QAC3B;MACD;MAEAA,mBAAmB,CAAEP,WAAY,CAAC;IACnC;EACD,CAAC,EAAE,CACFO,mBAAmB,EACnBL,SAAS,EACTG,SAAS,EACTL,WAAW,EACXV,SAAS,EACTM,QAAQ,CACP,CAAC;EAEH,OAAO,IAAI;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASsB,kBAAkBA,CAAE;EAAErB,UAAU;EAAEsB,QAAQ;EAAEpB;AAAkB,CAAC,EAAG;EAC1E,MAAMqB,oBAAoB,GAAG,IAAAC,kBAAM,EAClC,IAAAC,eAAS,EAAEC,aAAY,CACxB,CAAC,CAACC,0BAA0B,CAAC,CAAC;EAE9B,OACC,IAAAC,MAAA,CAAAC,aAAA,EAAAD,MAAA,CAAAE,QAAA,QACGC,MAAM,CAACC,OAAO,CAAEV,QAAS,CAAC,CAACW,GAAG,CAC/B,CAAE,CAAElC,QAAQ,EAAEmC,cAAc,CAAE,KAAM;IACnC;IACA,MAAMjC,MAAM,GACXsB,oBAAoB,CAAEW,cAAc,CAACjC,MAAM,CAAE;IAC9C,IAAK,CAAEA,MAAM,EAAEK,SAAS,EAAG;MAC1B,OAAO,IAAI;IACZ;IAEA,OACC,IAAAsB,MAAA,CAAAC,aAAA,EAAChC,gBAAgB;MAChBsC,GAAG,EAAGpC,QAAU;MAChBA,QAAQ,EAAGA,QAAU;MACrBE,MAAM,EAAGA,MAAQ;MACjBD,UAAU,EAAGA,UAAY;MACzBF,IAAI,EAAGoC,cAAc,CAACpC,IAAM;MAC5BI,iBAAiB,EAAGA;IAAmB,CACvC,CAAC;EAEJ,CACD,CACC,CAAC;AAEL;AAEA,MAAMkC,uBAAuB,GAAG,IAAAC,mCAA0B,EACvDC,SAAS,IAAQC,KAAK,IAAM;EAC7B;AACF;AACA;AACA;EACE,MAAM,CAAEC,eAAe,EAAEC,kBAAkB,CAAE,GAAG,IAAAC,iBAAQ,EAAE,CAAC,CAAE,CAAC;EAC9D,MAAMC,qBAAqB,GAAG,IAAAhC,oBAAW,EACtCiC,aAAa,IACdH,kBAAkB,CAAII,IAAI,KAAQ;IACjC,GAAGA,IAAI;IACP,GAAGD;EACJ,CAAC,CAAG,CAAC,EACN,EACD,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAMtB,QAAQ,GAAGS,MAAM,CAACe,WAAW,CAClCf,MAAM,CAACC,OAAO,CAAEO,KAAK,CAAC9B,UAAU,CAACsC,QAAQ,EAAEzB,QAAQ,IAAI,CAAC,CAAE,CAAC,CAAC0B,MAAM,CACjE,CAAE,CAAEjD,QAAQ,CAAE,KAAML,gBAAgB,CAAE6C,KAAK,CAAChC,IAAI,EAAER,QAAS,CAC5D,CACD,CAAC;EAED,OACC,IAAA6B,MAAA,CAAAC,aAAA,EAAAD,MAAA,CAAAE,QAAA,QACGC,MAAM,CAACkB,IAAI,CAAE3B,QAAS,CAAC,CAAC4B,MAAM,GAAG,CAAC,IACnC,IAAAtB,MAAA,CAAAC,aAAA,EAACR,kBAAkB;IAClBrB,UAAU,EAAGuC,KAAO;IACpBjB,QAAQ,EAAGA,QAAU;IACrBpB,iBAAiB,EAAGyC;EAAuB,CAC3C,CACD,EAED,IAAAf,MAAA,CAAAC,aAAA,EAACS,SAAS;IAAA,GACJC,KAAK;IACV9B,UAAU,EAAG;MAAE,GAAG8B,KAAK,CAAC9B,UAAU;MAAE,GAAG+B;IAAgB;EAAG,CAC1D,CACA,CAAC;AAEL,CAAC,EACD,yBACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASW,mBAAmBA,CAAEC,QAAQ,EAAE7C,IAAI,EAAG;EAC9C,IAAK,CAAEf,YAAY,CAAEe,IAAK,CAAC,EAAG;IAC7B,OAAO6C,QAAQ;EAChB;EAEA,OAAO;IACN,GAAGA,QAAQ;IACXC,IAAI,EAAEjB,uBAAuB,CAAEgB,QAAQ,CAACC,IAAK;EAC9C,CAAC;AACF;AAEA,IAAAC,gBAAS,EACR,0BAA0B,EAC1B,0EAA0E,EAC1EH,mBACD,CAAC"}
|
package/build/private-apis.js
CHANGED
|
@@ -28,6 +28,7 @@ var _blockCanvas = require("./components/block-canvas");
|
|
|
28
28
|
var _utils2 = require("./components/duotone/utils");
|
|
29
29
|
var _useFlashEditableBlocks = require("./components/use-flash-editable-blocks");
|
|
30
30
|
var _privateKeys = require("./store/private-keys");
|
|
31
|
+
var _utils3 = require("./components/writing-flow/utils");
|
|
31
32
|
var _richText = require("./components/rich-text/");
|
|
32
33
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
33
34
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -65,6 +66,7 @@ const privateApis = exports.privateApis = {};
|
|
|
65
66
|
usesContextKey: _formatEdit.usesContextKey,
|
|
66
67
|
useFlashEditableBlocks: _useFlashEditableBlocks.useFlashEditableBlocks,
|
|
67
68
|
selectBlockPatternsKey: _privateKeys.selectBlockPatternsKey,
|
|
69
|
+
requiresWrapperOnCopy: _utils3.requiresWrapperOnCopy,
|
|
68
70
|
PrivateRichText: _richText.PrivateRichText
|
|
69
71
|
});
|
|
70
72
|
//# sourceMappingURL=private-apis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["globalStyles","_interopRequireWildcard","require","_provider","_lockUnlock","_getRichTextValues","_resizableBoxPopover","_interopRequireDefault","_inserter","_quickInserter","_listView","_blockInfoSlotFill","_useCanBlockToolbarBeFocused","_utils","_blockQuickNavigation","_layout","_blockRemovalWarningModal","_hooks","_dimensionsTool","_resolutionTool","_reusableBlockRenameHint","_formatEdit","_blockCanvas","_utils2","_useFlashEditableBlocks","_privateKeys","_richText","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","privateApis","exports","lock","ExperimentalBlockCanvas","ExperimentalBlockEditorProvider","getDuotoneFilter","getRichTextValues","PrivateInserter","PrivateQuickInserter","PrivateListView","ResizableBoxPopover","BlockInfo","useCanBlockToolbarBeFocused","cleanEmptyObject","useStyleOverride","BlockQuickNavigation","LayoutStyle","BlockRemovalWarningModal","useLayoutClasses","useLayoutStyles","DimensionsTool","ResolutionTool","ReusableBlocksRenameHint","useReusableBlocksRenameHint","usesContextKey","useFlashEditableBlocks","selectBlockPatternsKey","PrivateRichText"],"sources":["@wordpress/block-editor/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport * as globalStyles from './components/global-styles';\nimport { ExperimentalBlockEditorProvider } from './components/provider';\nimport { lock } from './lock-unlock';\nimport { getRichTextValues } from './components/rich-text/get-rich-text-values';\nimport ResizableBoxPopover from './components/resizable-box-popover';\nimport { ComposedPrivateInserter as PrivateInserter } from './components/inserter';\nimport { default as PrivateQuickInserter } from './components/inserter/quick-inserter';\nimport { PrivateListView } from './components/list-view';\nimport BlockInfo from './components/block-info-slot-fill';\nimport { useCanBlockToolbarBeFocused } from './utils/use-can-block-toolbar-be-focused';\nimport { cleanEmptyObject, useStyleOverride } from './hooks/utils';\nimport BlockQuickNavigation from './components/block-quick-navigation';\nimport { LayoutStyle } from './components/block-list/layout';\nimport { BlockRemovalWarningModal } from './components/block-removal-warning-modal';\nimport { useLayoutClasses, useLayoutStyles } from './hooks';\nimport DimensionsTool from './components/dimensions-tool';\nimport ResolutionTool from './components/resolution-tool';\nimport {\n\tdefault as ReusableBlocksRenameHint,\n\tuseReusableBlocksRenameHint,\n} from './components/inserter/reusable-block-rename-hint';\nimport { usesContextKey } from './components/rich-text/format-edit';\nimport { ExperimentalBlockCanvas } from './components/block-canvas';\nimport { getDuotoneFilter } from './components/duotone/utils';\nimport { useFlashEditableBlocks } from './components/use-flash-editable-blocks';\nimport { selectBlockPatternsKey } from './store/private-keys';\nimport { PrivateRichText } from './components/rich-text/';\n\n/**\n * Private @wordpress/block-editor APIs.\n */\nexport const privateApis = {};\nlock( privateApis, {\n\t...globalStyles,\n\tExperimentalBlockCanvas,\n\tExperimentalBlockEditorProvider,\n\tgetDuotoneFilter,\n\tgetRichTextValues,\n\tPrivateInserter,\n\tPrivateQuickInserter,\n\tPrivateListView,\n\tResizableBoxPopover,\n\tBlockInfo,\n\tuseCanBlockToolbarBeFocused,\n\tcleanEmptyObject,\n\tuseStyleOverride,\n\tBlockQuickNavigation,\n\tLayoutStyle,\n\tBlockRemovalWarningModal,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tDimensionsTool,\n\tResolutionTool,\n\tReusableBlocksRenameHint,\n\tuseReusableBlocksRenameHint,\n\tusesContextKey,\n\tuseFlashEditableBlocks,\n\tselectBlockPatternsKey,\n\tPrivateRichText,\n} );\n"],"mappings":";;;;;;;AAGA,IAAAA,YAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AACA,IAAAI,oBAAA,GAAAC,sBAAA,CAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,cAAA,GAAAF,sBAAA,CAAAL,OAAA;AACA,IAAAQ,SAAA,GAAAR,OAAA;AACA,IAAAS,kBAAA,GAAAJ,sBAAA,CAAAL,OAAA;AACA,IAAAU,4BAAA,GAAAV,OAAA;AACA,IAAAW,MAAA,GAAAX,OAAA;AACA,IAAAY,qBAAA,GAAAP,sBAAA,CAAAL,OAAA;AACA,IAAAa,OAAA,GAAAb,OAAA;AACA,IAAAc,yBAAA,GAAAd,OAAA;AACA,IAAAe,MAAA,GAAAf,OAAA;AACA,IAAAgB,eAAA,GAAAX,sBAAA,CAAAL,OAAA;AACA,IAAAiB,eAAA,GAAAZ,sBAAA,CAAAL,OAAA;AACA,IAAAkB,wBAAA,GAAAnB,uBAAA,CAAAC,OAAA;AAIA,IAAAmB,WAAA,GAAAnB,OAAA;AACA,IAAAoB,YAAA,GAAApB,OAAA;AACA,IAAAqB,OAAA,GAAArB,OAAA;AACA,IAAAsB,uBAAA,GAAAtB,OAAA;AACA,IAAAuB,YAAA,GAAAvB,OAAA;AACA,IAAAwB,
|
|
1
|
+
{"version":3,"names":["globalStyles","_interopRequireWildcard","require","_provider","_lockUnlock","_getRichTextValues","_resizableBoxPopover","_interopRequireDefault","_inserter","_quickInserter","_listView","_blockInfoSlotFill","_useCanBlockToolbarBeFocused","_utils","_blockQuickNavigation","_layout","_blockRemovalWarningModal","_hooks","_dimensionsTool","_resolutionTool","_reusableBlockRenameHint","_formatEdit","_blockCanvas","_utils2","_useFlashEditableBlocks","_privateKeys","_utils3","_richText","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","privateApis","exports","lock","ExperimentalBlockCanvas","ExperimentalBlockEditorProvider","getDuotoneFilter","getRichTextValues","PrivateInserter","PrivateQuickInserter","PrivateListView","ResizableBoxPopover","BlockInfo","useCanBlockToolbarBeFocused","cleanEmptyObject","useStyleOverride","BlockQuickNavigation","LayoutStyle","BlockRemovalWarningModal","useLayoutClasses","useLayoutStyles","DimensionsTool","ResolutionTool","ReusableBlocksRenameHint","useReusableBlocksRenameHint","usesContextKey","useFlashEditableBlocks","selectBlockPatternsKey","requiresWrapperOnCopy","PrivateRichText"],"sources":["@wordpress/block-editor/src/private-apis.js"],"sourcesContent":["/**\n * Internal dependencies\n */\nimport * as globalStyles from './components/global-styles';\nimport { ExperimentalBlockEditorProvider } from './components/provider';\nimport { lock } from './lock-unlock';\nimport { getRichTextValues } from './components/rich-text/get-rich-text-values';\nimport ResizableBoxPopover from './components/resizable-box-popover';\nimport { ComposedPrivateInserter as PrivateInserter } from './components/inserter';\nimport { default as PrivateQuickInserter } from './components/inserter/quick-inserter';\nimport { PrivateListView } from './components/list-view';\nimport BlockInfo from './components/block-info-slot-fill';\nimport { useCanBlockToolbarBeFocused } from './utils/use-can-block-toolbar-be-focused';\nimport { cleanEmptyObject, useStyleOverride } from './hooks/utils';\nimport BlockQuickNavigation from './components/block-quick-navigation';\nimport { LayoutStyle } from './components/block-list/layout';\nimport { BlockRemovalWarningModal } from './components/block-removal-warning-modal';\nimport { useLayoutClasses, useLayoutStyles } from './hooks';\nimport DimensionsTool from './components/dimensions-tool';\nimport ResolutionTool from './components/resolution-tool';\nimport {\n\tdefault as ReusableBlocksRenameHint,\n\tuseReusableBlocksRenameHint,\n} from './components/inserter/reusable-block-rename-hint';\nimport { usesContextKey } from './components/rich-text/format-edit';\nimport { ExperimentalBlockCanvas } from './components/block-canvas';\nimport { getDuotoneFilter } from './components/duotone/utils';\nimport { useFlashEditableBlocks } from './components/use-flash-editable-blocks';\nimport { selectBlockPatternsKey } from './store/private-keys';\nimport { requiresWrapperOnCopy } from './components/writing-flow/utils';\nimport { PrivateRichText } from './components/rich-text/';\n\n/**\n * Private @wordpress/block-editor APIs.\n */\nexport const privateApis = {};\nlock( privateApis, {\n\t...globalStyles,\n\tExperimentalBlockCanvas,\n\tExperimentalBlockEditorProvider,\n\tgetDuotoneFilter,\n\tgetRichTextValues,\n\tPrivateInserter,\n\tPrivateQuickInserter,\n\tPrivateListView,\n\tResizableBoxPopover,\n\tBlockInfo,\n\tuseCanBlockToolbarBeFocused,\n\tcleanEmptyObject,\n\tuseStyleOverride,\n\tBlockQuickNavigation,\n\tLayoutStyle,\n\tBlockRemovalWarningModal,\n\tuseLayoutClasses,\n\tuseLayoutStyles,\n\tDimensionsTool,\n\tResolutionTool,\n\tReusableBlocksRenameHint,\n\tuseReusableBlocksRenameHint,\n\tusesContextKey,\n\tuseFlashEditableBlocks,\n\tselectBlockPatternsKey,\n\trequiresWrapperOnCopy,\n\tPrivateRichText,\n} );\n"],"mappings":"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"}
|
package/build/store/actions.js
CHANGED
|
@@ -1408,7 +1408,7 @@ const duplicateBlocks = (clientIds, updateSelection = true) => ({
|
|
|
1408
1408
|
};
|
|
1409
1409
|
|
|
1410
1410
|
/**
|
|
1411
|
-
* Action that inserts
|
|
1411
|
+
* Action that inserts a default block before a given block.
|
|
1412
1412
|
*
|
|
1413
1413
|
* @param {string} clientId
|
|
1414
1414
|
*/
|
|
@@ -1425,12 +1425,29 @@ const insertBeforeBlock = clientId => ({
|
|
|
1425
1425
|
if (isLocked) {
|
|
1426
1426
|
return;
|
|
1427
1427
|
}
|
|
1428
|
-
const
|
|
1429
|
-
|
|
1428
|
+
const blockIndex = select.getBlockIndex(clientId);
|
|
1429
|
+
const directInsertBlock = rootClientId ? select.getDirectInsertBlock(rootClientId) : null;
|
|
1430
|
+
if (!directInsertBlock) {
|
|
1431
|
+
return dispatch.insertDefaultBlock({}, rootClientId, blockIndex);
|
|
1432
|
+
}
|
|
1433
|
+
const copiedAttributes = {};
|
|
1434
|
+
if (directInsertBlock.attributesToCopy) {
|
|
1435
|
+
const attributes = select.getBlockAttributes(clientId);
|
|
1436
|
+
directInsertBlock.attributesToCopy.forEach(key => {
|
|
1437
|
+
if (attributes[key]) {
|
|
1438
|
+
copiedAttributes[key] = attributes[key];
|
|
1439
|
+
}
|
|
1440
|
+
});
|
|
1441
|
+
}
|
|
1442
|
+
const block = (0, _blocks.createBlock)(directInsertBlock.name, {
|
|
1443
|
+
...directInsertBlock.attributes,
|
|
1444
|
+
...copiedAttributes
|
|
1445
|
+
});
|
|
1446
|
+
return dispatch.insertBlock(block, blockIndex, rootClientId);
|
|
1430
1447
|
};
|
|
1431
1448
|
|
|
1432
1449
|
/**
|
|
1433
|
-
* Action that inserts
|
|
1450
|
+
* Action that inserts a default block after a given block.
|
|
1434
1451
|
*
|
|
1435
1452
|
* @param {string} clientId
|
|
1436
1453
|
*/
|
|
@@ -1447,8 +1464,25 @@ const insertAfterBlock = clientId => ({
|
|
|
1447
1464
|
if (isLocked) {
|
|
1448
1465
|
return;
|
|
1449
1466
|
}
|
|
1450
|
-
const
|
|
1451
|
-
|
|
1467
|
+
const blockIndex = select.getBlockIndex(clientId);
|
|
1468
|
+
const directInsertBlock = rootClientId ? select.getDirectInsertBlock(rootClientId) : null;
|
|
1469
|
+
if (!directInsertBlock) {
|
|
1470
|
+
return dispatch.insertDefaultBlock({}, rootClientId, blockIndex + 1);
|
|
1471
|
+
}
|
|
1472
|
+
const copiedAttributes = {};
|
|
1473
|
+
if (directInsertBlock.attributesToCopy) {
|
|
1474
|
+
const attributes = select.getBlockAttributes(clientId);
|
|
1475
|
+
directInsertBlock.attributesToCopy.forEach(key => {
|
|
1476
|
+
if (attributes[key]) {
|
|
1477
|
+
copiedAttributes[key] = attributes[key];
|
|
1478
|
+
}
|
|
1479
|
+
});
|
|
1480
|
+
}
|
|
1481
|
+
const block = (0, _blocks.createBlock)(directInsertBlock.name, {
|
|
1482
|
+
...directInsertBlock.attributes,
|
|
1483
|
+
...copiedAttributes
|
|
1484
|
+
});
|
|
1485
|
+
return dispatch.insertBlock(block, blockIndex + 1, rootClientId);
|
|
1452
1486
|
};
|
|
1453
1487
|
|
|
1454
1488
|
/**
|