@wordpress/edit-site 4.8.0 → 4.9.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/add-new-template/add-custom-template-modal.js +185 -0
- package/build/components/add-new-template/add-custom-template-modal.js.map +1 -0
- package/build/components/add-new-template/new-template.js +79 -14
- package/build/components/add-new-template/new-template.js.map +1 -1
- package/build/components/add-new-template/utils.js +139 -0
- package/build/components/add-new-template/utils.js.map +1 -0
- package/build/components/global-styles/context-menu.js +6 -3
- package/build/components/global-styles/context-menu.js.map +1 -1
- package/build/components/global-styles/hooks.js +1 -1
- package/build/components/global-styles/hooks.js.map +1 -1
- package/build/components/global-styles/palette.js +2 -1
- package/build/components/global-styles/palette.js.map +1 -1
- package/build/components/global-styles/screen-block-list.js +4 -1
- package/build/components/global-styles/screen-block-list.js.map +1 -1
- package/build/components/global-styles/screen-button-color.js +80 -0
- package/build/components/global-styles/screen-button-color.js.map +1 -0
- package/build/components/global-styles/screen-colors.js +47 -7
- package/build/components/global-styles/screen-colors.js.map +1 -1
- package/build/components/global-styles/screen-root.js +4 -2
- package/build/components/global-styles/screen-root.js.map +1 -1
- package/build/components/global-styles/screen-typography-element.js +4 -0
- package/build/components/global-styles/screen-typography-element.js.map +1 -1
- package/build/components/global-styles/screen-typography.js +9 -1
- package/build/components/global-styles/screen-typography.js.map +1 -1
- package/build/components/global-styles/ui.js +11 -0
- package/build/components/global-styles/ui.js.map +1 -1
- package/build/components/global-styles/use-global-styles-output.js +40 -9
- package/build/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build/components/global-styles/utils.js +3 -1
- package/build/components/global-styles/utils.js.map +1 -1
- package/build/components/header/index.js +28 -10
- package/build/components/header/index.js.map +1 -1
- package/build/components/header/more-menu/site-export.js +4 -1
- package/build/components/header/more-menu/site-export.js.map +1 -1
- package/build/components/header/undo-redo/redo.js +13 -4
- package/build/components/header/undo-redo/redo.js.map +1 -1
- package/build/components/header/undo-redo/undo.js +13 -4
- package/build/components/header/undo-redo/undo.js.map +1 -1
- package/build/components/keyboard-shortcut-help-modal/config.js +17 -0
- package/build/components/keyboard-shortcut-help-modal/config.js.map +1 -1
- package/build/components/sidebar/template-card/index.js +19 -7
- package/build/components/sidebar/template-card/index.js.map +1 -1
- package/build/components/sidebar/template-card/template-actions.js +64 -0
- package/build/components/sidebar/template-card/template-actions.js.map +1 -0
- package/build-module/components/add-new-template/add-custom-template-modal.js +170 -0
- package/build-module/components/add-new-template/add-custom-template-modal.js.map +1 -0
- package/build-module/components/add-new-template/new-template.js +79 -17
- package/build-module/components/add-new-template/new-template.js.map +1 -1
- package/build-module/components/add-new-template/utils.js +119 -0
- package/build-module/components/add-new-template/utils.js.map +1 -0
- package/build-module/components/global-styles/context-menu.js +6 -3
- package/build-module/components/global-styles/context-menu.js.map +1 -1
- package/build-module/components/global-styles/hooks.js +1 -1
- package/build-module/components/global-styles/hooks.js.map +1 -1
- package/build-module/components/global-styles/palette.js +2 -1
- package/build-module/components/global-styles/palette.js.map +1 -1
- package/build-module/components/global-styles/screen-block-list.js +4 -1
- package/build-module/components/global-styles/screen-block-list.js.map +1 -1
- package/build-module/components/global-styles/screen-button-color.js +67 -0
- package/build-module/components/global-styles/screen-button-color.js.map +1 -0
- package/build-module/components/global-styles/screen-colors.js +48 -8
- package/build-module/components/global-styles/screen-colors.js.map +1 -1
- package/build-module/components/global-styles/screen-root.js +4 -2
- package/build-module/components/global-styles/screen-root.js.map +1 -1
- package/build-module/components/global-styles/screen-typography-element.js +4 -0
- package/build-module/components/global-styles/screen-typography-element.js.map +1 -1
- package/build-module/components/global-styles/screen-typography.js +10 -2
- package/build-module/components/global-styles/screen-typography.js.map +1 -1
- package/build-module/components/global-styles/ui.js +10 -0
- package/build-module/components/global-styles/ui.js.map +1 -1
- package/build-module/components/global-styles/use-global-styles-output.js +39 -9
- package/build-module/components/global-styles/use-global-styles-output.js.map +1 -1
- package/build-module/components/global-styles/utils.js +3 -1
- package/build-module/components/global-styles/utils.js.map +1 -1
- package/build-module/components/header/index.js +29 -11
- package/build-module/components/header/index.js.map +1 -1
- package/build-module/components/header/more-menu/site-export.js +4 -1
- package/build-module/components/header/more-menu/site-export.js.map +1 -1
- package/build-module/components/header/undo-redo/redo.js +9 -3
- package/build-module/components/header/undo-redo/redo.js.map +1 -1
- package/build-module/components/header/undo-redo/undo.js +9 -3
- package/build-module/components/header/undo-redo/undo.js.map +1 -1
- package/build-module/components/keyboard-shortcut-help-modal/config.js +17 -0
- package/build-module/components/keyboard-shortcut-help-modal/config.js.map +1 -1
- package/build-module/components/sidebar/template-card/index.js +18 -7
- package/build-module/components/sidebar/template-card/index.js.map +1 -1
- package/build-module/components/sidebar/template-card/template-actions.js +49 -0
- package/build-module/components/sidebar/template-card/template-actions.js.map +1 -0
- package/build-style/style-rtl.css +167 -16
- package/build-style/style.css +167 -16
- package/package.json +29 -29
- package/src/components/add-new-template/add-custom-template-modal.js +231 -0
- package/src/components/add-new-template/new-template.js +124 -47
- package/src/components/add-new-template/style.scss +116 -0
- package/src/components/add-new-template/utils.js +125 -0
- package/src/components/global-styles/context-menu.js +3 -0
- package/src/components/global-styles/hooks.js +1 -0
- package/src/components/global-styles/palette.js +4 -1
- package/src/components/global-styles/screen-block-list.js +10 -1
- package/src/components/global-styles/screen-button-color.js +102 -0
- package/src/components/global-styles/screen-colors.js +49 -4
- package/src/components/global-styles/screen-root.js +8 -2
- package/src/components/global-styles/screen-typography-element.js +4 -0
- package/src/components/global-styles/screen-typography.js +17 -2
- package/src/components/global-styles/style.scss +10 -0
- package/src/components/global-styles/test/use-global-styles-output.js +82 -16
- package/src/components/global-styles/ui.js +13 -0
- package/src/components/global-styles/use-global-styles-output.js +43 -4
- package/src/components/global-styles/utils.js +3 -0
- package/src/components/header/index.js +36 -10
- package/src/components/header/more-menu/site-export.js +3 -0
- package/src/components/header/style.scss +53 -5
- package/src/components/header/undo-redo/redo.js +6 -1
- package/src/components/header/undo-redo/undo.js +6 -1
- package/src/components/keyboard-shortcut-help-modal/config.js +12 -0
- package/src/components/sidebar/template-card/index.js +15 -6
- package/src/components/sidebar/template-card/style.scss +49 -35
- package/src/components/sidebar/template-card/template-actions.js +43 -0
|
@@ -283,7 +283,14 @@ export const getNodesWithStyles = ( tree, blockSelectors ) => {
|
|
|
283
283
|
styles: value,
|
|
284
284
|
selector: blockSelectors[ blockName ].selector
|
|
285
285
|
.split( ',' )
|
|
286
|
-
.map( ( sel ) =>
|
|
286
|
+
.map( ( sel ) => {
|
|
287
|
+
const elementSelectors =
|
|
288
|
+
ELEMENTS[ elementName ].split( ',' );
|
|
289
|
+
return elementSelectors.map(
|
|
290
|
+
( elementSelector ) =>
|
|
291
|
+
sel + ' ' + elementSelector
|
|
292
|
+
);
|
|
293
|
+
} )
|
|
287
294
|
.join( ',' ),
|
|
288
295
|
} );
|
|
289
296
|
}
|
|
@@ -390,10 +397,42 @@ export const toStyles = ( tree, blockSelectors, hasBlockGapSupport ) => {
|
|
|
390
397
|
|
|
391
398
|
// Process the remaning block styles (they use either normal block class or __experimentalSelector).
|
|
392
399
|
const declarations = getStylesDeclarations( styles );
|
|
393
|
-
if ( declarations
|
|
394
|
-
|
|
400
|
+
if ( declarations?.length ) {
|
|
401
|
+
ruleset = ruleset + `${ selector }{${ declarations.join( ';' ) };}`;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Check for pseudo selector in `styles` and handle separately.
|
|
405
|
+
const psuedoSelectorStyles = Object.entries( styles ).filter(
|
|
406
|
+
( [ key ] ) => key.startsWith( ':' )
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
if ( psuedoSelectorStyles?.length ) {
|
|
410
|
+
psuedoSelectorStyles.forEach( ( [ pseudoKey, pseudoRule ] ) => {
|
|
411
|
+
const pseudoDeclarations = getStylesDeclarations( pseudoRule );
|
|
412
|
+
|
|
413
|
+
if ( ! pseudoDeclarations?.length ) {
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// `selector` maybe provided in a form
|
|
418
|
+
// where block level selectors have sub element
|
|
419
|
+
// selectors appended to them as a comma seperated
|
|
420
|
+
// string.
|
|
421
|
+
// e.g. `h1 a,h2 a,h3 a,h4 a,h5 a,h6 a`;
|
|
422
|
+
// Split and append pseudo selector to create
|
|
423
|
+
// the proper rules to target the elements.
|
|
424
|
+
const _selector = selector
|
|
425
|
+
.split( ',' )
|
|
426
|
+
.map( ( sel ) => sel + pseudoKey )
|
|
427
|
+
.join( ',' );
|
|
428
|
+
|
|
429
|
+
const psuedoRule = `${ _selector }{${ pseudoDeclarations.join(
|
|
430
|
+
';'
|
|
431
|
+
) };}`;
|
|
432
|
+
|
|
433
|
+
ruleset = ruleset + psuedoRule;
|
|
434
|
+
} );
|
|
395
435
|
}
|
|
396
|
-
ruleset = ruleset + `${ selector }{${ declarations.join( ';' ) };}`;
|
|
397
436
|
} );
|
|
398
437
|
|
|
399
438
|
/* Add alignment / layout styles */
|
|
@@ -11,6 +11,7 @@ export const ROOT_BLOCK_SUPPORTS = [
|
|
|
11
11
|
'backgroundColor',
|
|
12
12
|
'color',
|
|
13
13
|
'linkColor',
|
|
14
|
+
'buttonColor',
|
|
14
15
|
'fontFamily',
|
|
15
16
|
'fontSize',
|
|
16
17
|
'fontStyle',
|
|
@@ -75,6 +76,8 @@ const STYLE_PATH_TO_CSS_VAR_INFIX = {
|
|
|
75
76
|
'color.background': 'color',
|
|
76
77
|
'color.text': 'color',
|
|
77
78
|
'elements.link.color.text': 'color',
|
|
79
|
+
'elements.button.color.text': 'color',
|
|
80
|
+
'elements.button.backgroundColor': 'background-color',
|
|
78
81
|
'color.gradient': 'gradient',
|
|
79
82
|
'typography.fontSize': 'font-size',
|
|
80
83
|
'typography.fontFamily': 'font-family',
|
|
@@ -6,6 +6,7 @@ import { useViewportMatch } from '@wordpress/compose';
|
|
|
6
6
|
import {
|
|
7
7
|
ToolSelector,
|
|
8
8
|
__experimentalPreviewOptions as PreviewOptions,
|
|
9
|
+
NavigableToolbar,
|
|
9
10
|
} from '@wordpress/block-editor';
|
|
10
11
|
import { useSelect, useDispatch } from '@wordpress/data';
|
|
11
12
|
import { PinnedItems } from '@wordpress/interface';
|
|
@@ -107,47 +108,72 @@ export default function Header( {
|
|
|
107
108
|
|
|
108
109
|
return (
|
|
109
110
|
<div className="edit-site-header">
|
|
110
|
-
<
|
|
111
|
+
<NavigableToolbar
|
|
112
|
+
className="edit-site-header_start"
|
|
113
|
+
aria-label={ __( 'Document tools' ) }
|
|
114
|
+
>
|
|
111
115
|
<div className="edit-site-header__toolbar">
|
|
112
|
-
<
|
|
116
|
+
<ToolbarItem
|
|
113
117
|
ref={ inserterButton }
|
|
118
|
+
as={ Button }
|
|
119
|
+
className="edit-site-header-toolbar__inserter-toggle"
|
|
114
120
|
variant="primary"
|
|
115
121
|
isPressed={ isInserterOpen }
|
|
116
|
-
className="edit-site-header-toolbar__inserter-toggle"
|
|
117
|
-
disabled={ ! isVisualMode }
|
|
118
122
|
onMouseDown={ preventDefault }
|
|
119
123
|
onClick={ openInserter }
|
|
124
|
+
disabled={ ! isVisualMode }
|
|
120
125
|
icon={ plus }
|
|
126
|
+
/* translators: button label text should, if possible, be under 16
|
|
127
|
+
characters. */
|
|
121
128
|
label={ _x(
|
|
122
129
|
'Toggle block inserter',
|
|
123
130
|
'Generic label for block inserter button'
|
|
124
131
|
) }
|
|
132
|
+
showTooltip={ ! showIconLabels }
|
|
125
133
|
>
|
|
126
134
|
{ showIconLabels &&
|
|
127
135
|
( ! isInserterOpen ? __( 'Add' ) : __( 'Close' ) ) }
|
|
128
|
-
</
|
|
136
|
+
</ToolbarItem>
|
|
129
137
|
{ isLargeViewport && (
|
|
130
138
|
<>
|
|
131
139
|
<ToolbarItem
|
|
132
140
|
as={ ToolSelector }
|
|
141
|
+
showTooltip={ ! showIconLabels }
|
|
142
|
+
variant={
|
|
143
|
+
showIconLabels ? 'tertiary' : undefined
|
|
144
|
+
}
|
|
133
145
|
disabled={ ! isVisualMode }
|
|
134
146
|
/>
|
|
135
|
-
<
|
|
136
|
-
|
|
137
|
-
|
|
147
|
+
<ToolbarItem
|
|
148
|
+
as={ UndoButton }
|
|
149
|
+
showTooltip={ ! showIconLabels }
|
|
150
|
+
variant={
|
|
151
|
+
showIconLabels ? 'tertiary' : undefined
|
|
152
|
+
}
|
|
153
|
+
/>
|
|
154
|
+
<ToolbarItem
|
|
155
|
+
as={ RedoButton }
|
|
156
|
+
showTooltip={ ! showIconLabels }
|
|
157
|
+
variant={
|
|
158
|
+
showIconLabels ? 'tertiary' : undefined
|
|
159
|
+
}
|
|
160
|
+
/>
|
|
161
|
+
<ToolbarItem
|
|
162
|
+
as={ Button }
|
|
138
163
|
className="edit-site-header-toolbar__list-view-toggle"
|
|
139
|
-
disabled={ ! isVisualMode }
|
|
140
164
|
icon={ listView }
|
|
165
|
+
disabled={ ! isVisualMode }
|
|
141
166
|
isPressed={ isListViewOpen }
|
|
142
167
|
/* translators: button label text should, if possible, be under 16 characters. */
|
|
143
168
|
label={ __( 'List View' ) }
|
|
144
169
|
onClick={ toggleListView }
|
|
145
170
|
shortcut={ listViewShortcut }
|
|
171
|
+
showTooltip={ ! showIconLabels }
|
|
146
172
|
/>
|
|
147
173
|
</>
|
|
148
174
|
) }
|
|
149
175
|
</div>
|
|
150
|
-
</
|
|
176
|
+
</NavigableToolbar>
|
|
151
177
|
|
|
152
178
|
<div className="edit-site-header_center">
|
|
153
179
|
<DocumentActions
|
|
@@ -21,6 +21,9 @@ export default function SiteExport() {
|
|
|
21
21
|
const response = await apiFetch( {
|
|
22
22
|
path: '/wp-block-editor/v1/export',
|
|
23
23
|
parse: false,
|
|
24
|
+
headers: {
|
|
25
|
+
Accept: 'application/zip',
|
|
26
|
+
},
|
|
24
27
|
} );
|
|
25
28
|
const blob = await response.blob();
|
|
26
29
|
const contentDisposition = response.headers.get(
|
|
@@ -16,9 +16,14 @@ $header-toolbar-min-width: 335px;
|
|
|
16
16
|
@include reduce-motion("transition");
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
.edit-site-header_start
|
|
19
|
+
.edit-site-header_start {
|
|
20
|
+
display: flex;
|
|
21
|
+
border: none;
|
|
22
|
+
}
|
|
23
|
+
|
|
20
24
|
.edit-site-header_end {
|
|
21
25
|
display: flex;
|
|
26
|
+
justify-content: flex-end;
|
|
22
27
|
}
|
|
23
28
|
|
|
24
29
|
.edit-site-header_center {
|
|
@@ -33,10 +38,6 @@ $header-toolbar-min-width: 335px;
|
|
|
33
38
|
// See https://dev.w3.org/csswg/css-flexbox/#min-size-auto
|
|
34
39
|
min-width: 0;
|
|
35
40
|
}
|
|
36
|
-
|
|
37
|
-
.edit-site-header_end {
|
|
38
|
-
justify-content: flex-end;
|
|
39
|
-
}
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
// Keeps the document title centered when the sidebar is open
|
|
@@ -152,6 +153,49 @@ body.is-navigation-sidebar-open {
|
|
|
152
153
|
}
|
|
153
154
|
}
|
|
154
155
|
|
|
156
|
+
.edit-site-header_start {
|
|
157
|
+
display: flex;
|
|
158
|
+
border: none;
|
|
159
|
+
|
|
160
|
+
// The Toolbar component adds different styles to buttons, so we reset them
|
|
161
|
+
// here to the original button styles
|
|
162
|
+
.edit-site-header__toolbar > .components-button.has-icon,
|
|
163
|
+
.edit-site-header__toolbar > .components-dropdown > .components-button.has-icon {
|
|
164
|
+
height: $button-size;
|
|
165
|
+
min-width: $button-size;
|
|
166
|
+
padding: 6px;
|
|
167
|
+
|
|
168
|
+
&.is-pressed {
|
|
169
|
+
background: $gray-900;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
&:focus:not(:disabled) {
|
|
173
|
+
box-shadow: 0 0 0 var(--wp-admin-border-width-focus) var(--wp-admin-theme-color), inset 0 0 0 $border-width $white;
|
|
174
|
+
outline: 1px solid transparent;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
&::before {
|
|
178
|
+
display: none;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.edit-site-header__toolbar > .edit-site-header-toolbar__inserter-toggle.has-icon {
|
|
183
|
+
margin-right: $grid-unit-10;
|
|
184
|
+
// Special dimensions for this button.
|
|
185
|
+
min-width: 32px;
|
|
186
|
+
width: 32px;
|
|
187
|
+
height: 32px;
|
|
188
|
+
padding: 0;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.edit-site-header__toolbar > .edit-site-header-toolbar__inserter-toggle.has-text.has-icon {
|
|
192
|
+
width: auto;
|
|
193
|
+
padding: 0 $grid-unit-10;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
155
199
|
// Button text label styles
|
|
156
200
|
|
|
157
201
|
.show-icon-labels .edit-site-header {
|
|
@@ -192,4 +236,8 @@ body.is-navigation-sidebar-open {
|
|
|
192
236
|
height: 36px;
|
|
193
237
|
padding: 0 6px;
|
|
194
238
|
}
|
|
239
|
+
|
|
240
|
+
.edit-site-header_start .edit-site-header__toolbar > * + * {
|
|
241
|
+
margin-left: $grid-unit-10;
|
|
242
|
+
}
|
|
195
243
|
}
|
|
@@ -7,8 +7,9 @@ import { useSelect, useDispatch } from '@wordpress/data';
|
|
|
7
7
|
import { redo as redoIcon, undo as undoIcon } from '@wordpress/icons';
|
|
8
8
|
import { displayShortcut } from '@wordpress/keycodes';
|
|
9
9
|
import { store as coreStore } from '@wordpress/core-data';
|
|
10
|
+
import { forwardRef } from '@wordpress/element';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
function RedoButton( props, ref ) {
|
|
12
13
|
const hasRedo = useSelect(
|
|
13
14
|
( select ) => select( coreStore ).hasRedo(),
|
|
14
15
|
[]
|
|
@@ -16,6 +17,8 @@ export default function RedoButton() {
|
|
|
16
17
|
const { redo } = useDispatch( coreStore );
|
|
17
18
|
return (
|
|
18
19
|
<Button
|
|
20
|
+
{ ...props }
|
|
21
|
+
ref={ ref }
|
|
19
22
|
icon={ ! isRTL() ? redoIcon : undoIcon }
|
|
20
23
|
label={ __( 'Redo' ) }
|
|
21
24
|
shortcut={ displayShortcut.primaryShift( 'z' ) }
|
|
@@ -27,3 +30,5 @@ export default function RedoButton() {
|
|
|
27
30
|
/>
|
|
28
31
|
);
|
|
29
32
|
}
|
|
33
|
+
|
|
34
|
+
export default forwardRef( RedoButton );
|
|
@@ -7,8 +7,9 @@ import { useSelect, useDispatch } from '@wordpress/data';
|
|
|
7
7
|
import { undo as undoIcon, redo as redoIcon } from '@wordpress/icons';
|
|
8
8
|
import { displayShortcut } from '@wordpress/keycodes';
|
|
9
9
|
import { store as coreStore } from '@wordpress/core-data';
|
|
10
|
+
import { forwardRef } from '@wordpress/element';
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
function UndoButton( props, ref ) {
|
|
12
13
|
const hasUndo = useSelect(
|
|
13
14
|
( select ) => select( coreStore ).hasUndo(),
|
|
14
15
|
[]
|
|
@@ -16,6 +17,8 @@ export default function UndoButton() {
|
|
|
16
17
|
const { undo } = useDispatch( coreStore );
|
|
17
18
|
return (
|
|
18
19
|
<Button
|
|
20
|
+
{ ...props }
|
|
21
|
+
ref={ ref }
|
|
19
22
|
icon={ ! isRTL() ? undoIcon : redoIcon }
|
|
20
23
|
label={ __( 'Undo' ) }
|
|
21
24
|
shortcut={ displayShortcut.primary( 'z' ) }
|
|
@@ -27,3 +30,5 @@ export default function UndoButton() {
|
|
|
27
30
|
/>
|
|
28
31
|
);
|
|
29
32
|
}
|
|
33
|
+
|
|
34
|
+
export default forwardRef( UndoButton );
|
|
@@ -20,8 +20,20 @@ export const textFormattingShortcuts = [
|
|
|
20
20
|
keyCombination: { modifier: 'primaryShift', character: 'k' },
|
|
21
21
|
description: __( 'Remove a link.' ),
|
|
22
22
|
},
|
|
23
|
+
{
|
|
24
|
+
keyCombination: { character: '[[' },
|
|
25
|
+
description: __( 'Insert a link to a post or page' ),
|
|
26
|
+
},
|
|
23
27
|
{
|
|
24
28
|
keyCombination: { modifier: 'primary', character: 'u' },
|
|
25
29
|
description: __( 'Underline the selected text.' ),
|
|
26
30
|
},
|
|
31
|
+
{
|
|
32
|
+
keyCombination: { modifier: 'access', character: 'd' },
|
|
33
|
+
description: __( 'Strikethrough the selected text.' ),
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
keyCombination: { modifier: 'access', character: 'x' },
|
|
37
|
+
description: __( 'Make the selected text inline code.' ),
|
|
38
|
+
},
|
|
27
39
|
];
|
|
@@ -10,21 +10,26 @@ import { store as coreStore } from '@wordpress/core-data';
|
|
|
10
10
|
* Internal dependencies
|
|
11
11
|
*/
|
|
12
12
|
import { store as editSiteStore } from '../../../store';
|
|
13
|
+
import TemplateActions from './template-actions';
|
|
13
14
|
import TemplateAreas from './template-areas';
|
|
14
15
|
|
|
15
16
|
export default function TemplateCard() {
|
|
16
|
-
const {
|
|
17
|
+
const {
|
|
18
|
+
info: { title, description, icon },
|
|
19
|
+
template,
|
|
20
|
+
} = useSelect( ( select ) => {
|
|
17
21
|
const { getEditedPostType, getEditedPostId } = select( editSiteStore );
|
|
18
|
-
const {
|
|
22
|
+
const { getEditedEntityRecord } = select( coreStore );
|
|
19
23
|
const { __experimentalGetTemplateInfo: getTemplateInfo } =
|
|
20
24
|
select( editorStore );
|
|
21
25
|
|
|
22
26
|
const postType = getEditedPostType();
|
|
23
27
|
const postId = getEditedPostId();
|
|
24
|
-
const record =
|
|
28
|
+
const record = getEditedEntityRecord( 'postType', postType, postId );
|
|
29
|
+
|
|
25
30
|
const info = record ? getTemplateInfo( record ) : {};
|
|
26
31
|
|
|
27
|
-
return info;
|
|
32
|
+
return { info, template: record };
|
|
28
33
|
}, [] );
|
|
29
34
|
|
|
30
35
|
if ( ! title && ! description ) {
|
|
@@ -35,11 +40,15 @@ export default function TemplateCard() {
|
|
|
35
40
|
<div className="edit-site-template-card">
|
|
36
41
|
<Icon className="edit-site-template-card__icon" icon={ icon } />
|
|
37
42
|
<div className="edit-site-template-card__content">
|
|
38
|
-
<
|
|
43
|
+
<div className="edit-site-template-card__header">
|
|
44
|
+
<h2 className="edit-site-template-card__title">
|
|
45
|
+
{ title }
|
|
46
|
+
</h2>
|
|
47
|
+
<TemplateActions template={ template } />
|
|
48
|
+
</div>
|
|
39
49
|
<div className="edit-site-template-card__description">
|
|
40
50
|
{ description }
|
|
41
51
|
</div>
|
|
42
|
-
|
|
43
52
|
<TemplateAreas />
|
|
44
53
|
</div>
|
|
45
54
|
</div>
|
|
@@ -1,51 +1,65 @@
|
|
|
1
1
|
.edit-site-template-card {
|
|
2
2
|
display: flex;
|
|
3
3
|
align-items: flex-start;
|
|
4
|
-
}
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
5
|
+
&__content {
|
|
6
|
+
flex-grow: 1;
|
|
7
|
+
margin-bottom: $grid-unit-05;
|
|
8
|
+
}
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
&__title {
|
|
11
|
+
font-weight: 500;
|
|
12
|
+
line-height: $icon-size;
|
|
13
|
+
&.edit-site-template-card__title {
|
|
14
|
+
margin: 0;
|
|
15
|
+
}
|
|
16
16
|
}
|
|
17
|
-
}
|
|
18
17
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
18
|
+
&__description {
|
|
19
|
+
font-size: $default-font-size;
|
|
20
|
+
margin: 0 0 $grid-unit-20;
|
|
21
|
+
}
|
|
23
22
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
23
|
+
&__icon {
|
|
24
|
+
flex: 0 0 $icon-size;
|
|
25
|
+
margin-right: $grid-unit-15;
|
|
26
|
+
width: $icon-size;
|
|
27
|
+
height: $icon-size;
|
|
28
|
+
}
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
margin: 0 0 $grid-unit-10;
|
|
34
|
-
}
|
|
30
|
+
&__template-areas-list {
|
|
31
|
+
margin: 0;
|
|
35
32
|
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
> li {
|
|
34
|
+
margin: 0;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
&__template-areas-item {
|
|
39
|
+
width: 100%;
|
|
40
|
+
|
|
41
|
+
// Override the default padding.
|
|
42
|
+
&.components-button.has-icon {
|
|
43
|
+
padding: 0;
|
|
44
|
+
}
|
|
41
45
|
}
|
|
42
|
-
}
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
&__header {
|
|
48
|
+
display: flex;
|
|
49
|
+
justify-content: space-between;
|
|
50
|
+
margin: 0 0 $grid-unit-05;
|
|
51
|
+
}
|
|
46
52
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
53
|
+
&__actions {
|
|
54
|
+
line-height: 0;
|
|
55
|
+
> .components-button.is-small.has-icon {
|
|
56
|
+
padding: 0;
|
|
57
|
+
min-width: auto;
|
|
58
|
+
}
|
|
50
59
|
}
|
|
51
60
|
}
|
|
61
|
+
|
|
62
|
+
h3.edit-site-template-card__template-areas-title {
|
|
63
|
+
font-weight: 500;
|
|
64
|
+
margin: 0 0 $grid-unit-10;
|
|
65
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WordPress dependencies
|
|
3
|
+
*/
|
|
4
|
+
import { useDispatch } from '@wordpress/data';
|
|
5
|
+
import { __ } from '@wordpress/i18n';
|
|
6
|
+
import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components';
|
|
7
|
+
import { moreVertical } from '@wordpress/icons';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Internal dependencies
|
|
11
|
+
*/
|
|
12
|
+
import { store as editSiteStore } from '../../../store';
|
|
13
|
+
import isTemplateRevertable from '../../../utils/is-template-revertable';
|
|
14
|
+
|
|
15
|
+
export default function Actions( { template } ) {
|
|
16
|
+
const { revertTemplate } = useDispatch( editSiteStore );
|
|
17
|
+
const isRevertable = isTemplateRevertable( template );
|
|
18
|
+
if ( ! isRevertable ) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
return (
|
|
22
|
+
<DropdownMenu
|
|
23
|
+
icon={ moreVertical }
|
|
24
|
+
label={ __( 'Actions' ) }
|
|
25
|
+
className="edit-site-template-card__actions"
|
|
26
|
+
toggleProps={ { isSmall: true } }
|
|
27
|
+
>
|
|
28
|
+
{ ( { onClose } ) => (
|
|
29
|
+
<MenuGroup>
|
|
30
|
+
<MenuItem
|
|
31
|
+
info={ __( 'Restore to default state' ) }
|
|
32
|
+
onClick={ () => {
|
|
33
|
+
revertTemplate( template );
|
|
34
|
+
onClose();
|
|
35
|
+
} }
|
|
36
|
+
>
|
|
37
|
+
{ __( 'Clear customizations' ) }
|
|
38
|
+
</MenuItem>
|
|
39
|
+
</MenuGroup>
|
|
40
|
+
) }
|
|
41
|
+
</DropdownMenu>
|
|
42
|
+
);
|
|
43
|
+
}
|