@wordpress/editor 14.38.0 → 14.39.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/document-bar/useEditedSectionDetails.cjs +0 -3
- package/build/components/document-bar/useEditedSectionDetails.cjs.map +2 -2
- package/build/components/editor-interface/index.cjs +33 -9
- package/build/components/editor-interface/index.cjs.map +2 -2
- package/build/components/header/header-skeleton.cjs +100 -0
- package/build/components/header/header-skeleton.cjs.map +7 -0
- package/build/components/header/index.cjs +63 -106
- package/build/components/header/index.cjs.map +3 -3
- package/build/components/media/index.cjs +44 -0
- package/build/components/media/index.cjs.map +7 -0
- package/build/components/media/metadata-panel.cjs +96 -0
- package/build/components/media/metadata-panel.cjs.map +7 -0
- package/build/components/media/preview.cjs +39 -0
- package/build/components/media/preview.cjs.map +7 -0
- package/build/components/more-menu/index.cjs +3 -2
- package/build/components/more-menu/index.cjs.map +2 -2
- package/build/components/post-card-panel/index.cjs +33 -4
- package/build/components/post-card-panel/index.cjs.map +3 -3
- package/build/components/post-content-information/index.cjs +9 -0
- package/build/components/post-content-information/index.cjs.map +2 -2
- package/build/components/post-last-edited-panel/index.cjs +5 -6
- package/build/components/post-last-edited-panel/index.cjs.map +2 -2
- package/build/components/post-last-revision/index.cjs +5 -7
- package/build/components/post-last-revision/index.cjs.map +2 -2
- package/build/components/post-publish-button/label.cjs +6 -1
- package/build/components/post-publish-button/label.cjs.map +2 -2
- package/build/components/post-publish-button/post-publish-button-or-toggle.cjs +8 -3
- package/build/components/post-publish-button/post-publish-button-or-toggle.cjs.map +2 -2
- package/build/components/post-revisions-preview/index.cjs +44 -0
- package/build/components/post-revisions-preview/index.cjs.map +7 -0
- package/build/components/post-revisions-preview/revisions-canvas.cjs +82 -0
- package/build/components/post-revisions-preview/revisions-canvas.cjs.map +7 -0
- package/build/components/post-revisions-preview/revisions-header.cjs +119 -0
- package/build/components/post-revisions-preview/revisions-header.cjs.map +7 -0
- package/build/components/post-revisions-preview/revisions-slider.cjs +110 -0
- package/build/components/post-revisions-preview/revisions-slider.cjs.map +7 -0
- package/build/components/post-saved-state/index.cjs +8 -2
- package/build/components/post-saved-state/index.cjs.map +2 -2
- package/build/components/post-title/index.cjs +5 -4
- package/build/components/post-title/index.cjs.map +2 -2
- package/build/components/provider/index.cjs +19 -0
- package/build/components/provider/index.cjs.map +3 -3
- package/build/components/provider/use-block-editor-settings.cjs +2 -1
- package/build/components/provider/use-block-editor-settings.cjs.map +2 -2
- package/build/components/revision-author-panel/index.cjs +59 -0
- package/build/components/revision-author-panel/index.cjs.map +7 -0
- package/build/components/revision-created-panel/index.cjs +47 -0
- package/build/components/revision-created-panel/index.cjs.map +7 -0
- package/build/components/sidebar/header.cjs +27 -12
- package/build/components/sidebar/header.cjs.map +3 -3
- package/build/components/sidebar/index.cjs +36 -15
- package/build/components/sidebar/index.cjs.map +3 -3
- package/build/components/sidebar/post-summary.cjs +44 -19
- package/build/components/sidebar/post-summary.cjs.map +3 -3
- package/build/components/start-page-options/index.cjs +1 -1
- package/build/components/start-page-options/index.cjs.map +2 -2
- package/build/dataviews/store/private-actions.cjs +47 -26
- package/build/dataviews/store/private-actions.cjs.map +3 -3
- package/build/store/constants.cjs +3 -0
- package/build/store/constants.cjs.map +2 -2
- package/build/store/private-actions.cjs +40 -0
- package/build/store/private-actions.cjs.map +2 -2
- package/build/store/private-selectors.cjs +33 -2
- package/build/store/private-selectors.cjs.map +2 -2
- package/build/store/reducer.cjs +10 -0
- package/build/store/reducer.cjs.map +2 -2
- package/build/store/selectors.cjs +3 -0
- package/build/store/selectors.cjs.map +2 -2
- package/build/store/utils/notice-builder.cjs +4 -0
- package/build/store/utils/notice-builder.cjs.map +2 -2
- package/build-module/components/document-bar/useEditedSectionDetails.mjs +0 -3
- package/build-module/components/document-bar/useEditedSectionDetails.mjs.map +2 -2
- package/build-module/components/editor-interface/index.mjs +33 -9
- package/build-module/components/editor-interface/index.mjs.map +2 -2
- package/build-module/components/header/header-skeleton.mjs +69 -0
- package/build-module/components/header/header-skeleton.mjs.map +7 -0
- package/build-module/components/header/index.mjs +65 -107
- package/build-module/components/header/index.mjs.map +2 -2
- package/build-module/components/media/index.mjs +8 -0
- package/build-module/components/media/index.mjs.map +7 -0
- package/build-module/components/media/metadata-panel.mjs +65 -0
- package/build-module/components/media/metadata-panel.mjs.map +7 -0
- package/build-module/components/media/preview.mjs +21 -0
- package/build-module/components/media/preview.mjs.map +7 -0
- package/build-module/components/more-menu/index.mjs +3 -2
- package/build-module/components/more-menu/index.mjs.map +2 -2
- package/build-module/components/post-card-panel/index.mjs +35 -5
- package/build-module/components/post-card-panel/index.mjs.map +3 -3
- package/build-module/components/post-content-information/index.mjs +9 -0
- package/build-module/components/post-content-information/index.mjs.map +2 -2
- package/build-module/components/post-last-edited-panel/index.mjs +5 -6
- package/build-module/components/post-last-edited-panel/index.mjs.map +2 -2
- package/build-module/components/post-last-revision/index.mjs +6 -8
- package/build-module/components/post-last-revision/index.mjs.map +2 -2
- package/build-module/components/post-publish-button/label.mjs +6 -1
- package/build-module/components/post-publish-button/label.mjs.map +2 -2
- package/build-module/components/post-publish-button/post-publish-button-or-toggle.mjs +8 -3
- package/build-module/components/post-publish-button/post-publish-button-or-toggle.mjs.map +2 -2
- package/build-module/components/post-revisions-preview/index.mjs +8 -0
- package/build-module/components/post-revisions-preview/index.mjs.map +7 -0
- package/build-module/components/post-revisions-preview/revisions-canvas.mjs +54 -0
- package/build-module/components/post-revisions-preview/revisions-canvas.mjs.map +7 -0
- package/build-module/components/post-revisions-preview/revisions-header.mjs +92 -0
- package/build-module/components/post-revisions-preview/revisions-header.mjs.map +7 -0
- package/build-module/components/post-revisions-preview/revisions-slider.mjs +89 -0
- package/build-module/components/post-revisions-preview/revisions-slider.mjs.map +7 -0
- package/build-module/components/post-saved-state/index.mjs +8 -2
- package/build-module/components/post-saved-state/index.mjs.map +2 -2
- package/build-module/components/post-title/index.mjs +5 -4
- package/build-module/components/post-title/index.mjs.map +2 -2
- package/build-module/components/provider/index.mjs +19 -0
- package/build-module/components/provider/index.mjs.map +2 -2
- package/build-module/components/provider/use-block-editor-settings.mjs +2 -1
- package/build-module/components/provider/use-block-editor-settings.mjs.map +2 -2
- package/build-module/components/revision-author-panel/index.mjs +28 -0
- package/build-module/components/revision-author-panel/index.mjs.map +7 -0
- package/build-module/components/revision-created-panel/index.mjs +26 -0
- package/build-module/components/revision-created-panel/index.mjs.map +7 -0
- package/build-module/components/sidebar/header.mjs +22 -7
- package/build-module/components/sidebar/header.mjs.map +2 -2
- package/build-module/components/sidebar/index.mjs +38 -16
- package/build-module/components/sidebar/index.mjs.map +2 -2
- package/build-module/components/sidebar/post-summary.mjs +48 -20
- package/build-module/components/sidebar/post-summary.mjs.map +2 -2
- package/build-module/components/start-page-options/index.mjs +2 -1
- package/build-module/components/start-page-options/index.mjs.map +2 -2
- package/build-module/dataviews/store/private-actions.mjs +59 -27
- package/build-module/dataviews/store/private-actions.mjs.map +2 -2
- package/build-module/store/constants.mjs +2 -0
- package/build-module/store/constants.mjs.map +2 -2
- package/build-module/store/private-actions.mjs +38 -0
- package/build-module/store/private-actions.mjs.map +2 -2
- package/build-module/store/private-selectors.mjs +29 -1
- package/build-module/store/private-selectors.mjs.map +2 -2
- package/build-module/store/reducer.mjs +9 -0
- package/build-module/store/reducer.mjs.map +2 -2
- package/build-module/store/selectors.mjs +4 -0
- package/build-module/store/selectors.mjs.map +2 -2
- package/build-module/store/utils/notice-builder.mjs +4 -0
- package/build-module/store/utils/notice-builder.mjs.map +2 -2
- package/build-style/style-rtl.css +182 -16
- package/build-style/style.css +182 -16
- package/build-types/components/document-bar/useEditedSectionDetails.d.ts.map +1 -1
- package/build-types/components/editor-interface/index.d.ts.map +1 -1
- package/build-types/components/header/header-skeleton.d.ts +17 -0
- package/build-types/components/header/header-skeleton.d.ts.map +1 -0
- package/build-types/components/header/index.d.ts.map +1 -1
- package/build-types/components/media/index.d.ts +3 -0
- package/build-types/components/media/index.d.ts.map +1 -0
- package/build-types/components/media/metadata-panel.d.ts +12 -0
- package/build-types/components/media/metadata-panel.d.ts.map +1 -0
- package/build-types/components/media/preview.d.ts +9 -0
- package/build-types/components/media/preview.d.ts.map +1 -0
- package/build-types/components/more-menu/index.d.ts +3 -1
- package/build-types/components/more-menu/index.d.ts.map +1 -1
- package/build-types/components/post-card-panel/index.d.ts.map +1 -1
- package/build-types/components/post-content-information/index.d.ts.map +1 -1
- package/build-types/components/post-last-edited-panel/index.d.ts.map +1 -1
- package/build-types/components/post-last-revision/index.d.ts.map +1 -1
- package/build-types/components/post-publish-button/label.d.ts.map +1 -1
- package/build-types/components/post-publish-button/post-publish-button-or-toggle.d.ts.map +1 -1
- package/build-types/components/post-revisions-preview/index.d.ts +3 -0
- package/build-types/components/post-revisions-preview/index.d.ts.map +1 -0
- package/build-types/components/post-revisions-preview/revisions-canvas.d.ts +7 -0
- package/build-types/components/post-revisions-preview/revisions-canvas.d.ts.map +1 -0
- package/build-types/components/post-revisions-preview/revisions-header.d.ts +8 -0
- package/build-types/components/post-revisions-preview/revisions-header.d.ts.map +1 -0
- package/build-types/components/post-revisions-preview/revisions-slider.d.ts +8 -0
- package/build-types/components/post-revisions-preview/revisions-slider.d.ts.map +1 -0
- package/build-types/components/post-saved-state/index.d.ts.map +1 -1
- package/build-types/components/provider/index.d.ts.map +1 -1
- package/build-types/components/provider/use-block-editor-settings.d.ts.map +1 -1
- package/build-types/components/revision-author-panel/index.d.ts +2 -0
- package/build-types/components/revision-author-panel/index.d.ts.map +1 -0
- package/build-types/components/revision-created-panel/index.d.ts +2 -0
- package/build-types/components/revision-created-panel/index.d.ts.map +1 -0
- package/build-types/components/sidebar/index.d.ts.map +1 -1
- package/build-types/components/sidebar/post-summary.d.ts.map +1 -1
- package/build-types/components/start-page-options/index.d.ts.map +1 -1
- package/build-types/dataviews/store/private-actions.d.ts +1 -0
- package/build-types/dataviews/store/private-actions.d.ts.map +1 -1
- package/build-types/store/constants.d.ts +1 -0
- package/build-types/store/constants.d.ts.map +1 -1
- package/build-types/store/private-actions.d.ts +13 -0
- package/build-types/store/private-actions.d.ts.map +1 -1
- package/build-types/store/private-selectors.d.ts +25 -0
- package/build-types/store/private-selectors.d.ts.map +1 -1
- package/build-types/store/reducer.d.ts +11 -0
- package/build-types/store/reducer.d.ts.map +1 -1
- package/build-types/store/selectors.d.ts.map +1 -1
- package/build-types/store/utils/notice-builder.d.ts.map +1 -1
- package/package.json +42 -40
- package/src/components/document-bar/useEditedSectionDetails.js +0 -5
- package/src/components/editor-interface/index.js +39 -9
- package/src/components/header/header-skeleton.js +90 -0
- package/src/components/header/index.js +69 -102
- package/src/components/header/style.scss +4 -0
- package/src/components/media/index.js +2 -0
- package/src/components/media/metadata-panel.js +77 -0
- package/src/components/media/preview.js +35 -0
- package/src/components/more-menu/index.js +2 -1
- package/src/components/post-card-panel/index.js +43 -7
- package/src/components/post-content-information/index.js +11 -0
- package/src/components/post-last-edited-panel/index.js +8 -9
- package/src/components/post-last-revision/index.js +7 -8
- package/src/components/post-publish-button/label.js +9 -0
- package/src/components/post-publish-button/post-publish-button-or-toggle.js +13 -5
- package/src/components/post-revisions-preview/index.js +2 -0
- package/src/components/post-revisions-preview/revisions-canvas.js +73 -0
- package/src/components/post-revisions-preview/revisions-header.js +108 -0
- package/src/components/post-revisions-preview/revisions-slider.js +123 -0
- package/src/components/post-revisions-preview/style.scss +22 -0
- package/src/components/post-saved-state/index.js +8 -0
- package/src/components/post-title/index.js +4 -3
- package/src/components/provider/index.js +26 -0
- package/src/components/provider/use-block-editor-settings.js +2 -3
- package/src/components/revision-author-panel/index.js +36 -0
- package/src/components/revision-created-panel/index.js +36 -0
- package/src/components/sidebar/header.js +35 -14
- package/src/components/sidebar/index.js +40 -13
- package/src/components/sidebar/post-summary.js +45 -11
- package/src/components/sidebar/style.scss +7 -0
- package/src/components/start-page-options/index.js +2 -0
- package/src/dataviews/store/private-actions.ts +79 -33
- package/src/store/constants.ts +1 -0
- package/src/store/private-actions.js +70 -0
- package/src/store/private-selectors.js +54 -0
- package/src/store/reducer.js +17 -0
- package/src/store/selectors.js +6 -0
- package/src/store/test/selectors.js +7 -0
- package/src/store/utils/notice-builder.js +9 -0
- package/src/style.scss +2 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { Spinner } from '@wordpress/components';
|
|
5
|
+
import {
|
|
6
|
+
privateApis as blockEditorPrivateApis,
|
|
7
|
+
store as blockEditorStore,
|
|
8
|
+
} from '@wordpress/block-editor';
|
|
9
|
+
import { createBlock, parse } from '@wordpress/blocks';
|
|
10
|
+
import { useSelect } from '@wordpress/data';
|
|
11
|
+
import { useMemo } from '@wordpress/element';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Internal dependencies
|
|
15
|
+
*/
|
|
16
|
+
import { unlock } from '../../lock-unlock';
|
|
17
|
+
import { store as editorStore } from '../../store';
|
|
18
|
+
import VisualEditor from '../visual-editor';
|
|
19
|
+
|
|
20
|
+
const { ExperimentalBlockEditorProvider } = unlock( blockEditorPrivateApis );
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Canvas component that renders a post revision in read-only mode.
|
|
24
|
+
*
|
|
25
|
+
* @return {JSX.Element} The revisions canvas component.
|
|
26
|
+
*/
|
|
27
|
+
export default function RevisionsCanvas() {
|
|
28
|
+
const { revision, postType, blockEditorSettings } = useSelect(
|
|
29
|
+
( select ) => {
|
|
30
|
+
const { getCurrentRevision, getCurrentPostType } = unlock(
|
|
31
|
+
select( editorStore )
|
|
32
|
+
);
|
|
33
|
+
return {
|
|
34
|
+
revision: getCurrentRevision(),
|
|
35
|
+
postType: getCurrentPostType(),
|
|
36
|
+
blockEditorSettings: select( blockEditorStore ).getSettings(),
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
[]
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const blocks = useMemo( () => {
|
|
43
|
+
const parsedBlocks = parse( revision?.content?.raw ?? '' );
|
|
44
|
+
if ( postType === 'wp_navigation' ) {
|
|
45
|
+
return [
|
|
46
|
+
createBlock(
|
|
47
|
+
'core/navigation',
|
|
48
|
+
{ templateLock: false },
|
|
49
|
+
parsedBlocks
|
|
50
|
+
),
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
return parsedBlocks;
|
|
54
|
+
}, [ revision?.content?.raw, postType ] );
|
|
55
|
+
|
|
56
|
+
const settings = useMemo(
|
|
57
|
+
() => ( {
|
|
58
|
+
...blockEditorSettings,
|
|
59
|
+
isPreviewMode: true,
|
|
60
|
+
} ),
|
|
61
|
+
[ blockEditorSettings ]
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
return revision ? (
|
|
65
|
+
<ExperimentalBlockEditorProvider value={ blocks } settings={ settings }>
|
|
66
|
+
<VisualEditor />
|
|
67
|
+
</ExperimentalBlockEditorProvider>
|
|
68
|
+
) : (
|
|
69
|
+
<div className="editor-revisions-canvas__loading">
|
|
70
|
+
<Spinner />
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
5
|
+
import { useViewportMatch } from '@wordpress/compose';
|
|
6
|
+
import { Button } from '@wordpress/components';
|
|
7
|
+
import { store as preferencesStore } from '@wordpress/preferences';
|
|
8
|
+
import { PinnedItems } from '@wordpress/interface';
|
|
9
|
+
import { __ } from '@wordpress/i18n';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
import HeaderSkeleton from '../header/header-skeleton';
|
|
15
|
+
import MoreMenu from '../more-menu';
|
|
16
|
+
import PostPreviewButton from '../post-preview-button';
|
|
17
|
+
import PreviewDropdown from '../preview-dropdown';
|
|
18
|
+
import RevisionsSlider from './revisions-slider';
|
|
19
|
+
import { store as editorStore } from '../../store';
|
|
20
|
+
import {
|
|
21
|
+
TEMPLATE_PART_POST_TYPE,
|
|
22
|
+
PATTERN_POST_TYPE,
|
|
23
|
+
NAVIGATION_POST_TYPE,
|
|
24
|
+
} from '../../store/constants';
|
|
25
|
+
import { unlock } from '../../lock-unlock';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Header component for revisions preview mode.
|
|
29
|
+
*
|
|
30
|
+
* @return {JSX.Element} The revisions header component.
|
|
31
|
+
*/
|
|
32
|
+
function RevisionsHeader() {
|
|
33
|
+
const isWideViewport = useViewportMatch( 'large' );
|
|
34
|
+
const { postType, showIconLabels, currentRevisionId } = useSelect(
|
|
35
|
+
( select ) => {
|
|
36
|
+
const { get: getPreference } = select( preferencesStore );
|
|
37
|
+
const { getCurrentPostType } = select( editorStore );
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
postType: getCurrentPostType(),
|
|
41
|
+
showIconLabels: getPreference( 'core', 'showIconLabels' ),
|
|
42
|
+
currentRevisionId: unlock(
|
|
43
|
+
select( editorStore )
|
|
44
|
+
).getCurrentRevisionId(),
|
|
45
|
+
};
|
|
46
|
+
},
|
|
47
|
+
[]
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const { setCurrentRevisionId, restoreRevision } = unlock(
|
|
51
|
+
useDispatch( editorStore )
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
const disablePreviewOption = [
|
|
55
|
+
NAVIGATION_POST_TYPE,
|
|
56
|
+
TEMPLATE_PART_POST_TYPE,
|
|
57
|
+
PATTERN_POST_TYPE,
|
|
58
|
+
].includes( postType );
|
|
59
|
+
|
|
60
|
+
const canRestore = !! currentRevisionId;
|
|
61
|
+
|
|
62
|
+
const handleRestore = () => {
|
|
63
|
+
if ( currentRevisionId ) {
|
|
64
|
+
restoreRevision( currentRevisionId );
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<HeaderSkeleton
|
|
70
|
+
className="editor-revisions-header"
|
|
71
|
+
center={ <RevisionsSlider /> }
|
|
72
|
+
settings={
|
|
73
|
+
<>
|
|
74
|
+
<PreviewDropdown disabled={ disablePreviewOption } />
|
|
75
|
+
|
|
76
|
+
<PostPreviewButton className="editor-header__post-preview-button" />
|
|
77
|
+
|
|
78
|
+
{ ( isWideViewport || ! showIconLabels ) && (
|
|
79
|
+
<PinnedItems.Slot scope="core" />
|
|
80
|
+
) }
|
|
81
|
+
|
|
82
|
+
<Button
|
|
83
|
+
__next40pxDefaultSize
|
|
84
|
+
variant="secondary"
|
|
85
|
+
size="compact"
|
|
86
|
+
onClick={ () => setCurrentRevisionId( null ) }
|
|
87
|
+
>
|
|
88
|
+
{ __( 'Exit' ) }
|
|
89
|
+
</Button>
|
|
90
|
+
<Button
|
|
91
|
+
__next40pxDefaultSize
|
|
92
|
+
accessibleWhenDisabled
|
|
93
|
+
variant="primary"
|
|
94
|
+
size="compact"
|
|
95
|
+
className="editor-revisions-header__restore-button"
|
|
96
|
+
disabled={ ! canRestore }
|
|
97
|
+
onClick={ handleRestore }
|
|
98
|
+
>
|
|
99
|
+
{ __( 'Restore' ) }
|
|
100
|
+
</Button>
|
|
101
|
+
<MoreMenu disabled />
|
|
102
|
+
</>
|
|
103
|
+
}
|
|
104
|
+
/>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export default RevisionsHeader;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useMemo } from '@wordpress/element';
|
|
5
|
+
import { useSelect, useDispatch } from '@wordpress/data';
|
|
6
|
+
import { RangeControl, Spinner } from '@wordpress/components';
|
|
7
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
8
|
+
import { __ } from '@wordpress/i18n';
|
|
9
|
+
import { dateI18n, getSettings as getDateSettings } from '@wordpress/date';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Internal dependencies
|
|
13
|
+
*/
|
|
14
|
+
import { store as editorStore } from '../../store';
|
|
15
|
+
import { unlock } from '../../lock-unlock';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Slider component for navigating revisions.
|
|
19
|
+
*
|
|
20
|
+
* @return {JSX.Element} The revisions slider component.
|
|
21
|
+
*/
|
|
22
|
+
function RevisionsSlider() {
|
|
23
|
+
const { revisions, isLoading, currentRevisionId } = useSelect(
|
|
24
|
+
( select ) => {
|
|
25
|
+
const { getCurrentPostId, getCurrentPostType } =
|
|
26
|
+
select( editorStore );
|
|
27
|
+
const { getRevisions, isResolving } = select( coreStore );
|
|
28
|
+
|
|
29
|
+
const postId = getCurrentPostId();
|
|
30
|
+
const postType = getCurrentPostType();
|
|
31
|
+
|
|
32
|
+
if ( ! postId || ! postType ) {
|
|
33
|
+
return {};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const query = { per_page: -1, context: 'edit' };
|
|
37
|
+
return {
|
|
38
|
+
revisions: getRevisions( 'postType', postType, postId, query ),
|
|
39
|
+
isLoading: isResolving( 'getRevisions', [
|
|
40
|
+
'postType',
|
|
41
|
+
postType,
|
|
42
|
+
postId,
|
|
43
|
+
query,
|
|
44
|
+
] ),
|
|
45
|
+
currentRevisionId: unlock(
|
|
46
|
+
select( editorStore )
|
|
47
|
+
).getCurrentRevisionId(),
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
[]
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const { setCurrentRevisionId } = unlock( useDispatch( editorStore ) );
|
|
54
|
+
|
|
55
|
+
const sortedRevisions = useMemo( () => {
|
|
56
|
+
return (
|
|
57
|
+
revisions
|
|
58
|
+
?.slice()
|
|
59
|
+
.sort( ( a, b ) => new Date( a.date ) - new Date( b.date ) ) ??
|
|
60
|
+
[]
|
|
61
|
+
);
|
|
62
|
+
}, [ revisions ] );
|
|
63
|
+
|
|
64
|
+
const selectedIndex = sortedRevisions.findIndex(
|
|
65
|
+
( r ) => r.id === currentRevisionId
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
const handleSliderChange = ( index ) => {
|
|
69
|
+
const revision = sortedRevisions[ index ];
|
|
70
|
+
if ( revision ) {
|
|
71
|
+
setCurrentRevisionId( revision.id );
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
// Format date for tooltip.
|
|
76
|
+
const dateSettings = getDateSettings();
|
|
77
|
+
const renderTooltipContent = ( index ) => {
|
|
78
|
+
const revision = sortedRevisions[ index ];
|
|
79
|
+
if ( ! revision ) {
|
|
80
|
+
return index;
|
|
81
|
+
}
|
|
82
|
+
return dateI18n( dateSettings.formats.datetime, revision.date );
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
if ( isLoading ) {
|
|
86
|
+
return <Spinner />;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if ( ! sortedRevisions.length ) {
|
|
90
|
+
return (
|
|
91
|
+
<span className="editor-revisions-header__no-revisions">
|
|
92
|
+
{ __( 'No revisions found.' ) }
|
|
93
|
+
</span>
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if ( sortedRevisions.length === 1 ) {
|
|
98
|
+
return (
|
|
99
|
+
<span className="editor-revisions-header__no-revisions">
|
|
100
|
+
{ __( 'Only one revision found.' ) }
|
|
101
|
+
</span>
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return (
|
|
106
|
+
<RangeControl
|
|
107
|
+
__nextHasNoMarginBottom
|
|
108
|
+
__next40pxDefaultSize
|
|
109
|
+
className="editor-revisions-header__slider"
|
|
110
|
+
hideLabelFromVision
|
|
111
|
+
label={ __( 'Revision' ) }
|
|
112
|
+
max={ sortedRevisions.length - 1 }
|
|
113
|
+
min={ 0 }
|
|
114
|
+
marks
|
|
115
|
+
onChange={ handleSliderChange }
|
|
116
|
+
renderTooltipContent={ renderTooltipContent }
|
|
117
|
+
value={ selectedIndex }
|
|
118
|
+
withInputField={ false }
|
|
119
|
+
/>
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
export default RevisionsSlider;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
@use "@wordpress/base-styles/colors" as *;
|
|
2
|
+
@use "@wordpress/base-styles/variables" as *;
|
|
3
|
+
|
|
4
|
+
.editor-revisions-header__slider {
|
|
5
|
+
width: 100%;
|
|
6
|
+
|
|
7
|
+
.components-range-control__tooltip {
|
|
8
|
+
white-space: nowrap;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.editor-revisions-header__no-revisions {
|
|
13
|
+
color: $gray-700;
|
|
14
|
+
font-size: $default-font-size;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.editor-revisions-canvas__loading {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
height: 100%;
|
|
22
|
+
}
|
|
@@ -23,6 +23,7 @@ import { store as preferencesStore } from '@wordpress/preferences';
|
|
|
23
23
|
*/
|
|
24
24
|
import { STATUS_OPTIONS } from '../../components/post-status';
|
|
25
25
|
import { store as editorStore } from '../../store';
|
|
26
|
+
import { ATTACHMENT_POST_TYPE } from '../../store/constants';
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* Component showing whether the post is saved or not and providing save
|
|
@@ -49,6 +50,7 @@ export default function PostSavedState( { forceIsDirty } ) {
|
|
|
49
50
|
showIconLabels,
|
|
50
51
|
postStatus,
|
|
51
52
|
postStatusHasChanged,
|
|
53
|
+
postType,
|
|
52
54
|
} = useSelect(
|
|
53
55
|
( select ) => {
|
|
54
56
|
const {
|
|
@@ -77,6 +79,7 @@ export default function PostSavedState( { forceIsDirty } ) {
|
|
|
77
79
|
showIconLabels: get( 'core', 'showIconLabels' ),
|
|
78
80
|
postStatus: getEditedPostAttribute( 'status' ),
|
|
79
81
|
postStatusHasChanged: !! getPostEdits()?.status,
|
|
82
|
+
postType: select( editorStore ).getCurrentPostType(),
|
|
80
83
|
};
|
|
81
84
|
},
|
|
82
85
|
[ forceIsDirty ]
|
|
@@ -99,6 +102,11 @@ export default function PostSavedState( { forceIsDirty } ) {
|
|
|
99
102
|
return () => clearTimeout( timeoutId );
|
|
100
103
|
}, [ isSaving ] );
|
|
101
104
|
|
|
105
|
+
// Attachments don't support draft mode, so hide this button.
|
|
106
|
+
if ( postType === ATTACHMENT_POST_TYPE ) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
|
|
102
110
|
// Once the post has been submitted for review this button
|
|
103
111
|
// is not needed for the contributor role.
|
|
104
112
|
if ( ! hasPublishAction && isPending ) {
|
|
@@ -31,16 +31,17 @@ import PostTypeSupportCheck from '../post-type-support-check';
|
|
|
31
31
|
import { unlock } from '../../lock-unlock';
|
|
32
32
|
|
|
33
33
|
const PostTitle = forwardRef( ( _, forwardedRef ) => {
|
|
34
|
-
const { placeholder, isEditingContentOnlySection } = useSelect(
|
|
34
|
+
const { placeholder, isEditingContentOnlySection, isPreview } = useSelect(
|
|
35
35
|
( select ) => {
|
|
36
36
|
const { getSettings, getEditedContentOnlySection } = unlock(
|
|
37
37
|
select( blockEditorStore )
|
|
38
38
|
);
|
|
39
|
-
const { titlePlaceholder } = getSettings();
|
|
39
|
+
const { titlePlaceholder, isPreviewMode } = getSettings();
|
|
40
40
|
|
|
41
41
|
return {
|
|
42
42
|
placeholder: titlePlaceholder,
|
|
43
43
|
isEditingContentOnlySection: !! getEditedContentOnlySection(),
|
|
44
|
+
isPreview: isPreviewMode,
|
|
44
45
|
};
|
|
45
46
|
},
|
|
46
47
|
[]
|
|
@@ -185,7 +186,7 @@ const PostTitle = forwardRef( ( _, forwardedRef ) => {
|
|
|
185
186
|
/* eslint-disable jsx-a11y/heading-has-content, jsx-a11y/no-noninteractive-element-to-interactive-role */
|
|
186
187
|
<h1
|
|
187
188
|
ref={ useMergeRefs( [ richTextRef, focusRef ] ) }
|
|
188
|
-
contentEditable={ ! isEditingContentOnlySection }
|
|
189
|
+
contentEditable={ ! isEditingContentOnlySection && ! isPreview }
|
|
189
190
|
className={ className }
|
|
190
191
|
aria-label={ decodedPlaceholder }
|
|
191
192
|
role="textbox"
|
|
@@ -23,6 +23,7 @@ import { createBlock } from '@wordpress/blocks';
|
|
|
23
23
|
*/
|
|
24
24
|
import withRegistryProvider from './with-registry-provider';
|
|
25
25
|
import { store as editorStore } from '../../store';
|
|
26
|
+
import { ATTACHMENT_POST_TYPE } from '../../store/constants';
|
|
26
27
|
import useBlockEditorSettings from './use-block-editor-settings';
|
|
27
28
|
import { unlock } from '../../lock-unlock';
|
|
28
29
|
import DisableNonPageContentBlocks from './disable-non-page-content-blocks';
|
|
@@ -355,6 +356,31 @@ export const ExperimentalEditorProvider = withRegistryProvider(
|
|
|
355
356
|
return null;
|
|
356
357
|
}
|
|
357
358
|
|
|
359
|
+
const isAttachment =
|
|
360
|
+
post.type === ATTACHMENT_POST_TYPE &&
|
|
361
|
+
window?.__experimentalMediaEditor;
|
|
362
|
+
|
|
363
|
+
// Early return for attachments - no block editor needed
|
|
364
|
+
if ( isAttachment ) {
|
|
365
|
+
return (
|
|
366
|
+
<EntityProvider kind="root" type="site">
|
|
367
|
+
<EntityProvider
|
|
368
|
+
kind="postType"
|
|
369
|
+
type={ post.type }
|
|
370
|
+
id={ post.id }
|
|
371
|
+
>
|
|
372
|
+
{ children }
|
|
373
|
+
{ ! settings.isPreviewMode && (
|
|
374
|
+
<>
|
|
375
|
+
<EditorKeyboardShortcuts />
|
|
376
|
+
<KeyboardShortcutHelpModal />
|
|
377
|
+
</>
|
|
378
|
+
) }
|
|
379
|
+
</EntityProvider>
|
|
380
|
+
</EntityProvider>
|
|
381
|
+
);
|
|
382
|
+
}
|
|
383
|
+
|
|
358
384
|
return (
|
|
359
385
|
<EntityProvider kind="root" type="site">
|
|
360
386
|
<EntityProvider
|
|
@@ -50,6 +50,7 @@ const BLOCK_EDITOR_SETTINGS = [
|
|
|
50
50
|
'maxUploadFileSize',
|
|
51
51
|
'allowedMimeTypes',
|
|
52
52
|
'bodyPlaceholder',
|
|
53
|
+
'canEditCSS',
|
|
53
54
|
'canLockBlocks',
|
|
54
55
|
'canUpdateBlockBindings',
|
|
55
56
|
'capabilities',
|
|
@@ -387,9 +388,7 @@ function useBlockEditorSettings( settings, postType, postId, renderingMode ) {
|
|
|
387
388
|
'wp_block',
|
|
388
389
|
'wp_navigation',
|
|
389
390
|
].includes( postType ),
|
|
390
|
-
...(
|
|
391
|
-
? { [ deviceTypeKey ]: deviceType }
|
|
392
|
-
: {} ),
|
|
391
|
+
...( deviceType ? { [ deviceTypeKey ]: deviceType } : {} ),
|
|
393
392
|
};
|
|
394
393
|
|
|
395
394
|
return blockEditorSettings;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useSelect } from '@wordpress/data';
|
|
5
|
+
import { store as coreStore } from '@wordpress/core-data';
|
|
6
|
+
import { decodeEntities } from '@wordpress/html-entities';
|
|
7
|
+
import { __ } from '@wordpress/i18n';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal dependencies
|
|
11
|
+
*/
|
|
12
|
+
import PostPanelRow from '../post-panel-row';
|
|
13
|
+
import { store as editorStore } from '../../store';
|
|
14
|
+
import { unlock } from '../../lock-unlock';
|
|
15
|
+
|
|
16
|
+
export default function RevisionAuthorPanel() {
|
|
17
|
+
const authorName = useSelect( ( select ) => {
|
|
18
|
+
const { getCurrentRevision } = unlock( select( editorStore ) );
|
|
19
|
+
const revision = getCurrentRevision();
|
|
20
|
+
if ( ! revision?.author ) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const author = select( coreStore ).getUser( revision.author );
|
|
24
|
+
return author?.name;
|
|
25
|
+
}, [] );
|
|
26
|
+
|
|
27
|
+
if ( ! authorName ) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return (
|
|
32
|
+
<PostPanelRow label={ __( 'Author' ) }>
|
|
33
|
+
{ decodeEntities( authorName ) }
|
|
34
|
+
</PostPanelRow>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { __experimentalText as Text } from '@wordpress/components';
|
|
5
|
+
import { useSelect } from '@wordpress/data';
|
|
6
|
+
import { __, sprintf } from '@wordpress/i18n';
|
|
7
|
+
import { humanTimeDiff } from '@wordpress/date';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal dependencies
|
|
11
|
+
*/
|
|
12
|
+
import { store as editorStore } from '../../store';
|
|
13
|
+
import { unlock } from '../../lock-unlock';
|
|
14
|
+
|
|
15
|
+
export default function RevisionCreatedPanel() {
|
|
16
|
+
const date = useSelect( ( select ) => {
|
|
17
|
+
const { getCurrentRevision } = unlock( select( editorStore ) );
|
|
18
|
+
return getCurrentRevision()?.date;
|
|
19
|
+
}, [] );
|
|
20
|
+
|
|
21
|
+
if ( ! date ) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return (
|
|
26
|
+
<div className="editor-post-last-edited-panel">
|
|
27
|
+
<Text>
|
|
28
|
+
{ sprintf(
|
|
29
|
+
// translators: %s: Human-readable time difference, e.g. "2 days ago".
|
|
30
|
+
__( 'Created %s.' ),
|
|
31
|
+
humanTimeDiff( date )
|
|
32
|
+
) }
|
|
33
|
+
</Text>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
}
|
|
@@ -11,21 +11,40 @@ import { decodeEntities } from '@wordpress/html-entities';
|
|
|
11
11
|
* Internal dependencies
|
|
12
12
|
*/
|
|
13
13
|
import { store as editorStore } from '../../store';
|
|
14
|
+
import { ATTACHMENT_POST_TYPE } from '../../store/constants';
|
|
14
15
|
import { unlock } from '../../lock-unlock';
|
|
15
16
|
import { sidebars } from './constants';
|
|
16
17
|
|
|
17
18
|
const { Tabs } = unlock( componentsPrivateApis );
|
|
18
19
|
|
|
19
20
|
const SidebarHeader = ( _, ref ) => {
|
|
20
|
-
const postTypeLabel = useSelect(
|
|
21
|
-
( select ) =>
|
|
21
|
+
const { postTypeLabel, isAttachment, isRevisionsMode } = useSelect(
|
|
22
|
+
( select ) => {
|
|
23
|
+
const { getPostTypeLabel, getCurrentPostType } =
|
|
24
|
+
select( editorStore );
|
|
25
|
+
const { isRevisionsMode: _isRevisionsMode } = unlock(
|
|
26
|
+
select( editorStore )
|
|
27
|
+
);
|
|
28
|
+
return {
|
|
29
|
+
postTypeLabel: getPostTypeLabel(),
|
|
30
|
+
isAttachment:
|
|
31
|
+
getCurrentPostType() === ATTACHMENT_POST_TYPE &&
|
|
32
|
+
window?.__experimentalMediaEditor,
|
|
33
|
+
isRevisionsMode: _isRevisionsMode(),
|
|
34
|
+
};
|
|
35
|
+
},
|
|
22
36
|
[]
|
|
23
37
|
);
|
|
24
38
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
39
|
+
let documentLabel;
|
|
40
|
+
if ( isRevisionsMode ) {
|
|
41
|
+
documentLabel = __( 'Revision' );
|
|
42
|
+
} else if ( postTypeLabel ) {
|
|
43
|
+
documentLabel = decodeEntities( postTypeLabel );
|
|
44
|
+
} else {
|
|
45
|
+
// translators: Default label for the Document sidebar tab, not selected.
|
|
46
|
+
documentLabel = _x( 'Document', 'noun, panel' );
|
|
47
|
+
}
|
|
29
48
|
|
|
30
49
|
return (
|
|
31
50
|
<Tabs.TabList ref={ ref }>
|
|
@@ -36,14 +55,16 @@ const SidebarHeader = ( _, ref ) => {
|
|
|
36
55
|
>
|
|
37
56
|
{ documentLabel }
|
|
38
57
|
</Tabs.Tab>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
58
|
+
{ ! isAttachment && ! isRevisionsMode && (
|
|
59
|
+
<Tabs.Tab
|
|
60
|
+
tabId={ sidebars.block }
|
|
61
|
+
// Used for focus management in the SettingsSidebar component.
|
|
62
|
+
data-tab-id={ sidebars.block }
|
|
63
|
+
>
|
|
64
|
+
{ /* translators: Text label for the Block Settings Sidebar tab. */ }
|
|
65
|
+
{ __( 'Block' ) }
|
|
66
|
+
</Tabs.Tab>
|
|
67
|
+
) }
|
|
47
68
|
</Tabs.TabList>
|
|
48
69
|
);
|
|
49
70
|
};
|