@wordpress/block-editor 8.5.0 → 8.5.1
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-content-overlay/index.js +13 -4
- package/build/components/block-content-overlay/index.js.map +1 -1
- package/build/components/block-lock/index.js +8 -0
- package/build/components/block-lock/index.js.map +1 -1
- package/build/components/block-lock/menu-item.js +5 -20
- package/build/components/block-lock/menu-item.js.map +1 -1
- package/build/components/block-lock/modal.js +33 -12
- package/build/components/block-lock/modal.js.map +1 -1
- package/build/components/block-lock/toolbar.js +7 -20
- package/build/components/block-lock/toolbar.js.map +1 -1
- package/build/components/block-lock/use-block-lock.js +53 -0
- package/build/components/block-lock/use-block-lock.js.map +1 -0
- package/build/components/block-pattern-setup/index.js +37 -22
- package/build/components/block-pattern-setup/index.js.map +1 -1
- package/build/components/block-pattern-setup/setup-toolbar.js +1 -1
- package/build/components/block-pattern-setup/setup-toolbar.js.map +1 -1
- package/build/components/block-preview/auto.js +6 -3
- package/build/components/block-preview/auto.js.map +1 -1
- package/build/components/block-preview/index.js +4 -2
- package/build/components/block-preview/index.js.map +1 -1
- package/build/components/block-switcher/index.js +7 -2
- package/build/components/block-switcher/index.js.map +1 -1
- package/build/components/list-view/block-select-button.js +4 -10
- package/build/components/list-view/block-select-button.js.map +1 -1
- package/build/store/selectors.js +26 -2
- package/build/store/selectors.js.map +1 -1
- package/build-module/components/block-content-overlay/index.js +13 -4
- package/build-module/components/block-content-overlay/index.js.map +1 -1
- package/build-module/components/block-lock/index.js +1 -0
- package/build-module/components/block-lock/index.js.map +1 -1
- package/build-module/components/block-lock/menu-item.js +4 -18
- package/build-module/components/block-lock/menu-item.js.map +1 -1
- package/build-module/components/block-lock/modal.js +31 -12
- package/build-module/components/block-lock/modal.js.map +1 -1
- package/build-module/components/block-lock/toolbar.js +6 -18
- package/build-module/components/block-lock/toolbar.js.map +1 -1
- package/build-module/components/block-lock/use-block-lock.js +44 -0
- package/build-module/components/block-lock/use-block-lock.js.map +1 -0
- package/build-module/components/block-pattern-setup/index.js +39 -24
- package/build-module/components/block-pattern-setup/index.js.map +1 -1
- package/build-module/components/block-pattern-setup/setup-toolbar.js +1 -1
- package/build-module/components/block-pattern-setup/setup-toolbar.js.map +1 -1
- package/build-module/components/block-preview/auto.js +6 -3
- package/build-module/components/block-preview/auto.js.map +1 -1
- package/build-module/components/block-preview/index.js +4 -2
- package/build-module/components/block-preview/index.js.map +1 -1
- package/build-module/components/block-switcher/index.js +7 -2
- package/build-module/components/block-switcher/index.js.map +1 -1
- package/build-module/components/list-view/block-select-button.js +4 -9
- package/build-module/components/list-view/block-select-button.js.map +1 -1
- package/build-module/store/selectors.js +24 -2
- package/build-module/store/selectors.js.map +1 -1
- package/build-style/style-rtl.css +34 -25
- package/build-style/style.css +34 -25
- package/package.json +3 -3
- package/src/components/block-content-overlay/index.js +19 -2
- package/src/components/block-lock/index.js +1 -0
- package/src/components/block-lock/menu-item.js +3 -23
- package/src/components/block-lock/modal.js +37 -13
- package/src/components/block-lock/toolbar.js +4 -21
- package/src/components/block-lock/use-block-lock.js +49 -0
- package/src/components/block-pattern-setup/index.js +84 -59
- package/src/components/block-pattern-setup/setup-toolbar.js +3 -1
- package/src/components/block-pattern-setup/style.scss +32 -26
- package/src/components/block-preview/auto.js +10 -1
- package/src/components/block-preview/index.js +2 -0
- package/src/components/block-switcher/index.js +13 -1
- package/src/components/block-switcher/style.scss +7 -3
- package/src/components/block-switcher/test/__snapshots__/index.js.snap +15 -13
- package/src/components/list-view/block-select-button.js +2 -10
- package/src/store/selectors.js +22 -2
|
@@ -27,6 +27,7 @@ export default function BlockContentOverlay(_ref) {
|
|
|
27
27
|
const [isOverlayActive, setIsOverlayActive] = useState(true);
|
|
28
28
|
const [isHovered, setIsHovered] = useState(false);
|
|
29
29
|
const {
|
|
30
|
+
canEdit,
|
|
30
31
|
isParentSelected,
|
|
31
32
|
hasChildSelected,
|
|
32
33
|
isDraggingBlocks,
|
|
@@ -36,9 +37,11 @@ export default function BlockContentOverlay(_ref) {
|
|
|
36
37
|
isBlockSelected,
|
|
37
38
|
hasSelectedInnerBlock,
|
|
38
39
|
isDraggingBlocks: _isDraggingBlocks,
|
|
39
|
-
isBlockHighlighted
|
|
40
|
+
isBlockHighlighted,
|
|
41
|
+
canEditBlock
|
|
40
42
|
} = select(blockEditorStore);
|
|
41
43
|
return {
|
|
44
|
+
canEdit: canEditBlock(clientId),
|
|
42
45
|
isParentSelected: isBlockSelected(clientId),
|
|
43
46
|
hasChildSelected: hasSelectedInnerBlock(clientId, true),
|
|
44
47
|
isDraggingBlocks: _isDraggingBlocks(),
|
|
@@ -51,7 +54,13 @@ export default function BlockContentOverlay(_ref) {
|
|
|
51
54
|
'is-dragging-blocks': isDraggingBlocks
|
|
52
55
|
});
|
|
53
56
|
useEffect(() => {
|
|
54
|
-
//
|
|
57
|
+
// The overlay is always active when editing is locked.
|
|
58
|
+
if (!canEdit) {
|
|
59
|
+
setIsOverlayActive(true);
|
|
60
|
+
return;
|
|
61
|
+
} // Reenable when blocks are not in use.
|
|
62
|
+
|
|
63
|
+
|
|
55
64
|
if (!isParentSelected && !hasChildSelected && !isOverlayActive) {
|
|
56
65
|
setIsOverlayActive(true);
|
|
57
66
|
} // Disable if parent selected by another means (such as list view).
|
|
@@ -69,7 +78,7 @@ export default function BlockContentOverlay(_ref) {
|
|
|
69
78
|
if (hasChildSelected && isOverlayActive) {
|
|
70
79
|
setIsOverlayActive(false);
|
|
71
80
|
}
|
|
72
|
-
}, [isParentSelected, hasChildSelected, isOverlayActive, isHovered]); // Disabled because the overlay div doesn't actually have a role or functionality
|
|
81
|
+
}, [isParentSelected, hasChildSelected, isOverlayActive, isHovered, canEdit]); // Disabled because the overlay div doesn't actually have a role or functionality
|
|
73
82
|
// as far as the a11y is concerned. We're just catching the first click so that
|
|
74
83
|
// the block can be selected without interacting with its contents.
|
|
75
84
|
|
|
@@ -79,7 +88,7 @@ export default function BlockContentOverlay(_ref) {
|
|
|
79
88
|
className: classes,
|
|
80
89
|
onMouseEnter: () => setIsHovered(true),
|
|
81
90
|
onMouseLeave: () => setIsHovered(false),
|
|
82
|
-
onMouseUp: isOverlayActive ? () => setIsOverlayActive(false) : undefined
|
|
91
|
+
onMouseUp: isOverlayActive && canEdit ? () => setIsOverlayActive(false) : undefined
|
|
83
92
|
}), wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.children);
|
|
84
93
|
}
|
|
85
94
|
/* eslint-enable jsx-a11y/no-static-element-interactions */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-content-overlay/index.js"],"names":["useSelect","useState","useEffect","store","blockEditorStore","classnames","BlockContentOverlay","clientId","tagName","TagName","wrapperProps","className","baseClassName","isOverlayActive","setIsOverlayActive","isHovered","setIsHovered","isParentSelected","hasChildSelected","isDraggingBlocks","isParentHighlighted","select","isBlockSelected","hasSelectedInnerBlock","_isDraggingBlocks","isBlockHighlighted","classes","undefined","children"],"mappings":";;;AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,iBAA1B;AACA,SAASC,QAAT,EAAmBC,SAAnB,QAAoC,oBAApC;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA;AACA;AACA;;AACA,OAAOC,UAAP,MAAuB,YAAvB;AAEA,eAAe,SAASC,mBAAT,OAKX;AAAA,MALyC;AAC5CC,IAAAA,QAD4C;AAE5CC,IAAAA,OAAO,EAAEC,OAAO,GAAG,KAFyB;AAG5CC,IAAAA,YAH4C;AAI5CC,IAAAA;AAJ4C,GAKzC;AACH,QAAMC,aAAa,GAAG,oCAAtB;AACA,QAAM,CAAEC,eAAF,EAAmBC,kBAAnB,IAA0Cb,QAAQ,CAAE,IAAF,CAAxD;AACA,QAAM,CAAEc,SAAF,EAAaC,YAAb,IAA8Bf,QAAQ,CAAE,KAAF,CAA5C;AAEA,QAAM;AACLgB,IAAAA,
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-content-overlay/index.js"],"names":["useSelect","useState","useEffect","store","blockEditorStore","classnames","BlockContentOverlay","clientId","tagName","TagName","wrapperProps","className","baseClassName","isOverlayActive","setIsOverlayActive","isHovered","setIsHovered","canEdit","isParentSelected","hasChildSelected","isDraggingBlocks","isParentHighlighted","select","isBlockSelected","hasSelectedInnerBlock","_isDraggingBlocks","isBlockHighlighted","canEditBlock","classes","undefined","children"],"mappings":"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","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\nimport { useState, useEffect } from '@wordpress/element';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * External dependencies\n */\nimport classnames from 'classnames';\n\nexport default function BlockContentOverlay( {\n\tclientId,\n\ttagName: TagName = 'div',\n\twrapperProps,\n\tclassName,\n} ) {\n\tconst baseClassName = 'block-editor-block-content-overlay';\n\tconst [ isOverlayActive, setIsOverlayActive ] = useState( true );\n\tconst [ isHovered, setIsHovered ] = useState( false );\n\n\tconst {\n\t\tcanEdit,\n\t\tisParentSelected,\n\t\thasChildSelected,\n\t\tisDraggingBlocks,\n\t\tisParentHighlighted,\n\t} = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tisBlockSelected,\n\t\t\t\thasSelectedInnerBlock,\n\t\t\t\tisDraggingBlocks: _isDraggingBlocks,\n\t\t\t\tisBlockHighlighted,\n\t\t\t\tcanEditBlock,\n\t\t\t} = select( blockEditorStore );\n\t\t\treturn {\n\t\t\t\tcanEdit: canEditBlock( clientId ),\n\t\t\t\tisParentSelected: isBlockSelected( clientId ),\n\t\t\t\thasChildSelected: hasSelectedInnerBlock( clientId, true ),\n\t\t\t\tisDraggingBlocks: _isDraggingBlocks(),\n\t\t\t\tisParentHighlighted: isBlockHighlighted( clientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\n\tconst classes = classnames(\n\t\tbaseClassName,\n\t\twrapperProps?.className,\n\t\tclassName,\n\t\t{\n\t\t\t'overlay-active': isOverlayActive,\n\t\t\t'parent-highlighted': isParentHighlighted,\n\t\t\t'is-dragging-blocks': isDraggingBlocks,\n\t\t}\n\t);\n\n\tuseEffect( () => {\n\t\t// The overlay is always active when editing is locked.\n\t\tif ( ! canEdit ) {\n\t\t\tsetIsOverlayActive( true );\n\t\t\treturn;\n\t\t}\n\n\t\t// Reenable when blocks are not in use.\n\t\tif ( ! isParentSelected && ! hasChildSelected && ! isOverlayActive ) {\n\t\t\tsetIsOverlayActive( true );\n\t\t}\n\t\t// Disable if parent selected by another means (such as list view).\n\t\t// We check hover to ensure the overlay click interaction is not taking place.\n\t\t// Trying to click the overlay will select the parent block via its 'focusin'\n\t\t// listener on the wrapper, so if the block is selected while hovered we will\n\t\t// let the mouseup disable the overlay instead.\n\t\tif ( isParentSelected && ! isHovered && isOverlayActive ) {\n\t\t\tsetIsOverlayActive( false );\n\t\t}\n\t\t// Ensure overlay is disabled if a child block is selected.\n\t\tif ( hasChildSelected && isOverlayActive ) {\n\t\t\tsetIsOverlayActive( false );\n\t\t}\n\t}, [\n\t\tisParentSelected,\n\t\thasChildSelected,\n\t\tisOverlayActive,\n\t\tisHovered,\n\t\tcanEdit,\n\t] );\n\n\t// Disabled because the overlay div doesn't actually have a role or functionality\n\t// as far as the a11y is concerned. We're just catching the first click so that\n\t// the block can be selected without interacting with its contents.\n\t/* eslint-disable jsx-a11y/no-static-element-interactions */\n\treturn (\n\t\t<TagName\n\t\t\t{ ...wrapperProps }\n\t\t\tclassName={ classes }\n\t\t\tonMouseEnter={ () => setIsHovered( true ) }\n\t\t\tonMouseLeave={ () => setIsHovered( false ) }\n\t\t\tonMouseUp={\n\t\t\t\tisOverlayActive && canEdit\n\t\t\t\t\t? () => setIsOverlayActive( false )\n\t\t\t\t\t: undefined\n\t\t\t}\n\t\t>\n\t\t\t{ wrapperProps?.children }\n\t\t</TagName>\n\t);\n}\n/* eslint-enable jsx-a11y/no-static-element-interactions */\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/index.js"],"names":["default","BlockLockMenuItem","BlockLockModal","BlockLockToolbar"],"mappings":"AAAA,SAASA,OAAO,IAAIC,iBAApB,QAA6C,aAA7C;AACA,SAASD,OAAO,IAAIE,cAApB,QAA0C,SAA1C;AACA,SAASF,OAAO,IAAIG,gBAApB,QAA4C,WAA5C","sourcesContent":["export { default as BlockLockMenuItem } from './menu-item';\nexport { default as BlockLockModal } from './modal';\nexport { default as BlockLockToolbar } from './toolbar';\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/index.js"],"names":["default","BlockLockMenuItem","BlockLockModal","BlockLockToolbar","useBlockLock"],"mappings":"AAAA,SAASA,OAAO,IAAIC,iBAApB,QAA6C,aAA7C;AACA,SAASD,OAAO,IAAIE,cAApB,QAA0C,SAA1C;AACA,SAASF,OAAO,IAAIG,gBAApB,QAA4C,WAA5C;AACA,SAASH,OAAO,IAAII,YAApB,QAAwC,kBAAxC","sourcesContent":["export { default as BlockLockMenuItem } from './menu-item';\nexport { default as BlockLockModal } from './modal';\nexport { default as BlockLockToolbar } from './toolbar';\nexport { default as useBlockLock } from './use-block-lock';\n"]}
|
|
@@ -6,38 +6,24 @@ import { createElement, Fragment } from "@wordpress/element";
|
|
|
6
6
|
import { __ } from '@wordpress/i18n';
|
|
7
7
|
import { useReducer } from '@wordpress/element';
|
|
8
8
|
import { MenuItem } from '@wordpress/components';
|
|
9
|
-
import { useSelect } from '@wordpress/data';
|
|
10
9
|
import { lock, unlock } from '@wordpress/icons';
|
|
11
10
|
/**
|
|
12
11
|
* Internal dependencies
|
|
13
12
|
*/
|
|
14
13
|
|
|
14
|
+
import useBlockLock from './use-block-lock';
|
|
15
15
|
import BlockLockModal from './modal';
|
|
16
|
-
import { store as blockEditorStore } from '../../store';
|
|
17
16
|
export default function BlockLockMenuItem(_ref) {
|
|
18
17
|
let {
|
|
19
18
|
clientId
|
|
20
19
|
} = _ref;
|
|
21
20
|
const {
|
|
22
|
-
|
|
21
|
+
canLock,
|
|
23
22
|
isLocked
|
|
24
|
-
} =
|
|
25
|
-
const {
|
|
26
|
-
canMoveBlock,
|
|
27
|
-
canRemoveBlock,
|
|
28
|
-
canLockBlockType,
|
|
29
|
-
getBlockName,
|
|
30
|
-
getBlockRootClientId
|
|
31
|
-
} = select(blockEditorStore);
|
|
32
|
-
const rootClientId = getBlockRootClientId(clientId);
|
|
33
|
-
return {
|
|
34
|
-
canLockBlock: canLockBlockType(getBlockName(clientId)),
|
|
35
|
-
isLocked: !canMoveBlock(clientId, rootClientId) || !canRemoveBlock(clientId, rootClientId)
|
|
36
|
-
};
|
|
37
|
-
}, [clientId]);
|
|
23
|
+
} = useBlockLock(clientId, true);
|
|
38
24
|
const [isModalOpen, toggleModal] = useReducer(isActive => !isActive, false);
|
|
39
25
|
|
|
40
|
-
if (!
|
|
26
|
+
if (!canLock) {
|
|
41
27
|
return null;
|
|
42
28
|
}
|
|
43
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/menu-item.js"],"names":["__","useReducer","MenuItem","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/menu-item.js"],"names":["__","useReducer","MenuItem","lock","unlock","useBlockLock","BlockLockModal","BlockLockMenuItem","clientId","canLock","isLocked","isModalOpen","toggleModal","isActive","label"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,QAAmB,iBAAnB;AACA,SAASC,UAAT,QAA2B,oBAA3B;AACA,SAASC,QAAT,QAAyB,uBAAzB;AACA,SAASC,IAAT,EAAeC,MAAf,QAA6B,kBAA7B;AAEA;AACA;AACA;;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,OAAOC,cAAP,MAA2B,SAA3B;AAEA,eAAe,SAASC,iBAAT,OAA2C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACzD,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAwBL,YAAY,CAAEG,QAAF,EAAY,IAAZ,CAA1C;AAEA,QAAM,CAAEG,WAAF,EAAeC,WAAf,IAA+BX,UAAU,CAC5CY,QAAF,IAAgB,CAAEA,QAD4B,EAE9C,KAF8C,CAA/C;;AAKA,MAAK,CAAEJ,OAAP,EAAiB;AAChB,WAAO,IAAP;AACA;;AAED,QAAMK,KAAK,GAAGJ,QAAQ,GAAGV,EAAE,CAAE,QAAF,CAAL,GAAoBA,EAAE,CAAE,MAAF,CAA5C;AAEA,SACC,8BACC,cAAC,QAAD;AAAU,IAAA,IAAI,EAAGU,QAAQ,GAAGN,MAAH,GAAYD,IAArC;AAA4C,IAAA,OAAO,EAAGS;AAAtD,KACGE,KADH,CADD,EAIGH,WAAW,IACZ,cAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGH,QAA3B;AAAsC,IAAA,OAAO,EAAGI;AAAhD,IALF,CADD;AAUA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __ } from '@wordpress/i18n';\nimport { useReducer } from '@wordpress/element';\nimport { MenuItem } from '@wordpress/components';\nimport { lock, unlock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport BlockLockModal from './modal';\n\nexport default function BlockLockMenuItem( { clientId } ) {\n\tconst { canLock, isLocked } = useBlockLock( clientId, true );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tconst label = isLocked ? __( 'Unlock' ) : __( 'Lock' );\n\n\treturn (\n\t\t<>\n\t\t\t<MenuItem icon={ isLocked ? unlock : lock } onClick={ toggleModal }>\n\t\t\t\t{ label }\n\t\t\t</MenuItem>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -9,10 +9,12 @@ import { Button, CheckboxControl, Flex, FlexItem, Icon, Modal } from '@wordpress
|
|
|
9
9
|
import { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';
|
|
10
10
|
import { useInstanceId } from '@wordpress/compose';
|
|
11
11
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
12
|
+
import { isReusableBlock, getBlockType } from '@wordpress/blocks';
|
|
12
13
|
/**
|
|
13
14
|
* Internal dependencies
|
|
14
15
|
*/
|
|
15
16
|
|
|
17
|
+
import useBlockLock from './use-block-lock';
|
|
16
18
|
import useBlockDisplayInformation from '../use-block-display-information';
|
|
17
19
|
import { store as blockEditorStore } from '../../store';
|
|
18
20
|
export default function BlockLockModal(_ref) {
|
|
@@ -25,18 +27,19 @@ export default function BlockLockModal(_ref) {
|
|
|
25
27
|
remove: false
|
|
26
28
|
});
|
|
27
29
|
const {
|
|
30
|
+
canEdit,
|
|
28
31
|
canMove,
|
|
29
32
|
canRemove
|
|
33
|
+
} = useBlockLock(clientId, true);
|
|
34
|
+
const {
|
|
35
|
+
isReusable
|
|
30
36
|
} = useSelect(select => {
|
|
31
37
|
const {
|
|
32
|
-
|
|
33
|
-
canRemoveBlock,
|
|
34
|
-
getBlockRootClientId
|
|
38
|
+
getBlockName
|
|
35
39
|
} = select(blockEditorStore);
|
|
36
|
-
const
|
|
40
|
+
const blockName = getBlockName(clientId);
|
|
37
41
|
return {
|
|
38
|
-
|
|
39
|
-
canRemove: canRemoveBlock(clientId, rootClientId)
|
|
42
|
+
isReusable: isReusableBlock(getBlockType(blockName))
|
|
40
43
|
};
|
|
41
44
|
}, [clientId]);
|
|
42
45
|
const {
|
|
@@ -47,11 +50,14 @@ export default function BlockLockModal(_ref) {
|
|
|
47
50
|
useEffect(() => {
|
|
48
51
|
setLock({
|
|
49
52
|
move: !canMove,
|
|
50
|
-
remove: !canRemove
|
|
53
|
+
remove: !canRemove,
|
|
54
|
+
...(isReusable ? {
|
|
55
|
+
edit: !canEdit
|
|
56
|
+
} : {})
|
|
51
57
|
});
|
|
52
|
-
}, [canMove, canRemove]);
|
|
58
|
+
}, [canEdit, canMove, canRemove, isReusable]);
|
|
53
59
|
const isAllChecked = Object.values(lock).every(Boolean);
|
|
54
|
-
const
|
|
60
|
+
const isMixed = Object.values(lock).some(Boolean) && !isAllChecked;
|
|
55
61
|
return createElement(Modal, {
|
|
56
62
|
title: sprintf(
|
|
57
63
|
/* translators: %s: Name of the block. */
|
|
@@ -77,14 +83,27 @@ export default function BlockLockModal(_ref) {
|
|
|
77
83
|
id: instanceId
|
|
78
84
|
}, __('Lock all')),
|
|
79
85
|
checked: isAllChecked,
|
|
80
|
-
indeterminate:
|
|
86
|
+
indeterminate: isMixed,
|
|
81
87
|
onChange: newValue => setLock({
|
|
82
88
|
move: newValue,
|
|
83
|
-
remove: newValue
|
|
89
|
+
remove: newValue,
|
|
90
|
+
...(isReusable ? {
|
|
91
|
+
edit: newValue
|
|
92
|
+
} : {})
|
|
84
93
|
})
|
|
85
94
|
}), createElement("ul", {
|
|
86
95
|
className: "block-editor-block-lock-modal__checklist"
|
|
87
|
-
}, createElement("li", {
|
|
96
|
+
}, isReusable && createElement("li", {
|
|
97
|
+
className: "block-editor-block-lock-modal__checklist-item"
|
|
98
|
+
}, createElement(CheckboxControl, {
|
|
99
|
+
label: createElement(Fragment, null, __('Restrict editing'), createElement(Icon, {
|
|
100
|
+
icon: lock.edit ? lockIcon : unlockIcon
|
|
101
|
+
})),
|
|
102
|
+
checked: !!lock.edit,
|
|
103
|
+
onChange: edit => setLock(prevLock => ({ ...prevLock,
|
|
104
|
+
edit
|
|
105
|
+
}))
|
|
106
|
+
})), createElement("li", {
|
|
88
107
|
className: "block-editor-block-lock-modal__checklist-item"
|
|
89
108
|
}, createElement(CheckboxControl, {
|
|
90
109
|
label: createElement(Fragment, null, __('Disable movement'), createElement(Icon, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/modal.js"],"names":["__","sprintf","useEffect","useState","Button","CheckboxControl","Flex","FlexItem","Icon","Modal","lock","lockIcon","unlock","unlockIcon","useInstanceId","useDispatch","useSelect","useBlockDisplayInformation","store","blockEditorStore","BlockLockModal","clientId","onClose","setLock","move","remove","canMove","canRemove","select","canMoveBlock","canRemoveBlock","getBlockRootClientId","rootClientId","updateBlockAttributes","blockInformation","instanceId","isAllChecked","Object","values","every","Boolean","isIndeterminate","some","title","event","preventDefault","newValue","prevLock"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,SAAT,EAAoBC,QAApB,QAAoC,oBAApC;AACA,SACCC,MADD,EAECC,eAFD,EAGCC,IAHD,EAICC,QAJD,EAKCC,IALD,EAMCC,KAND,QAOO,uBAPP;AAQA,SAASC,IAAI,IAAIC,QAAjB,EAA2BC,MAAM,IAAIC,UAArC,QAAuD,kBAAvD;AACA,SAASC,aAAT,QAA8B,oBAA9B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AAEA;AACA;AACA;;AACA,OAAOC,0BAAP,MAAuC,kCAAvC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,cAAT,OAAiD;AAAA,MAAxB;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAwB;AAC/D,QAAM,CAAEZ,IAAF,EAAQa,OAAR,IAAoBpB,QAAQ,CAAE;AAAEqB,IAAAA,IAAI,EAAE,KAAR;AAAeC,IAAAA,MAAM,EAAE;AAAvB,GAAF,CAAlC;AACA,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA;AAAX,MAAyBX,SAAS,CACrCY,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,cAFK;AAGLC,MAAAA;AAHK,QAIFH,MAAM,CAAET,gBAAF,CAJV;AAKA,UAAMa,YAAY,GAAGD,oBAAoB,CAAEV,QAAF,CAAzC;AAEA,WAAO;AACNK,MAAAA,OAAO,EAAEG,YAAY,CAAER,QAAF,EAAYW,YAAZ,CADf;AAENL,MAAAA,SAAS,EAAEG,cAAc,CAAET,QAAF,EAAYW,YAAZ;AAFnB,KAAP;AAIA,GAbsC,EAcvC,CAAEX,QAAF,CAduC,CAAxC;AAgBA,QAAM;AAAEY,IAAAA;AAAF,MAA4BlB,WAAW,CAAEI,gBAAF,CAA7C;AACA,QAAMe,gBAAgB,GAAGjB,0BAA0B,CAAEI,QAAF,CAAnD;AACA,QAAMc,UAAU,GAAGrB,aAAa,CAC/BM,cAD+B,EAE/B,8CAF+B,CAAhC;AAKAlB,EAAAA,SAAS,CAAE,MAAM;AAChBqB,IAAAA,OAAO,CAAE;AACRC,MAAAA,IAAI,EAAE,CAAEE,OADA;AAERD,MAAAA,MAAM,EAAE,CAAEE;AAFF,KAAF,CAAP;AAIA,GALQ,EAKN,CAAED,OAAF,EAAWC,SAAX,CALM,CAAT;AAOA,QAAMS,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAe5B,IAAf,EAAsB6B,KAAtB,CAA6BC,OAA7B,CAArB;AACA,QAAMC,eAAe,GACpBJ,MAAM,CAACC,MAAP,CAAe5B,IAAf,EAAsBgC,IAAtB,CAA4BF,OAA5B,KAAyC,CAAEJ,YAD5C;AAGA,SACC,cAAC,KAAD;AACC,IAAA,KAAK,EAAGnC,OAAO;AACd;AACAD,IAAAA,EAAE,CAAE,SAAF,CAFY,EAGdkC,gBAAgB,CAACS,KAHH,CADhB;AAMC,IAAA,gBAAgB,EAAC,+BANlB;AAOC,IAAA,UAAU,EAAG3C,EAAE,CAAE,OAAF,CAPhB;AAQC,IAAA,cAAc,EAAGsB;AARlB,KAUC;AACC,IAAA,QAAQ,EAAKsB,KAAF,IAAa;AACvBA,MAAAA,KAAK,CAACC,cAAN;AACAZ,MAAAA,qBAAqB,CAAE,CAAEZ,QAAF,CAAF,EAAgB;AAAEX,QAAAA;AAAF,OAAhB,CAArB;AACAY,MAAAA,OAAO;AACP;AALF,KAOC,yBACGtB,EAAE,CACH,uEADG,CADL,CAPD,EAYC;AACC,IAAA,IAAI,EAAC,OADN;AAEC,uBAAkBmC,UAFnB;AAGC,IAAA,SAAS,EAAC;AAHX,KAKC,cAAC,eAAD;AACC,IAAA,SAAS,EAAC,8CADX;AAEC,IAAA,KAAK,EACJ;AAAM,MAAA,EAAE,EAAGA;AAAX,OAA0BnC,EAAE,CAAE,UAAF,CAA5B,CAHF;AAKC,IAAA,OAAO,EAAGoC,YALX;AAMC,IAAA,aAAa,EAAGK,eANjB;AAOC,IAAA,QAAQ,EAAKK,QAAF,IACVvB,OAAO,CAAE;AACRC,MAAAA,IAAI,EAAEsB,QADE;AAERrB,MAAAA,MAAM,EAAEqB;AAFA,KAAF;AART,IALD,EAmBC;AAAI,IAAA,SAAS,EAAC;AAAd,KACC;AAAI,IAAA,SAAS,EAAC;AAAd,KACC,cAAC,eAAD;AACC,IAAA,KAAK,EACJ,8BACG9C,EAAE,CAAE,kBAAF,CADL,EAEC,cAAC,IAAD;AACC,MAAA,IAAI,EACHU,IAAI,CAACc,IAAL,GACGb,QADH,GAEGE;AAJL,MAFD,CAFF;AAaC,IAAA,OAAO,EAAGH,IAAI,CAACc,IAbhB;AAcC,IAAA,QAAQ,EAAKA,IAAF,IACVD,OAAO,CAAIwB,QAAF,KAAkB,EAC1B,GAAGA,QADuB;AAE1BvB,MAAAA;AAF0B,KAAlB,CAAF;AAfT,IADD,CADD,EAwBC;AAAI,IAAA,SAAS,EAAC;AAAd,KACC,cAAC,eAAD;AACC,IAAA,KAAK,EACJ,8BACGxB,EAAE,CAAE,iBAAF,CADL,EAEC,cAAC,IAAD;AACC,MAAA,IAAI,EACHU,IAAI,CAACe,MAAL,GACGd,QADH,GAEGE;AAJL,MAFD,CAFF;AAaC,IAAA,OAAO,EAAGH,IAAI,CAACe,MAbhB;AAcC,IAAA,QAAQ,EAAKA,MAAF,IACVF,OAAO,CAAIwB,QAAF,KAAkB,EAC1B,GAAGA,QADuB;AAE1BtB,MAAAA;AAF0B,KAAlB,CAAF;AAfT,IADD,CAxBD,CAnBD,CAZD,EAgFC,cAAC,IAAD;AACC,IAAA,SAAS,EAAC,wCADX;AAEC,IAAA,OAAO,EAAC,UAFT;AAGC,IAAA,QAAQ,EAAG;AAHZ,KAKC,cAAC,QAAD,QACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,UAAhB;AAA2B,IAAA,OAAO,EAAGH;AAArC,KACGtB,EAAE,CAAE,QAAF,CADL,CADD,CALD,EAUC,cAAC,QAAD,QACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,SAAhB;AAA0B,IAAA,IAAI,EAAC;AAA/B,KACGA,EAAE,CAAE,OAAF,CADL,CADD,CAVD,CAhFD,CAVD,CADD;AA8GA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useDispatch, useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canMove, canRemove } = useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = getBlockRootClientId( clientId );\n\n\t\t\treturn {\n\t\t\t\tcanMove: canMoveBlock( clientId, rootClientId ),\n\t\t\t\tcanRemove: canRemoveBlock( clientId, rootClientId ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId(\n\t\tBlockLockModal,\n\t\t'block-editor-block-lock-modal__options-title'\n\t);\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t} );\n\t}, [ canMove, canRemove ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isIndeterminate =\n\t\tObject.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t/* translators: %s: Name of the block. */\n\t\t\t\t__( 'Lock %s' ),\n\t\t\t\tblockInformation.title\n\t\t\t) }\n\t\t\toverlayClassName=\"block-editor-block-lock-modal\"\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], { lock } );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-labelledby={ instanceId }\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options\"\n\t\t\t\t>\n\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options-title\"\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<span id={ instanceId }>{ __( 'Lock all' ) }</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ isAllChecked }\n\t\t\t\t\t\tindeterminate={ isIndeterminate }\n\t\t\t\t\t\tonChange={ ( newValue ) =>\n\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\tremove: newValue,\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\t<ul className=\"block-editor-block-lock-modal__checklist\">\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Disable movement' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.move\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\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\tchecked={ lock.move }\n\t\t\t\t\t\t\t\tonChange={ ( move ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tmove,\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</li>\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Prevent removal' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.remove\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\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\tchecked={ lock.remove }\n\t\t\t\t\t\t\t\tonChange={ ( remove ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tremove,\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</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<Flex\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__actions\"\n\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/modal.js"],"names":["__","sprintf","useEffect","useState","Button","CheckboxControl","Flex","FlexItem","Icon","Modal","lock","lockIcon","unlock","unlockIcon","useInstanceId","useDispatch","useSelect","isReusableBlock","getBlockType","useBlockLock","useBlockDisplayInformation","store","blockEditorStore","BlockLockModal","clientId","onClose","setLock","move","remove","canEdit","canMove","canRemove","isReusable","select","getBlockName","blockName","updateBlockAttributes","blockInformation","instanceId","edit","isAllChecked","Object","values","every","Boolean","isMixed","some","title","event","preventDefault","newValue","prevLock"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,SAAT,EAAoBC,QAApB,QAAoC,oBAApC;AACA,SACCC,MADD,EAECC,eAFD,EAGCC,IAHD,EAICC,QAJD,EAKCC,IALD,EAMCC,KAND,QAOO,uBAPP;AAQA,SAASC,IAAI,IAAIC,QAAjB,EAA2BC,MAAM,IAAIC,UAArC,QAAuD,kBAAvD;AACA,SAASC,aAAT,QAA8B,oBAA9B;AACA,SAASC,WAAT,EAAsBC,SAAtB,QAAuC,iBAAvC;AACA,SAASC,eAAT,EAA0BC,YAA1B,QAA8C,mBAA9C;AAEA;AACA;AACA;;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,OAAOC,0BAAP,MAAuC,kCAAvC;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA,eAAe,SAASC,cAAT,OAAiD;AAAA,MAAxB;AAAEC,IAAAA,QAAF;AAAYC,IAAAA;AAAZ,GAAwB;AAC/D,QAAM,CAAEf,IAAF,EAAQgB,OAAR,IAAoBvB,QAAQ,CAAE;AAAEwB,IAAAA,IAAI,EAAE,KAAR;AAAeC,IAAAA,MAAM,EAAE;AAAvB,GAAF,CAAlC;AACA,QAAM;AAAEC,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA;AAApB,MAAkCZ,YAAY,CAAEK,QAAF,EAAY,IAAZ,CAApD;AACA,QAAM;AAAEQ,IAAAA;AAAF,MAAiBhB,SAAS,CAC7BiB,MAAF,IAAc;AACb,UAAM;AAAEC,MAAAA;AAAF,QAAmBD,MAAM,CAAEX,gBAAF,CAA/B;AACA,UAAMa,SAAS,GAAGD,YAAY,CAAEV,QAAF,CAA9B;AAEA,WAAO;AACNQ,MAAAA,UAAU,EAAEf,eAAe,CAAEC,YAAY,CAAEiB,SAAF,CAAd;AADrB,KAAP;AAGA,GAR8B,EAS/B,CAAEX,QAAF,CAT+B,CAAhC;AAWA,QAAM;AAAEY,IAAAA;AAAF,MAA4BrB,WAAW,CAAEO,gBAAF,CAA7C;AACA,QAAMe,gBAAgB,GAAGjB,0BAA0B,CAAEI,QAAF,CAAnD;AACA,QAAMc,UAAU,GAAGxB,aAAa,CAC/BS,cAD+B,EAE/B,8CAF+B,CAAhC;AAKArB,EAAAA,SAAS,CAAE,MAAM;AAChBwB,IAAAA,OAAO,CAAE;AACRC,MAAAA,IAAI,EAAE,CAAEG,OADA;AAERF,MAAAA,MAAM,EAAE,CAAEG,SAFF;AAGR,UAAKC,UAAU,GAAG;AAAEO,QAAAA,IAAI,EAAE,CAAEV;AAAV,OAAH,GAAyB,EAAxC;AAHQ,KAAF,CAAP;AAKA,GANQ,EAMN,CAAEA,OAAF,EAAWC,OAAX,EAAoBC,SAApB,EAA+BC,UAA/B,CANM,CAAT;AAQA,QAAMQ,YAAY,GAAGC,MAAM,CAACC,MAAP,CAAehC,IAAf,EAAsBiC,KAAtB,CAA6BC,OAA7B,CAArB;AACA,QAAMC,OAAO,GAAGJ,MAAM,CAACC,MAAP,CAAehC,IAAf,EAAsBoC,IAAtB,CAA4BF,OAA5B,KAAyC,CAAEJ,YAA3D;AAEA,SACC,cAAC,KAAD;AACC,IAAA,KAAK,EAAGvC,OAAO;AACd;AACAD,IAAAA,EAAE,CAAE,SAAF,CAFY,EAGdqC,gBAAgB,CAACU,KAHH,CADhB;AAMC,IAAA,gBAAgB,EAAC,+BANlB;AAOC,IAAA,UAAU,EAAG/C,EAAE,CAAE,OAAF,CAPhB;AAQC,IAAA,cAAc,EAAGyB;AARlB,KAUC;AACC,IAAA,QAAQ,EAAKuB,KAAF,IAAa;AACvBA,MAAAA,KAAK,CAACC,cAAN;AACAb,MAAAA,qBAAqB,CAAE,CAAEZ,QAAF,CAAF,EAAgB;AAAEd,QAAAA;AAAF,OAAhB,CAArB;AACAe,MAAAA,OAAO;AACP;AALF,KAOC,yBACGzB,EAAE,CACH,uEADG,CADL,CAPD,EAYC;AACC,IAAA,IAAI,EAAC,OADN;AAEC,uBAAkBsC,UAFnB;AAGC,IAAA,SAAS,EAAC;AAHX,KAKC,cAAC,eAAD;AACC,IAAA,SAAS,EAAC,8CADX;AAEC,IAAA,KAAK,EACJ;AAAM,MAAA,EAAE,EAAGA;AAAX,OAA0BtC,EAAE,CAAE,UAAF,CAA5B,CAHF;AAKC,IAAA,OAAO,EAAGwC,YALX;AAMC,IAAA,aAAa,EAAGK,OANjB;AAOC,IAAA,QAAQ,EAAKK,QAAF,IACVxB,OAAO,CAAE;AACRC,MAAAA,IAAI,EAAEuB,QADE;AAERtB,MAAAA,MAAM,EAAEsB,QAFA;AAGR,UAAKlB,UAAU,GAAG;AAAEO,QAAAA,IAAI,EAAEW;AAAR,OAAH,GAAwB,EAAvC;AAHQ,KAAF;AART,IALD,EAoBC;AAAI,IAAA,SAAS,EAAC;AAAd,KACGlB,UAAU,IACX;AAAI,IAAA,SAAS,EAAC;AAAd,KACC,cAAC,eAAD;AACC,IAAA,KAAK,EACJ,8BACGhC,EAAE,CAAE,kBAAF,CADL,EAEC,cAAC,IAAD;AACC,MAAA,IAAI,EACHU,IAAI,CAAC6B,IAAL,GACG5B,QADH,GAEGE;AAJL,MAFD,CAFF;AAaC,IAAA,OAAO,EAAG,CAAC,CAAEH,IAAI,CAAC6B,IAbnB;AAcC,IAAA,QAAQ,EAAKA,IAAF,IACVb,OAAO,CAAIyB,QAAF,KAAkB,EAC1B,GAAGA,QADuB;AAE1BZ,MAAAA;AAF0B,KAAlB,CAAF;AAfT,IADD,CAFF,EA0BC;AAAI,IAAA,SAAS,EAAC;AAAd,KACC,cAAC,eAAD;AACC,IAAA,KAAK,EACJ,8BACGvC,EAAE,CAAE,kBAAF,CADL,EAEC,cAAC,IAAD;AACC,MAAA,IAAI,EACHU,IAAI,CAACiB,IAAL,GACGhB,QADH,GAEGE;AAJL,MAFD,CAFF;AAaC,IAAA,OAAO,EAAGH,IAAI,CAACiB,IAbhB;AAcC,IAAA,QAAQ,EAAKA,IAAF,IACVD,OAAO,CAAIyB,QAAF,KAAkB,EAC1B,GAAGA,QADuB;AAE1BxB,MAAAA;AAF0B,KAAlB,CAAF;AAfT,IADD,CA1BD,EAiDC;AAAI,IAAA,SAAS,EAAC;AAAd,KACC,cAAC,eAAD;AACC,IAAA,KAAK,EACJ,8BACG3B,EAAE,CAAE,iBAAF,CADL,EAEC,cAAC,IAAD;AACC,MAAA,IAAI,EACHU,IAAI,CAACkB,MAAL,GACGjB,QADH,GAEGE;AAJL,MAFD,CAFF;AAaC,IAAA,OAAO,EAAGH,IAAI,CAACkB,MAbhB;AAcC,IAAA,QAAQ,EAAKA,MAAF,IACVF,OAAO,CAAIyB,QAAF,KAAkB,EAC1B,GAAGA,QADuB;AAE1BvB,MAAAA;AAF0B,KAAlB,CAAF;AAfT,IADD,CAjDD,CApBD,CAZD,EA0GC,cAAC,IAAD;AACC,IAAA,SAAS,EAAC,wCADX;AAEC,IAAA,OAAO,EAAC,UAFT;AAGC,IAAA,QAAQ,EAAG;AAHZ,KAKC,cAAC,QAAD,QACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,UAAhB;AAA2B,IAAA,OAAO,EAAGH;AAArC,KACGzB,EAAE,CAAE,QAAF,CADL,CADD,CALD,EAUC,cAAC,QAAD,QACC,cAAC,MAAD;AAAQ,IAAA,OAAO,EAAC,SAAhB;AAA0B,IAAA,IAAI,EAAC;AAA/B,KACGA,EAAE,CAAE,OAAF,CADL,CADD,CAVD,CA1GD,CAVD,CADD;AAwIA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { useEffect, useState } from '@wordpress/element';\nimport {\n\tButton,\n\tCheckboxControl,\n\tFlex,\n\tFlexItem,\n\tIcon,\n\tModal,\n} from '@wordpress/components';\nimport { lock as lockIcon, unlock as unlockIcon } from '@wordpress/icons';\nimport { useInstanceId } from '@wordpress/compose';\nimport { useDispatch, useSelect } from '@wordpress/data';\nimport { isReusableBlock, getBlockType } from '@wordpress/blocks';\n\n/**\n * Internal dependencies\n */\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\nimport { store as blockEditorStore } from '../../store';\n\nexport default function BlockLockModal( { clientId, onClose } ) {\n\tconst [ lock, setLock ] = useState( { move: false, remove: false } );\n\tconst { canEdit, canMove, canRemove } = useBlockLock( clientId, true );\n\tconst { isReusable } = useSelect(\n\t\t( select ) => {\n\t\t\tconst { getBlockName } = select( blockEditorStore );\n\t\t\tconst blockName = getBlockName( clientId );\n\n\t\t\treturn {\n\t\t\t\tisReusable: isReusableBlock( getBlockType( blockName ) ),\n\t\t\t};\n\t\t},\n\t\t[ clientId ]\n\t);\n\tconst { updateBlockAttributes } = useDispatch( blockEditorStore );\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst instanceId = useInstanceId(\n\t\tBlockLockModal,\n\t\t'block-editor-block-lock-modal__options-title'\n\t);\n\n\tuseEffect( () => {\n\t\tsetLock( {\n\t\t\tmove: ! canMove,\n\t\t\tremove: ! canRemove,\n\t\t\t...( isReusable ? { edit: ! canEdit } : {} ),\n\t\t} );\n\t}, [ canEdit, canMove, canRemove, isReusable ] );\n\n\tconst isAllChecked = Object.values( lock ).every( Boolean );\n\tconst isMixed = Object.values( lock ).some( Boolean ) && ! isAllChecked;\n\n\treturn (\n\t\t<Modal\n\t\t\ttitle={ sprintf(\n\t\t\t\t/* translators: %s: Name of the block. */\n\t\t\t\t__( 'Lock %s' ),\n\t\t\t\tblockInformation.title\n\t\t\t) }\n\t\t\toverlayClassName=\"block-editor-block-lock-modal\"\n\t\t\tcloseLabel={ __( 'Close' ) }\n\t\t\tonRequestClose={ onClose }\n\t\t>\n\t\t\t<form\n\t\t\t\tonSubmit={ ( event ) => {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tupdateBlockAttributes( [ clientId ], { lock } );\n\t\t\t\t\tonClose();\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<p>\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'Choose specific attributes to restrict or lock all available options.'\n\t\t\t\t\t) }\n\t\t\t\t</p>\n\t\t\t\t<div\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\taria-labelledby={ instanceId }\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options\"\n\t\t\t\t>\n\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\tclassName=\"block-editor-block-lock-modal__options-title\"\n\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t<span id={ instanceId }>{ __( 'Lock all' ) }</span>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tchecked={ isAllChecked }\n\t\t\t\t\t\tindeterminate={ isMixed }\n\t\t\t\t\t\tonChange={ ( newValue ) =>\n\t\t\t\t\t\t\tsetLock( {\n\t\t\t\t\t\t\t\tmove: newValue,\n\t\t\t\t\t\t\t\tremove: newValue,\n\t\t\t\t\t\t\t\t...( isReusable ? { edit: newValue } : {} ),\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\t<ul className=\"block-editor-block-lock-modal__checklist\">\n\t\t\t\t\t\t{ isReusable && (\n\t\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Restrict editing' ) }\n\t\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\t\tlock.edit\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\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/>\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\tchecked={ !! lock.edit }\n\t\t\t\t\t\t\t\t\tonChange={ ( edit ) =>\n\t\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\t\tedit,\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</li>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Disable movement' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.move\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\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\tchecked={ lock.move }\n\t\t\t\t\t\t\t\tonChange={ ( move ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tmove,\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</li>\n\t\t\t\t\t\t<li className=\"block-editor-block-lock-modal__checklist-item\">\n\t\t\t\t\t\t\t<CheckboxControl\n\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Prevent removal' ) }\n\t\t\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\t\t\tlock.remove\n\t\t\t\t\t\t\t\t\t\t\t\t\t? lockIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\t: unlockIcon\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\tchecked={ lock.remove }\n\t\t\t\t\t\t\t\tonChange={ ( remove ) =>\n\t\t\t\t\t\t\t\t\tsetLock( ( prevLock ) => ( {\n\t\t\t\t\t\t\t\t\t\t...prevLock,\n\t\t\t\t\t\t\t\t\t\tremove,\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</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t<Flex\n\t\t\t\t\tclassName=\"block-editor-block-lock-modal__actions\"\n\t\t\t\t\tjustify=\"flex-end\"\n\t\t\t\t\texpanded={ false }\n\t\t\t\t>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"tertiary\" onClick={ onClose }>\n\t\t\t\t\t\t\t{ __( 'Cancel' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t\t<FlexItem>\n\t\t\t\t\t\t<Button variant=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t{ __( 'Apply' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</FlexItem>\n\t\t\t\t</Flex>\n\t\t\t</form>\n\t\t</Modal>\n\t);\n}\n"]}
|
|
@@ -7,43 +7,31 @@ import { __, sprintf } from '@wordpress/i18n';
|
|
|
7
7
|
import { ToolbarButton, ToolbarGroup } from '@wordpress/components';
|
|
8
8
|
import { useReducer } from '@wordpress/element';
|
|
9
9
|
import { lock } from '@wordpress/icons';
|
|
10
|
-
import { useSelect } from '@wordpress/data';
|
|
11
10
|
/**
|
|
12
11
|
* Internal dependencies
|
|
13
12
|
*/
|
|
14
13
|
|
|
15
14
|
import BlockLockModal from './modal';
|
|
15
|
+
import useBlockLock from './use-block-lock';
|
|
16
16
|
import useBlockDisplayInformation from '../use-block-display-information';
|
|
17
|
-
import { store as blockEditorStore } from '../../store';
|
|
18
17
|
export default function BlockLockToolbar(_ref) {
|
|
19
18
|
let {
|
|
20
19
|
clientId
|
|
21
20
|
} = _ref;
|
|
22
21
|
const blockInformation = useBlockDisplayInformation(clientId);
|
|
23
22
|
const {
|
|
23
|
+
canEdit,
|
|
24
24
|
canMove,
|
|
25
25
|
canRemove,
|
|
26
|
-
|
|
27
|
-
} =
|
|
28
|
-
const {
|
|
29
|
-
canMoveBlock,
|
|
30
|
-
canRemoveBlock,
|
|
31
|
-
canLockBlockType,
|
|
32
|
-
getBlockName
|
|
33
|
-
} = select(blockEditorStore);
|
|
34
|
-
return {
|
|
35
|
-
canMove: canMoveBlock(clientId),
|
|
36
|
-
canRemove: canRemoveBlock(clientId),
|
|
37
|
-
canLockBlock: canLockBlockType(getBlockName(clientId))
|
|
38
|
-
};
|
|
39
|
-
}, [clientId]);
|
|
26
|
+
canLock
|
|
27
|
+
} = useBlockLock(clientId);
|
|
40
28
|
const [isModalOpen, toggleModal] = useReducer(isActive => !isActive, false);
|
|
41
29
|
|
|
42
|
-
if (!
|
|
30
|
+
if (!canLock) {
|
|
43
31
|
return null;
|
|
44
32
|
}
|
|
45
33
|
|
|
46
|
-
if (canMove && canRemove) {
|
|
34
|
+
if (canEdit && canMove && canRemove) {
|
|
47
35
|
return null;
|
|
48
36
|
}
|
|
49
37
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/toolbar.js"],"names":["__","sprintf","ToolbarButton","ToolbarGroup","useReducer","lock","
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/toolbar.js"],"names":["__","sprintf","ToolbarButton","ToolbarGroup","useReducer","lock","BlockLockModal","useBlockLock","useBlockDisplayInformation","BlockLockToolbar","clientId","blockInformation","canEdit","canMove","canRemove","canLock","isModalOpen","toggleModal","isActive","title"],"mappings":";;AAAA;AACA;AACA;AACA,SAASA,EAAT,EAAaC,OAAb,QAA4B,iBAA5B;AACA,SAASC,aAAT,EAAwBC,YAAxB,QAA4C,uBAA5C;AACA,SAASC,UAAT,QAA2B,oBAA3B;AACA,SAASC,IAAT,QAAqB,kBAArB;AAEA;AACA;AACA;;AACA,OAAOC,cAAP,MAA2B,SAA3B;AACA,OAAOC,YAAP,MAAyB,kBAAzB;AACA,OAAOC,0BAAP,MAAuC,kCAAvC;AAEA,eAAe,SAASC,gBAAT,OAA0C;AAAA,MAAf;AAAEC,IAAAA;AAAF,GAAe;AACxD,QAAMC,gBAAgB,GAAGH,0BAA0B,CAAEE,QAAF,CAAnD;AACA,QAAM;AAAEE,IAAAA,OAAF;AAAWC,IAAAA,OAAX;AAAoBC,IAAAA,SAApB;AAA+BC,IAAAA;AAA/B,MAA2CR,YAAY,CAAEG,QAAF,CAA7D;AAEA,QAAM,CAAEM,WAAF,EAAeC,WAAf,IAA+Bb,UAAU,CAC5Cc,QAAF,IAAgB,CAAEA,QAD4B,EAE9C,KAF8C,CAA/C;;AAKA,MAAK,CAAEH,OAAP,EAAiB;AAChB,WAAO,IAAP;AACA;;AAED,MAAKH,OAAO,IAAIC,OAAX,IAAsBC,SAA3B,EAAuC;AACtC,WAAO,IAAP;AACA;;AAED,SACC,8BACC,cAAC,YAAD;AAAc,IAAA,SAAS,EAAC;AAAxB,KACC,cAAC,aAAD;AACC,IAAA,IAAI,EAAGT,IADR;AAEC,IAAA,KAAK,EAAGJ,OAAO;AACd;AACAD,IAAAA,EAAE,CAAE,WAAF,CAFY,EAGdW,gBAAgB,CAACQ,KAHH,CAFhB;AAOC,IAAA,OAAO,EAAGF;AAPX,IADD,CADD,EAYGD,WAAW,IACZ,cAAC,cAAD;AAAgB,IAAA,QAAQ,EAAGN,QAA3B;AAAsC,IAAA,OAAO,EAAGO;AAAhD,IAbF,CADD;AAkBA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { __, sprintf } from '@wordpress/i18n';\nimport { ToolbarButton, ToolbarGroup } from '@wordpress/components';\nimport { useReducer } from '@wordpress/element';\nimport { lock } from '@wordpress/icons';\n\n/**\n * Internal dependencies\n */\nimport BlockLockModal from './modal';\nimport useBlockLock from './use-block-lock';\nimport useBlockDisplayInformation from '../use-block-display-information';\n\nexport default function BlockLockToolbar( { clientId } ) {\n\tconst blockInformation = useBlockDisplayInformation( clientId );\n\tconst { canEdit, canMove, canRemove, canLock } = useBlockLock( clientId );\n\n\tconst [ isModalOpen, toggleModal ] = useReducer(\n\t\t( isActive ) => ! isActive,\n\t\tfalse\n\t);\n\n\tif ( ! canLock ) {\n\t\treturn null;\n\t}\n\n\tif ( canEdit && canMove && canRemove ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<ToolbarGroup className=\"block-editor-block-lock-toolbar\">\n\t\t\t\t<ToolbarButton\n\t\t\t\t\ticon={ lock }\n\t\t\t\t\tlabel={ sprintf(\n\t\t\t\t\t\t/* translators: %s: block name */\n\t\t\t\t\t\t__( 'Unlock %s' ),\n\t\t\t\t\t\tblockInformation.title\n\t\t\t\t\t) }\n\t\t\t\t\tonClick={ toggleModal }\n\t\t\t\t/>\n\t\t\t</ToolbarGroup>\n\t\t\t{ isModalOpen && (\n\t\t\t\t<BlockLockModal clientId={ clientId } onClose={ toggleModal } />\n\t\t\t) }\n\t\t</>\n\t);\n}\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect } from '@wordpress/data';
|
|
5
|
+
/**
|
|
6
|
+
* Internal dependencies
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { store as blockEditorStore } from '../../store';
|
|
10
|
+
/**
|
|
11
|
+
* Return details about the block lock status.
|
|
12
|
+
*
|
|
13
|
+
* @param {string} clientId The block client Id.
|
|
14
|
+
* @param {boolean} checkParent Optional. The status is derived from the parent `templateLock`
|
|
15
|
+
* when the current block's lock state isn't defined.
|
|
16
|
+
*
|
|
17
|
+
* @return {Object} Block lock status
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
export default function useBlockLock(clientId) {
|
|
21
|
+
let checkParent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
22
|
+
return useSelect(select => {
|
|
23
|
+
const {
|
|
24
|
+
canEditBlock,
|
|
25
|
+
canMoveBlock,
|
|
26
|
+
canRemoveBlock,
|
|
27
|
+
canLockBlockType,
|
|
28
|
+
getBlockName,
|
|
29
|
+
getBlockRootClientId
|
|
30
|
+
} = select(blockEditorStore);
|
|
31
|
+
const rootClientId = checkParent ? getBlockRootClientId(clientId) : null;
|
|
32
|
+
const canEdit = canEditBlock(clientId);
|
|
33
|
+
const canMove = canMoveBlock(clientId, rootClientId);
|
|
34
|
+
const canRemove = canRemoveBlock(clientId, rootClientId);
|
|
35
|
+
return {
|
|
36
|
+
canEdit,
|
|
37
|
+
canMove,
|
|
38
|
+
canRemove,
|
|
39
|
+
canLock: canLockBlockType(getBlockName(clientId)),
|
|
40
|
+
isLocked: !canEdit || !canMove || !canRemove
|
|
41
|
+
};
|
|
42
|
+
}, [clientId, checkParent]);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=use-block-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["@wordpress/block-editor/src/components/block-lock/use-block-lock.js"],"names":["useSelect","store","blockEditorStore","useBlockLock","clientId","checkParent","select","canEditBlock","canMoveBlock","canRemoveBlock","canLockBlockType","getBlockName","getBlockRootClientId","rootClientId","canEdit","canMove","canRemove","canLock","isLocked"],"mappings":"AAAA;AACA;AACA;AACA,SAASA,SAAT,QAA0B,iBAA1B;AAEA;AACA;AACA;;AACA,SAASC,KAAK,IAAIC,gBAAlB,QAA0C,aAA1C;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,YAAT,CAAuBC,QAAvB,EAAuD;AAAA,MAAtBC,WAAsB,uEAAR,KAAQ;AACrE,SAAOL,SAAS,CACbM,MAAF,IAAc;AACb,UAAM;AACLC,MAAAA,YADK;AAELC,MAAAA,YAFK;AAGLC,MAAAA,cAHK;AAILC,MAAAA,gBAJK;AAKLC,MAAAA,YALK;AAMLC,MAAAA;AANK,QAOFN,MAAM,CAAEJ,gBAAF,CAPV;AAQA,UAAMW,YAAY,GAAGR,WAAW,GAC7BO,oBAAoB,CAAER,QAAF,CADS,GAE7B,IAFH;AAIA,UAAMU,OAAO,GAAGP,YAAY,CAAEH,QAAF,CAA5B;AACA,UAAMW,OAAO,GAAGP,YAAY,CAAEJ,QAAF,EAAYS,YAAZ,CAA5B;AACA,UAAMG,SAAS,GAAGP,cAAc,CAAEL,QAAF,EAAYS,YAAZ,CAAhC;AAEA,WAAO;AACNC,MAAAA,OADM;AAENC,MAAAA,OAFM;AAGNC,MAAAA,SAHM;AAINC,MAAAA,OAAO,EAAEP,gBAAgB,CAAEC,YAAY,CAAEP,QAAF,CAAd,CAJnB;AAKNc,MAAAA,QAAQ,EAAE,CAAEJ,OAAF,IAAa,CAAEC,OAAf,IAA0B,CAAEC;AALhC,KAAP;AAOA,GAzBc,EA0Bf,CAAEZ,QAAF,EAAYC,WAAZ,CA1Be,CAAhB;AA4BA","sourcesContent":["/**\n * WordPress dependencies\n */\nimport { useSelect } from '@wordpress/data';\n\n/**\n * Internal dependencies\n */\nimport { store as blockEditorStore } from '../../store';\n\n/**\n * Return details about the block lock status.\n *\n * @param {string} clientId The block client Id.\n * @param {boolean} checkParent Optional. The status is derived from the parent `templateLock`\n * when the current block's lock state isn't defined.\n *\n * @return {Object} Block lock status\n */\nexport default function useBlockLock( clientId, checkParent = false ) {\n\treturn useSelect(\n\t\t( select ) => {\n\t\t\tconst {\n\t\t\t\tcanEditBlock,\n\t\t\t\tcanMoveBlock,\n\t\t\t\tcanRemoveBlock,\n\t\t\t\tcanLockBlockType,\n\t\t\t\tgetBlockName,\n\t\t\t\tgetBlockRootClientId,\n\t\t\t} = select( blockEditorStore );\n\t\t\tconst rootClientId = checkParent\n\t\t\t\t? getBlockRootClientId( clientId )\n\t\t\t\t: null;\n\n\t\t\tconst canEdit = canEditBlock( clientId );\n\t\t\tconst canMove = canMoveBlock( clientId, rootClientId );\n\t\t\tconst canRemove = canRemoveBlock( clientId, rootClientId );\n\n\t\t\treturn {\n\t\t\t\tcanEdit,\n\t\t\t\tcanMove,\n\t\t\t\tcanRemove,\n\t\t\t\tcanLock: canLockBlockType( getBlockName( clientId ) ),\n\t\t\t\tisLocked: ! canEdit || ! canMove || ! canRemove,\n\t\t\t};\n\t\t},\n\t\t[ clientId, checkParent ]\n\t);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
-
import { createElement } from "@wordpress/element";
|
|
2
|
+
import { createElement, Fragment } from "@wordpress/element";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* WordPress dependencies
|
|
@@ -8,7 +8,7 @@ import { useDispatch } from '@wordpress/data';
|
|
|
8
8
|
import { cloneBlock } from '@wordpress/blocks';
|
|
9
9
|
import { VisuallyHidden, __unstableComposite as Composite, __unstableUseCompositeState as useCompositeState, __unstableCompositeItem as CompositeItem } from '@wordpress/components';
|
|
10
10
|
import { useState } from '@wordpress/element';
|
|
11
|
-
import { useInstanceId } from '@wordpress/compose';
|
|
11
|
+
import { useInstanceId, useResizeObserver } from '@wordpress/compose';
|
|
12
12
|
import { __ } from '@wordpress/i18n';
|
|
13
13
|
/**
|
|
14
14
|
* Internal dependencies
|
|
@@ -25,7 +25,8 @@ const SetupContent = _ref => {
|
|
|
25
25
|
viewMode,
|
|
26
26
|
activeSlide,
|
|
27
27
|
patterns,
|
|
28
|
-
onBlockPatternSelect
|
|
28
|
+
onBlockPatternSelect,
|
|
29
|
+
height
|
|
29
30
|
} = _ref;
|
|
30
31
|
const composite = useCompositeState();
|
|
31
32
|
const containerClass = 'block-editor-block-pattern-setup__container';
|
|
@@ -33,17 +34,28 @@ const SetupContent = _ref => {
|
|
|
33
34
|
if (viewMode === VIEWMODES.carousel) {
|
|
34
35
|
const slideClass = new Map([[activeSlide, 'active-slide'], [activeSlide - 1, 'previous-slide'], [activeSlide + 1, 'next-slide']]);
|
|
35
36
|
return createElement("div", {
|
|
37
|
+
className: "block-editor-block-pattern-setup__carousel",
|
|
38
|
+
style: {
|
|
39
|
+
height
|
|
40
|
+
}
|
|
41
|
+
}, createElement("div", {
|
|
36
42
|
className: containerClass
|
|
37
43
|
}, createElement("ul", {
|
|
38
44
|
className: "carousel-container"
|
|
39
45
|
}, patterns.map((pattern, index) => createElement(BlockPatternSlide, {
|
|
40
46
|
className: slideClass.get(index) || '',
|
|
41
47
|
key: pattern.name,
|
|
42
|
-
pattern: pattern
|
|
43
|
-
|
|
48
|
+
pattern: pattern,
|
|
49
|
+
minHeight: height
|
|
50
|
+
})))));
|
|
44
51
|
}
|
|
45
52
|
|
|
46
|
-
return createElement(
|
|
53
|
+
return createElement("div", {
|
|
54
|
+
style: {
|
|
55
|
+
height
|
|
56
|
+
},
|
|
57
|
+
className: "block-editor-block-pattern-setup__grid"
|
|
58
|
+
}, createElement(Composite, _extends({}, composite, {
|
|
47
59
|
role: "listbox",
|
|
48
60
|
className: containerClass,
|
|
49
61
|
"aria-label": __('Patterns list')
|
|
@@ -52,7 +64,7 @@ const SetupContent = _ref => {
|
|
|
52
64
|
pattern: pattern,
|
|
53
65
|
onSelect: onBlockPatternSelect,
|
|
54
66
|
composite: composite
|
|
55
|
-
})));
|
|
67
|
+
}))));
|
|
56
68
|
};
|
|
57
69
|
|
|
58
70
|
function BlockPattern(_ref2) {
|
|
@@ -64,7 +76,6 @@ function BlockPattern(_ref2) {
|
|
|
64
76
|
const baseClassName = 'block-editor-block-pattern-setup-list';
|
|
65
77
|
const {
|
|
66
78
|
blocks,
|
|
67
|
-
title,
|
|
68
79
|
description,
|
|
69
80
|
viewportWidth = 700
|
|
70
81
|
} = pattern;
|
|
@@ -82,9 +93,7 @@ function BlockPattern(_ref2) {
|
|
|
82
93
|
}), createElement(BlockPreview, {
|
|
83
94
|
blocks: blocks,
|
|
84
95
|
viewportWidth: viewportWidth
|
|
85
|
-
}), createElement(
|
|
86
|
-
className: `${baseClassName}__item-title`
|
|
87
|
-
}, title)), !!description && createElement(VisuallyHidden, {
|
|
96
|
+
})), !!description && createElement(VisuallyHidden, {
|
|
88
97
|
id: descriptionId
|
|
89
98
|
}, description));
|
|
90
99
|
}
|
|
@@ -92,7 +101,8 @@ function BlockPattern(_ref2) {
|
|
|
92
101
|
function BlockPatternSlide(_ref3) {
|
|
93
102
|
let {
|
|
94
103
|
className,
|
|
95
|
-
pattern
|
|
104
|
+
pattern,
|
|
105
|
+
minHeight
|
|
96
106
|
} = _ref3;
|
|
97
107
|
const {
|
|
98
108
|
blocks,
|
|
@@ -106,7 +116,7 @@ function BlockPatternSlide(_ref3) {
|
|
|
106
116
|
"aria-describedby": description ? descriptionId : undefined
|
|
107
117
|
}, createElement(BlockPreview, {
|
|
108
118
|
blocks: blocks,
|
|
109
|
-
|
|
119
|
+
__experimentalMinHeight: minHeight
|
|
110
120
|
}), !!description && createElement(VisuallyHidden, {
|
|
111
121
|
id: descriptionId
|
|
112
122
|
}, description));
|
|
@@ -127,6 +137,9 @@ const BlockPatternSetup = _ref4 => {
|
|
|
127
137
|
replaceBlock
|
|
128
138
|
} = useDispatch(blockEditorStore);
|
|
129
139
|
const patterns = usePatternsSetup(clientId, blockName, filterPatternsFn);
|
|
140
|
+
const [contentResizeListener, {
|
|
141
|
+
height: contentHeight
|
|
142
|
+
}] = useResizeObserver();
|
|
130
143
|
|
|
131
144
|
if (!(patterns !== null && patterns !== void 0 && patterns.length) || showBlank) {
|
|
132
145
|
return startBlankComponent;
|
|
@@ -138,9 +151,18 @@ const BlockPatternSetup = _ref4 => {
|
|
|
138
151
|
};
|
|
139
152
|
|
|
140
153
|
const onPatternSelectCallback = onBlockPatternSelect || onBlockPatternSelectDefault;
|
|
141
|
-
|
|
154
|
+
const onStartBlank = startBlankComponent ? () => {
|
|
155
|
+
setShowBlank(true);
|
|
156
|
+
} : undefined;
|
|
157
|
+
return createElement(Fragment, null, contentResizeListener, createElement("div", {
|
|
142
158
|
className: `block-editor-block-pattern-setup view-mode-${viewMode}`
|
|
143
|
-
}, createElement(
|
|
159
|
+
}, createElement(SetupContent, {
|
|
160
|
+
viewMode: viewMode,
|
|
161
|
+
activeSlide: activeSlide,
|
|
162
|
+
patterns: patterns,
|
|
163
|
+
onBlockPatternSelect: onPatternSelectCallback,
|
|
164
|
+
height: contentHeight - 2 * 60
|
|
165
|
+
}), createElement(SetupToolbar, {
|
|
144
166
|
viewMode: viewMode,
|
|
145
167
|
setViewMode: setViewMode,
|
|
146
168
|
activeSlide: activeSlide,
|
|
@@ -154,15 +176,8 @@ const BlockPatternSetup = _ref4 => {
|
|
|
154
176
|
onBlockPatternSelect: () => {
|
|
155
177
|
onPatternSelectCallback(patterns[activeSlide].blocks);
|
|
156
178
|
},
|
|
157
|
-
onStartBlank:
|
|
158
|
-
|
|
159
|
-
}
|
|
160
|
-
}), createElement(SetupContent, {
|
|
161
|
-
viewMode: viewMode,
|
|
162
|
-
activeSlide: activeSlide,
|
|
163
|
-
patterns: patterns,
|
|
164
|
-
onBlockPatternSelect: onPatternSelectCallback
|
|
165
|
-
}));
|
|
179
|
+
onStartBlank: onStartBlank
|
|
180
|
+
})));
|
|
166
181
|
};
|
|
167
182
|
|
|
168
183
|
export default BlockPatternSetup;
|