-
Notifications
You must be signed in to change notification settings - Fork 4.3k
/
Copy pathform.js
76 lines (67 loc) · 2.17 KB
/
form.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
/**
* External dependencies
*/
import { createElement, Component } from 'wp-elements';
import classNames from 'classnames';
import { EditorHeadingIcon } from 'dashicons';
import InlineTextBlockForm from '../inline-text-block/form';
import EditableFormatToolbar from 'controls/editable-format-toolbar';
import BlockArrangement from 'controls/block-arrangement';
import TransformBlockToolbar from 'controls/transform-block-toolbar';
export default class HeadingBlockForm extends Component {
bindForm = ( ref ) => {
this.form = ref;
};
bindFormatToolbar = ( ref ) => {
this.toolbar = ref;
};
setToolbarState = ( ...args ) => {
this.toolbar && this.toolbar.setToolbarState( ...args );
};
setSize = ( size ) => () => {
this.props.api.change( { size } );
};
render() {
const { api, block, isSelected, first, last } = this.props;
const sizes = [ 'h1', 'h2', 'h3' ];
return (
<div>
{ isSelected && <BlockArrangement first={ first } last={ last }
moveBlockUp={ api.moveBlockUp } moveBlockDown={ api.moveBlockDown } /> }
{ isSelected && (
<div className="block-list__block-controls">
<div className="block-list__block-controls-group">
<TransformBlockToolbar blockType="heading" onTransform={ api.transform } />
</div>
<div className="block-list__block-controls-group">
{ sizes.map( ( size, index ) =>
<button
key={ size }
onClick={ this.setSize( size ) }
className={ classNames(
'block-list__block-control',
'heading-block__toolbar-size-button',
{ 'is-selected': block.size === size }
) }
>
<EditorHeadingIcon />
<span className="heading-block__toolbar-size">{ index }</span>
</button>
) }
</div>
<div className="block-list__block-controls-group">
<EditableFormatToolbar editable={ this.form } ref={ this.bindFormatToolbar } />
</div>
</div>
) }
<div className={ `heading-block__form ${ block.size }` } onClick={ api.select }>
<InlineTextBlockForm
ref={ this.bindForm }
{ ...this.props }
setToolbarState={ this.setToolbarState }
/>
</div>
</div>
);
}
}