Compare commits

...

3 Commits

38 changed files with 894 additions and 755 deletions

View File

@@ -8,21 +8,51 @@ class CloneGroup
{
}
public function background()
public function block_background()
{
return [
'contrast',
'bg_type',
'bg_colour',
'bg_tint',
'bg_opacity',
'bg_image',
'bg_video',
'pattern',
'pattern_top',
'pattern_bottom',
'padding_top',
'padding_bottom',
];
}
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());
}
}

View File

@@ -15,6 +15,7 @@ class Dynamic
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'] );
}
public function load_colours( $field )
@@ -98,5 +99,43 @@ class Dynamic
return $choices;
}
public function colour_ui()
{ ?>
<script type="text/javascript">
console.log("Script loaded from sage/app/ACF/Dynamic.php");
(function($) {
function my_custom_escaping_method( original_value){
return original_value;
}
acf.add_filter('select2_escape_markup', function( escaped_value, original_value, $select, settings, field, instance ){
console.log(field.data('name'));
const whitelist = [
'colour',
'bg_colour',
'angle_colour',
'fontawesome_brands',
];
// do something to the original_value to override the default escaping, then return it.
// this value should still have some kind of escaping for security, but you may wish to allow specific HTML.
if (whitelist.includes(field.data( 'name' ))) {
return my_custom_escaping_method( original_value );
}
// return
return escaped_value;
});
})(jQuery);
</script>
<?php }
}

View File

@@ -1,14 +1,30 @@
<?php
namespace App\Admin;
use Blocks\Editor;
class Blocks
{
public function __construct()
{
add_filter( 'block_categories_all' , [$this, 'categories']);
add_action('allowed_block_types_all', [$this, 'blacklist'], 100, 2);
}
public function categories( $categories )
{
// Adding a new category.
$categories = array_merge([
[
'slug' => 'badegg',
'title' => __('Provided by Bad Egg Digital'),
],
], $categories);
return $categories;
}
public function blacklist()
{
// Reference:
@@ -130,6 +146,10 @@ class Blocks
'core/social-links',
];
$Editor = new Editor\Editor();
$blacklist = array_diff($blacklist, $Editor->inner_blocks());
return array_values( array_diff( $blocks, $blacklist ) );
}
}

View File

@@ -1,65 +0,0 @@
<?php
namespace App\Blocks;
use App\Utilities;
use App\ACF;
class BadExample
{
public function __construct()
{
add_action('acf/init', [$this, 'init']);
}
public function init()
{
acf_register_block_type([
'name' => 'badegg/bad-example',
'title' => __('Bad Example'),
'description' => __('This is an example block'),
'render_callback' => [ $this, 'render'],
'category' => 'layout',
'multiple' => false,
'icon' => [
'src' => 'dismiss',
],
'supports' => [
'align' => false,
],
]);
}
public function render($block)
{
$CssClasses = new Utilities\CssClasses;
$Colour = new Utilities\Colour;
$CloneGroup = new ACF\CloneGroup;
$data = [];
$fields = [
'heading',
'blurb',
];
$fields = array_merge($fields, $CloneGroup->background());
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['block'] = $block;
$data['knockout'] = ($Colour->is_dark($data['bg_colour'], $data['bg_tint'], $data['contrast'])) ? null : 'knockout';
echo \Roots\view('blocks.bad-example', [
'data' => $data,
'block' => $block,
])->render();
}
}

View File

@@ -14,7 +14,8 @@ class CssClasses {
$classes = [
'section',
'section-' . str_replace('acf/', '', $props['name']),
'section-' . $props['name'],
// 'section-' . str_replace('acf/', '', $props['name']),
'bg-' . $this->colourTint([
'colour' => @$props['bg_colour'],
'tint' => @$props['bg_tint'],

View File

@@ -31,9 +31,6 @@ class App extends Composer
'VideoSrcset' => new Utilities\VideoSrcset,
'ImageSrcset' => new Utilities\ImageSrcset,
'siteName' => $this->siteName(),
'company_legal' => get_field('badegg_company_legal', 'option'),
'company_tel' => get_field('badegg_company_tel', 'option'),
'company_email' => get_field('badegg_company_email', 'option'),
];
}
}

View File

@@ -46,6 +46,16 @@ add_filter('admin_head', function () {
])->toHtml();
});
add_action( 'enqueue_block_editor_assets', function(){
wp_enqueue_script(
'restrict-core-blocks',
Vite::asset('resources/js/admin/block-restrictions.js'),
array( 'wp-blocks', 'wp-dom-ready', 'wp-edit-blocks', 'wp-hooks' ),
'v1.0.0',
true
);
});
/**
* Use the generated theme.json file.
*

View File

@@ -35,7 +35,8 @@
},
"autoload": {
"psr-4": {
"App\\": "app/"
"App\\": "app/",
"Blocks\\": "resources/views/blocks"
}
},
"require": {

View File

@@ -57,9 +57,22 @@ autoload_psr4('PostTypes');
autoload_psr4('ACF');
autoload_psr4('Utilities');
autoload_psr4('Admin');
autoload_psr4('Blocks');
autoload_psr4('Ajax');
function autoload_psr4_blocks() {
$path = __dir__ . '/resources/views/blocks/*';
$namespace = 'Blocks\\';
foreach(glob($path, GLOB_ONLYDIR) as $directory) {
$name = basename($directory);
$class = $namespace . $name . '\\' . $name;
new $class();
}
}
autoload_psr4_blocks();
/*
|--------------------------------------------------------------------------
| Register Sage Theme Files

View File

@@ -1,9 +1,9 @@
{
"key": "group_block_bad_example",
"title": "Block: Bad Example",
"key": "group_block_editor",
"title": "Block: Editor",
"fields": [
{
"key": "field_676599038e31d",
"key": "field_67659ad8dc795",
"label": "",
"name": "",
"aria-label": "",
@@ -16,42 +16,7 @@
"class": "",
"id": ""
},
"message": "<h3><span class=\"dashicons dashicons-dismiss\"><\/span> Bad Example<\/h3>",
"new_lines": "wpautop",
"esc_html": 0
},
{
"key": "field_67659accdc794",
"label": "Content",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0
},
{
"key": "field_67659ad8dc795",
"label": "Example",
"name": "",
"aria-label": "",
"type": "message",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"message": "Place your block-specific custom fields here.",
"message": "You can insert a variety of blocks inside of this one to build your page or post.",
"new_lines": "wpautop",
"esc_html": 0
},
@@ -127,7 +92,7 @@
{
"param": "block",
"operator": "==",
"value": "acf\/badegg-bad-example"
"value": "acf\/badegg-editor"
}
]
],
@@ -140,5 +105,5 @@
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1734712286
"modified": 1763915024
}

View File

@@ -1,82 +0,0 @@
{
"key": "group_block_intro",
"title": "Clone: Block Intro",
"fields": [
{
"key": "field_67659970db415",
"label": "Introduction",
"name": "",
"aria-label": "",
"type": "tab",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"placement": "top",
"endpoint": 0
},
{
"key": "field_676599964d3cc",
"label": "Heading",
"name": "heading",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"placeholder": "",
"prepend": "",
"append": ""
},
{
"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": ""
}
],
"location": [
[
{
"param": "widget",
"operator": "==",
"value": "rss"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1734711913
}

View File

@@ -2,36 +2,9 @@
"key": "group_clone_background_settings",
"title": "Clone: Background Settings",
"fields": [
{
"key": "field_672d3ba78bc40",
"label": "Background Type",
"name": "bg_type",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"choices": {
"0": "Solid Colour",
"image": "Still Photo",
"video": "Looping Video"
},
"default_value": 0,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"ui": 0,
"ajax": 0,
"placeholder": ""
},
{
"key": "field_67325dd23234e",
"label": "Background Colour",
"label": "Colour",
"name": "bg_colour",
"aria-label": "",
"type": "select",
@@ -39,30 +12,28 @@
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"width": "50",
"class": "",
"id": ""
},
"choices": {
"primary": "<i class=\"fas fa-circle\" style=\"color: #7A74A6\"><\/i> Kimberly",
"secondary": "<i class=\"fas fa-circle\" style=\"color: #9C729E\"><\/i> Trendy Pink",
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #B8728B\"><\/i> Turkish Rose",
"quaternary": "<i class=\"fas fa-circle\" style=\"color: #5875A0\"><\/i> Waikawa Gray",
"quinary": "<i class=\"fas fa-circle\" style=\"color: #4298B7\"><\/i> Boston Blue",
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black",
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White"
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White",
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black"
},
"default_value": 0,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 1,
"ui": 1,
"ajax": 0,
"placeholder": ""
"placeholder": "",
"create_options": 0,
"save_options": 0
},
{
"key": "field_67325e213234f",
"label": "Background Tint",
"label": "Tint",
"name": "bg_tint",
"aria-label": "",
"type": "select",
@@ -70,7 +41,7 @@
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"width": "50",
"class": "",
"id": ""
},
@@ -87,9 +58,12 @@
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 1,
"ui": 1,
"ajax": 0,
"placeholder": ""
"placeholder": "",
"create_options": 0,
"save_options": 0
},
{
"key": "field_67350f526abf1",
@@ -101,7 +75,7 @@
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"width": "",
"class": "",
"id": ""
},
@@ -116,413 +90,9 @@
"allow_null": 0,
"ui": 0,
"ajax": 0,
"placeholder": ""
},
{
"key": "field_67325e3432350",
"label": "Opacity",
"name": "bg_opacity",
"aria-label": "",
"type": "range",
"instructions": "",
"required": 0,
"conditional_logic": [
[
{
"field": "field_672d3ba78bc40",
"operator": "!=",
"value": "0"
}
]
],
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"default_value": 30,
"min": 5,
"max": 100,
"step": 5,
"prepend": "",
"append": "%"
},
{
"key": "field_6734b234f9c47",
"label": "Pattern Edge",
"name": "pattern",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"choices": {
"0": "Disabled",
"top": "Top",
"bottom": "Bottom",
"both": "Both"
},
"default_value": 0,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"ui": 0,
"ajax": 0,
"placeholder": ""
},
{
"key": "field_6734b2daf9c4b",
"label": "Top Pattern",
"name": "pattern_top",
"aria-label": "",
"type": "group",
"instructions": "",
"required": 0,
"conditional_logic": [
[
{
"field": "field_6734b234f9c47",
"operator": "==",
"value": "top"
}
],
[
{
"field": "field_6734b234f9c47",
"operator": "==",
"value": "both"
}
]
],
"wrapper": {
"width": "40",
"class": "",
"id": ""
},
"layout": "block",
"sub_fields": [
{
"key": "field_673514b45e977",
"label": "Colour",
"name": "colour",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "50",
"class": "",
"id": ""
},
"choices": {
"primary": "<i class=\"fas fa-circle\" style=\"color: #7A74A6\"><\/i> Kimberly",
"secondary": "<i class=\"fas fa-circle\" style=\"color: #9C729E\"><\/i> Trendy Pink",
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #B8728B\"><\/i> Turkish Rose",
"quaternary": "<i class=\"fas fa-circle\" style=\"color: #5875A0\"><\/i> Waikawa Gray",
"quinary": "<i class=\"fas fa-circle\" style=\"color: #4298B7\"><\/i> Boston Blue",
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black",
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White"
},
"default_value": false,
"return_format": "",
"multiple": 0,
"allow_null": 0,
"ui": 1,
"ajax": 0,
"placeholder": ""
},
{
"key": "field_673514d85e978",
"label": "Tint",
"name": "tint",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "50",
"class": "",
"id": ""
},
"choices": {
"lightest": "Lightest",
"lighter": "Lighter",
"light": "Light",
"0": "None",
"dark": "Dark",
"darker": "Darker",
"darkest": "Darkest"
},
"default_value": 0,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"ui": 0,
"ajax": 0,
"placeholder": ""
}
]
},
{
"key": "field_673514f15e979",
"label": "Bottom Pattern",
"name": "pattern_bottom",
"aria-label": "",
"type": "group",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "40",
"class": "",
"id": ""
},
"layout": "block",
"sub_fields": [
{
"key": "field_673514f15e97a",
"label": "Colour",
"name": "colour",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "50",
"class": "",
"id": ""
},
"choices": {
"primary": "<i class=\"fas fa-circle\" style=\"color: #7A74A6\"><\/i> Kimberly",
"secondary": "<i class=\"fas fa-circle\" style=\"color: #9C729E\"><\/i> Trendy Pink",
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #B8728B\"><\/i> Turkish Rose",
"quaternary": "<i class=\"fas fa-circle\" style=\"color: #5875A0\"><\/i> Waikawa Gray",
"quinary": "<i class=\"fas fa-circle\" style=\"color: #4298B7\"><\/i> Boston Blue",
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black",
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White"
},
"default_value": false,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"ui": 1,
"ajax": 0,
"placeholder": ""
},
{
"key": "field_673514f15e97b",
"label": "Tint",
"name": "tint",
"aria-label": "",
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": [
[
{
"field": "field_673514f15e97a",
"operator": "!=",
"value": "black"
}
],
[
{
"field": "field_673514f15e97a",
"operator": "!=",
"value": "0"
}
]
],
"wrapper": {
"width": "50",
"class": "",
"id": ""
},
"choices": {
"lightest": "Lightest",
"lighter": "Lighter",
"light": "Light",
"0": "None",
"dark": "Dark",
"darker": "Darker",
"darkest": "Darkest"
},
"default_value": 0,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"ui": 0,
"ajax": 0,
"placeholder": ""
}
]
},
{
"key": "field_672d3b128bc39",
"label": "Background Image",
"name": "bg_image",
"aria-label": "",
"type": "image",
"instructions": "",
"required": 0,
"conditional_logic": [
[
{
"field": "field_672d3ba78bc40",
"operator": "!=",
"value": "0"
}
]
],
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"return_format": "id",
"library": "all",
"min_width": "",
"min_height": "",
"min_size": "",
"max_width": "",
"max_height": "",
"max_size": "",
"mime_types": "",
"preview_size": "medium"
},
{
"key": "field_672d3b228bc3a",
"label": "Background Video",
"name": "bg_video",
"aria-label": "",
"type": "group",
"instructions": "",
"required": 0,
"conditional_logic": [
[
{
"field": "field_672d3ba78bc40",
"operator": "==",
"value": "video"
}
]
],
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"layout": "block",
"sub_fields": [
{
"key": "field_672d3b428bc3b",
"label": "Extra Small",
"name": "xs",
"aria-label": "",
"type": "file",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"return_format": "array",
"library": "all",
"min_size": "",
"max_size": "",
"mime_types": "mp4"
},
{
"key": "field_672d3b678bc3c",
"label": "Small",
"name": "sm",
"aria-label": "",
"type": "file",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"return_format": "array",
"library": "all",
"min_size": "",
"max_size": "",
"mime_types": "mp4"
},
{
"key": "field_672d3b728bc3d",
"label": "Medium",
"name": "md",
"aria-label": "",
"type": "file",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"return_format": "array",
"library": "all",
"min_size": "",
"max_size": "",
"mime_types": "mp4"
},
{
"key": "field_672d3b7a8bc3e",
"label": "Large",
"name": "lg",
"aria-label": "",
"type": "file",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"return_format": "array",
"library": "all",
"min_size": "",
"max_size": "",
"mime_types": "mp4"
},
{
"key": "field_672d3b838bc3f",
"label": "Extra Large",
"name": "xl",
"aria-label": "",
"type": "file",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "20",
"class": "",
"id": ""
},
"return_format": "array",
"library": "all",
"min_size": "",
"max_size": "",
"mime_types": "mp4"
}
]
"placeholder": "",
"create_options": 0,
"save_options": 0
}
],
"location": [
@@ -543,5 +113,5 @@
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1733505903
"modified": 1764224358
}

View File

@@ -1,5 +1,5 @@
{
"key": "group_block_footer",
"key": "group_clone_block_footer",
"title": "Clone: Block Footer",
"fields": [
{
@@ -7,7 +7,7 @@
"label": "Footer",
"name": "",
"aria-label": "",
"type": "tab",
"type": "accordion",
"instructions": "",
"required": 0,
"conditional_logic": 0,
@@ -16,7 +16,8 @@
"class": "",
"id": ""
},
"placement": "top",
"open": 0,
"multi_expand": 0,
"endpoint": 0
},
{
@@ -53,7 +54,7 @@
"class": "",
"id": ""
},
"layout": "table",
"layout": "block",
"pagination": 0,
"min": 0,
"max": 2,
@@ -85,6 +86,54 @@
"parent_repeater": "field_67659b7502137"
}
]
},
{
"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",
"label": "Footer (end)",
"name": "",
"aria-label": "",
"type": "accordion",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"open": 0,
"multi_expand": 0,
"endpoint": 1
}
],
"location": [
@@ -105,5 +154,5 @@
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1734712326
"modified": 1747958307
}

View File

@@ -0,0 +1,149 @@
{
"key": "group_clone_block_intro",
"title": "Clone: Block Intro",
"fields": [
{
"key": "field_67659970db415",
"label": "Introduction",
"name": "",
"aria-label": "",
"type": "accordion",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"open": 0,
"multi_expand": 0,
"endpoint": 0
},
{
"key": "field_676599964d3cc",
"label": "Heading",
"name": "heading",
"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",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"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",
"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_68bf1126c2760"
}
]
},
{
"key": "field_6828dae1d1bb0",
"label": "Intro (end)",
"name": "",
"aria-label": "",
"type": "accordion",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"open": 0,
"multi_expand": 0,
"endpoint": 1
}
],
"location": [
[
{
"param": "widget",
"operator": "==",
"value": "rss"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1757498726
}

View File

@@ -7,7 +7,7 @@
"label": "Settings",
"name": "",
"aria-label": "",
"type": "tab",
"type": "accordion",
"instructions": "",
"required": 0,
"conditional_logic": 0,
@@ -16,9 +16,59 @@
"class": "",
"id": ""
},
"placement": "top",
"open": 0,
"multi_expand": 0,
"endpoint": 0
},
{
"key": "field_680016e0fac24",
"label": "Anchor ID",
"name": "section_anchor_id",
"aria-label": "",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"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": {
"0": "Full Width",
"large": "Large",
"medium": "Medium",
"small": "Small",
"narrow": "Narrow"
},
"default_value": 0,
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"ui": 0,
"ajax": 0,
"placeholder": ""
},
{
"key": "field_67350eb62cdf9",
"label": "Top Padding",
@@ -29,7 +79,7 @@
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "33.33",
"width": "50",
"class": "",
"id": ""
},
@@ -54,7 +104,7 @@
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "33.33",
"width": "50",
"class": "",
"id": ""
},
@@ -108,6 +158,46 @@
"layout": "block",
"prefix_label": 0,
"prefix_name": 0
},
{
"key": "field_67fff4d4ddbb7",
"label": "Angle",
"name": "angle",
"aria-label": "",
"type": "clone",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"clone": [
"group_clone_angle"
],
"display": "seamless",
"layout": "block",
"prefix_label": 1,
"prefix_name": 1
},
{
"key": "field_6828da67543fc",
"label": "Settings (end)",
"name": "",
"aria-label": "",
"type": "accordion",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"open": 0,
"multi_expand": 0,
"endpoint": 1
}
],
"location": [
@@ -128,5 +218,5 @@
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1731536288
"modified": 1747508044
}

View File

@@ -9,14 +9,15 @@
"aria-label": "",
"type": "link",
"instructions": "",
"required": 0,
"required": 1,
"conditional_logic": 0,
"wrapper": {
"width": "40",
"width": "",
"class": "",
"id": ""
},
"return_format": "array"
"return_format": "array",
"allow_in_bindings": 1
},
{
"key": "field_673529a2a37a1",
@@ -26,14 +27,22 @@
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"conditional_logic": [
[
{
"field": "field_672d3d7b2c273",
"operator": "!=empty"
}
]
],
"wrapper": {
"width": "20",
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"allow_in_bindings": 1,
"placeholder": "",
"prepend": "",
"append": ""
@@ -46,28 +55,42 @@
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"conditional_logic": [
[
{
"field": "field_672d3d7b2c273",
"operator": "!=empty"
}
]
],
"wrapper": {
"width": "20",
"width": "",
"class": "",
"id": ""
},
"choices": {
"primary": "<i class=\"fas fa-circle\" style=\"color: #7A74A6\"><\/i> Kimberly",
"secondary": "<i class=\"fas fa-circle\" style=\"color: #9C729E\"><\/i> Trendy Pink",
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #B8728B\"><\/i> Turkish Rose",
"quaternary": "<i class=\"fas fa-circle\" style=\"color: #5875A0\"><\/i> Waikawa Gray",
"quinary": "<i class=\"fas fa-circle\" style=\"color: #4298B7\"><\/i> Boston Blue",
"primary": "<i class=\"fas fa-circle\" style=\"color: #002448\"><\/i> Prussian Blue",
"secondary": "<i class=\"fas fa-circle\" style=\"color: #fc533e\"><\/i> Sunset Orange",
"tertiary": "<i class=\"fas fa-circle\" style=\"color: #fdd400\"><\/i> Gold",
"quaternary": "<i class=\"fas fa-circle\" style=\"color: #7d89d1\"><\/i> Moody Blue",
"quinary": "<i class=\"fas fa-circle\" style=\"color: #ffdab4\"><\/i> Frangipani",
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White",
"black": "<i class=\"fas fa-circle\" style=\"color: #000000\"><\/i> Black",
"0": "<i class=\"fas fa-circle\" style=\"color: #FFFFFF\"><\/i> White"
"quaternary-white": "<i class=\"fas fa-circle text-gradient text-gradient-quaternary-white\"><\/i> Moody Blue to White",
"quinary-white": "<i class=\"fas fa-circle text-gradient text-gradient-quinary-white\"><\/i> Frangipani to White",
"white-quaternary": "<i class=\"fas fa-circle text-gradient text-gradient-white-quaternary\"><\/i> White to Moody Blue",
"white-quinary": "<i class=\"fas fa-circle text-gradient text-gradient-white-quinary\"><\/i> White to Frangipani"
},
"default_value": 0,
"default_value": "primary",
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 1,
"ui": 1,
"ajax": 0,
"placeholder": ""
"placeholder": "",
"create_options": 0,
"save_options": 0
},
{
"key": "field_672d3dc52c275",
@@ -77,9 +100,16 @@
"type": "select",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"conditional_logic": [
[
{
"field": "field_672d3d7b2c273",
"operator": "!=empty"
}
]
],
"wrapper": {
"width": "20",
"width": "",
"class": "",
"id": ""
},
@@ -91,9 +121,12 @@
"return_format": "value",
"multiple": 0,
"allow_null": 0,
"allow_in_bindings": 1,
"ui": 0,
"ajax": 0,
"placeholder": ""
"placeholder": "",
"create_options": 0,
"save_options": 0
}
],
"location": [
@@ -114,5 +147,5 @@
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1731537485
"modified": 1748001311
}

View File

@@ -492,7 +492,9 @@
"allow_null": 0,
"ui": 1,
"ajax": 0,
"placeholder": ""
"placeholder": "",
"create_options": 0,
"save_options": 0
},
{
"key": "field_664c65c653f1c",
@@ -530,5 +532,5 @@
"active": true,
"description": "",
"show_in_rest": 0,
"modified": 1734711372
"modified": 1764224435
}

View File

@@ -0,0 +1,53 @@
@use "./app";
.editor-styles-wrapper {
padding: 1em;
background: transparent;
}
.editor-visual-editor {
.wp-block {
max-width: none;
}
.block-list-appender {
width: 350px;
max-width: 90%;
margin: 1em auto;
background: white;
}
&__post-title-wrapper {
padding: 1rem;
margin: 0 0 3rem !important;
background: white;
box-shadow: 0 0.5rem 1rem rgba(black, 0.15);
}
.wp-block-post-title {
position: relative;
padding: 0.5rem;
border: 1px solid rgba(black, 0.3);
margin: 0;
&::before {
content: 'Page Title';
position: absolute;
top: -0.5rem;
left: 0.5rem;
color: rgba(black, 0.3);
font-size: 0.8rem;
display: block;
padding: 0 0.5rem;
margin: 0;
background: white;
line-height: 1;
font-weight: 400;
}
}
.wp-block-post-content {
// background: white;
// box-shadow: 0 0.5rem 1rem rgba(black, 0.15);
}
}

View File

@@ -63,7 +63,7 @@ p,
li,
td,
label {
color: colours.$grey;
color: colours.$grey-dark;
font-family: fonts.$font;
font-weight: 400;
line-height: 1.5em;

View File

@@ -3,16 +3,10 @@ import.meta.glob([
'../fonts/**',
]);
import domReady from '@wordpress/dom-ready';
import blocks from './blocks.js';
import Header from './sections/header.js';
import LazyLoad from './lib/Lazy.js';
/**
* Application entrypoint
*/
domReady(async () => {
LazyLoad();
blocks();
Header();
});
LazyLoad();
blocks();
Header();

View File

@@ -1,6 +1,6 @@
import BadExample from "./blocks/BadExample";
// import BadExample from "./blocks/BadExample";
export default function()
{
BadExample();
// BadExample();
}

View File

@@ -1,4 +0,0 @@
export default function BadExample()
{
}

View File

@@ -1,5 +1,52 @@
import domReady from '@wordpress/dom-ready';
domReady(() => {
//
const restrictEditorParentBlocks = (settings, name) => {
const TEXT_EDITOR_BLOCKS = [
// Design
'core/separator',
'core/spacer',
// Media
'core/cover',
'core/file',
'core/gallery',
'core/image',
'core/media-text',
'core/audio',
'core/video',
// Text
'core/footnotes',
'core/heading',
'core/list',
'core/code',
'core/details',
'core/freeform',
'core/list-item',
'core/missing',
'core/paragraph',
'core/preformatted',
'core/pullquote',
'core/quote',
'core/table',
'core/verse',
];
if (TEXT_EDITOR_BLOCKS.includes(name)) {
settings.parent = ['acf/badegg-editor']
}
// console.log(settings, name)
return settings
}
wp.hooks.addFilter(
'blocks.registerBlockType',
'your-project-name/restrict-parent-blocks',
restrictEditorParentBlocks
);
});

View File

@@ -0,0 +1,12 @@
export default function isInsideMyACFBlock(blockName)
{
const editor = wp.data.select('core/block-editor');
const selectedId = editor.getSelectedBlockClientId();
if (!selectedId) return false;
const parents = editor.getBlockParents(selectedId);
const parentNames = parents.map(id => editor.getBlockName(id));
return parentNames.includes(blockName);
}

View File

@@ -0,0 +1,21 @@
@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{{ @$data['container_width'] ? ' container-' . $data['container_width'] : '' }} 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.

After

Width:  |  Height:  |  Size: 40 KiB

View File

@@ -0,0 +1,137 @@
<?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, $content = '', $is_preview = false)
{
$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/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'] = $this->inner_blocks();
$data['template'] = $this->default_template();
$data['block'] = $block;
echo \Roots\view("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.',
],
],
];
}
public function inner_blocks()
{
return [
// Design
'core/separator',
'core/spacer',
// Media
'core/cover',
'core/file',
'core/gallery',
'core/image',
'core/media-text',
'core/audio',
'core/video',
// Text
'core/footnotes',
'core/heading',
'core/list',
'core/code',
'core/details',
'core/freeform',
'core/list-item',
'core/missing',
'core/paragraph',
'core/preformatted',
'core/pullquote',
'core/quote',
'core/table',
'core/verse',
];
}
}

View File

@@ -0,0 +1,5 @@
@if(@$link)
<a href="{{ @$link['url'] }}" target="{{ @$link['target'] }}" class="btn {{ @$colour ?: 'primary' }} {{ $style ?: 'solid' }} {{ @$class }}">
<span>{{ @$link['title'] }}</span>
</a>
@endif

View File

@@ -1,15 +1,18 @@
@php($image = wp_get_attachment_image_src(@$id, 'medium'))
@php($image = wp_get_attachment_image_src(@$id, @$size))
<img
@if(@$lazy)
src="{{ wp_get_attachment_image_src($id, 'lazy')[0] }}"
data-src="{{ $image[0] }}"
class="lazy"
@else
src="{{ $image[0] }}"
@endif
@if($image)
<img
@if(@$lazy && !is_admin())
src="{{ wp_get_attachment_image_src($id, 'lazy')[0] }}"
data-src="{{ @$image[0] }}"
class="lazy {{ @$class }}"
@else
src="{{ $image[0] }}"
class="{{ @$class }}"
@endif
alt="{{ get_post_meta( $id, '_wp_attachment_image_alt', true ) }}"
width="{{ $image[1] }}"
height="{{ $image[2] }}"
/>
alt="{{ get_post_meta( $id, '_wp_attachment_image_alt', true ) }}"
width="{{ $image[1] }}"
height="{{ $image[2] }}"
/>
@endif

View File

@@ -17,19 +17,24 @@
{{ __('Skip to content', 'sage') }}
</a>
@include('sections.header')
@include('sections.header.header')
<main id="main" class="main">
@yield('content')
</main>
<div class="wrapper">
<main id="main" class="main">
@yield('content')
</main>
@hasSection('sidebar')
<aside class="sidebar">
@yield('sidebar')
</aside>
@endif
@hasSection('sidebar')
<aside class="sidebar">
@yield('sidebar')
</aside>
@endif
@include('sections.footer.footer')
</div>
@include('partials.menu-off-canvas')
@include('sections.footer')
</div>
@php(do_action('get_footer'))

View File

@@ -1,34 +1,50 @@
<section id="{{ $block['id'] }}" class="{{ implode(' ', $data['section_classes']) }} {{ @$block['className'] }}">
@if(@$data['heading'] || @$data['blurb'])
<div class="section-intro container container-narrow align-centre wysiwyg bg-watermarked-content {{ @$data['knockout'] }}">
<h2>{{ @$data['heading'] }}</h2>
@include('components.divider')
<p>{{ @$data['blurb'] }}</p>
</div>
@endif
@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">
@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{{ @$data['container_width'] ? ' container-' . $data['container_width'] : '' }} 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="section container container-large block-content bg-watermarked-content">
@yield('block-content')
</div>
@if(@$data['links'])
<div class="section-footer container container-narrow align-centre wysiwyg bg-watermarked-content {{ @$data['knockout'] }}">
<div class="button-wrap">
@foreach($data['links'] as $link)
@include('components.button', $link)
@endforeach
</div>
</div>
@endif
@if(@$data['bg_image'])
<div class="bg-watermarked-image" style="opacity: {!! (@$data['bg_opacity'] ?: 30) * 0.01 !!}">
{!! $ImageSrcset->render([
'image' => $data['bg_image'],
'name' => 'hero',
'lazy' => true,
]) !!}
</div>
@endif
</section>

View File

@@ -0,0 +1,28 @@
<div class="menu-off-canvas bg-white">
<div class="inner">
<div class="menu-off-canvas-logo">
<a class="brand" href="{{ home_url('/') }}">
Site Logo
</a>
<button
class="block menu-toggle menu-close js-menu-close"
type="button"
command="toggle-popover"
commandfor="menu-side"
aria-expanded="false"
aria-controls="menu-side"
>
<i></i>
<i></i>
<i></i>
<span class="visually-hidden">Close Mobile Menu</span>
</button>
</div>
@if (has_nav_menu('primary_navigation'))
{!! wp_nav_menu(['theme_location' => 'primary_navigation', 'menu_class' => 'caret-links nolist']) !!}
@endif
</div>
</div>

View File

@@ -3,7 +3,7 @@ import laravel from 'laravel-vite-plugin'
import { wordpressPlugin, wordpressThemeJson } from '@roots/vite-plugin';
export default defineConfig({
base: '/app/themes/sage/public/build/',
base: '/app/themes/badegg/public/build/',
plugins: [
laravel({
input: [