@wordpress/edit-post 6.5.0 → 6.8.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.
Files changed (169) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/build/components/block-manager/category.js.map +1 -1
  3. package/build/components/block-manager/index.js +12 -4
  4. package/build/components/block-manager/index.js.map +1 -1
  5. package/build/components/device-preview/index.js +26 -7
  6. package/build/components/device-preview/index.js.map +1 -1
  7. package/build/components/editor-initialization/listener-hooks.js.map +1 -1
  8. package/build/components/header/fullscreen-mode-close/index.js.map +1 -1
  9. package/build/components/header/header-toolbar/index.js.map +1 -1
  10. package/build/components/header/index.js.map +1 -1
  11. package/build/components/header/mode-switcher/index.js.map +1 -1
  12. package/build/components/header/post-publish-button-or-toggle.js.map +1 -1
  13. package/build/components/header/template-title/delete-template.js +6 -5
  14. package/build/components/header/template-title/delete-template.js.map +1 -1
  15. package/build/components/header/template-title/edit-template-title.js +6 -4
  16. package/build/components/header/template-title/edit-template-title.js.map +1 -1
  17. package/build/components/header/template-title/index.js.map +1 -1
  18. package/build/components/header/template-title/template-description.js +3 -1
  19. package/build/components/header/template-title/template-description.js.map +1 -1
  20. package/build/components/header/tools-more-menu-group/index.js.map +1 -1
  21. package/build/components/keyboard-shortcuts/index.js.map +1 -1
  22. package/build/components/layout/actions-panel.js.map +1 -1
  23. package/build/components/layout/index.js.map +1 -1
  24. package/build/components/layout/index.native.js.map +1 -1
  25. package/build/components/preferences-modal/index.js +10 -6
  26. package/build/components/preferences-modal/index.js.map +1 -1
  27. package/build/components/preferences-modal/options/enable-custom-fields.js.map +1 -1
  28. package/build/components/preferences-modal/options/enable-panel.js.map +1 -1
  29. package/build/components/preferences-modal/options/enable-publish-sidebar.js.map +1 -1
  30. package/build/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  31. package/build/components/sidebar/discussion-panel/index.js.map +1 -1
  32. package/build/components/sidebar/featured-image/index.js.map +1 -1
  33. package/build/components/sidebar/page-attributes/index.js.map +1 -1
  34. package/build/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  35. package/build/components/sidebar/plugin-sidebar/index.js.map +1 -1
  36. package/build/components/sidebar/post-excerpt/index.js.map +1 -1
  37. package/build/components/sidebar/post-link/index.js.map +1 -1
  38. package/build/components/sidebar/post-schedule/index.js +9 -2
  39. package/build/components/sidebar/post-schedule/index.js.map +1 -1
  40. package/build/components/sidebar/post-status/index.js.map +1 -1
  41. package/build/components/sidebar/template/actions.js +7 -2
  42. package/build/components/sidebar/template/actions.js.map +1 -1
  43. package/build/components/sidebar/template/index.js.map +1 -1
  44. package/build/components/start-page-options/index.js.map +1 -1
  45. package/build/components/text-editor/index.js +11 -24
  46. package/build/components/text-editor/index.js.map +1 -1
  47. package/build/components/visual-editor/block-inspector-button.js +3 -7
  48. package/build/components/visual-editor/block-inspector-button.js.map +1 -1
  49. package/build/editor.js.map +1 -1
  50. package/build/editor.native.js +8 -0
  51. package/build/editor.native.js.map +1 -1
  52. package/build/index.js +7 -1
  53. package/build/index.js.map +1 -1
  54. package/build/plugins/copy-content-menu-item/index.js +1 -1
  55. package/build/plugins/copy-content-menu-item/index.js.map +1 -1
  56. package/build/store/actions.js.map +1 -1
  57. package/build/store/selectors.js +4 -4
  58. package/build/store/selectors.js.map +1 -1
  59. package/build-module/components/block-manager/category.js.map +1 -1
  60. package/build-module/components/block-manager/index.js +13 -5
  61. package/build-module/components/block-manager/index.js.map +1 -1
  62. package/build-module/components/device-preview/index.js +24 -7
  63. package/build-module/components/device-preview/index.js.map +1 -1
  64. package/build-module/components/editor-initialization/listener-hooks.js.map +1 -1
  65. package/build-module/components/header/fullscreen-mode-close/index.js.map +1 -1
  66. package/build-module/components/header/header-toolbar/index.js.map +1 -1
  67. package/build-module/components/header/index.js.map +1 -1
  68. package/build-module/components/header/mode-switcher/index.js.map +1 -1
  69. package/build-module/components/header/post-publish-button-or-toggle.js.map +1 -1
  70. package/build-module/components/header/template-title/delete-template.js +6 -5
  71. package/build-module/components/header/template-title/delete-template.js.map +1 -1
  72. package/build-module/components/header/template-title/edit-template-title.js +6 -4
  73. package/build-module/components/header/template-title/edit-template-title.js.map +1 -1
  74. package/build-module/components/header/template-title/index.js.map +1 -1
  75. package/build-module/components/header/template-title/template-description.js +4 -2
  76. package/build-module/components/header/template-title/template-description.js.map +1 -1
  77. package/build-module/components/header/tools-more-menu-group/index.js.map +1 -1
  78. package/build-module/components/keyboard-shortcuts/index.js.map +1 -1
  79. package/build-module/components/layout/actions-panel.js.map +1 -1
  80. package/build-module/components/layout/index.js.map +1 -1
  81. package/build-module/components/layout/index.native.js.map +1 -1
  82. package/build-module/components/preferences-modal/index.js +10 -6
  83. package/build-module/components/preferences-modal/index.js.map +1 -1
  84. package/build-module/components/preferences-modal/options/enable-custom-fields.js.map +1 -1
  85. package/build-module/components/preferences-modal/options/enable-panel.js.map +1 -1
  86. package/build-module/components/preferences-modal/options/enable-publish-sidebar.js.map +1 -1
  87. package/build-module/components/secondary-sidebar/inserter-sidebar.js.map +1 -1
  88. package/build-module/components/sidebar/discussion-panel/index.js.map +1 -1
  89. package/build-module/components/sidebar/featured-image/index.js.map +1 -1
  90. package/build-module/components/sidebar/page-attributes/index.js.map +1 -1
  91. package/build-module/components/sidebar/plugin-document-setting-panel/index.js.map +1 -1
  92. package/build-module/components/sidebar/plugin-sidebar/index.js.map +1 -1
  93. package/build-module/components/sidebar/post-excerpt/index.js.map +1 -1
  94. package/build-module/components/sidebar/post-link/index.js.map +1 -1
  95. package/build-module/components/sidebar/post-schedule/index.js +9 -2
  96. package/build-module/components/sidebar/post-schedule/index.js.map +1 -1
  97. package/build-module/components/sidebar/post-status/index.js.map +1 -1
  98. package/build-module/components/sidebar/template/actions.js +8 -3
  99. package/build-module/components/sidebar/template/actions.js.map +1 -1
  100. package/build-module/components/sidebar/template/index.js.map +1 -1
  101. package/build-module/components/start-page-options/index.js.map +1 -1
  102. package/build-module/components/text-editor/index.js +11 -22
  103. package/build-module/components/text-editor/index.js.map +1 -1
  104. package/build-module/components/visual-editor/block-inspector-button.js +3 -5
  105. package/build-module/components/visual-editor/block-inspector-button.js.map +1 -1
  106. package/build-module/editor.js.map +1 -1
  107. package/build-module/editor.native.js +8 -0
  108. package/build-module/editor.native.js.map +1 -1
  109. package/build-module/index.js +7 -1
  110. package/build-module/index.js.map +1 -1
  111. package/build-module/plugins/copy-content-menu-item/index.js +1 -1
  112. package/build-module/plugins/copy-content-menu-item/index.js.map +1 -1
  113. package/build-module/store/actions.js.map +1 -1
  114. package/build-module/store/selectors.js +4 -4
  115. package/build-module/store/selectors.js.map +1 -1
  116. package/build-style/style-rtl.css +32 -18
  117. package/build-style/style.css +32 -18
  118. package/package.json +28 -28
  119. package/src/components/block-manager/category.js +2 -2
  120. package/src/components/block-manager/index.js +15 -4
  121. package/src/components/device-preview/index.js +40 -29
  122. package/src/components/editor-initialization/listener-hooks.js +2 -3
  123. package/src/components/header/fullscreen-mode-close/index.js +2 -3
  124. package/src/components/header/header-toolbar/index.js +6 -11
  125. package/src/components/header/index.js +6 -9
  126. package/src/components/header/mode-switcher/index.js +4 -4
  127. package/src/components/header/post-publish-button-or-toggle.js +4 -6
  128. package/src/components/header/style.scss +2 -4
  129. package/src/components/header/template-title/delete-template.js +13 -7
  130. package/src/components/header/template-title/edit-template-title.js +29 -26
  131. package/src/components/header/template-title/index.js +2 -3
  132. package/src/components/header/template-title/style.scss +26 -5
  133. package/src/components/header/template-title/template-description.js +3 -2
  134. package/src/components/header/tools-more-menu-group/index.js +2 -3
  135. package/src/components/keyboard-shortcut-help-modal/test/index.js +2 -1
  136. package/src/components/keyboard-shortcuts/index.js +4 -8
  137. package/src/components/layout/actions-panel.js +6 -9
  138. package/src/components/layout/index.js +13 -21
  139. package/src/components/layout/index.native.js +4 -5
  140. package/src/components/preferences-modal/index.js +18 -9
  141. package/src/components/preferences-modal/options/enable-custom-fields.js +2 -2
  142. package/src/components/preferences-modal/options/enable-panel.js +2 -3
  143. package/src/components/preferences-modal/options/enable-publish-sidebar.js +2 -3
  144. package/src/components/preferences-modal/test/__snapshots__/index.js.snap +24 -14
  145. package/src/components/secondary-sidebar/inserter-sidebar.js +2 -3
  146. package/src/components/sidebar/discussion-panel/index.js +2 -3
  147. package/src/components/sidebar/featured-image/index.js +2 -3
  148. package/src/components/sidebar/page-attributes/index.js +2 -3
  149. package/src/components/sidebar/plugin-document-setting-panel/index.js +2 -3
  150. package/src/components/sidebar/plugin-sidebar/index.js +2 -3
  151. package/src/components/sidebar/post-excerpt/index.js +2 -3
  152. package/src/components/sidebar/post-link/index.js +2 -3
  153. package/src/components/sidebar/post-schedule/index.js +4 -2
  154. package/src/components/sidebar/post-schedule/style.scss +3 -5
  155. package/src/components/sidebar/post-status/index.js +2 -3
  156. package/src/components/sidebar/post-visibility/style.scss +2 -1
  157. package/src/components/sidebar/settings-header/style.scss +1 -1
  158. package/src/components/sidebar/template/actions.js +11 -8
  159. package/src/components/sidebar/template/index.js +2 -6
  160. package/src/components/start-page-options/index.js +8 -12
  161. package/src/components/text-editor/index.js +9 -19
  162. package/src/components/visual-editor/block-inspector-button.js +4 -8
  163. package/src/components/visual-editor/test/index.native.js +93 -0
  164. package/src/editor.js +6 -8
  165. package/src/editor.native.js +11 -4
  166. package/src/index.js +7 -0
  167. package/src/plugins/copy-content-menu-item/index.js +1 -1
  168. package/src/store/actions.js +322 -295
  169. package/src/store/selectors.js +20 -20
@@ -19,13 +19,11 @@ import { store as editPostStore } from '../../store';
19
19
 
20
20
  function PatternSelection( { onChoosePattern } ) {
21
21
  const { blockPatterns } = useSelect( ( select ) => {
22
- const { __experimentalGetPatternsByBlockTypes } = select(
23
- blockEditorStore
24
- );
22
+ const { __experimentalGetPatternsByBlockTypes } =
23
+ select( blockEditorStore );
25
24
  return {
26
- blockPatterns: __experimentalGetPatternsByBlockTypes(
27
- 'core/post-content'
28
- ),
25
+ blockPatterns:
26
+ __experimentalGetPatternsByBlockTypes( 'core/post-content' ),
29
27
  };
30
28
  }, [] );
31
29
  const shownBlockPatterns = useAsyncList( blockPatterns );
@@ -57,17 +55,15 @@ export default function StartPageOptions() {
57
55
  if ( modalState !== START_PAGE_MODAL_STATES.INITIAL ) {
58
56
  return false;
59
57
  }
60
- const { __experimentalGetPatternsByBlockTypes } = select(
61
- blockEditorStore
62
- );
58
+ const { __experimentalGetPatternsByBlockTypes } =
59
+ select( blockEditorStore );
63
60
  const {
64
61
  getCurrentPostType,
65
62
  getEditedPostContent,
66
63
  isEditedPostSaveable,
67
64
  } = select( editorStore );
68
- const { isEditingTemplate, isFeatureActive } = select(
69
- editPostStore
70
- );
65
+ const { isEditingTemplate, isFeatureActive } =
66
+ select( editPostStore );
71
67
  return (
72
68
  getCurrentPostType() === 'page' &&
73
69
  ! isEditedPostSaveable() &&
@@ -8,30 +8,34 @@ import {
8
8
  store as editorStore,
9
9
  } from '@wordpress/editor';
10
10
  import { Button } from '@wordpress/components';
11
- import { withDispatch, withSelect } from '@wordpress/data';
11
+ import { useDispatch, useSelect } from '@wordpress/data';
12
12
  import { __ } from '@wordpress/i18n';
13
13
  import { displayShortcut } from '@wordpress/keycodes';
14
- import { compose } from '@wordpress/compose';
15
14
 
16
15
  /**
17
16
  * Internal dependencies
18
17
  */
19
18
  import { store as editPostStore } from '../../store';
20
19
 
21
- function TextEditor( { onExit, isRichEditingEnabled } ) {
20
+ export default function TextEditor() {
21
+ const isRichEditingEnabled = useSelect( ( select ) => {
22
+ return select( editorStore ).getEditorSettings().richEditingEnabled;
23
+ }, [] );
24
+ const { switchEditorMode } = useDispatch( editPostStore );
25
+
22
26
  return (
23
27
  <div className="edit-post-text-editor">
28
+ <TextEditorGlobalKeyboardShortcuts />
24
29
  { isRichEditingEnabled && (
25
30
  <div className="edit-post-text-editor__toolbar">
26
31
  <h2>{ __( 'Editing code' ) }</h2>
27
32
  <Button
28
33
  variant="tertiary"
29
- onClick={ onExit }
34
+ onClick={ () => switchEditorMode( 'visual' ) }
30
35
  shortcut={ displayShortcut.secondary( 'm' ) }
31
36
  >
32
37
  { __( 'Exit code editor' ) }
33
38
  </Button>
34
- <TextEditorGlobalKeyboardShortcuts />
35
39
  </div>
36
40
  ) }
37
41
  <div className="edit-post-text-editor__body">
@@ -41,17 +45,3 @@ function TextEditor( { onExit, isRichEditingEnabled } ) {
41
45
  </div>
42
46
  );
43
47
  }
44
-
45
- export default compose(
46
- withSelect( ( select ) => ( {
47
- isRichEditingEnabled: select( editorStore ).getEditorSettings()
48
- .richEditingEnabled,
49
- } ) ),
50
- withDispatch( ( dispatch ) => {
51
- return {
52
- onExit() {
53
- dispatch( editPostStore ).switchEditorMode( 'visual' );
54
- },
55
- };
56
- } )
57
- )( TextEditor );
@@ -1,8 +1,3 @@
1
- /**
2
- * External dependencies
3
- */
4
- import { noop } from 'lodash';
5
-
6
1
  /**
7
2
  * WordPress dependencies
8
3
  */
@@ -17,6 +12,8 @@ import { store as keyboardShortcutsStore } from '@wordpress/keyboard-shortcuts';
17
12
  */
18
13
  import { store as editPostStore } from '../../store';
19
14
 
15
+ const noop = () => {};
16
+
20
17
  export function BlockInspectorButton( { onClick = noop, small = false } ) {
21
18
  const { shortcut, areAdvancedSettingsOpened } = useSelect(
22
19
  ( select ) => ( {
@@ -29,9 +26,8 @@ export function BlockInspectorButton( { onClick = noop, small = false } ) {
29
26
  } ),
30
27
  []
31
28
  );
32
- const { openGeneralSidebar, closeGeneralSidebar } = useDispatch(
33
- editPostStore
34
- );
29
+ const { openGeneralSidebar, closeGeneralSidebar } =
30
+ useDispatch( editPostStore );
35
31
 
36
32
  const label = areAdvancedSettingsOpened
37
33
  ? __( 'Hide more settings' )
@@ -0,0 +1,93 @@
1
+ /**
2
+ * External dependencies
3
+ */
4
+ import { initializeEditor, fireEvent } from 'test/helpers';
5
+
6
+ /**
7
+ * WordPress dependencies
8
+ */
9
+ import { getBlockTypes, unregisterBlockType } from '@wordpress/blocks';
10
+ import { registerCoreBlocks } from '@wordpress/block-library';
11
+
12
+ beforeAll( () => {
13
+ // Register all core blocks
14
+ registerCoreBlocks();
15
+ } );
16
+
17
+ afterAll( () => {
18
+ // Clean up registered blocks
19
+ getBlockTypes().forEach( ( block ) => {
20
+ unregisterBlockType( block.name );
21
+ } );
22
+ } );
23
+
24
+ const initialHtml = `
25
+ <!-- wp:paragraph -->
26
+ <p>First example paragraph.</p>
27
+ <!-- /wp:paragraph -->
28
+
29
+ <!-- wp:paragraph -->
30
+ <p>Second example paragraph.</p>
31
+ <!-- /wp:paragraph -->
32
+ `;
33
+
34
+ describe( 'when title is focused', () => {
35
+ it( 'new blocks are inserted after the title', async () => {
36
+ const screen = await initializeEditor( {
37
+ initialHtml,
38
+ } );
39
+
40
+ // Focus first block
41
+ fireEvent.press( screen.getByA11yLabel( /Paragraph Block. Row 1/ ) );
42
+
43
+ // Focus title
44
+ fireEvent(
45
+ screen.getAllByA11yLabel( 'Post title. test' )[ 0 ],
46
+ 'select'
47
+ );
48
+
49
+ // Add new Heading block
50
+ fireEvent.press( screen.getByA11yLabel( 'Add block' ) );
51
+ fireEvent.press( screen.getByText( 'Heading' ) );
52
+
53
+ expect( screen.getByA11yLabel( /Heading Block. Row 1/ ) ).toBeDefined();
54
+ expect(
55
+ screen.getByA11yLabel( /Paragraph Block. Row 2/ )
56
+ ).toBeDefined();
57
+ expect(
58
+ screen.getByA11yLabel( /Paragraph Block. Row 3/ )
59
+ ).toBeDefined();
60
+ } );
61
+ } );
62
+
63
+ describe( 'when title is no longer focused', () => {
64
+ it( 'new blocks are inserted after the currently focused block', async () => {
65
+ const screen = await initializeEditor( {
66
+ initialHtml,
67
+ } );
68
+
69
+ // Focus first block
70
+ fireEvent.press( screen.getByA11yLabel( /Paragraph Block. Row 1/ ) );
71
+
72
+ // Focus title
73
+ fireEvent(
74
+ screen.getAllByA11yLabel( 'Post title. test' )[ 0 ],
75
+ 'select'
76
+ );
77
+
78
+ // Focus last block
79
+ fireEvent.press( screen.getByA11yLabel( /Paragraph Block. Row 2/ ) );
80
+
81
+ // Add new Heading block
82
+ fireEvent.press( screen.getByA11yLabel( 'Add block' ) );
83
+ fireEvent.press( screen.getByText( 'Heading' ) );
84
+
85
+ expect(
86
+ screen.getByA11yLabel( /Paragraph Block. Row 1/ )
87
+ ).toBeDefined();
88
+ expect(
89
+ screen.getByA11yLabel( /Paragraph Block. Row 2/ )
90
+ ).toBeDefined();
91
+ expect( screen.getByA11yLabel( /Heading Block. Row 3/ ) ).toBeDefined();
92
+ } );
93
+ } );
package/src/editor.js CHANGED
@@ -56,9 +56,8 @@ function Editor( {
56
56
  getEditedPostTemplate,
57
57
  getHiddenBlockTypes,
58
58
  } = select( editPostStore );
59
- const { getEntityRecord, getPostType, getEntityRecords } = select(
60
- coreStore
61
- );
59
+ const { getEntityRecord, getPostType, getEntityRecords } =
60
+ select( coreStore );
62
61
  const { getEditorSettings } = select( editorStore );
63
62
  const { getBlockTypes } = select( blocksStore );
64
63
  const isTemplate = [ 'wp_template', 'wp_template_part' ].includes(
@@ -75,8 +74,8 @@ function Editor( {
75
74
  } else {
76
75
  postObject = getEntityRecord( 'postType', postType, postId );
77
76
  }
78
- const supportsTemplateMode = getEditorSettings()
79
- .supportsTemplateMode;
77
+ const supportsTemplateMode =
78
+ getEditorSettings().supportsTemplateMode;
80
79
  const isViewable = getPostType( postType )?.viewable ?? false;
81
80
 
82
81
  return {
@@ -104,9 +103,8 @@ function Editor( {
104
103
  [ postType, postId ]
105
104
  );
106
105
 
107
- const { updatePreferredStyleVariations, setIsInserterOpened } = useDispatch(
108
- editPostStore
109
- );
106
+ const { updatePreferredStyleVariations, setIsInserterOpened } =
107
+ useDispatch( editPostStore );
110
108
 
111
109
  const editorSettings = useMemo( () => {
112
110
  const result = {
@@ -92,12 +92,15 @@ class Editor extends Component {
92
92
  () => {
93
93
  if ( this.postTitleRef ) {
94
94
  this.postTitleRef.focus();
95
+ } else {
96
+ // If the post title ref is not available, we postpone setting focus to when it's available.
97
+ this.focusTitleWhenAvailable = true;
95
98
  }
96
99
  }
97
100
  );
98
101
 
99
- this.subscriptionParentFeaturedImageIdNativeUpdated = subscribeFeaturedImageIdNativeUpdated(
100
- ( payload ) => {
102
+ this.subscriptionParentFeaturedImageIdNativeUpdated =
103
+ subscribeFeaturedImageIdNativeUpdated( ( payload ) => {
101
104
  editEntityRecord(
102
105
  'postType',
103
106
  postType,
@@ -107,8 +110,7 @@ class Editor extends Component {
107
110
  undoIgnore: true,
108
111
  }
109
112
  );
110
- }
111
- );
113
+ } );
112
114
  }
113
115
 
114
116
  componentWillUnmount() {
@@ -122,6 +124,11 @@ class Editor extends Component {
122
124
  }
123
125
 
124
126
  setTitleRef( titleRef ) {
127
+ if ( this.focusTitleWhenAvailable && ! this.postTitleRef ) {
128
+ this.focusTitleWhenAvailable = false;
129
+ titleRef.focus();
130
+ }
131
+
125
132
  this.postTitleRef = titleRef;
126
133
  }
127
134
 
package/src/index.js CHANGED
@@ -117,12 +117,19 @@ export function initializeEditor(
117
117
  preferredStyleVariations: {},
118
118
  showBlockBreadcrumbs: true,
119
119
  showIconLabels: false,
120
+ showListViewByDefault: false,
120
121
  themeStyles: true,
121
122
  welcomeGuide: true,
122
123
  welcomeGuideTemplate: true,
123
124
  } );
124
125
 
125
126
  dispatch( blocksStore ).__experimentalReapplyBlockTypeFilters();
127
+
128
+ // Check if the block list view should be open by default.
129
+ if ( select( editPostStore ).isFeatureActive( 'showListViewByDefault' ) ) {
130
+ dispatch( editPostStore ).setIsListViewOpened( true );
131
+ }
132
+
126
133
  registerCoreBlocks();
127
134
  if ( process.env.IS_GUTENBERG_PLUGIN ) {
128
135
  __experimentalRegisterExperimentalCoreBlocks( {
@@ -25,5 +25,5 @@ export default function CopyContentMenuItem() {
25
25
 
26
26
  const ref = useCopyToClipboard( getText, onSuccess );
27
27
 
28
- return <MenuItem ref={ ref }>{ __( 'Copy all content' ) }</MenuItem>;
28
+ return <MenuItem ref={ ref }>{ __( 'Copy all blocks' ) }</MenuItem>;
29
29
  }