wp_back/wp-content/plugins/visual-portfolio/gutenberg/block/transforms.js

114 lines
2.9 KiB
JavaScript
Raw Normal View History

2024-05-20 15:37:46 +03:00
import { createBlock } from '@wordpress/blocks';
export default {
from: [
// Transform from default Gallery block.
{
type: 'block',
blocks: ['core/gallery'],
isMatch(attributes, blockData) {
return (
(blockData &&
blockData.innerBlocks &&
blockData.innerBlocks.length) ||
(attributes &&
attributes.images &&
attributes.images.length)
);
},
transform(attributes, innerBlocks) {
const { className } = attributes;
// New gallery since WordPress 5.9
const isNewGallery = innerBlocks && innerBlocks.length;
let images = [];
if (isNewGallery) {
images = innerBlocks.map((img) => ({
id: parseInt(img.attributes.id, 10),
imgUrl: img.attributes.url,
imgThumbnailUrl: img.attributes.url,
title: img.attributes.caption,
url:
(img.attributes.linkDestination === 'custom' ||
img.attributes.linkDestination ===
'attachment') &&
img.attributes.href
? img.attributes.href
: '',
}));
} else {
images = attributes.images.map((img) => ({
id: parseInt(img.id, 10),
imgUrl: img.fullUrl,
imgThumbnailUrl: img.url,
title: img.caption,
}));
}
return createBlock('visual-portfolio/block', {
setup_wizard: 'false',
content_source: 'images',
items_count: -1,
layout: 'masonry',
items_style_fly__align: 'bottom-center',
masonry_columns: parseInt(attributes.columns, 10) || 3,
items_click_action:
attributes.linkTo === 'none' && !isNewGallery
? 'false'
: 'url',
images,
className,
});
},
},
// Transform from default Latest Posts block.
{
type: 'block',
blocks: ['core/latest-posts'],
transform(attributes) {
const {
className,
postLayout,
columns = 3,
postsToShow = 6,
displayPostContent,
displayPostContentRadio,
excerptLength,
displayPostDate,
orderBy = 'date',
order = 'desc',
categories,
} = attributes;
return createBlock('visual-portfolio/block', {
content_source: 'post-based',
posts_source: 'post',
posts_order_by: orderBy,
posts_order_direction: order,
posts_taxonomies: categories ? [categories] : false,
items_count: postsToShow,
layout: 'grid',
grid_columns: postLayout === 'grid' ? columns : 1,
items_style: 'default',
items_style_default__show_categories: false,
items_style_default__show_date: displayPostDate
? 'true'
: 'false',
items_style_default__show_excerpt: displayPostContent,
items_style_default__excerpt_words_count:
displayPostContentRadio === 'full_post'
? 100
: excerptLength,
items_style_default__align: 'left',
items_style_default__show_read_more: displayPostContent
? 'true'
: 'false',
className,
});
},
},
],
};