@wordpress/block-library
Version:
Block library for the WordPress editor.
127 lines (126 loc) • 3.06 kB
JavaScript
// packages/block-library/src/quote/transforms.js
import { RichText } from "@wordpress/block-editor";
import { createBlock } from "@wordpress/blocks";
var transforms = {
from: [
{
type: "block",
blocks: ["core/pullquote"],
transform: ({
value,
align,
citation,
anchor,
fontSize,
style
}) => {
return createBlock(
"core/quote",
{
align,
citation,
anchor,
fontSize,
style
},
[createBlock("core/paragraph", { content: value })]
);
}
},
{
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) => {
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/paragraph"],
transform: ({ citation }, innerBlocks) => RichText.isEmpty(citation) ? innerBlocks : [
...innerBlocks,
createBlock("core/paragraph", {
content: citation
})
]
},
{
type: "block",
blocks: ["core/group"],
transform: ({ citation, anchor }, innerBlocks) => createBlock(
"core/group",
{ anchor },
RichText.isEmpty(citation) ? innerBlocks : [
...innerBlocks,
createBlock("core/paragraph", {
content: citation
})
]
)
}
],
ungroup: ({ citation }, innerBlocks) => RichText.isEmpty(citation) ? innerBlocks : [
...innerBlocks,
createBlock("core/paragraph", {
content: citation
})
]
};
var transforms_default = transforms;
export {
transforms_default as default
};
//# sourceMappingURL=transforms.js.map