Compare commits
8 Commits
d47b3fdb07
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9a8df23529 | |||
| 1d3a8477ee | |||
| fc49265cb9 | |||
| 8ffec45182 | |||
| 002f33c5e1 | |||
| fd4ee11d26 | |||
| ae6eec5848 | |||
| f0d8cb2065 |
@@ -1,58 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\ACF;
|
||||
|
||||
class CloneGroup
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
|
||||
}
|
||||
public function block_background()
|
||||
{
|
||||
return [
|
||||
'contrast',
|
||||
'bg_colour',
|
||||
'bg_tint',
|
||||
];
|
||||
}
|
||||
|
||||
public function block_intro()
|
||||
{
|
||||
return [
|
||||
'overline',
|
||||
'heading',
|
||||
'blurb',
|
||||
'intro_alignment',
|
||||
];
|
||||
}
|
||||
|
||||
public function block_footer()
|
||||
{
|
||||
return [
|
||||
'blurb_footer',
|
||||
'links',
|
||||
'footer_alignment',
|
||||
];
|
||||
}
|
||||
|
||||
public function block_settings()
|
||||
{
|
||||
return [
|
||||
'section_anchor_id',
|
||||
'padding_top',
|
||||
'padding_bottom',
|
||||
'container_width',
|
||||
'angle_status',
|
||||
'angle_position',
|
||||
'angle_direction',
|
||||
'angle_colour',
|
||||
'angle_tint',
|
||||
];
|
||||
}
|
||||
|
||||
public function block_all()
|
||||
{
|
||||
return array_merge($this->block_intro(), $this->block_footer(), $this->block_settings(), $this->block_background());
|
||||
}
|
||||
}
|
||||
@@ -8,14 +8,15 @@ class Dynamic
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_filter('acf/load_field/name=colour', [ $this, 'load_colours' ]);
|
||||
add_filter('acf/load_field/name=bg_colour', [ $this, 'load_colours' ]);
|
||||
add_filter('acf/load_field/name=tint', [ $this, 'load_tints' ]);
|
||||
add_filter('acf/load_field/name=bg_tint', [ $this, 'load_tints' ]);
|
||||
add_filter('acf/load_field/name=colour', [ $this, 'load_colours' ]);
|
||||
add_filter('acf/load_field/name=bg_colour', [ $this, 'load_colours' ]);
|
||||
add_filter('acf/load_field/name=tint', [ $this, 'load_tints' ]);
|
||||
add_filter('acf/load_field/name=bg_tint', [ $this, 'load_tints' ]);
|
||||
add_filter('acf/load_field/name=container_width', [ $this, 'container_width' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_regular', [ $this, 'load_fontawesome_regular_icons' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_solid', [ $this, 'load_fontawesome_solid_icons' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_brands', [ $this, 'load_fontawesome_brand_icons' ]);
|
||||
add_action('acf/input/admin_footer', [$this, 'colour_ui'] );
|
||||
add_filter('acf/load_field/name=fontawesome_solid', [ $this, 'load_fontawesome_solid_icons' ]);
|
||||
add_filter('acf/load_field/name=fontawesome_brands', [ $this, 'load_fontawesome_brand_icons' ]);
|
||||
add_action('acf/input/admin_footer', [ $this, 'colour_ui' ]);
|
||||
}
|
||||
|
||||
public function load_colours( $field )
|
||||
@@ -25,7 +26,9 @@ class Dynamic
|
||||
|
||||
$colours = $colour->values();
|
||||
|
||||
$field['choices'] = [];
|
||||
$field['choices'] = [
|
||||
'0' => __('None', 'badegg'),
|
||||
];
|
||||
|
||||
foreach($colours as $slug => $hex):
|
||||
$field['choices'][$slug] = '<i class="fas fa-circle" style="color: '. $hex .'"></i> ' . @$NameThatColour->name($hex)['name'];
|
||||
@@ -47,13 +50,27 @@ class Dynamic
|
||||
$field['choices'][$slug] = ucfirst($slug);
|
||||
|
||||
else:
|
||||
$field['choices'][0] = 'None';
|
||||
$field['choices'][0] = __('None', 'badegg');
|
||||
endif;
|
||||
endforeach;
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function container_width( $field )
|
||||
{
|
||||
$field['choices'] = [
|
||||
0 => 'Auto',
|
||||
'narrow' => __('Narrow', 'badegg'),
|
||||
'small' => __('Small', 'badegg'),
|
||||
'medium' => __('Medium', 'badegg'),
|
||||
'large' => __('Large', 'badegg'),
|
||||
'full' => __('Edge to edge', 'badegg'),
|
||||
];
|
||||
|
||||
return $field;
|
||||
}
|
||||
|
||||
public function load_fontawesome_regular_icons( $field )
|
||||
{
|
||||
$field['choices'] = [];
|
||||
|
||||
36
app/API/Admin.php
Normal file
36
app/API/Admin.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\API;
|
||||
|
||||
class Admin
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action( 'rest_api_init', [$this, 'blocks']);
|
||||
}
|
||||
|
||||
public function blocks( )
|
||||
{
|
||||
register_rest_route('badegg/v1', '/blocks/container_width', [
|
||||
'methods' => 'GET',
|
||||
'callback' => [ $this, 'container_width'],
|
||||
'permission_callback' => function(){
|
||||
return true;
|
||||
},
|
||||
]);
|
||||
}
|
||||
|
||||
public function container_width()
|
||||
{
|
||||
$containerWidths = [
|
||||
[ 'label' => __('Auto', 'badegg'), 'value' => 0 ],
|
||||
[ 'label' => __('Narrow', 'badegg'), 'value' => 'narrow' ],
|
||||
[ 'label' => __('Small', 'badegg'), 'value' => 'small' ],
|
||||
[ 'label' => __('Medium', 'badegg'), 'value' => 'medium' ],
|
||||
[ 'label' => __('Large', 'badegg'), 'value' => 'large' ],
|
||||
[ 'label' => __('Edge to edge', 'badegg'), 'value' => 'full' ],
|
||||
];
|
||||
|
||||
return rest_ensure_response($containerWidths);
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,7 @@ class Colour
|
||||
endforeach;
|
||||
endif;
|
||||
|
||||
$values['0'] = '#FFFFFF';
|
||||
$values['white'] = '#FFFFFF';
|
||||
$values['black'] = '#000000';
|
||||
|
||||
return $values;
|
||||
|
||||
@@ -3,56 +3,94 @@
|
||||
namespace App\Utilities;
|
||||
|
||||
class CssClasses {
|
||||
public function section($props = [])
|
||||
public function section($props = [], $name = 'unnamed', $knockout = false)
|
||||
{
|
||||
$Colour = new Colour;
|
||||
$hex = $Colour->name2hex(@$props['bg_colour'], @$props['bg_tint']);
|
||||
$defaults = [
|
||||
'padding_top' => null,
|
||||
'padding_bottom' => null,
|
||||
'bg_colour' => null,
|
||||
'bg_tint' => null,
|
||||
'contrast' => null,
|
||||
'bg_image' => null,
|
||||
];
|
||||
|
||||
$pattern = @$props['pattern'];
|
||||
$pattern_top = @$props['pattern_top'];
|
||||
$pattern_bottom = @$props['pattern_bottom'];
|
||||
$props = wp_parse_args($props, $defaults);
|
||||
|
||||
$Colour = new Colour;
|
||||
$hex = $Colour->name2hex($props['bg_colour'], $props['bg_tint']);
|
||||
|
||||
$classes = [
|
||||
'section',
|
||||
'section-' . $props['name'],
|
||||
// 'section-' . str_replace('acf/', '', $props['name']),
|
||||
'bg-' . $this->colourTint([
|
||||
'colour' => @$props['bg_colour'],
|
||||
'tint' => @$props['bg_tint'],
|
||||
]),
|
||||
'section-' . str_replace('/', '-', $name),
|
||||
];
|
||||
|
||||
if($Colour->is_dark($hex) && $this->is_knockout_block($props['name']))
|
||||
if($props['bg_colour'])
|
||||
$classes[] = 'bg-' . $this->colourTint([
|
||||
'colour' => $props['bg_colour'],
|
||||
'tint' => $props['bg_tint'],
|
||||
]);
|
||||
|
||||
if(($knockout && $Colour->is_dark($hex) || $props['contrast'] == 'light'))
|
||||
$classes[] = 'knockout';
|
||||
|
||||
if(@$props['padding_top'])
|
||||
if($props['padding_top'])
|
||||
$classes[] = 'section-zero-top';
|
||||
|
||||
if(@$props['padding_bottom'])
|
||||
if($props['padding_bottom'])
|
||||
$classes[] = 'section-zero-bottom';
|
||||
|
||||
if($pattern):
|
||||
if($pattern == 'both'):
|
||||
$classes[] = 'pattern-top';
|
||||
$classes[] = 'pattern-bottom';
|
||||
|
||||
else:
|
||||
$classes[] = 'pattern-' . $pattern;
|
||||
|
||||
endif;
|
||||
|
||||
if(in_array($pattern, ['top', 'both']))
|
||||
$classes[] = 'pattern-top-' . $this->colourTint($pattern_top);
|
||||
|
||||
if(in_array($pattern, ['bottom', 'both']))
|
||||
$classes[] = 'pattern-bottom-' . $this->colourTint($pattern_bottom);
|
||||
|
||||
endif;
|
||||
|
||||
if(@$props['bg_image'])
|
||||
if($props['bg_image'])
|
||||
$classes[] = "bg-watermarked";
|
||||
|
||||
if(@$props['className']) $args = array_merge($classes, explode(' ', $props['className']));
|
||||
return $classes;
|
||||
}
|
||||
|
||||
public function container($args = [], $bg_props = [])
|
||||
{
|
||||
$args = wp_parse_args($args, [
|
||||
'width' => null,
|
||||
'location' => null,
|
||||
'section' => false,
|
||||
'align' => null,
|
||||
'wysiwyg' => false,
|
||||
]);
|
||||
|
||||
$bg_props = wp_parse_args($bg_props, [
|
||||
'bg_colour' => null,
|
||||
'bg_tint' => null,
|
||||
'contrast' => null,
|
||||
]);
|
||||
|
||||
$Colour = new Colour;
|
||||
$hex = $Colour->name2hex($bg_props['bg_colour'], $bg_props['bg_tint']);
|
||||
|
||||
$classes = [
|
||||
'container',
|
||||
];
|
||||
|
||||
if($args['width'])
|
||||
$classes[] = 'container-' . $args['width'];
|
||||
|
||||
if($args['location'])
|
||||
$classes[] = $args['location'];
|
||||
|
||||
if($args['section'])
|
||||
$classes[] = 'section';
|
||||
|
||||
if(str_contains($args['location'], 'intro'))
|
||||
$classes[] = 'section-zero-top';
|
||||
|
||||
if(str_contains($args['location'], 'footer'))
|
||||
$classes[] = 'section-zero-bottom';
|
||||
|
||||
if($args['wysiwyg'])
|
||||
$classes[] = 'wysiwyg';
|
||||
|
||||
if($args['align'])
|
||||
$classes[] = 'align-' . $args['align'];
|
||||
|
||||
if(($Colour->is_dark($hex) || $bg_props['contrast'] == 'light'))
|
||||
$classes[] = 'knockout';
|
||||
|
||||
return $classes;
|
||||
}
|
||||
@@ -94,7 +132,7 @@ class CssClasses {
|
||||
public function is_knockout_block($name = null)
|
||||
{
|
||||
$blacklist = [
|
||||
'bad-example',
|
||||
'badegg/acfdemo',
|
||||
];
|
||||
|
||||
if(in_array($name, $blacklist)):
|
||||
|
||||
31
app/View/Composers/Blocks.php
Normal file
31
app/View/Composers/Blocks.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\View\Composers;
|
||||
|
||||
use Roots\Acorn\View\Composer;
|
||||
use App\Utilities;
|
||||
|
||||
class Blocks extends Composer
|
||||
{
|
||||
/**
|
||||
* List of views served by this composer.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected static $views = [
|
||||
'layouts.block-acf',
|
||||
'partials.block-*',
|
||||
];
|
||||
|
||||
/**
|
||||
* Data to be passed to view before rendering.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function with()
|
||||
{
|
||||
return [
|
||||
'CssClasses' => new Utilities\CssClasses,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,17 @@
|
||||
|
||||
namespace App\Blocks;
|
||||
|
||||
add_filter('block_type_metadata', function($metadata){
|
||||
$name = $metadata['name'];
|
||||
|
||||
if (str_starts_with($name, 'core/') ) {
|
||||
unset($metadata['supports']['color']);
|
||||
unset($metadata['supports']['typography']);
|
||||
}
|
||||
|
||||
return $metadata;
|
||||
});
|
||||
|
||||
// Disable all core blocks except what we need as inner blocks
|
||||
// resources/js/editor.js handles hiding the inner blocks at the top level
|
||||
add_action('allowed_block_types_all', __NAMESPACE__ . '\\list_allowed', 100, 2);
|
||||
@@ -152,14 +163,17 @@ function render_acf($block, $content = '', $is_preview = false, $post_id = 0, $w
|
||||
$slug = basename($block['name']);
|
||||
$block['slug'] = $slug;
|
||||
|
||||
$blade = \Roots\view("blocks.{$slug}.render", [
|
||||
'block' => $block,
|
||||
'content' => $content,
|
||||
'is_preview' => $is_preview,
|
||||
'post_id' => $post_id,
|
||||
'wp_block' => $wp_block,
|
||||
'context' => $context,
|
||||
]);
|
||||
$blade = \Roots\view(
|
||||
"blocks.{$slug}.render",
|
||||
[
|
||||
'block' => $block,
|
||||
'content' => $content,
|
||||
'is_preview' => $is_preview,
|
||||
'post_id' => $post_id,
|
||||
'wp_block' => $wp_block,
|
||||
'context' => $context,
|
||||
],
|
||||
);
|
||||
|
||||
if($blade) {
|
||||
echo $blade;
|
||||
@@ -176,7 +190,3 @@ function render_acf($block, $content = '', $is_preview = false, $post_id = 0, $w
|
||||
<?php echo ob_get_clean();
|
||||
}
|
||||
}
|
||||
|
||||
add_action('wp_footer', function(){
|
||||
echo '<pre>',print_r(list_allowed()),'</pre>';
|
||||
});
|
||||
|
||||
@@ -35,8 +35,7 @@
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"App\\": "app/",
|
||||
"Blocks\\": "resources/views/acf-blocks"
|
||||
"App\\": "app/"
|
||||
}
|
||||
},
|
||||
"require": {
|
||||
|
||||
@@ -57,21 +57,8 @@ autoload_psr4('PostTypes');
|
||||
autoload_psr4('ACF');
|
||||
autoload_psr4('Utilities');
|
||||
autoload_psr4('Admin');
|
||||
autoload_psr4('Ajax');
|
||||
autoload_psr4('API');
|
||||
|
||||
function autoload_psr4_blocks() {
|
||||
$path = __dir__ . '/resources/views/acf-blocks/*';
|
||||
$namespace = 'Blocks\\';
|
||||
|
||||
foreach(glob($path, GLOB_ONLYDIR) as $directory) {
|
||||
$name = basename($directory);
|
||||
$class = $namespace . $name . '\\' . $name;
|
||||
|
||||
new $class();
|
||||
}
|
||||
}
|
||||
|
||||
autoload_psr4_blocks();
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
131
resources/acf/group_block_acfdemo.json
Normal file
131
resources/acf/group_block_acfdemo.json
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"key": "group_block_acfdemo",
|
||||
"title": "Block: ACF Demo",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_693d7783d862a",
|
||||
"label": "Content",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 1,
|
||||
"multi_expand": 1,
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693d779cd862b",
|
||||
"label": "",
|
||||
"name": "content",
|
||||
"aria-label": "",
|
||||
"type": "wysiwyg",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"allow_in_bindings": 0,
|
||||
"tabs": "all",
|
||||
"toolbar": "full",
|
||||
"media_upload": 1,
|
||||
"delay": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693d7764938f3",
|
||||
"label": "Introduction",
|
||||
"name": "block_intro",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_intro"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
},
|
||||
{
|
||||
"key": "field_6940187f74afb",
|
||||
"label": "Footer",
|
||||
"name": "block_footer",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_footer"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693d776493992",
|
||||
"label": "Settings",
|
||||
"name": "block_settings",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_block_settings"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
}
|
||||
],
|
||||
"location": [
|
||||
[
|
||||
{
|
||||
"param": "block",
|
||||
"operator": "==",
|
||||
"value": "badegg\/acfdemo"
|
||||
}
|
||||
]
|
||||
],
|
||||
"menu_order": 0,
|
||||
"position": "normal",
|
||||
"style": "default",
|
||||
"label_placement": "top",
|
||||
"instruction_placement": "label",
|
||||
"hide_on_screen": "",
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"display_title": "",
|
||||
"modified": 1765814950
|
||||
}
|
||||
@@ -17,7 +17,9 @@
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White",
|
||||
"0": "auto",
|
||||
"primary": "<i class=\"fas fa-circle\" style=\"color: #dd3333\"><\/i> Punch",
|
||||
"white": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White",
|
||||
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black"
|
||||
},
|
||||
"default_value": 0,
|
||||
@@ -39,7 +41,29 @@
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"conditional_logic": [
|
||||
[
|
||||
{
|
||||
"field": "field_67325dd23234e",
|
||||
"operator": "!=",
|
||||
"value": "0"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"field": "field_67325dd23234e",
|
||||
"operator": "!=",
|
||||
"value": "black"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"field": "field_67325dd23234e",
|
||||
"operator": "!=",
|
||||
"value": "white"
|
||||
}
|
||||
]
|
||||
],
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
@@ -113,5 +137,5 @@
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1764224358
|
||||
"modified": 1765746167
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"title": "Clone: Block Footer",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_67659b49a6db2",
|
||||
"key": "field_694016b164221",
|
||||
"label": "Footer",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
@@ -21,31 +21,11 @@
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67659b49a754a",
|
||||
"label": "Blurb",
|
||||
"name": "blurb_footer",
|
||||
"key": "field_694016b164272",
|
||||
"label": "",
|
||||
"name": "footer",
|
||||
"aria-label": "",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"rows": 3,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_67659b7502137",
|
||||
"label": "Links",
|
||||
"name": "links",
|
||||
"aria-label": "",
|
||||
"type": "repeater",
|
||||
"type": "group",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
@@ -55,19 +35,33 @@
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"pagination": 0,
|
||||
"min": 0,
|
||||
"max": 2,
|
||||
"collapsed": "",
|
||||
"button_label": "Add Button",
|
||||
"rows_per_page": 20,
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_67659b8702138",
|
||||
"label": "Button",
|
||||
"name": "button",
|
||||
"key": "field_694016b165315",
|
||||
"label": "Blurb",
|
||||
"name": "blurb",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"rows": 3,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_69401a2f06555",
|
||||
"label": "Links",
|
||||
"name": "links",
|
||||
"aria-label": "",
|
||||
"type": "repeater",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
@@ -76,49 +70,106 @@
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_button"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0,
|
||||
"parent_repeater": "field_67659b7502137"
|
||||
"pagination": 0,
|
||||
"min": 0,
|
||||
"max": 0,
|
||||
"collapsed": "",
|
||||
"button_label": "Add Row",
|
||||
"rows_per_page": 20,
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_69401a4006556",
|
||||
"label": "Link",
|
||||
"name": "link",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_button"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0,
|
||||
"parent_repeater": "field_69401a2f06555"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_694016b165337",
|
||||
"label": "Alignment",
|
||||
"name": "align",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"left": "Left",
|
||||
"centre": "Centre",
|
||||
"right": "Right"
|
||||
},
|
||||
"default_value": "centre",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_694016b16537f",
|
||||
"label": "Container width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Auto",
|
||||
"narrow": "Narrow",
|
||||
"small": "Small",
|
||||
"medium": "Medium",
|
||||
"large": "Large",
|
||||
"full": "Edge to edge"
|
||||
},
|
||||
"default_value": "narrow",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_682fb9ff58080",
|
||||
"label": "Alignment",
|
||||
"name": "footer_alignment",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"centre": "Centre",
|
||||
"left": "Left",
|
||||
"right": "Right"
|
||||
},
|
||||
"default_value": "centre",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_6828dac95eb68",
|
||||
"key": "field_694016b1642c5",
|
||||
"label": "Footer (end)",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
@@ -154,5 +205,6 @@
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1747958307
|
||||
"display_title": "",
|
||||
"modified": 1765809897
|
||||
}
|
||||
|
||||
@@ -21,52 +21,11 @@
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_676599964d3cc",
|
||||
"label": "Heading",
|
||||
"name": "heading",
|
||||
"key": "field_693f37ad7fa70",
|
||||
"label": "",
|
||||
"name": "intro",
|
||||
"aria-label": "",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "hfont",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"allow_in_bindings": 0,
|
||||
"rows": 2,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_6765999d4d3cd",
|
||||
"label": "Blurb",
|
||||
"name": "blurb",
|
||||
"aria-label": "",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"rows": 3,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_68bf1126c2760",
|
||||
"label": "Links",
|
||||
"name": "links",
|
||||
"aria-label": "",
|
||||
"type": "repeater",
|
||||
"type": "group",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
@@ -76,19 +35,34 @@
|
||||
"id": ""
|
||||
},
|
||||
"layout": "block",
|
||||
"pagination": 0,
|
||||
"min": 0,
|
||||
"max": 1,
|
||||
"collapsed": "",
|
||||
"button_label": "Add Button",
|
||||
"rows_per_page": 20,
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_68bf1171c2761",
|
||||
"label": "Link",
|
||||
"name": "link",
|
||||
"key": "field_676599964d3cc",
|
||||
"label": "Heading",
|
||||
"name": "heading",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"type": "text",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "hfont",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"allow_in_bindings": 0,
|
||||
"placeholder": "",
|
||||
"prepend": "",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_6765999d4d3cd",
|
||||
"label": "Blurb",
|
||||
"name": "blurb",
|
||||
"aria-label": "",
|
||||
"type": "textarea",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
@@ -97,14 +71,74 @@
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_button"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0,
|
||||
"parent_repeater": "field_68bf1126c2760"
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"rows": 3,
|
||||
"placeholder": "",
|
||||
"new_lines": ""
|
||||
},
|
||||
{
|
||||
"key": "field_69400cbafb964",
|
||||
"label": "Alignment",
|
||||
"name": "align",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"left": "Left",
|
||||
"centre": "Centre",
|
||||
"right": "Right"
|
||||
},
|
||||
"default_value": "centre",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_693f3a7fae85e",
|
||||
"label": "Container width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Auto",
|
||||
"narrow": "Narrow",
|
||||
"small": "Small",
|
||||
"medium": "Medium",
|
||||
"large": "Large",
|
||||
"full": "Edge to edge"
|
||||
},
|
||||
"default_value": "narrow",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 0,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -145,5 +179,6 @@
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1757498726
|
||||
"display_title": "",
|
||||
"modified": 1765809893
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"title": "Clone: Block Settings",
|
||||
"fields": [
|
||||
{
|
||||
"key": "field_673511c31122f",
|
||||
"key": "field_69403228d2637",
|
||||
"label": "Settings",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
@@ -21,11 +21,11 @@
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_680016e0fac24",
|
||||
"label": "Anchor ID",
|
||||
"name": "section_anchor_id",
|
||||
"key": "field_694031b513e66",
|
||||
"label": "",
|
||||
"name": "settings",
|
||||
"aria-label": "",
|
||||
"type": "text",
|
||||
"type": "group",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
@@ -34,136 +34,117 @@
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"default_value": "",
|
||||
"maxlength": "",
|
||||
"placeholder": "",
|
||||
"prepend": "#",
|
||||
"append": ""
|
||||
},
|
||||
{
|
||||
"key": "field_6800097e61765",
|
||||
"label": "Container Width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"full": "Full Width",
|
||||
"large": "Large",
|
||||
"medium": "Medium",
|
||||
"small": "Small",
|
||||
"narrow": "Narrow"
|
||||
},
|
||||
"default_value": "medium",
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67350eb62cdf9",
|
||||
"label": "Top Padding",
|
||||
"name": "padding_top",
|
||||
"aria-label": "",
|
||||
"type": "radio",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": [
|
||||
"On",
|
||||
"Off"
|
||||
],
|
||||
"default_value": "",
|
||||
"return_format": "value",
|
||||
"allow_null": 0,
|
||||
"other_choice": 0,
|
||||
"layout": "horizontal",
|
||||
"save_other_choice": 0
|
||||
},
|
||||
{
|
||||
"key": "field_673510c1dc830",
|
||||
"label": "Bottom Padding",
|
||||
"name": "padding_bottom",
|
||||
"aria-label": "",
|
||||
"type": "radio",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": [
|
||||
"On",
|
||||
"Off"
|
||||
],
|
||||
"default_value": "",
|
||||
"return_format": "value",
|
||||
"allow_null": 0,
|
||||
"other_choice": 0,
|
||||
"layout": "horizontal",
|
||||
"save_other_choice": 0
|
||||
},
|
||||
{
|
||||
"key": "field_6735258c2d9ff",
|
||||
"label": "Background",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
"type": "accordion",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"open": 1,
|
||||
"multi_expand": 1,
|
||||
"endpoint": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67350aeb146ca",
|
||||
"label": "Background",
|
||||
"name": "background",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_background_settings"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
"sub_fields": [
|
||||
{
|
||||
"key": "field_67350eb62cdf9",
|
||||
"label": "Top Padding",
|
||||
"name": "padding_top",
|
||||
"aria-label": "",
|
||||
"type": "radio",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": [
|
||||
"On",
|
||||
"Off"
|
||||
],
|
||||
"default_value": "",
|
||||
"return_format": "value",
|
||||
"allow_null": 0,
|
||||
"other_choice": 0,
|
||||
"layout": "horizontal",
|
||||
"save_other_choice": 0
|
||||
},
|
||||
{
|
||||
"key": "field_673510c1dc830",
|
||||
"label": "Bottom Padding",
|
||||
"name": "padding_bottom",
|
||||
"aria-label": "",
|
||||
"type": "radio",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "50",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": [
|
||||
"On",
|
||||
"Off"
|
||||
],
|
||||
"default_value": "",
|
||||
"return_format": "value",
|
||||
"allow_null": 0,
|
||||
"other_choice": 0,
|
||||
"layout": "horizontal",
|
||||
"save_other_choice": 0
|
||||
},
|
||||
{
|
||||
"key": "field_6800097e61765",
|
||||
"label": "Container Width",
|
||||
"name": "container_width",
|
||||
"aria-label": "",
|
||||
"type": "select",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"choices": {
|
||||
"0": "Auto",
|
||||
"narrow": "Narrow",
|
||||
"small": "Small",
|
||||
"medium": "Medium",
|
||||
"large": "Large",
|
||||
"full": "Edge to edge"
|
||||
},
|
||||
"default_value": 0,
|
||||
"return_format": "value",
|
||||
"multiple": 0,
|
||||
"allow_null": 0,
|
||||
"allow_in_bindings": 1,
|
||||
"ui": 0,
|
||||
"ajax": 0,
|
||||
"placeholder": "",
|
||||
"create_options": 0,
|
||||
"save_options": 0
|
||||
},
|
||||
{
|
||||
"key": "field_67350aeb146ca",
|
||||
"label": "Background",
|
||||
"name": "background",
|
||||
"aria-label": "",
|
||||
"type": "clone",
|
||||
"instructions": "",
|
||||
"required": 0,
|
||||
"conditional_logic": 0,
|
||||
"wrapper": {
|
||||
"width": "",
|
||||
"class": "",
|
||||
"id": ""
|
||||
},
|
||||
"clone": [
|
||||
"group_clone_background_settings"
|
||||
],
|
||||
"display": "seamless",
|
||||
"layout": "block",
|
||||
"prefix_label": 0,
|
||||
"prefix_name": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "field_6828da67543fc",
|
||||
"key": "field_69403239d2638",
|
||||
"label": "Settings (end)",
|
||||
"name": "",
|
||||
"aria-label": "",
|
||||
@@ -199,5 +180,6 @@
|
||||
"active": true,
|
||||
"description": "",
|
||||
"show_in_rest": 0,
|
||||
"modified": 1764247227
|
||||
"display_title": "",
|
||||
"modified": 1765815052
|
||||
}
|
||||
|
||||
@@ -13,13 +13,13 @@ button {
|
||||
|
||||
button,
|
||||
input[type="submit"] {
|
||||
&.button {
|
||||
&.btn {
|
||||
appearance: none;
|
||||
}
|
||||
}
|
||||
|
||||
%button,
|
||||
.button {
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 0.5em 1.25em;
|
||||
border: 0.125em solid colours.$black;
|
||||
@@ -102,10 +102,10 @@ input[type="submit"] {
|
||||
&.bigger { font-size: 1.5em; }
|
||||
}
|
||||
|
||||
.button-wrap {
|
||||
.btn-wrap {
|
||||
margin: 1.5em -0.25em -0.25em;
|
||||
|
||||
.button {
|
||||
.btn {
|
||||
margin: 0.25em;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,6 @@
|
||||
@use "../global/variables/breakpoints";
|
||||
@use "../global/variables/colours";
|
||||
|
||||
textarea {
|
||||
min-height: 10.375em;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
color: colours.$grey;
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
}
|
||||
|
||||
.editor-styles-wrapper {
|
||||
padding: 1em;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
@@ -35,8 +35,11 @@
|
||||
}
|
||||
|
||||
&__post-title-wrapper {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 100;
|
||||
padding: 1rem;
|
||||
margin: 0 0 3rem !important;
|
||||
margin: 0 !important;
|
||||
background: white;
|
||||
box-shadow: 0 0.5rem 1rem rgba(black, 0.15);
|
||||
}
|
||||
|
||||
@@ -142,11 +142,7 @@ hr {
|
||||
}
|
||||
|
||||
.align {
|
||||
&-centre {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&-right {
|
||||
text-align: right;
|
||||
}
|
||||
&-left { text-align: left; }
|
||||
&-centre, &-center { text-align: center; }
|
||||
&-right { text-align: right; }
|
||||
}
|
||||
|
||||
@@ -27,9 +27,10 @@
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 90%;
|
||||
width: calc(100% - spacing.$innerMedium * 2);
|
||||
margin: auto;
|
||||
|
||||
&-full { width: auto; }
|
||||
&-large { max-width: spacing.$containerLarge; }
|
||||
&-medium { max-width: spacing.$containerMedium; }
|
||||
&-small { max-width: spacing.$containerSmall; }
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
@mixin generate_button_colors($name, $hex) {
|
||||
|
||||
$buttons: (
|
||||
".button",
|
||||
".btn",
|
||||
"button",
|
||||
"input[type=submit]",
|
||||
);
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
@if(@$data['section_anchor_id'])
|
||||
<div id="{{ $data['section_anchor_id'] }}" class="section-anchor"></div>
|
||||
@endif
|
||||
|
||||
<section
|
||||
id="{{ $block['id'] }}"
|
||||
class="badegg-block
|
||||
@if(@$data['section_classes']) {{ implode(' ', $data['section_classes']) }} @endif
|
||||
{{ @$block['className'] }}
|
||||
">
|
||||
|
||||
<div class="section-{{ $block['name'] }}-inner">
|
||||
<div class="container container-{{ @$data['container_width'] ? $data['container_width'] : 'medium' }} block-content wysiwyg">
|
||||
<InnerBlocks
|
||||
allowedBlocks="{!! esc_attr( wp_json_encode( $data['allowed_blocks'] ) ) !!}"
|
||||
template="{!! esc_attr( wp_json_encode( $data['template'] ) ) !!}"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,103 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Blocks\Editor;
|
||||
use App\Utilities;
|
||||
use App\ACF;
|
||||
|
||||
class Editor
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
add_action('acf/init', [$this, 'init']);
|
||||
}
|
||||
|
||||
public function init()
|
||||
{
|
||||
acf_register_block_type([
|
||||
'name' => 'badegg-editor',
|
||||
'title' => __('Text Editor'),
|
||||
'description' => __('Long form text content with support for things like headings, lists, and images.'),
|
||||
'render_callback' => [ $this, 'render'],
|
||||
'category' => 'badegg',
|
||||
'icon' => 'media-document',
|
||||
'supports' => [
|
||||
'align' => false,
|
||||
'jsx' => true,
|
||||
],
|
||||
'example' => [
|
||||
'attributes' => [
|
||||
'mode' => 'preview',
|
||||
'data' => [
|
||||
'inserter' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
public function render($block, string $content = '', bool $is_preview = false, int $post_id = 0)
|
||||
{
|
||||
$name = basename(__FILE__, '.php');
|
||||
$themeURL = get_template_directory_uri();
|
||||
|
||||
if($is_preview && @$block['data']['inserter']):
|
||||
echo '<img style="display: block; width: 100%" src="' . $themeURL . '/resources/views/acf-blocks/' . $name . '/' . $name . '.jpg" />';
|
||||
return;
|
||||
endif;
|
||||
|
||||
$CssClasses = new Utilities\CssClasses;
|
||||
$Colour = new Utilities\Colour;
|
||||
$CloneGroup = new ACF\CloneGroup;
|
||||
|
||||
$data = [];
|
||||
|
||||
$fields = [
|
||||
|
||||
];
|
||||
|
||||
$fields = array_merge($fields, $CloneGroup->block_all());
|
||||
|
||||
foreach($fields as $field):
|
||||
$data[$field] = get_field($field);
|
||||
endforeach;
|
||||
|
||||
unset($block['data']);
|
||||
$block['name'] = str_replace('acf/', '', $block['name']);
|
||||
|
||||
$data = array_merge($data, $block);
|
||||
$data['section_classes'] = $CssClasses->section($data);
|
||||
$data['allowed_blocks'] = \App\Blocks\list_inner();
|
||||
$data['template'] = $this->default_template();
|
||||
$data['block'] = $block;
|
||||
|
||||
echo \Roots\view("acf-blocks.$name.$name", [
|
||||
'data' => $data,
|
||||
'block' => $block,
|
||||
])->render();
|
||||
}
|
||||
|
||||
public function default_template()
|
||||
{
|
||||
return [
|
||||
[
|
||||
'core/heading',
|
||||
[
|
||||
'level' => 1,
|
||||
'placeholder' => 'Heading',
|
||||
],
|
||||
],
|
||||
[
|
||||
'core/paragraph',
|
||||
[
|
||||
'placeholder' => 'You can type your own text, change the heading level, or delete it altogether. You can also type over this text.',
|
||||
],
|
||||
],
|
||||
[
|
||||
'core/paragraph',
|
||||
[
|
||||
'placeholder' => 'To adjust block settings, click the Text Editor icon floating above this block to display them in the sidebar.',
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"apiVersion": 3,
|
||||
"name": "badegg/acfdemo",
|
||||
"title": "ACF Demo",
|
||||
"category": "badegg",
|
||||
@@ -6,12 +7,6 @@
|
||||
"description": "An example block powered by ACF",
|
||||
"keywords": ["acf", "demo"],
|
||||
|
||||
"editorScript": "acfdemo-editor-script",
|
||||
"editorStyle": "acfdemo-editor-style",
|
||||
"script": "acfdemo-script",
|
||||
"style": "acfdemo-style",
|
||||
"viewScript": "acfdemo-view-script",
|
||||
|
||||
"acf": {
|
||||
"mode": "preview",
|
||||
"validate": "false",
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's editorScript, loaded only in the block editor
|
||||
console.log('loaded: resources/views/blocks/acfdemo/index.js')
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
<section class="wp-block-{{ $block['slug'] }}">
|
||||
<h2>ACF Example</h2>
|
||||
</section>
|
||||
@extends('layouts.block-acf', [
|
||||
'block' => $block,
|
||||
'is_preview' => $is_preview,
|
||||
'context' => $context,
|
||||
'knockout' => true,
|
||||
])
|
||||
|
||||
@section('block-content')
|
||||
{!! the_field('content') !!}
|
||||
@overwrite
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's script, loaded in block editor and front end
|
||||
console.log('loaded: resources/views/blocks/acf-demo/script.js')
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's viewScript, applied on front end only
|
||||
console.log('loaded: resources/views/blocks/acf-demo/view.js')
|
||||
|
||||
@@ -8,9 +8,25 @@
|
||||
"foreground": "#f58762"
|
||||
},
|
||||
"description": "A wrapper to contain core blocks",
|
||||
"attributes": {
|
||||
"container_width": {
|
||||
"type": "string",
|
||||
"default": 0
|
||||
},
|
||||
"alignment": {
|
||||
"type": "string"
|
||||
},
|
||||
"padding_top": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
},
|
||||
"padding_bottom": {
|
||||
"type": "boolean",
|
||||
"default": true
|
||||
}
|
||||
},
|
||||
"supports": {
|
||||
"html": true,
|
||||
"align": ["wide", "full"],
|
||||
"color": {
|
||||
"background": true,
|
||||
"text": false
|
||||
|
||||
@@ -1,17 +1,93 @@
|
||||
// block.json's editorScript, loaded only in the block editor
|
||||
|
||||
import { __ } from '@wordpress/i18n';
|
||||
import { registerBlockType } from '@wordpress/blocks';
|
||||
import { InnerBlocks, useBlockProps } from '@wordpress/block-editor';
|
||||
|
||||
import {
|
||||
useBlockProps,
|
||||
InnerBlocks,
|
||||
InspectorControls,
|
||||
BlockControls,
|
||||
AlignmentToolbar,
|
||||
} from '@wordpress/block-editor';
|
||||
|
||||
import {
|
||||
Panel,
|
||||
PanelBody,
|
||||
PanelRow,
|
||||
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';
|
||||
|
||||
registerBlockType(metadata.name, {
|
||||
edit({ attributes, setAttributes }) {
|
||||
const blockProps = useBlockProps();
|
||||
const [ isLoading, setIsLoading ] = useState( true );
|
||||
|
||||
const {
|
||||
container_width,
|
||||
alignment,
|
||||
padding_top,
|
||||
padding_bottom,
|
||||
} = attributes;
|
||||
|
||||
const [
|
||||
containerWidthOptions, setContainerWidthOptions,
|
||||
] = useState( [] );
|
||||
|
||||
useEffect( () => {
|
||||
apiFetch( { path: '/badegg/v1/blocks/container_width' } )
|
||||
.then( ( data ) => {
|
||||
setContainerWidthOptions( data );
|
||||
setIsLoading( false );
|
||||
} )
|
||||
.catch( () => {
|
||||
setContainerWidthOptions( [] );
|
||||
setIsLoading( false );
|
||||
} );
|
||||
}, [] );
|
||||
|
||||
console.log(attributes);
|
||||
|
||||
return (
|
||||
<section { ...blockProps }>
|
||||
<div className="container">
|
||||
<div { ...blockProps }>
|
||||
<BlockControls>
|
||||
<AlignmentToolbar
|
||||
value={ alignment }
|
||||
onChange={(value) => setAttributes({alignment: value})}
|
||||
/>
|
||||
</BlockControls>
|
||||
<InspectorControls>
|
||||
<Panel>
|
||||
<PanelBody title={ __("Settings", "badegg") }>
|
||||
<SelectControl
|
||||
label={ __("Container Width", "badegg") }
|
||||
value={ container_width }
|
||||
options={ containerWidthOptions }
|
||||
onChange={ (value) => setAttributes({ container_width: value }) }
|
||||
__next40pxDefaultSize={ true }
|
||||
__nextHasNoMarginBottom={ true }
|
||||
/>
|
||||
<ToggleControl
|
||||
label={ __('Top Padding', 'badegg') }
|
||||
checked={ padding_top }
|
||||
onChange={(value) => setAttributes({ padding_top: value }) }
|
||||
__nextHasNoMarginBottom
|
||||
/>
|
||||
<ToggleControl
|
||||
label={ __('Bottom Padding', 'badegg') }
|
||||
checked={ padding_bottom }
|
||||
onChange={(value) => setAttributes({ padding_bottom: value }) }
|
||||
__nextHasNoMarginBottom
|
||||
/>
|
||||
</PanelBody>
|
||||
</Panel>
|
||||
</InspectorControls>
|
||||
<div className={`container container-${ attributes.container_width } align-${ attributes.alignment }`}>
|
||||
<InnerBlocks
|
||||
allowedBlocks={ allowedBlocks }
|
||||
defaultBlock={
|
||||
@@ -24,16 +100,16 @@ registerBlockType(metadata.name, {
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
save() {
|
||||
save({ attributes }) {
|
||||
return (
|
||||
<section { ...useBlockProps.save() }>
|
||||
<div className="container">
|
||||
<div { ...useBlockProps.save() }>
|
||||
<div className={`container container-${attributes.container_width} align-${ attributes.alignment }`}>
|
||||
<InnerBlocks.Content />
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's script, loaded in block editor and front end
|
||||
console.log('loaded: resources/views/blocks/article/script.js')
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's viewScript, applied on front end only
|
||||
console.log('loaded: resources/views/blocks/article/view.js')
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
<section class="block-badegg-example">
|
||||
<div class="block-badegg-example">
|
||||
<h2>Bad Egg Example Block (Blade)</h2>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's script, loaded in block editor and front end
|
||||
console.log('loaded: resources/views/blocks/example/script.js')
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
// block.json's viewScript, applied on front end only
|
||||
console.log('loaded: resources/views/blocks/example/view.js')
|
||||
|
||||
23
resources/views/layouts/block-acf.blade.php
Normal file
23
resources/views/layouts/block-acf.blade.php
Normal file
@@ -0,0 +1,23 @@
|
||||
@php
|
||||
$settings = get_field('settings');
|
||||
|
||||
$sectionProps = [
|
||||
'class' => implode(' ', $CssClasses->section(get_field('settings'), @$block['name'], @$knockout)),
|
||||
];
|
||||
|
||||
$containerProps = [
|
||||
'width' => @$settings['container_width'],
|
||||
];
|
||||
@endphp
|
||||
|
||||
<div id="{{ @$block['anchor'] }}" @if($is_preview) class="{{ $sectionProps['class'] }}" @else {!! get_block_wrapper_attributes($sectionProps) !!} @endif>
|
||||
|
||||
@include('partials.block-acf-intro', ['props' => get_field('intro'), 'settings' => $settings])
|
||||
|
||||
<div class="{{ implode(' ', $CssClasses->container($containerProps)) }}">
|
||||
@yield('block-content')
|
||||
</div>
|
||||
|
||||
@include('partials.block-acf-footer', ['props' => get_field('footer'), 'settings' => $settings])
|
||||
|
||||
</div>
|
||||
@@ -1,50 +1,11 @@
|
||||
@if(@$data['section_anchor_id'])
|
||||
<div id="{{ $data['section_anchor_id'] }}" class="section-anchor"></div>
|
||||
@if(!$is_preview)
|
||||
<div {!! get_block_wrapper_attributes() !!}>
|
||||
@endif
|
||||
|
||||
<section
|
||||
id="{{ $block['id'] }}"
|
||||
class="badegg-block
|
||||
@if(@$data['section_classes']) {{ implode(' ', $data['section_classes']) }} @endif
|
||||
{{ @$block['className'] }}
|
||||
">
|
||||
|
||||
<div class="section-{{ $block['name'] }}-inner">
|
||||
@if(@$data['heading'] || @$data['blurb'])
|
||||
<div class="section-intro inner inner-bottom @if($data['bg_colour'] != 'white') knockout @endif">
|
||||
<div class="container">
|
||||
<div class="section-intro-inner wysiwyg">
|
||||
<h2>{{ @$data['heading'] }}</h2>
|
||||
<p>{{ @$data['blurb'] }}</p>
|
||||
</div>
|
||||
|
||||
@if(@$data['links'])
|
||||
<div class="btn-wrap">
|
||||
@foreach($data['links'] as $link)
|
||||
@include('components.button', $link)
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="container container-{{ @$data['container_width'] ? $data['container_width'] : 'medium' }} block-content">
|
||||
@yield('block-content')
|
||||
</div>
|
||||
|
||||
@if(@$data['links'])
|
||||
<div class="section-footer inner-top">
|
||||
<div class="container">
|
||||
<div class="btn-wrap">
|
||||
@foreach($data['links'] as $link)
|
||||
@include('components.button', $link)
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
<div class="wp-block-inner">
|
||||
@yield('block-content')
|
||||
</div>
|
||||
|
||||
@if(!$is_preview)
|
||||
</div>
|
||||
|
||||
</section>
|
||||
@endif
|
||||
|
||||
30
resources/views/partials/block-acf-footer.blade.php
Normal file
30
resources/views/partials/block-acf-footer.blade.php
Normal file
@@ -0,0 +1,30 @@
|
||||
@if($props['blurb'])
|
||||
@php
|
||||
$containerProps = [
|
||||
'width' => $props['container_width'],
|
||||
'location' => 'block-footer',
|
||||
'section' => true,
|
||||
'align' => $props['align'],
|
||||
'wysiwyg' => true,
|
||||
];
|
||||
@endphp
|
||||
|
||||
<div class="{{ implode(' ', $CssClasses->container($containerProps, @$settings)) }}">
|
||||
@if($props['blurb']) <p>{{ $props['blurb'] }}</p> @endif
|
||||
|
||||
@if(@$props['links'])
|
||||
<div class="section-footer inner-top">
|
||||
<div class="container">
|
||||
<div class="btn-wrap">
|
||||
@foreach($props['links'] as $link)
|
||||
@include('components.button', $link)
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
@endif
|
||||
|
||||
|
||||
17
resources/views/partials/block-acf-intro.blade.php
Normal file
17
resources/views/partials/block-acf-intro.blade.php
Normal file
@@ -0,0 +1,17 @@
|
||||
@if(@$props['heading'] || @$props['blurb'])
|
||||
@php
|
||||
$containerProps = [
|
||||
'width' => $props['container_width'],
|
||||
'location' => 'block-intro',
|
||||
'section' => true,
|
||||
'align' => $props['align'],
|
||||
'wysiwyg' => true,
|
||||
];
|
||||
@endphp
|
||||
|
||||
<div class="{{ implode(' ', $CssClasses->container($containerProps, @$settings)) }}">
|
||||
@if($props['heading']) <h2>{{ $props['heading'] }}</h3> @endif
|
||||
@if($props['blurb']) <p>{{ $props['blurb'] }}</p> @endif
|
||||
</div>
|
||||
|
||||
@endif
|
||||
Reference in New Issue
Block a user