@wordpress/block-library
Version:
Block library for the WordPress editor.
369 lines (364 loc) • 8.18 kB
JavaScript
/**
* External dependencies
*/
import clsx from 'clsx';
/**
* WordPress dependencies
*/
import { createBlock, parseWithAttributeSchema } from '@wordpress/blocks';
import { InnerBlocks, RichText, useBlockProps } from '@wordpress/block-editor';
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
export const migrateToQuoteV2 = attributes => {
const {
value,
...restAttributes
} = attributes;
return [{
...restAttributes
}, value ? parseWithAttributeSchema(value, {
type: 'array',
source: 'query',
selector: 'p',
query: {
content: {
type: 'string',
source: 'html'
}
}
}).map(({
content
}) => createBlock('core/paragraph', {
content
})) : createBlock('core/paragraph')];
};
const TEXT_ALIGN_OPTIONS = ['left', 'right', 'center'];
// Migrate existing text alignment settings to the renamed attribute.
const migrateTextAlign = (attributes, innerBlocks) => {
const {
align,
...rest
} = attributes;
// Check if there are valid alignments stored in the old attribute
// and assign them to the new attribute name.
const migratedAttributes = TEXT_ALIGN_OPTIONS.includes(align) ? {
...rest,
textAlign: align
} : attributes;
return [migratedAttributes, innerBlocks];
};
// Migrate the v2 blocks with style === `2`;
const migrateLargeStyle = (attributes, innerBlocks) => {
return [{
...attributes,
className: attributes.className ? attributes.className + ' is-style-large' : 'is-style-large'
}, innerBlocks];
};
// Version before the 'align' attribute was replaced with 'textAlign'.
const v4 = {
attributes: {
value: {
type: 'string',
source: 'html',
selector: 'blockquote',
multiline: 'p',
default: '',
role: 'content'
},
citation: {
type: 'string',
source: 'html',
selector: 'cite',
default: '',
role: 'content'
},
align: {
type: 'string'
}
},
supports: {
anchor: true,
html: false,
__experimentalOnEnter: true,
__experimentalOnMerge: true,
typography: {
fontSize: true,
lineHeight: true,
__experimentalFontFamily: true,
__experimentalFontWeight: true,
__experimentalFontStyle: true,
__experimentalTextTransform: true,
__experimentalTextDecoration: true,
__experimentalLetterSpacing: true,
__experimentalDefaultControls: {
fontSize: true,
fontAppearance: true
}
},
color: {
gradients: true,
heading: true,
link: true,
__experimentalDefaultControls: {
background: true,
text: true
}
}
},
isEligible: ({
align
}) => TEXT_ALIGN_OPTIONS.includes(align),
save({
attributes
}) {
const {
align,
citation
} = attributes;
const className = clsx({
[`has-text-align-${align}`]: align
});
return /*#__PURE__*/_jsxs("blockquote", {
...useBlockProps.save({
className
}),
children: [/*#__PURE__*/_jsx(InnerBlocks.Content, {}), !RichText.isEmpty(citation) && /*#__PURE__*/_jsx(RichText.Content, {
tagName: "cite",
value: citation
})]
});
},
migrate: migrateTextAlign
};
const v3 = {
attributes: {
value: {
type: 'string',
source: 'html',
selector: 'blockquote',
multiline: 'p',
default: '',
role: 'content'
},
citation: {
type: 'string',
source: 'html',
selector: 'cite',
default: '',
role: 'content'
},
align: {
type: 'string'
}
},
supports: {
anchor: true,
__experimentalSlashInserter: true,
typography: {
fontSize: true,
lineHeight: true,
__experimentalFontStyle: true,
__experimentalFontWeight: true,
__experimentalLetterSpacing: true,
__experimentalTextTransform: true,
__experimentalDefaultControls: {
fontSize: true,
fontAppearance: true
}
}
},
save({
attributes
}) {
const {
align,
value,
citation
} = attributes;
const className = clsx({
[`has-text-align-${align}`]: align
});
return /*#__PURE__*/_jsxs("blockquote", {
...useBlockProps.save({
className
}),
children: [/*#__PURE__*/_jsx(RichText.Content, {
multiline: true,
value: value
}), !RichText.isEmpty(citation) && /*#__PURE__*/_jsx(RichText.Content, {
tagName: "cite",
value: citation
})]
});
},
migrate(attributes) {
return migrateTextAlign(...migrateToQuoteV2(attributes));
}
};
const v2 = {
attributes: {
value: {
type: 'string',
source: 'html',
selector: 'blockquote',
multiline: 'p',
default: ''
},
citation: {
type: 'string',
source: 'html',
selector: 'cite',
default: ''
},
align: {
type: 'string'
}
},
migrate(attributes) {
return migrateTextAlign(...migrateToQuoteV2(attributes));
},
save({
attributes
}) {
const {
align,
value,
citation
} = attributes;
return /*#__PURE__*/_jsxs("blockquote", {
style: {
textAlign: align ? align : null
},
children: [/*#__PURE__*/_jsx(RichText.Content, {
multiline: true,
value: value
}), !RichText.isEmpty(citation) && /*#__PURE__*/_jsx(RichText.Content, {
tagName: "cite",
value: citation
})]
});
}
};
const v1 = {
attributes: {
value: {
type: 'string',
source: 'html',
selector: 'blockquote',
multiline: 'p',
default: ''
},
citation: {
type: 'string',
source: 'html',
selector: 'cite',
default: ''
},
align: {
type: 'string'
},
style: {
type: 'number',
default: 1
}
},
migrate(attributes) {
if (attributes.style === 2) {
const {
style,
...restAttributes
} = attributes;
return migrateTextAlign(...migrateLargeStyle(...migrateToQuoteV2(restAttributes)));
}
return migrateTextAlign(...migrateToQuoteV2(attributes));
},
save({
attributes
}) {
const {
align,
value,
citation,
style
} = attributes;
return /*#__PURE__*/_jsxs("blockquote", {
className: style === 2 ? 'is-large' : '',
style: {
textAlign: align ? align : null
},
children: [/*#__PURE__*/_jsx(RichText.Content, {
multiline: true,
value: value
}), !RichText.isEmpty(citation) && /*#__PURE__*/_jsx(RichText.Content, {
tagName: "cite",
value: citation
})]
});
}
};
const v0 = {
attributes: {
value: {
type: 'string',
source: 'html',
selector: 'blockquote',
multiline: 'p',
default: ''
},
citation: {
type: 'string',
source: 'html',
selector: 'footer',
default: ''
},
align: {
type: 'string'
},
style: {
type: 'number',
default: 1
}
},
migrate(attributes) {
if (!isNaN(parseInt(attributes.style))) {
const {
style,
...restAttributes
} = attributes;
return migrateTextAlign(...migrateToQuoteV2(restAttributes));
}
return migrateTextAlign(...migrateToQuoteV2(attributes));
},
save({
attributes
}) {
const {
align,
value,
citation,
style
} = attributes;
return /*#__PURE__*/_jsxs("blockquote", {
className: `blocks-quote-style-${style}`,
style: {
textAlign: align ? align : null
},
children: [/*#__PURE__*/_jsx(RichText.Content, {
multiline: true,
value: value
}), !RichText.isEmpty(citation) && /*#__PURE__*/_jsx(RichText.Content, {
tagName: "footer",
value: citation
})]
});
}
};
/**
* New deprecations need to be placed first
* for them to have higher priority.
*
* Old deprecations may need to be updated as well.
*
* See block-deprecation.md
*/
export default [v4, v3, v2, v1, v0];
//# sourceMappingURL=deprecated.js.map