-
Notifications
You must be signed in to change notification settings - Fork 4.4k
/
Copy pathedit.js
144 lines (138 loc) · 3.39 KB
/
edit.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/**
* WordPress dependencies
*/
import { __, _x } from '@wordpress/i18n';
import { createBlock } from '@wordpress/blocks';
import {
RichText,
BlockControls,
RichTextShortcut,
} from '@wordpress/block-editor';
import {
Toolbar,
} from '@wordpress/components';
import {
__unstableIndentListItems as indentListItems,
__unstableOutdentListItems as outdentListItems,
__unstableChangeListType as changeListType,
__unstableIsListRootSelected as isListRootSelected,
__unstableIsActiveListType as isActiveListType,
} from '@wordpress/rich-text';
/**
* Internal dependencies
*/
import { name } from './';
import OrderedListSettings from './ordered-list-settings';
export default function ListEdit( {
attributes,
setAttributes,
mergeBlocks,
onReplace,
className,
} ) {
const { ordered, values, reversed, start } = attributes;
const tagName = ordered ? 'ol' : 'ul';
const controls = ( { value, onChange } ) => (
<>
<RichTextShortcut
type="primary"
character="["
onUse={ () => {
onChange( outdentListItems( value ) );
} }
/>
<RichTextShortcut
type="primary"
character="]"
onUse={ () => {
onChange( indentListItems( value, { type: tagName } ) );
} }
/>
<RichTextShortcut
type="primary"
character="m"
onUse={ () => {
onChange( indentListItems( value, { type: tagName } ) );
} }
/>
<RichTextShortcut
type="primaryShift"
character="m"
onUse={ () => {
onChange( outdentListItems( value ) );
} }
/>
<BlockControls>
<Toolbar
controls={ [
{
icon: 'editor-ul',
title: __( 'Convert to unordered list' ),
isActive: isActiveListType( value, 'ul', tagName ),
onClick() {
onChange( changeListType( value, { type: 'ul' } ) );
if ( isListRootSelected( value ) ) {
setAttributes( { ordered: false } );
}
},
},
{
icon: 'editor-ol',
title: __( 'Convert to ordered list' ),
isActive: isActiveListType( value, 'ol', tagName ),
onClick() {
onChange( changeListType( value, { type: 'ol' } ) );
if ( isListRootSelected( value ) ) {
setAttributes( { ordered: true } );
}
},
},
{
icon: 'editor-outdent',
title: __( 'Outdent list item' ),
shortcut: _x( 'Backspace', 'keyboard key' ),
onClick() {
onChange( outdentListItems( value ) );
},
},
{
icon: 'editor-indent',
title: __( 'Indent list item' ),
shortcut: _x( 'Space', 'keyboard key' ),
onClick() {
onChange( indentListItems( value, { type: tagName } ) );
},
},
] }
/>
</BlockControls>
</>
);
return <>
<RichText
identifier="values"
multiline="li"
tagName={ tagName }
onChange={ ( nextValues ) => setAttributes( { values: nextValues } ) }
value={ values }
className={ className }
placeholder={ __( 'Write list…' ) }
onMerge={ mergeBlocks }
onSplit={ ( value ) => createBlock( name, { ...attributes, values: value } ) }
__unstableOnSplitMiddle={ () => createBlock( 'core/paragraph' ) }
onReplace={ onReplace }
onRemove={ () => onReplace( [] ) }
start={ start }
reversed={ reversed }
>
{ controls }
</RichText>
{ ordered && (
<OrderedListSettings
setAttributes={ setAttributes }
ordered={ ordered }
reversed={ reversed }
start={ start }
/> ) }
</>;
}