@wordpress/block-library
Version:
Block library for the WordPress editor.
171 lines (162 loc) • 3.82 kB
JavaScript
/**
* WordPress dependencies
*/
import { createBlock, getBlockAttributes } from '@wordpress/blocks';
/**
* Internal dependencies
*/
import { getLevelFromHeadingNodeName } from './shared';
const {
name: name
} = {
$schema: "https://schemas.wp.org/trunk/block.json",
apiVersion: 2,
name: "core/heading",
title: "Heading",
category: "text",
description: "Introduce new sections and organize content to help visitors (and search engines) understand the structure of your content.",
keywords: ["title", "subtitle"],
textdomain: "default",
attributes: {
textAlign: {
type: "string"
},
content: {
type: "string",
source: "html",
selector: "h1,h2,h3,h4,h5,h6",
"default": "",
__experimentalRole: "content"
},
level: {
type: "number",
"default": 2
},
placeholder: {
type: "string"
}
},
supports: {
align: ["wide", "full"],
anchor: true,
className: false,
color: {
gradients: true,
link: true,
__experimentalDefaultControls: {
background: true,
text: true
}
},
spacing: {
margin: true,
padding: true
},
typography: {
fontSize: true,
lineHeight: true,
__experimentalFontFamily: true,
__experimentalFontStyle: true,
__experimentalFontWeight: true,
__experimentalLetterSpacing: true,
__experimentalTextTransform: true,
__experimentalTextDecoration: true,
__experimentalDefaultControls: {
fontSize: true,
fontAppearance: true,
textTransform: true
}
},
__experimentalSelector: "h1,h2,h3,h4,h5,h6",
__unstablePasteTextInline: true,
__experimentalSlashInserter: true
},
editorStyle: "wp-block-heading-editor",
style: "wp-block-heading"
};
const transforms = {
from: [{
type: 'block',
isMultiBlock: true,
blocks: ['core/paragraph'],
transform: attributes => attributes.map(_ref => {
let {
content,
anchor,
align: textAlign
} = _ref;
return createBlock(name, {
content,
anchor,
textAlign
});
})
}, {
type: 'raw',
selector: 'h1,h2,h3,h4,h5,h6',
schema: _ref2 => {
let {
phrasingContentSchema,
isPaste
} = _ref2;
const schema = {
children: phrasingContentSchema,
attributes: isPaste ? [] : ['style', 'id']
};
return {
h1: schema,
h2: schema,
h3: schema,
h4: schema,
h5: schema,
h6: schema
};
},
transform(node) {
const attributes = getBlockAttributes(name, node.outerHTML);
const {
textAlign
} = node.style || {};
attributes.level = getLevelFromHeadingNodeName(node.nodeName);
if (textAlign === 'left' || textAlign === 'center' || textAlign === 'right') {
attributes.align = textAlign;
}
return createBlock(name, attributes);
}
}, ...[1, 2, 3, 4, 5, 6].map(level => ({
type: 'prefix',
prefix: Array(level + 1).join('#'),
transform(content) {
return createBlock(name, {
level,
content
});
}
})), ...[1, 2, 3, 4, 5, 6].map(level => ({
type: 'enter',
regExp: new RegExp(`^/(h|H)${level}$`),
transform(content) {
return createBlock(name, {
level,
content
});
}
}))],
to: [{
type: 'block',
isMultiBlock: true,
blocks: ['core/paragraph'],
transform: attributes => attributes.map(_ref3 => {
let {
content,
textAlign: align
} = _ref3;
return createBlock('core/paragraph', {
content,
align
});
})
}]
};
export default transforms;
//# sourceMappingURL=transforms.js.map