(function ( wpI18n, wpHooks, wpBlocks, wpEditor, wpComponents ) { const { addFilter } = wpHooks; const { __ } = wpI18n; const { hasBlockSupport } = wpBlocks; const { InspectorControls } = wpEditor; const { SelectControl } = wpComponents; // Register custom styles to blocks attributes addFilter( 'blocks.registerBlockType', 'advgb/registerCustomStyleClass', function ( settings ) { if (settings.name === 'core/paragraph') { settings.attributes = Object.assign( settings.attributes, { customStyle: { type: 'string' }, identifyColor: { type: 'string' } } ); } return settings; } ); // Add option to return to default style if (typeof advgbBlocks.customStyles !== 'undefined' && advgbBlocks.customStyles) { advgbBlocks.customStyles.unshift( { id: 0, label: __( 'Paragraph' ), value: '', identifyColor: '' } ); } // Add option to select custom styles for paragraph blocks addFilter( 'editor.BlockEdit', 'advgb/customStyles', function ( BlockEdit ) { return ( props ) => { return ( [ , props.isSelected && props.name === "core/paragraph" && ] } help={__( 'This option let you add custom style for current paragraph. (Front-end only!)' )} value={props.attributes.customStyle} options={advgbBlocks.customStyles.map( ( cstyle, index ) => { if (cstyle.title) advgbBlocks.customStyles[ index ].label = cstyle.title; if (cstyle.name) advgbBlocks.customStyles[ index ].value = cstyle.name; return cstyle; } )} onChange={( cstyle ) => { const { identifyColor } = advgbBlocks.customStyles.filter( ( style ) => style.value === cstyle )[0]; props.setAttributes( { customStyle: cstyle, identifyColor: identifyColor, backgroundColor: undefined, textColor: undefined, fontSize: undefined, } ); }} /> ] ) } } ); // Apply custom styles on front-end addFilter( 'blocks.getSaveContent.extraProps', 'advgb/loadFrontendCustomStyles', function ( extraProps, blockType, attributes ) { if (hasBlockSupport( blockType, 'customStyle', true ) && attributes.customStyle) { if (typeof extraProps.className === 'undefined') { extraProps.className = attributes.customStyle; } else { extraProps.className += ' ' + attributes.customStyle; extraProps.className = extraProps.className.trim(); } } return extraProps; } ); })( wp.i18n, wp.hooks, wp.blocks, wp.editor, wp.components );