-
Notifications
You must be signed in to change notification settings - Fork 4.2k
/
transforms.js
151 lines (149 loc) · 3.08 KB
/
transforms.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
145
146
147
148
149
150
151
/**
* WordPress dependencies
*/
import { createBlock } from '@wordpress/blocks';
const transforms = {
from: [
{
type: 'block',
blocks: [ 'core/pullquote' ],
transform: ( { value, citation, anchor, fontSize, style } ) => {
return createBlock(
'core/quote',
{
citation,
anchor,
fontSize,
style,
},
[ createBlock( 'core/paragraph', { content: value } ) ]
);
},
},
{
type: 'block',
blocks: [ 'core/group' ],
transform: ( { anchor }, innerBlocks ) =>
createBlock( 'core/quote', { anchor }, innerBlocks ),
},
{
type: 'prefix',
prefix: '>',
transform: ( content ) =>
createBlock( 'core/quote', {}, [
createBlock( 'core/paragraph', { content } ),
] ),
},
{
type: 'raw',
schema: () => ( {
blockquote: {
children: '*',
},
} ),
selector: 'blockquote',
transform: ( node, handler ) => {
return createBlock(
'core/quote',
// Don't try to parse any `cite` out of this content.
// * There may be more than one cite.
// * There may be more attribution text than just the cite.
// * If the cite is nested in the quoted text, it's wrong to
// remove it.
{},
handler( {
HTML: node.innerHTML,
mode: 'BLOCKS',
} )
);
},
},
{
type: 'block',
isMultiBlock: true,
blocks: [ '*' ],
isMatch: ( {}, blocks ) => {
// When a single block is selected make the tranformation
// available only to specific blocks that make sense.
if ( blocks.length === 1 ) {
return [
'core/paragraph',
'core/heading',
'core/list',
'core/pullquote',
].includes( blocks[ 0 ].name );
}
return ! blocks.some( ( { name } ) => name === 'core/quote' );
},
__experimentalConvert: ( blocks ) =>
createBlock(
'core/quote',
{},
blocks.map( ( block ) =>
createBlock(
block.name,
block.attributes,
block.innerBlocks
)
)
),
},
],
to: [
{
type: 'block',
blocks: [ 'core/pullquote' ],
isMatch: ( {}, block ) => {
return block.innerBlocks.every(
( { name } ) => name === 'core/paragraph'
);
},
transform: (
{ citation, anchor, fontSize, style },
innerBlocks
) => {
const value = innerBlocks
.map( ( { attributes } ) => `${ attributes.content }` )
.join( '<br>' );
return createBlock( 'core/pullquote', {
value,
citation,
anchor,
fontSize,
style,
} );
},
},
{
type: 'block',
blocks: [ 'core/group' ],
transform: ( { citation, anchor }, innerBlocks ) =>
createBlock(
'core/group',
{ anchor },
citation
? [
...innerBlocks,
createBlock( 'core/paragraph', {
content: citation,
} ),
]
: innerBlocks
),
},
{
type: 'block',
blocks: [ '*' ],
transform: ( { citation }, innerBlocks ) =>
citation
? [
...innerBlocks,
createBlock( 'core/paragraph', {
content: citation,
} ),
]
: innerBlocks,
},
],
};
export default transforms;