Last active
July 28, 2021 03:06
-
-
Save florianbrinkmann/e070d731ad11177e34969cd6fbb1a83e to your computer and use it in GitHub Desktop.
Use two different color palettes with Gutenberg. https://florianbrinkmann.com/en/5327/different-color-palettes-gutenberg/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import classnames from 'classnames'; | |
const { | |
registerBlockType, | |
} = wp.blocks; | |
const { | |
InspectorControls, | |
InnerBlocks, | |
withColors, | |
getColorClass | |
} = wp.editor; | |
const { | |
PanelBody, | |
withFallbackStyles, | |
PanelColor, | |
ColorPalette, | |
} = wp.components; | |
const { | |
compose, | |
Component, | |
} = wp.element; | |
const {getComputedStyle} = window; | |
const FallbackStyles = withFallbackStyles((node, ownProps) => { | |
const {textColor, backgroundColor} = ownProps.attributes; | |
const editableNode = node.querySelector('[contenteditable="true"]'); | |
//verify if editableNode is available, before using getComputedStyle. | |
const computedStyles = editableNode ? getComputedStyle(editableNode) : null; | |
return { | |
fallbackBackgroundColor: backgroundColor || !computedStyles ? undefined : computedStyles.backgroundColor, | |
fallbackTextColor: textColor || !computedStyles ? undefined : computedStyles.color, | |
}; | |
}); | |
class OneColumnBlock extends Component { | |
constructor() { | |
super(...arguments); | |
} | |
render() { | |
const { | |
attributes, | |
setAttributes, | |
mergeBlocks, | |
onReplace, | |
className, | |
backgroundColor, | |
textColor, | |
setBackgroundColor, | |
setTextColor, | |
fallbackBackgroundColor, | |
fallbackTextColor, | |
fallbackFontSize, | |
} = this.props; | |
const { | |
align, | |
content, | |
dropCap, | |
placeholder, | |
} = attributes; | |
const textColors = [ | |
{ | |
name: 'Tundora', | |
slug: 'tundora', | |
color: '#454545' | |
}, | |
]; | |
const backgroundColors = [ | |
{ | |
name: 'Puerto Rico', | |
slug: 'puerto-rico', | |
color: '#53c4ab' | |
}, | |
{ | |
name: 'Butterfly Bush', | |
slug: 'butterfly-bush', | |
color: '#5151a0' | |
}, | |
{ | |
name: 'White', | |
slug: 'white', | |
color: '#ffffff' | |
} | |
]; | |
return ( | |
<div | |
className={classnames(className, { | |
'has-background': backgroundColor.value, | |
[backgroundColor.class]: backgroundColor.class, | |
[textColor.class]: textColor.class, | |
})} | |
style={{ | |
backgroundColor: backgroundColor.value, | |
color: textColor.value, | |
}} | |
> | |
<InnerBlocks/> | |
<InspectorControls> | |
<PanelColorSettings | |
title="'Farbschema" | |
colorSettings={[ | |
{ | |
colors: textColors, | |
label: 'Textfarbe', | |
onChange: setTextColor, | |
value: textColor.color, | |
disableCustomColors: true, | |
}, | |
{ | |
colors: backgroundColors, | |
label: 'Hintergrundfarbe', | |
onChange: setBackgroundColor, | |
value: backgroundColor.color, | |
disableCustomColors: true, | |
} | |
]} | |
/> | |
</InspectorControls> | |
</div> | |
); | |
} | |
} | |
export default registerBlockType('slug/one-column', { | |
title: 'Eine Spalte', | |
icon: 'admin-post', | |
category: 'layout', | |
attributes: { | |
backgroundColor: { | |
type: 'string', | |
}, | |
textColor: { | |
type: 'string', | |
}, | |
}, | |
edit: compose([ | |
withColors('backgroundColor', {textColor: 'color'}), | |
FallbackStyles, | |
])(OneColumnBlock), | |
save: props => { | |
const { | |
backgroundColor, | |
textColor, | |
customBackgroundColor, | |
customTextColor, | |
} = props.attributes; | |
const textClass = getColorClass( 'color', textColor ); | |
const backgroundClass = getColorClass( 'background-color', backgroundColor ); | |
const className = classnames( { | |
'has-background': backgroundColor || customBackgroundColor, | |
[ textClass ]: textClass, | |
[ backgroundClass ]: backgroundClass, | |
} ); | |
return ( | |
<div className={className}> | |
<InnerBlocks.Content/> | |
</div> | |
); | |
}, | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this gist!
The compose function is now found in the
@wordpress/compose
package.To make this code work replace:
(Lines 19-22)
const { compose, Component, } = wp.element;
with
const { Component, } = wp.element;
And add below:
const { compose } = wp.compose;
There are some more inconsistencies in the javascript itself.
getColorClass from the wp.editor package was renamed to getColorClassName.
Keep an eye on these deprecations if you start working with gutenberg.