block background colours and tint
This commit is contained in:
@@ -6,8 +6,8 @@ class DisablePost
|
|||||||
{
|
{
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
add_filter('register_post_type_args', [$this, 'args'], 0, 2);
|
// add_filter('register_post_type_args', [$this, 'args'], 0, 2);
|
||||||
add_filter('register_taxonomy_args', [$this, 'args'], 0, 2);
|
// add_filter('register_taxonomy_args', [$this, 'args'], 0, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function args($args, $type)
|
public function args($args, $type)
|
||||||
|
|||||||
48
web/app/themes/badegg/app/Admin/Theme.php
Normal file
48
web/app/themes/badegg/app/Admin/Theme.php
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Admin;
|
||||||
|
use ourcodeworld\NameThatColor\ColorInterpreter as NameThatColor;
|
||||||
|
use App\Utilities;
|
||||||
|
|
||||||
|
class Theme
|
||||||
|
{
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
add_action( 'after_setup_theme', [$this, 'DynamicPalette'] );
|
||||||
|
// add_action( 'init' , [$this, 'BackgroundTints']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function DynamicPalette()
|
||||||
|
{
|
||||||
|
$colour = new Utilities\Colour;
|
||||||
|
$NameThatColour = new NameThatColor;
|
||||||
|
|
||||||
|
$palette = [];
|
||||||
|
|
||||||
|
$colours = $colour->values();
|
||||||
|
|
||||||
|
foreach($colours as $slug => $hex) {
|
||||||
|
$palette[] = [
|
||||||
|
'name' => esc_html__(@$NameThatColour->name($hex)['name'], 'badegg'),
|
||||||
|
'slug' => $slug,
|
||||||
|
'color' => $hex,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($colours)) {
|
||||||
|
add_theme_support('editor-color-palette', $palette);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function BackgroundTints()
|
||||||
|
{
|
||||||
|
register_block_style(
|
||||||
|
'badegg/article',
|
||||||
|
[
|
||||||
|
'name' => 'badegg-colour-tint',
|
||||||
|
'label' => __('Tint', 'badegg'),
|
||||||
|
// 'inline_style' =>'.wp-block-image.is-style-badegg-colour-tint { }',
|
||||||
|
]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Utilities;
|
namespace App\Utilities;
|
||||||
|
use ourcodeworld\NameThatColor\ColorInterpreter as NameThatColor;
|
||||||
|
|
||||||
class RestAPI
|
class RestAPI
|
||||||
{
|
{
|
||||||
@@ -13,18 +14,27 @@ class RestAPI
|
|||||||
{
|
{
|
||||||
$restBase = 'badegg/v1';
|
$restBase = 'badegg/v1';
|
||||||
|
|
||||||
register_rest_route($restBase, '/blocks/container-widths', [
|
register_rest_route($restBase, '/blocks/config', [
|
||||||
'methods' => 'GET',
|
'methods' => 'GET',
|
||||||
'callback' => [ $this, 'containerWidths'],
|
'callback' => [ $this, 'config'],
|
||||||
'permission_callback' => function(){
|
'permission_callback' => function(){
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function config()
|
||||||
|
{
|
||||||
|
return rest_ensure_response([
|
||||||
|
'container' => $this->containerWidths(),
|
||||||
|
'colours' => $this->colours(),
|
||||||
|
'tints' => $this->tints(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function containerWidths()
|
public function containerWidths()
|
||||||
{
|
{
|
||||||
$containerWidths = [
|
return [
|
||||||
[ 'label' => __('Auto', 'badegg'), 'value' => 0 ],
|
[ 'label' => __('Auto', 'badegg'), 'value' => 0 ],
|
||||||
[ 'label' => __('Narrow', 'badegg'), 'value' => 'narrow' ],
|
[ 'label' => __('Narrow', 'badegg'), 'value' => 'narrow' ],
|
||||||
[ 'label' => __('Small', 'badegg'), 'value' => 'small' ],
|
[ 'label' => __('Small', 'badegg'), 'value' => 'small' ],
|
||||||
@@ -32,7 +42,39 @@ class RestAPI
|
|||||||
[ 'label' => __('Large', 'badegg'), 'value' => 'large' ],
|
[ 'label' => __('Large', 'badegg'), 'value' => 'large' ],
|
||||||
[ 'label' => __('Edge to edge', 'badegg'), 'value' => 'full' ],
|
[ 'label' => __('Edge to edge', 'badegg'), 'value' => 'full' ],
|
||||||
];
|
];
|
||||||
|
}
|
||||||
|
|
||||||
return rest_ensure_response($containerWidths);
|
public function colours()
|
||||||
|
{
|
||||||
|
$colour = new Colour;
|
||||||
|
$NameThatColour = new NameThatColor;
|
||||||
|
|
||||||
|
$palette = [];
|
||||||
|
|
||||||
|
$colours = $colour->values();
|
||||||
|
|
||||||
|
foreach($colours as $slug => $hex) {
|
||||||
|
$palette[] = [
|
||||||
|
'name' => esc_html__(@$NameThatColour->name($hex)['name'], 'badegg'),
|
||||||
|
'slug' => $slug,
|
||||||
|
'color' => $hex,
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $palette;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function tints()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
['label' => __('Lightest', 'badegg'), 'value' => 'lightest'],
|
||||||
|
['label' => __('Lighter', 'badegg'), 'value' => 'lighter' ],
|
||||||
|
['label' => __('Light', 'badegg'), 'value' => 'light' ],
|
||||||
|
['label' => __('None', 'badegg'), 'value' => 0 ],
|
||||||
|
['label' => __('Dark', 'badegg'), 'value' => 'dark' ],
|
||||||
|
['label' => __('Darker', 'badegg'), 'value' => 'darker' ],
|
||||||
|
['label' => __('Darkest', 'badegg'), 'value' => 'darkest' ],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,19 @@ export function sectionClassNames(attributes, defaultClasses, extraClasses = [])
|
|||||||
if('padding_bottom'in attributes && !attributes.padding_bottom)
|
if('padding_bottom'in attributes && !attributes.padding_bottom)
|
||||||
classNames.push('section-zero-bottom');
|
classNames.push('section-zero-bottom');
|
||||||
|
|
||||||
|
if('background_colour' in attributes && attributes.background_colour) {
|
||||||
|
let bg = `bg-${ attributes.background_colour }`;
|
||||||
|
|
||||||
|
if(
|
||||||
|
'background_tint' in attributes &&
|
||||||
|
attributes.background_tint != 0 &&
|
||||||
|
!['white', 'black'].includes(attributes.background_colour)
|
||||||
|
) {
|
||||||
|
bg += `-${ attributes.background_tint }`;
|
||||||
|
}
|
||||||
|
|
||||||
|
classNames.push(bg);
|
||||||
|
}
|
||||||
|
|
||||||
// combine arrays
|
// combine arrays
|
||||||
classNames = classNames.concat(defaultClasses).concat(extraClasses);
|
classNames = classNames.concat(defaultClasses).concat(extraClasses);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"attributes": {
|
"attributes": {
|
||||||
"container_width": {
|
"container_width": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"default": 0
|
"default": ""
|
||||||
},
|
},
|
||||||
"alignment": {
|
"alignment": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
@@ -23,12 +23,24 @@
|
|||||||
"padding_bottom": {
|
"padding_bottom": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true
|
"default": true
|
||||||
|
},
|
||||||
|
"background_colour": {
|
||||||
|
"type": "string",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
"background_hex": {
|
||||||
|
"type": "string",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
|
"background_tint": {
|
||||||
|
"type": "string",
|
||||||
|
"default": "0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"supports": {
|
"supports": {
|
||||||
"html": true,
|
"html": true,
|
||||||
"color": {
|
"color": {
|
||||||
"background": true,
|
"background": false,
|
||||||
"text": false
|
"text": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ import {
|
|||||||
PanelRow,
|
PanelRow,
|
||||||
SelectControl,
|
SelectControl,
|
||||||
ToggleControl,
|
ToggleControl,
|
||||||
|
ColorIndicator,
|
||||||
|
ColorPalette,
|
||||||
} from '@wordpress/components';
|
} from '@wordpress/components';
|
||||||
|
|
||||||
import { useState, useEffect } from '@wordpress/element';
|
import { useState, useEffect } from '@wordpress/element';
|
||||||
@@ -35,20 +37,23 @@ registerBlockType(metadata.name, {
|
|||||||
alignment,
|
alignment,
|
||||||
padding_top,
|
padding_top,
|
||||||
padding_bottom,
|
padding_bottom,
|
||||||
|
background_colour,
|
||||||
|
background_hex,
|
||||||
|
background_tint,
|
||||||
} = attributes;
|
} = attributes;
|
||||||
|
|
||||||
const [
|
const [
|
||||||
containerWidthOptions, setContainerWidthOptions,
|
configOptions, setConfigOptions,
|
||||||
] = useState( [] );
|
] = useState( [] );
|
||||||
|
|
||||||
useEffect( () => {
|
useEffect( () => {
|
||||||
apiFetch( { path: '/badegg/v1/blocks/container-widths' } )
|
apiFetch( { path: '/badegg/v1/blocks/config' } )
|
||||||
.then( ( data ) => {
|
.then( ( data ) => {
|
||||||
setContainerWidthOptions( data );
|
setConfigOptions( data );
|
||||||
setIsLoading( false );
|
setIsLoading( false );
|
||||||
} )
|
} )
|
||||||
.catch( () => {
|
.catch( () => {
|
||||||
setContainerWidthOptions( [] );
|
setConfigOptions( [] );
|
||||||
setIsLoading( false );
|
setIsLoading( false );
|
||||||
} );
|
} );
|
||||||
}, [] );
|
}, [] );
|
||||||
@@ -60,7 +65,7 @@ registerBlockType(metadata.name, {
|
|||||||
'wysiwyg'
|
'wysiwyg'
|
||||||
]).join(' ');
|
]).join(' ');
|
||||||
|
|
||||||
console.log(blockProps.className);
|
// console.log(attributes);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div { ...blockProps }>
|
<div { ...blockProps }>
|
||||||
@@ -76,7 +81,7 @@ registerBlockType(metadata.name, {
|
|||||||
<SelectControl
|
<SelectControl
|
||||||
label={ __("Container Width", "badegg") }
|
label={ __("Container Width", "badegg") }
|
||||||
value={ container_width }
|
value={ container_width }
|
||||||
options={ containerWidthOptions }
|
options={ configOptions.container }
|
||||||
onChange={ (value) => setAttributes({ container_width: value }) }
|
onChange={ (value) => setAttributes({ container_width: value }) }
|
||||||
__next40pxDefaultSize={ true }
|
__next40pxDefaultSize={ true }
|
||||||
__nextHasNoMarginBottom={ true }
|
__nextHasNoMarginBottom={ true }
|
||||||
@@ -94,6 +99,46 @@ registerBlockType(metadata.name, {
|
|||||||
__nextHasNoMarginBottom
|
__nextHasNoMarginBottom
|
||||||
/>
|
/>
|
||||||
</PanelBody>
|
</PanelBody>
|
||||||
|
<PanelBody title={ __("Background Colour", "badegg") }>
|
||||||
|
<ColorPalette
|
||||||
|
colors={ configOptions.colours }
|
||||||
|
value={ background_hex }
|
||||||
|
disableCustomColors={ true }
|
||||||
|
onChange={ ( value ) => {
|
||||||
|
let slug, hex, selected = '';
|
||||||
|
|
||||||
|
if(value) {
|
||||||
|
selected = configOptions.colours.find(
|
||||||
|
( c ) => c.color === value
|
||||||
|
);
|
||||||
|
|
||||||
|
hex = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(selected) {
|
||||||
|
slug = selected.slug;
|
||||||
|
}
|
||||||
|
|
||||||
|
setAttributes( {
|
||||||
|
background_colour: slug,
|
||||||
|
background_hex: hex,
|
||||||
|
});
|
||||||
|
|
||||||
|
} }
|
||||||
|
/>
|
||||||
|
|
||||||
|
{ 'background_colour' in attributes && attributes.background_colour ? (
|
||||||
|
<SelectControl
|
||||||
|
label={ __("Tint", "badegg") }
|
||||||
|
value={ background_tint }
|
||||||
|
options={ configOptions.tints }
|
||||||
|
onChange={ (value) => setAttributes({ background_tint: value }) }
|
||||||
|
__next40pxDefaultSize={ true }
|
||||||
|
__nextHasNoMarginBottom={ true }
|
||||||
|
/>
|
||||||
|
) : null }
|
||||||
|
|
||||||
|
</PanelBody>
|
||||||
</Panel>
|
</Panel>
|
||||||
</InspectorControls>
|
</InspectorControls>
|
||||||
<div className={ containerClassNames(attributes).join(' ') }>
|
<div className={ containerClassNames(attributes).join(' ') }>
|
||||||
|
|||||||
Reference in New Issue
Block a user