@wordpress/editor 13.2.0 → 13.3.0
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/CHANGELOG.md +2 -0
- package/build/components/error-boundary/index.js +24 -30
- package/build/components/error-boundary/index.js.map +1 -1
- package/build/components/media-categories/index.js +237 -0
- package/build/components/media-categories/index.js.map +1 -0
- package/build/components/page-attributes/parent.js +1 -1
- package/build/components/page-attributes/parent.js.map +1 -1
- package/build/components/post-publish-panel/postpublish.js +1 -0
- package/build/components/post-publish-panel/postpublish.js.map +1 -1
- package/build/components/post-slug/index.js +1 -0
- package/build/components/post-slug/index.js.map +1 -1
- package/build/components/post-taxonomies/hierarchical-term-selector.js +7 -3
- package/build/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
- package/build/components/post-template/index.js +7 -4
- package/build/components/post-template/index.js.map +1 -1
- package/build/components/post-url/index.js +1 -0
- package/build/components/post-url/index.js.map +1 -1
- package/build/components/provider/index.js +26 -8
- package/build/components/provider/index.js.map +1 -1
- package/build/components/provider/index.native.js +21 -14
- package/build/components/provider/index.native.js.map +1 -1
- package/build/components/provider/use-block-editor-settings.js +7 -4
- package/build/components/provider/use-block-editor-settings.js.map +1 -1
- package/build/components/provider/use-block-editor-settings.native.js +1 -2
- package/build/components/provider/use-block-editor-settings.native.js.map +1 -1
- package/build/components/table-of-contents/index.js +3 -1
- package/build/components/table-of-contents/index.js.map +1 -1
- package/build/components/unsaved-changes-warning/index.js +1 -1
- package/build/components/unsaved-changes-warning/index.js.map +1 -1
- package/build/experiments.js +20 -0
- package/build/experiments.js.map +1 -0
- package/build/hooks/default-autocompleters.js +2 -7
- package/build/hooks/default-autocompleters.js.map +1 -1
- package/build/index.js +14 -0
- package/build/index.js.map +1 -1
- package/build/index.native.js +14 -0
- package/build/index.native.js.map +1 -1
- package/build/lockUnlock.js +19 -0
- package/build/lockUnlock.js.map +1 -0
- package/build/store/defaults.js +1 -2
- package/build/store/defaults.js.map +1 -1
- package/build/store/selectors.js +1 -1
- package/build/store/selectors.js.map +1 -1
- package/build/utils/terms.js +9 -5
- package/build/utils/terms.js.map +1 -1
- package/build-module/components/error-boundary/index.js +24 -30
- package/build-module/components/error-boundary/index.js.map +1 -1
- package/build-module/components/media-categories/index.js +225 -0
- package/build-module/components/media-categories/index.js.map +1 -0
- package/build-module/components/page-attributes/parent.js +2 -2
- package/build-module/components/page-attributes/parent.js.map +1 -1
- package/build-module/components/post-publish-panel/postpublish.js +1 -0
- package/build-module/components/post-publish-panel/postpublish.js.map +1 -1
- package/build-module/components/post-slug/index.js +1 -0
- package/build-module/components/post-slug/index.js.map +1 -1
- package/build-module/components/post-taxonomies/hierarchical-term-selector.js +8 -5
- package/build-module/components/post-taxonomies/hierarchical-term-selector.js.map +1 -1
- package/build-module/components/post-template/index.js +8 -5
- package/build-module/components/post-template/index.js.map +1 -1
- package/build-module/components/post-url/index.js +1 -0
- package/build-module/components/post-url/index.js.map +1 -1
- package/build-module/components/provider/index.js +21 -9
- package/build-module/components/provider/index.js.map +1 -1
- package/build-module/components/provider/index.native.js +20 -12
- package/build-module/components/provider/index.native.js.map +1 -1
- package/build-module/components/provider/use-block-editor-settings.js +5 -5
- package/build-module/components/provider/use-block-editor-settings.js.map +1 -1
- package/build-module/components/provider/use-block-editor-settings.native.js +1 -2
- package/build-module/components/provider/use-block-editor-settings.native.js.map +1 -1
- package/build-module/components/table-of-contents/index.js +3 -1
- package/build-module/components/table-of-contents/index.js.map +1 -1
- package/build-module/components/unsaved-changes-warning/index.js +1 -1
- package/build-module/components/unsaved-changes-warning/index.js.map +1 -1
- package/build-module/experiments.js +10 -0
- package/build-module/experiments.js.map +1 -0
- package/build-module/hooks/default-autocompleters.js +2 -6
- package/build-module/hooks/default-autocompleters.js.map +1 -1
- package/build-module/index.js +1 -0
- package/build-module/index.js.map +1 -1
- package/build-module/index.native.js +1 -0
- package/build-module/index.native.js.map +1 -1
- package/build-module/lockUnlock.js +9 -0
- package/build-module/lockUnlock.js.map +1 -0
- package/build-module/store/defaults.js +1 -2
- package/build-module/store/defaults.js.map +1 -1
- package/build-module/store/selectors.js +1 -1
- package/build-module/store/selectors.js.map +1 -1
- package/build-module/utils/terms.js +9 -6
- package/build-module/utils/terms.js.map +1 -1
- package/build-style/style-rtl.css +0 -3
- package/build-style/style.css +0 -3
- package/package.json +30 -29
- package/src/components/autosave-monitor/test/index.js +8 -2
- package/src/components/editor-help/test/index.native.js +5 -5
- package/src/components/error-boundary/index.js +24 -37
- package/src/components/media-categories/index.js +247 -0
- package/src/components/page-attributes/parent.js +2 -2
- package/src/components/page-attributes/test/order.js +4 -14
- package/src/components/post-preview-button/test/index.js +5 -17
- package/src/components/post-publish-button/test/index.js +5 -17
- package/src/components/post-publish-panel/postpublish.js +1 -0
- package/src/components/post-publish-panel/style.scss +1 -5
- package/src/components/post-publish-panel/test/__snapshots__/index.js.snap +2 -18
- package/src/components/post-saved-state/test/index.js +1 -5
- package/src/components/post-slug/index.js +1 -0
- package/src/components/post-taxonomies/hierarchical-term-selector.js +23 -17
- package/src/components/post-template/index.js +3 -4
- package/src/components/post-url/index.js +1 -0
- package/src/components/provider/index.js +120 -91
- package/src/components/provider/index.native.js +26 -17
- package/src/components/provider/use-block-editor-settings.js +60 -49
- package/src/components/provider/use-block-editor-settings.native.js +1 -2
- package/src/components/table-of-contents/index.js +3 -1
- package/src/components/unsaved-changes-warning/index.js +1 -1
- package/src/experiments.js +10 -0
- package/src/hooks/default-autocompleters.js +1 -6
- package/src/index.js +1 -0
- package/src/index.native.js +1 -0
- package/src/lockUnlock.js +9 -0
- package/src/store/defaults.js +0 -1
- package/src/store/selectors.js +1 -1
- package/src/utils/terms.js +8 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { get
|
|
4
|
+
import { get } from 'lodash';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
@@ -14,11 +14,13 @@ import {
|
|
|
14
14
|
TextControl,
|
|
15
15
|
TreeSelect,
|
|
16
16
|
withFilters,
|
|
17
|
+
__experimentalVStack as VStack,
|
|
17
18
|
} from '@wordpress/components';
|
|
18
19
|
import { useDispatch, useSelect } from '@wordpress/data';
|
|
19
20
|
import { useDebounce } from '@wordpress/compose';
|
|
20
21
|
import { store as coreStore } from '@wordpress/core-data';
|
|
21
22
|
import { speak } from '@wordpress/a11y';
|
|
23
|
+
import { decodeEntities } from '@wordpress/html-entities';
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* Internal dependencies
|
|
@@ -364,7 +366,7 @@ export function HierarchicalTermSelector( { slug } ) {
|
|
|
364
366
|
const termId = parseInt( term.id, 10 );
|
|
365
367
|
onChange( termId );
|
|
366
368
|
} }
|
|
367
|
-
label={
|
|
369
|
+
label={ decodeEntities( term.name ) }
|
|
368
370
|
/>
|
|
369
371
|
{ !! term.children.length && (
|
|
370
372
|
<div className="editor-post-taxonomies__hierarchical-terms-subchoices">
|
|
@@ -415,6 +417,7 @@ export function HierarchicalTermSelector( { slug } ) {
|
|
|
415
417
|
<>
|
|
416
418
|
{ showFilter && (
|
|
417
419
|
<TextControl
|
|
420
|
+
__nextHasNoMarginBottom
|
|
418
421
|
className="editor-post-taxonomies__hierarchical-terms-filter"
|
|
419
422
|
label={ filterLabel }
|
|
420
423
|
value={ filterValue }
|
|
@@ -443,22 +446,25 @@ export function HierarchicalTermSelector( { slug } ) {
|
|
|
443
446
|
) }
|
|
444
447
|
{ showForm && (
|
|
445
448
|
<form onSubmit={ onAddTerm }>
|
|
446
|
-
<
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
<TreeSelect
|
|
455
|
-
label={ parentSelectLabel }
|
|
456
|
-
noOptionLabel={ noParentOption }
|
|
457
|
-
onChange={ onChangeFormParent }
|
|
458
|
-
selectedId={ formParent }
|
|
459
|
-
tree={ availableTermsTree }
|
|
449
|
+
<VStack>
|
|
450
|
+
<TextControl
|
|
451
|
+
__nextHasNoMarginBottom
|
|
452
|
+
className="editor-post-taxonomies__hierarchical-terms-input"
|
|
453
|
+
label={ newTermLabel }
|
|
454
|
+
value={ formName }
|
|
455
|
+
onChange={ onChangeFormName }
|
|
456
|
+
required
|
|
460
457
|
/>
|
|
461
|
-
|
|
458
|
+
{ !! availableTerms.length && (
|
|
459
|
+
<TreeSelect
|
|
460
|
+
label={ parentSelectLabel }
|
|
461
|
+
noOptionLabel={ noParentOption }
|
|
462
|
+
onChange={ onChangeFormParent }
|
|
463
|
+
selectedId={ formParent }
|
|
464
|
+
tree={ availableTermsTree }
|
|
465
|
+
/>
|
|
466
|
+
) }
|
|
467
|
+
</VStack>
|
|
462
468
|
<Button
|
|
463
469
|
variant="secondary"
|
|
464
470
|
type="submit"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* External dependencies
|
|
3
3
|
*/
|
|
4
|
-
import { isEmpty
|
|
4
|
+
import { isEmpty } from 'lodash';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* WordPress dependencies
|
|
@@ -52,9 +52,8 @@ export function PostTemplate() {
|
|
|
52
52
|
template: templateSlug || '',
|
|
53
53
|
} );
|
|
54
54
|
} }
|
|
55
|
-
options={ map(
|
|
56
|
-
|
|
57
|
-
( templateName, templateSlug ) => ( {
|
|
55
|
+
options={ Object.entries( availableTemplates ?? {} ).map(
|
|
56
|
+
( [ templateSlug, templateName ] ) => ( {
|
|
58
57
|
value: templateSlug,
|
|
59
58
|
label: templateName,
|
|
60
59
|
} )
|
|
@@ -51,6 +51,7 @@ export default function PostURL( { onClose } ) {
|
|
|
51
51
|
<InspectorPopoverHeader title={ __( 'URL' ) } onClose={ onClose } />
|
|
52
52
|
{ isEditable && (
|
|
53
53
|
<TextControl
|
|
54
|
+
__nextHasNoMarginBottom
|
|
54
55
|
label={ __( 'Permalink' ) }
|
|
55
56
|
value={ forceEmptyField ? '' : postSlug }
|
|
56
57
|
autoComplete="off"
|
|
@@ -8,6 +8,7 @@ import { EntityProvider, useEntityBlockEditor } from '@wordpress/core-data';
|
|
|
8
8
|
import {
|
|
9
9
|
BlockEditorProvider,
|
|
10
10
|
BlockContextProvider,
|
|
11
|
+
experiments as blockEditorExperiments,
|
|
11
12
|
} from '@wordpress/block-editor';
|
|
12
13
|
import { ReusableBlocksMenuItems } from '@wordpress/reusable-blocks';
|
|
13
14
|
import { store as noticesStore } from '@wordpress/notices';
|
|
@@ -18,107 +19,135 @@ import { store as noticesStore } from '@wordpress/notices';
|
|
|
18
19
|
import withRegistryProvider from './with-registry-provider';
|
|
19
20
|
import { store as editorStore } from '../../store';
|
|
20
21
|
import useBlockEditorSettings from './use-block-editor-settings';
|
|
22
|
+
import { unlock } from '../../lockUnlock';
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
children,
|
|
29
|
-
} ) {
|
|
30
|
-
const defaultBlockContext = useMemo( () => {
|
|
31
|
-
if ( post.type === 'wp_template' ) {
|
|
32
|
-
return {};
|
|
33
|
-
}
|
|
34
|
-
return { postId: post.id, postType: post.type };
|
|
35
|
-
}, [ post.id, post.type ] );
|
|
36
|
-
const { selection, isReady } = useSelect( ( select ) => {
|
|
37
|
-
const { getEditorSelection, __unstableIsEditorReady } =
|
|
38
|
-
select( editorStore );
|
|
39
|
-
return {
|
|
40
|
-
isReady: __unstableIsEditorReady(),
|
|
41
|
-
selection: getEditorSelection(),
|
|
42
|
-
};
|
|
43
|
-
}, [] );
|
|
44
|
-
const { id, type } = __unstableTemplate ?? post;
|
|
45
|
-
const [ blocks, onInput, onChange ] = useEntityBlockEditor(
|
|
46
|
-
'postType',
|
|
47
|
-
type,
|
|
48
|
-
{ id }
|
|
49
|
-
);
|
|
50
|
-
const editorSettings = useBlockEditorSettings(
|
|
24
|
+
const { ExperimentalBlockEditorProvider } = unlock( blockEditorExperiments );
|
|
25
|
+
|
|
26
|
+
export const ExperimentalEditorProvider = withRegistryProvider(
|
|
27
|
+
( {
|
|
28
|
+
__unstableTemplate,
|
|
29
|
+
post,
|
|
51
30
|
settings,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
31
|
+
recovery,
|
|
32
|
+
initialEdits,
|
|
33
|
+
children,
|
|
34
|
+
BlockEditorProviderComponent = ExperimentalBlockEditorProvider,
|
|
35
|
+
} ) => {
|
|
36
|
+
const defaultBlockContext = useMemo( () => {
|
|
37
|
+
if ( post.type === 'wp_template' ) {
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
return { postId: post.id, postType: post.type };
|
|
41
|
+
}, [ post.id, post.type ] );
|
|
42
|
+
const { editorSettings, selection, isReady } = useSelect(
|
|
43
|
+
( select ) => {
|
|
44
|
+
const {
|
|
45
|
+
getEditorSettings,
|
|
46
|
+
getEditorSelection,
|
|
47
|
+
__unstableIsEditorReady,
|
|
48
|
+
} = select( editorStore );
|
|
49
|
+
return {
|
|
50
|
+
editorSettings: getEditorSettings(),
|
|
51
|
+
isReady: __unstableIsEditorReady(),
|
|
52
|
+
selection: getEditorSelection(),
|
|
53
|
+
};
|
|
54
|
+
},
|
|
55
|
+
[]
|
|
56
|
+
);
|
|
57
|
+
const { id, type } = __unstableTemplate ?? post;
|
|
58
|
+
const [ blocks, onInput, onChange ] = useEntityBlockEditor(
|
|
59
|
+
'postType',
|
|
60
|
+
type,
|
|
61
|
+
{ id }
|
|
62
|
+
);
|
|
63
|
+
const blockEditorSettings = useBlockEditorSettings(
|
|
64
|
+
editorSettings,
|
|
65
|
+
!! __unstableTemplate
|
|
66
|
+
);
|
|
67
|
+
const {
|
|
68
|
+
updatePostLock,
|
|
69
|
+
setupEditor,
|
|
70
|
+
updateEditorSettings,
|
|
71
|
+
__experimentalTearDownEditor,
|
|
72
|
+
} = useDispatch( editorStore );
|
|
73
|
+
const { createWarningNotice } = useDispatch( noticesStore );
|
|
61
74
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
75
|
+
// Initialize and tear down the editor.
|
|
76
|
+
// Ideally this should be synced on each change and not just something you do once.
|
|
77
|
+
useLayoutEffect( () => {
|
|
78
|
+
// Assume that we don't need to initialize in the case of an error recovery.
|
|
79
|
+
if ( recovery ) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
69
82
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
updatePostLock( settings.postLock );
|
|
84
|
+
setupEditor( post, initialEdits, settings.template );
|
|
85
|
+
if ( settings.autosave ) {
|
|
86
|
+
createWarningNotice(
|
|
87
|
+
__(
|
|
88
|
+
'There is an autosave of this post that is more recent than the version below.'
|
|
89
|
+
),
|
|
90
|
+
{
|
|
91
|
+
id: 'autosave-exists',
|
|
92
|
+
actions: [
|
|
93
|
+
{
|
|
94
|
+
label: __( 'View the autosave' ),
|
|
95
|
+
url: settings.autosave.editLink,
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return () => {
|
|
103
|
+
__experimentalTearDownEditor();
|
|
104
|
+
};
|
|
105
|
+
}, [] );
|
|
88
106
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
107
|
+
// Synchronize the editor settings as they change.
|
|
108
|
+
useEffect( () => {
|
|
109
|
+
updateEditorSettings( settings );
|
|
110
|
+
}, [ settings ] );
|
|
93
111
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}, [ settings ] );
|
|
112
|
+
if ( ! isReady ) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
98
115
|
|
|
99
|
-
|
|
100
|
-
|
|
116
|
+
return (
|
|
117
|
+
<EntityProvider kind="root" type="site">
|
|
118
|
+
<EntityProvider
|
|
119
|
+
kind="postType"
|
|
120
|
+
type={ post.type }
|
|
121
|
+
id={ post.id }
|
|
122
|
+
>
|
|
123
|
+
<BlockContextProvider value={ defaultBlockContext }>
|
|
124
|
+
<BlockEditorProviderComponent
|
|
125
|
+
value={ blocks }
|
|
126
|
+
onChange={ onChange }
|
|
127
|
+
onInput={ onInput }
|
|
128
|
+
selection={ selection }
|
|
129
|
+
settings={ blockEditorSettings }
|
|
130
|
+
useSubRegistry={ false }
|
|
131
|
+
>
|
|
132
|
+
{ children }
|
|
133
|
+
<ReusableBlocksMenuItems />
|
|
134
|
+
</BlockEditorProviderComponent>
|
|
135
|
+
</BlockContextProvider>
|
|
136
|
+
</EntityProvider>
|
|
137
|
+
</EntityProvider>
|
|
138
|
+
);
|
|
101
139
|
}
|
|
140
|
+
);
|
|
102
141
|
|
|
142
|
+
export function EditorProvider( props ) {
|
|
103
143
|
return (
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
onInput={ onInput }
|
|
111
|
-
selection={ selection }
|
|
112
|
-
settings={ editorSettings }
|
|
113
|
-
useSubRegistry={ false }
|
|
114
|
-
>
|
|
115
|
-
{ children }
|
|
116
|
-
<ReusableBlocksMenuItems />
|
|
117
|
-
</BlockEditorProvider>
|
|
118
|
-
</BlockContextProvider>
|
|
119
|
-
</EntityProvider>
|
|
120
|
-
</EntityProvider>
|
|
144
|
+
<ExperimentalEditorProvider
|
|
145
|
+
{ ...props }
|
|
146
|
+
BlockEditorProviderComponent={ BlockEditorProvider }
|
|
147
|
+
>
|
|
148
|
+
{ props.children }
|
|
149
|
+
</ExperimentalEditorProvider>
|
|
121
150
|
);
|
|
122
151
|
}
|
|
123
152
|
|
|
124
|
-
export default
|
|
153
|
+
export default EditorProvider;
|
|
@@ -92,11 +92,16 @@ class NativeEditorProvider extends Component {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
componentDidMount() {
|
|
95
|
-
const {
|
|
96
|
-
|
|
95
|
+
const {
|
|
96
|
+
capabilities,
|
|
97
|
+
locale,
|
|
98
|
+
hostAppNamespace,
|
|
99
|
+
updateEditorSettings,
|
|
100
|
+
updateBlockEditorSettings,
|
|
101
|
+
} = this.props;
|
|
97
102
|
|
|
98
|
-
|
|
99
|
-
|
|
103
|
+
updateEditorSettings( {
|
|
104
|
+
capabilities,
|
|
100
105
|
...this.getThemeColors( this.props ),
|
|
101
106
|
locale,
|
|
102
107
|
hostAppNamespace,
|
|
@@ -152,7 +157,9 @@ class NativeEditorProvider extends Component {
|
|
|
152
157
|
window.wp.galleryBlockV2Enabled =
|
|
153
158
|
galleryWithImageBlocks;
|
|
154
159
|
}
|
|
155
|
-
|
|
160
|
+
updateEditorSettings(
|
|
161
|
+
this.getThemeColors( editorSettings )
|
|
162
|
+
);
|
|
156
163
|
}
|
|
157
164
|
);
|
|
158
165
|
|
|
@@ -177,7 +184,7 @@ class NativeEditorProvider extends Component {
|
|
|
177
184
|
const impressions = { ...NEW_BLOCK_TYPES, ...storedImpressions };
|
|
178
185
|
|
|
179
186
|
// Persist impressions to JavaScript store.
|
|
180
|
-
|
|
187
|
+
updateBlockEditorSettings( { impressions } );
|
|
181
188
|
|
|
182
189
|
// Persist impressions to native store if they do not include latest
|
|
183
190
|
// `NEW_BLOCK_TYPES` configuration.
|
|
@@ -318,7 +325,7 @@ class NativeEditorProvider extends Component {
|
|
|
318
325
|
}
|
|
319
326
|
|
|
320
327
|
updateCapabilitiesAction( capabilities ) {
|
|
321
|
-
this.props.
|
|
328
|
+
this.props.updateEditorSettings( { capabilities } );
|
|
322
329
|
}
|
|
323
330
|
|
|
324
331
|
render() {
|
|
@@ -345,24 +352,21 @@ class NativeEditorProvider extends Component {
|
|
|
345
352
|
}
|
|
346
353
|
}
|
|
347
354
|
|
|
348
|
-
|
|
355
|
+
const ComposedNativeProvider = compose( [
|
|
349
356
|
withSelect( ( select ) => {
|
|
350
357
|
const {
|
|
351
358
|
__unstableIsEditorReady: isEditorReady,
|
|
352
359
|
getEditorBlocks,
|
|
353
360
|
getEditedPostAttribute,
|
|
354
361
|
getEditedPostContent,
|
|
362
|
+
getEditorSettings,
|
|
355
363
|
} = select( editorStore );
|
|
356
364
|
const { getEditorMode } = select( editPostStore );
|
|
357
365
|
|
|
358
|
-
const {
|
|
359
|
-
|
|
360
|
-
getSelectedBlockClientId,
|
|
361
|
-
getGlobalBlockCount,
|
|
362
|
-
getSettings: getBlockEditorSettings,
|
|
363
|
-
} = select( blockEditorStore );
|
|
366
|
+
const { getBlockIndex, getSelectedBlockClientId, getGlobalBlockCount } =
|
|
367
|
+
select( blockEditorStore );
|
|
364
368
|
|
|
365
|
-
const settings =
|
|
369
|
+
const settings = getEditorSettings();
|
|
366
370
|
const defaultEditorColors = settings?.colors ?? [];
|
|
367
371
|
const defaultEditorGradients = settings?.gradients ?? [];
|
|
368
372
|
|
|
@@ -381,7 +385,8 @@ export default compose( [
|
|
|
381
385
|
};
|
|
382
386
|
} ),
|
|
383
387
|
withDispatch( ( dispatch ) => {
|
|
384
|
-
const { editPost, resetEditorBlocks } =
|
|
388
|
+
const { editPost, resetEditorBlocks, updateEditorSettings } =
|
|
389
|
+
dispatch( editorStore );
|
|
385
390
|
const {
|
|
386
391
|
updateSettings,
|
|
387
392
|
clearSelectedBlock,
|
|
@@ -393,7 +398,8 @@ export default compose( [
|
|
|
393
398
|
const { createSuccessNotice } = dispatch( noticesStore );
|
|
394
399
|
|
|
395
400
|
return {
|
|
396
|
-
updateSettings,
|
|
401
|
+
updateBlockEditorSettings: updateSettings,
|
|
402
|
+
updateEditorSettings,
|
|
397
403
|
addEntities,
|
|
398
404
|
clearSelectedBlock,
|
|
399
405
|
insertBlock,
|
|
@@ -414,3 +420,6 @@ export default compose( [
|
|
|
414
420
|
};
|
|
415
421
|
} ),
|
|
416
422
|
] )( NativeEditorProvider );
|
|
423
|
+
|
|
424
|
+
export default ComposedNativeProvider;
|
|
425
|
+
export { ComposedNativeProvider as ExperimentalEditorProvider };
|
|
@@ -7,18 +7,75 @@ import {
|
|
|
7
7
|
store as coreStore,
|
|
8
8
|
__experimentalFetchLinkSuggestions as fetchLinkSuggestions,
|
|
9
9
|
__experimentalFetchUrlData as fetchUrlData,
|
|
10
|
-
__experimentalFetchMedia as fetchMedia,
|
|
11
10
|
} from '@wordpress/core-data';
|
|
12
11
|
import { __ } from '@wordpress/i18n';
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
14
|
* Internal dependencies
|
|
16
15
|
*/
|
|
16
|
+
import inserterMediaCategories from '../media-categories';
|
|
17
17
|
import { mediaUpload } from '../../utils';
|
|
18
18
|
import { store as editorStore } from '../../store';
|
|
19
19
|
|
|
20
20
|
const EMPTY_BLOCKS_LIST = [];
|
|
21
21
|
|
|
22
|
+
const BLOCK_EDITOR_SETTINGS = [
|
|
23
|
+
'__experimentalBlockDirectory',
|
|
24
|
+
'__experimentalBlockInspectorAnimation',
|
|
25
|
+
'__experimentalDiscussionSettings',
|
|
26
|
+
'__experimentalFeatures',
|
|
27
|
+
'__experimentalGlobalStylesBaseStyles',
|
|
28
|
+
'__experimentalPreferredStyleVariations',
|
|
29
|
+
'__experimentalSetIsInserterOpened',
|
|
30
|
+
'__unstableGalleryWithImageBlocks',
|
|
31
|
+
'alignWide',
|
|
32
|
+
'allowedBlockTypes',
|
|
33
|
+
'blockInspectorTabs',
|
|
34
|
+
'allowedMimeTypes',
|
|
35
|
+
'bodyPlaceholder',
|
|
36
|
+
'canLockBlocks',
|
|
37
|
+
'capabilities',
|
|
38
|
+
'clearBlockSelection',
|
|
39
|
+
'codeEditingEnabled',
|
|
40
|
+
'colors',
|
|
41
|
+
'disableCustomColors',
|
|
42
|
+
'disableCustomFontSizes',
|
|
43
|
+
'disableCustomSpacingSizes',
|
|
44
|
+
'disableCustomGradients',
|
|
45
|
+
'disableLayoutStyles',
|
|
46
|
+
'enableCustomLineHeight',
|
|
47
|
+
'enableCustomSpacing',
|
|
48
|
+
'enableCustomUnits',
|
|
49
|
+
'enableOpenverseMediaCategory',
|
|
50
|
+
'focusMode',
|
|
51
|
+
'fontSizes',
|
|
52
|
+
'gradients',
|
|
53
|
+
'generateAnchors',
|
|
54
|
+
'hasFixedToolbar',
|
|
55
|
+
'hasInlineToolbar',
|
|
56
|
+
'isDistractionFree',
|
|
57
|
+
'imageDefaultSize',
|
|
58
|
+
'imageDimensions',
|
|
59
|
+
'imageEditing',
|
|
60
|
+
'imageSizes',
|
|
61
|
+
'isRTL',
|
|
62
|
+
'keepCaretInsideBlock',
|
|
63
|
+
'locale',
|
|
64
|
+
'maxWidth',
|
|
65
|
+
'onUpdateDefaultBlockStyles',
|
|
66
|
+
'postsPerPage',
|
|
67
|
+
'readOnly',
|
|
68
|
+
'styles',
|
|
69
|
+
'template',
|
|
70
|
+
'templateLock',
|
|
71
|
+
'titlePlaceholder',
|
|
72
|
+
'supportsLayout',
|
|
73
|
+
'widgetTypesToHideFromLegacyWidgetBlock',
|
|
74
|
+
'__unstableHasCustomAppender',
|
|
75
|
+
'__unstableIsPreviewMode',
|
|
76
|
+
'__unstableResolvedAssets',
|
|
77
|
+
];
|
|
78
|
+
|
|
22
79
|
/**
|
|
23
80
|
* React hook used to compute the block editor settings to use for the post editor.
|
|
24
81
|
*
|
|
@@ -133,51 +190,7 @@ function useBlockEditorSettings( settings, hasTemplate ) {
|
|
|
133
190
|
() => ( {
|
|
134
191
|
...Object.fromEntries(
|
|
135
192
|
Object.entries( settings ).filter( ( [ key ] ) =>
|
|
136
|
-
|
|
137
|
-
'__experimentalBlockDirectory',
|
|
138
|
-
'__experimentalDiscussionSettings',
|
|
139
|
-
'__experimentalFeatures',
|
|
140
|
-
'__experimentalPreferredStyleVariations',
|
|
141
|
-
'__experimentalSetIsInserterOpened',
|
|
142
|
-
'__unstableGalleryWithImageBlocks',
|
|
143
|
-
'alignWide',
|
|
144
|
-
'allowedBlockTypes',
|
|
145
|
-
'blockInspectorTabs',
|
|
146
|
-
'bodyPlaceholder',
|
|
147
|
-
'canLockBlocks',
|
|
148
|
-
'codeEditingEnabled',
|
|
149
|
-
'colors',
|
|
150
|
-
'disableCustomColors',
|
|
151
|
-
'disableCustomFontSizes',
|
|
152
|
-
'disableCustomSpacingSizes',
|
|
153
|
-
'disableCustomGradients',
|
|
154
|
-
'disableLayoutStyles',
|
|
155
|
-
'enableCustomLineHeight',
|
|
156
|
-
'enableCustomSpacing',
|
|
157
|
-
'enableCustomUnits',
|
|
158
|
-
'focusMode',
|
|
159
|
-
'fontSizes',
|
|
160
|
-
'gradients',
|
|
161
|
-
'generateAnchors',
|
|
162
|
-
'hasFixedToolbar',
|
|
163
|
-
'isDistractionFree',
|
|
164
|
-
'hasInlineToolbar',
|
|
165
|
-
'imageDefaultSize',
|
|
166
|
-
'imageDimensions',
|
|
167
|
-
'imageEditing',
|
|
168
|
-
'imageSizes',
|
|
169
|
-
'isRTL',
|
|
170
|
-
'keepCaretInsideBlock',
|
|
171
|
-
'maxWidth',
|
|
172
|
-
'onUpdateDefaultBlockStyles',
|
|
173
|
-
'styles',
|
|
174
|
-
'template',
|
|
175
|
-
'templateLock',
|
|
176
|
-
'titlePlaceholder',
|
|
177
|
-
'supportsLayout',
|
|
178
|
-
'widgetTypesToHideFromLegacyWidgetBlock',
|
|
179
|
-
'__unstableResolvedAssets',
|
|
180
|
-
].includes( key )
|
|
193
|
+
BLOCK_EDITOR_SETTINGS.includes( key )
|
|
181
194
|
)
|
|
182
195
|
),
|
|
183
196
|
mediaUpload: hasUploadPermissions ? mediaUpload : undefined,
|
|
@@ -186,9 +199,7 @@ function useBlockEditorSettings( settings, hasTemplate ) {
|
|
|
186
199
|
__experimentalBlockPatternCategories: blockPatternCategories,
|
|
187
200
|
__experimentalFetchLinkSuggestions: ( search, searchOptions ) =>
|
|
188
201
|
fetchLinkSuggestions( search, searchOptions, settings ),
|
|
189
|
-
|
|
190
|
-
// like reusable blocks, fetch entities, etc.
|
|
191
|
-
__unstableFetchMedia: fetchMedia,
|
|
202
|
+
inserterMediaCategories,
|
|
192
203
|
__experimentalFetchRichUrlData: fetchUrlData,
|
|
193
204
|
__experimentalCanUserUseUnfilteredHTML: canUseUnfilteredHTML,
|
|
194
205
|
__experimentalUndo: undo,
|
|
@@ -14,10 +14,9 @@ import { store as editorStore } from '../../store';
|
|
|
14
14
|
const EMPTY_BLOCKS_LIST = [];
|
|
15
15
|
|
|
16
16
|
function useNativeBlockEditorSettings( settings, hasTemplate ) {
|
|
17
|
-
const capabilities = settings.capabilities ?? {};
|
|
18
17
|
const editorSettings = useBlockEditorSettings( settings, hasTemplate );
|
|
18
|
+
const supportReusableBlock = settings.capabilities?.reusableBlock === true;
|
|
19
19
|
|
|
20
|
-
const supportReusableBlock = capabilities.reusableBlock === true;
|
|
21
20
|
const { reusableBlocks, isTitleSelected } = useSelect(
|
|
22
21
|
( select ) => {
|
|
23
22
|
return {
|
|
@@ -23,7 +23,9 @@ function TableOfContents(
|
|
|
23
23
|
);
|
|
24
24
|
return (
|
|
25
25
|
<Dropdown
|
|
26
|
-
|
|
26
|
+
popoverProps={ {
|
|
27
|
+
placement: repositionDropdown ? 'right' : 'bottom',
|
|
28
|
+
} }
|
|
27
29
|
className="table-of-contents"
|
|
28
30
|
contentClassName="table-of-contents__popover"
|
|
29
31
|
renderToggle={ ( { isOpen, onToggle } ) => (
|
|
@@ -26,7 +26,7 @@ export default function UnsavedChangesWarning() {
|
|
|
26
26
|
*
|
|
27
27
|
* @param {Event} event `beforeunload` event.
|
|
28
28
|
*
|
|
29
|
-
* @return {
|
|
29
|
+
* @return {string | undefined} Warning prompt message, if unsaved changes exist.
|
|
30
30
|
*/
|
|
31
31
|
const warnIfUnsavedChanges = ( event ) => {
|
|
32
32
|
// We need to call the selector directly in the listener to avoid race
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* External dependencies
|
|
3
|
-
*/
|
|
4
|
-
import { clone } from 'lodash';
|
|
5
|
-
|
|
6
1
|
/**
|
|
7
2
|
* WordPress dependencies
|
|
8
3
|
*/
|
|
@@ -15,7 +10,7 @@ import { userAutocompleter } from '../components';
|
|
|
15
10
|
|
|
16
11
|
function setDefaultCompleters( completers = [] ) {
|
|
17
12
|
// Provide copies so filters may directly modify them.
|
|
18
|
-
completers.push(
|
|
13
|
+
completers.push( { ...userAutocompleter } );
|
|
19
14
|
|
|
20
15
|
return completers;
|
|
21
16
|
}
|
package/src/index.js
CHANGED
package/src/index.native.js
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __dangerousOptInToUnstableAPIsOnlyForCoreModules } from '@wordpress/experiments';
|
|
5
|
+
export const { lock, unlock } =
|
|
6
|
+
__dangerousOptInToUnstableAPIsOnlyForCoreModules(
|
|
7
|
+
'I know using unstable features means my plugin or theme will inevitably break on the next WordPress release.',
|
|
8
|
+
'@wordpress/editor'
|
|
9
|
+
);
|