add css class name helper functions for blocks

This commit is contained in:
2025-12-19 12:29:38 +00:00
parent 3d51f8f735
commit 706f04d91d
3 changed files with 60 additions and 12 deletions

View File

@@ -0,0 +1,39 @@
export function containerClassNames(attributes, bgProps)
{
let classNames = [
'container',
];
if('container_width' in attributes)
classNames.push(`container-${attributes.container_width}`);
if('alignment' in attributes)
classNames.push(`align-${attributes.alignment}`);
return classNames;
}
export function sectionClassNames(attributes, defaultClasses, extraClasses = [])
{
defaultClasses = defaultClasses.split(' ');
let classNames = [
'section',
];
if('padding_top'in attributes && !attributes.padding_top)
classNames.push('section-zero-top');
if('padding_bottom'in attributes && !attributes.padding_bottom)
classNames.push('section-zero-bottom');
// combine arrays
classNames = classNames.concat(defaultClasses).concat(extraClasses);
// remove duplicate items
classNames = [ ...new Set(classNames) ];
return classNames;
}

View File

@@ -18,10 +18,12 @@ import {
SelectControl,
ToggleControl,
} from '@wordpress/components';
import { useState, useEffect } from '@wordpress/element';
import apiFetch from '@wordpress/api-fetch';
import metadata from './block.json';
import allowedBlocks from '../../../json/core-block-whitelist.json';
import { containerClassNames, sectionClassNames } from '../../../js/lib/blocks/classNames';
registerBlockType(metadata.name, {
edit({ attributes, setAttributes }) {
@@ -40,18 +42,25 @@ registerBlockType(metadata.name, {
] = useState( [] );
useEffect( () => {
apiFetch( { path: '/badegg/v1/blocks/container_width' } )
.then( ( data ) => {
setContainerWidthOptions( data );
setIsLoading( false );
} )
.catch( () => {
setContainerWidthOptions( [] );
setIsLoading( false );
} );
apiFetch( { path: '/badegg/v1/blocks/container-widths' } )
.then( ( data ) => {
setContainerWidthOptions( data );
setIsLoading( false );
} )
.catch( () => {
setContainerWidthOptions( [] );
setIsLoading( false );
} );
}, [] );
console.log(attributes);
blockProps.className = sectionClassNames(
attributes,
blockProps.className,
[
'wysiwyg'
]).join(' ');
console.log(blockProps.className);
return (
<div { ...blockProps }>
@@ -87,7 +96,7 @@ registerBlockType(metadata.name, {
</PanelBody>
</Panel>
</InspectorControls>
<div className={`container container-${ attributes.container_width } align-${ attributes.alignment }`}>
<div className={ containerClassNames(attributes).join(' ') }>
<InnerBlocks
allowedBlocks={ allowedBlocks }
defaultBlock={
@@ -106,7 +115,7 @@ registerBlockType(metadata.name, {
save({ attributes }) {
return (
<div { ...useBlockProps.save() }>
<div className={`container container-${attributes.container_width} align-${ attributes.alignment }`}>
<div className={ containerClassNames(attributes).join() }>
<InnerBlocks.Content />
</div>
</div>