From 586da211df0f3fc160ded27dacc990048e5baad6 Mon Sep 17 00:00:00 2001 From: Steve Ross Date: Fri, 20 Dec 2024 17:09:16 +0000 Subject: [PATCH] updates from most recent website build --- app/ACF/CloneGroup.php | 28 + app/ACF/Dynamic.php | 42 ++ app/ACF/Options.php | 23 + app/Admin/Blocks.php | 135 +++++ app/Admin/DisablePost.php | 27 + app/Admin/Integrations.php | 24 + app/Blocks/BadExample.php | 65 +++ app/Utilities/Colour.php | 168 ++++++ app/Utilities/CssClasses.php | 105 ++++ app/Utilities/ImageSrcset.php | 124 ++++ app/Utilities/VideoSrcset.php | 39 ++ app/View/Composers/App.php | 8 + app/View/Composers/Socials.php | 35 ++ app/setup.php | 17 + composer.json | 3 +- composer.lock | 54 +- functions.php | 3 + resources/acf/group_block_bad_example.json | 144 +++++ resources/acf/group_block_footer.json | 109 ++++ resources/acf/group_block_intro.json | 82 +++ .../acf/group_clone_background_settings.json | 547 ++++++++++++++++++ resources/acf/group_clone_block_settings.json | 132 +++++ resources/acf/group_clone_button.json | 118 ++++ .../acf/group_options_global_settings.json | 417 +++++++++++++ resources/acf/group_post_social.json | 2 +- resources/scripts/app.js | 7 +- resources/scripts/blocks.js | 6 + resources/scripts/blocks/BadExample.js | 4 + resources/scripts/lib/Lazy.js | 33 ++ resources/scripts/lib/VideoSrcset.js | 24 + resources/scripts/sections/header.js | 33 ++ resources/styles/app.scss | 14 +- resources/styles/blocks/BadExample.scss | 0 resources/styles/components/_button.scss | 108 ++++ resources/styles/components/_card.scss | 5 + resources/styles/components/_forms.scss | 286 +++++++++ resources/styles/global/_typography.scss | 10 + .../styles/global/framework/_normalise.scss | 10 + .../styles/global/framework/_spacing.scss | 51 +- resources/styles/sections/_footer.scss | 0 resources/styles/sections/_header.scss | 0 resources/views/blocks/bad-example.blade.php | 0 resources/views/components/image.blade.php | 15 + resources/views/components/socials.blade.php | 12 + resources/views/layouts/block.blade.php | 34 ++ yarn.lock | 6 +- 46 files changed, 3087 insertions(+), 22 deletions(-) create mode 100644 app/ACF/CloneGroup.php create mode 100644 app/ACF/Options.php create mode 100644 app/Admin/Blocks.php create mode 100644 app/Admin/DisablePost.php create mode 100644 app/Admin/Integrations.php create mode 100644 app/Blocks/BadExample.php create mode 100644 app/Utilities/Colour.php create mode 100644 app/Utilities/CssClasses.php create mode 100644 app/Utilities/ImageSrcset.php create mode 100644 app/Utilities/VideoSrcset.php create mode 100644 app/View/Composers/Socials.php create mode 100644 resources/acf/group_block_bad_example.json create mode 100644 resources/acf/group_block_footer.json create mode 100644 resources/acf/group_block_intro.json create mode 100644 resources/acf/group_clone_background_settings.json create mode 100644 resources/acf/group_clone_block_settings.json create mode 100644 resources/acf/group_clone_button.json create mode 100644 resources/acf/group_options_global_settings.json create mode 100644 resources/scripts/blocks.js create mode 100644 resources/scripts/blocks/BadExample.js create mode 100644 resources/scripts/lib/Lazy.js create mode 100644 resources/scripts/lib/VideoSrcset.js create mode 100644 resources/scripts/sections/header.js create mode 100644 resources/styles/blocks/BadExample.scss create mode 100644 resources/styles/components/_button.scss create mode 100644 resources/styles/components/_forms.scss create mode 100644 resources/styles/sections/_footer.scss create mode 100644 resources/styles/sections/_header.scss create mode 100644 resources/views/blocks/bad-example.blade.php create mode 100644 resources/views/components/image.blade.php create mode 100644 resources/views/components/socials.blade.php create mode 100644 resources/views/layouts/block.blade.php diff --git a/app/ACF/CloneGroup.php b/app/ACF/CloneGroup.php new file mode 100644 index 0000000..04052f0 --- /dev/null +++ b/app/ACF/CloneGroup.php @@ -0,0 +1,28 @@ +values(); + + $field['choices'] = []; + + foreach($colours as $slug => $hex): + $field['choices'][$slug] = ' ' . @$NameThatColour->name($hex)['name']; + endforeach; + + return $field; + + } + + public function load_tints( $field ) + { + $colour = new Utilities\Colour; + $tints = $colour->tints(); + + $field['choices'] = []; + + foreach($tints as $slug => $hex): + if($slug): + $field['choices'][$slug] = ucfirst($slug); + + else: + $field['choices'][0] = 'None'; + endif; + endforeach; + + return $field; + } + public function load_fontawesome_regular_icons( $field ) { $field['choices'] = []; diff --git a/app/ACF/Options.php b/app/ACF/Options.php new file mode 100644 index 0000000..0ccbdee --- /dev/null +++ b/app/ACF/Options.php @@ -0,0 +1,23 @@ + __('Global Settings'), + 'menu_title' => __('Global Settings'), + 'menu_slug' => 'theme-global-settings', + 'capability' => 'edit_others_posts', + 'redirect' => false, + 'icon_url' => 'dashicons-admin-site', + ]); + } +} diff --git a/app/Admin/Blocks.php b/app/Admin/Blocks.php new file mode 100644 index 0000000..5825412 --- /dev/null +++ b/app/Admin/Blocks.php @@ -0,0 +1,135 @@ +get_all_registered() ); + + $blacklist = [ + // Design + 'core/button', + 'core/comment-template', + 'core/home-link', + 'core/navigation-link', + 'core/navigation-submenu', + 'core/buttons', + 'core/column', + 'core/columns', + 'core/group', + 'core/more', + 'core/nextpage', + 'core/separator', + 'core/spacer', + 'core/text-columns', + + // Embed + 'core/embed', + + // Media + 'core/cover', + 'core/file', + 'core/gallery', + 'core/image', + 'core/media-text', + 'core/audio', + 'core/video', + + // Reusable + 'core/block', + + // 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', + + // Theme + 'core/avatar', + 'core/comment-author-name', + 'core/comment-content', + 'core/comment-date', + 'core/comment-edit-link', + 'core/comment-reply-link', + 'core/comments', + 'core/comments-pagination', + 'core/comments-pagination-next', + 'core/comments-pagination-numbers', + 'core/comments-pagination-previous', + 'core/comments-title', + 'core/loginout', + 'core/navigation', + 'core/pattern', + 'core/post-author', + 'core/post-author-biography', + 'core/post-author-name', + 'core/post-comments-form', + 'core/post-content', + 'core/post-date', + 'core/post-excerpt', + 'core/post-featured-image', + 'core/post-navigation-link', + 'core/post-template', + 'core/post-terms', + 'core/post-title', + 'core/query', + 'core/query-no-results', + 'core/query-pagination', + 'core/query-pagination-next', + 'core/query-pagination-numbers', + 'core/query-pagination-previous', + 'core/query-title', + 'core/read-more', + 'core/site-logo', + 'core/site-tagline', + 'core/site-title', + 'core/template-part', + 'core/term-description', + 'core/post-comments', + + // Widgets + 'core/legacy-widget', + 'core/widget-group', + 'core/archives', + 'core/calendar', + 'core/categories', + 'core/latest-comments', + 'core/latest-posts', + 'core/page-list', + 'core/page-list-item', + 'core/rss', + 'core/search', + 'core/shortcode', + 'core/social-link', + 'core/tag-cloud', + 'core/html', + 'core/social-links', + ]; + + return array_values( array_diff( $blocks, $blacklist ) ); + } +} diff --git a/app/Admin/DisablePost.php b/app/Admin/DisablePost.php new file mode 100644 index 0000000..3738ad0 --- /dev/null +++ b/app/Admin/DisablePost.php @@ -0,0 +1,27 @@ + + + + + + + '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(); + } +} diff --git a/app/Utilities/Colour.php b/app/Utilities/Colour.php new file mode 100644 index 0000000..7072062 --- /dev/null +++ b/app/Utilities/Colour.php @@ -0,0 +1,168 @@ +values()[(string)$colour]; + endif; + + if($tint): + $tints = $this->tints(); + $hex = $this->adjustBrightness($hex, $tints[$tint]); + endif; + + return $hex; + } + + public function values() + { + $colours = get_field('badegg_colours', 'option'); + + $values = []; + + if($colours): + foreach($colours as $index => $props): + $index = $index + 1; + $hex = @$props['hex']; + + if($hex) $values[$this->latinate($index)] = $hex; + endforeach; + endif; + + $values['0'] = '#FFFFFF'; + $values['black'] = '#000000'; + + return $values; + } + + public function tints() + { + return [ + 'lightest' => 100, + 'lighter' => 66, + 'light' => 33, + '0' => 0, + 'dark' => -33, + 'darker' => -66, + 'darkest' => -100, + ]; + } + + public function is_dark($colour = '#FFFFF', $tint = null, $override = null) + { + + if($override == 'light') return true; + if($override == 'dark') return false; + + // https://css-tricks.com/snippets/php/convert-hex-to-rgb/ + + if($tint) $colour = $this->adjustBrightness($colour, $this->tints()[$tint]); + + if ( @$colour[0] == '#' ) { + $colour = substr( $colour, 1 ); + } + + if ( strlen( $colour ) == 6 ) { + list( $r, $g, $b ) = [ + $colour[0] . $colour[1], + $colour[2] . $colour[3], + $colour[4] . $colour[5], + ]; + + } elseif ( strlen( $colour ) == 3 ) { + list( $r, $g, $b ) = [ + $colour[0] . $colour[0], + $colour[1] . $colour[1], + $colour[2] . $colour[2], + ]; + + } else { + return false; + } + + $r = hexdec( $r ); + $g = hexdec( $g ); + $b = hexdec( $b ); + // return array( 'red' => $r, 'green' => $g, 'blue' => $b ); + + $hsp = sqrt( + 0.299 * ($r * $r) + + 0.587 * ($g * $g) + + 0.114 * ($b * $b) + ); + + if($hsp > 200) { + return false; + } else { + return true; + } + } + + public function is_light($colour = '#000000', $tint = null) + { + if($this->is_dark($colour, $tint)) { + return false; + } else { + return true; + } + } + + public function adjustBrightness($hex, $steps) + { + // Steps should be between -255 and 255. Negative = darker, positive = lighter + $steps = max(-255, min(255, $steps)); + + // Normalize into a six character long hex string + $hex = str_replace('#', '', $hex); + if (strlen($hex) == 3) { + $hex = str_repeat(substr($hex,0,1), 2).str_repeat(substr($hex,1,1), 2).str_repeat(substr($hex,2,1), 2); + } + + // Split into three parts: R, G and B + $color_parts = str_split($hex, 2); + $return = '#'; + + foreach ($color_parts as $color) { + $color = hexdec($color); // Convert to decimal + $color = max(0,min(255,$color + $steps)); // Adjust color + $return .= str_pad(dechex($color), 2, '0', STR_PAD_LEFT); // Make two char hex code + } + + return $return; + } + + public function latinate($x = 0) + { + $latinate = [ + 1 => 'primary', + 2 => 'secondary', + 3 => 'tertiary', + 4 => 'quaternary', + 5 => 'quinary', + 6 => 'senary', + 7 => 'septenary', + 8 => 'octonary', + 9 => 'nonary', + 10 => 'denary', + 11 => 'undenary', + 12 => 'duodenary', + ]; + + if(array_key_exists($x, $latinate)): + return $latinate[$x]; + else: + return 0; + endif; + } +} diff --git a/app/Utilities/CssClasses.php b/app/Utilities/CssClasses.php new file mode 100644 index 0000000..9f95405 --- /dev/null +++ b/app/Utilities/CssClasses.php @@ -0,0 +1,105 @@ +name2hex(@$props['bg_colour'], @$props['bg_tint']); + + $pattern = @$props['pattern']; + $pattern_top = @$props['pattern_top']; + $pattern_bottom = @$props['pattern_bottom']; + + $classes = [ + 'section', + 'section-' . str_replace('acf/', '', $props['name']), + 'bg-' . $this->colourTint([ + 'colour' => @$props['bg_colour'], + 'tint' => @$props['bg_tint'], + ]), + ]; + + if($Colour->is_dark($hex) && $this->is_knockout_block($props['name'])) + $classes[] = 'knockout'; + + if(@$props['padding_top']) + $classes[] = 'section-zero-top'; + + 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']) + $classes[] = "bg-watermarked"; + + if(@$props['className']) $args = array_merge($classes, explode(' ', $props['className'])); + + return $classes; + } + + public function button($args = []) + { + $default_args = [ + 'colour' => null, + 'style' => null, + ]; + + $args = wp_parse_args($args, $default_args); + + $classes = [ + 'button', + ]; + + if($args['colour']) $classes[] = $args['colour']; + if($args['style']) $classes[] = $args['style']; + + return $classes; + } + + public function colourTint($props = []) + { + if(@$props['colour']): + $colour = $props['colour']; + + if($props['colour'] != 'black' && @$props['tint']): + $colour .= '-' . $props['tint']; + endif; + else: + $colour = 'white'; + endif; + + return $colour; + } + + public function is_knockout_block($name = null) + { + $blacklist = [ + 'bad-example', + ]; + + if(in_array($name, $blacklist)): + return false; + else: + return true; + endif; + } +} diff --git a/app/Utilities/ImageSrcset.php b/app/Utilities/ImageSrcset.php new file mode 100644 index 0000000..5f69d59 --- /dev/null +++ b/app/Utilities/ImageSrcset.php @@ -0,0 +1,124 @@ +default_args()); + $multipliers = $this->multipliers(); + + if(is_null($args['height'])) $args['height'] = $args['width']; + + + if($args['sizes'] < 5) $multipliers = array_slice($multipliers, 0, $args['sizes']); + + foreach ( $multipliers as $slug => $scale ): + add_image_size ( + $args['name'] . '-' . $slug, + round((int)$args['width'] * $scale), + round((int)$args['height'] * $scale), + $args['crop'] + ); + endforeach; + } + + public function default_args() + { + return [ + 'name' => 'hero', + 'width' => 1920, + 'height' => null, + 'crop' => true, + 'sizes' => 5, + ]; + } + + public function multipliers() + { + return [ + 'xl' => 1, + 'lg' => 0.75, + 'md' => 0.52083333, + 'sm' => 0.33333333, + 'xs' => 0.20833333, + ]; + } + + public function render($args = []) + { + global $_wp_additional_image_sizes; + + $default_args = [ + 'name' => 'hero', + 'image' => null, + 'lazy' => true, + 'sizes' => 5, + 'class' => null, + ]; + + $args = wp_parse_args($args, $default_args); + $name = $args['name']; + $image = ($args['image']) ? $args['image'] : get_post_thumbnail_id(); + + if(!$image) return false; + + $properties = @$_wp_additional_image_sizes[$name . '-xl']; + $width = @$properties['width']; + $height = @$properties['height']; + + $sizes = [ + 'xl' => 1, + 'lg' => 0.75, + 'md' => 0.52083333, + 'sm' => 0.33333333, + 'xs' => 0.20833333, + ]; + + if($args['sizes'] < 5) $sizes = array_slice($sizes, 0, $args['sizes']); + + $class = $name . '-image'; + if($args['class']) $class .= ' ' . $args['class']; + + ob_start(); + + $full = wp_get_attachment_image_src($image, $name . '-xl'); + $lazy = wp_get_attachment_image_src($image, 'lazy'); + $alt = get_post_meta( $image, '_wp_attachment_image_alt', true ); + + $srcsets = []; + foreach($sizes as $size => $multiplier) { + $file = wp_get_attachment_image_src($image, $name . '-' . $size); + $srcsets[] = $file[0] . ' ' . $file[1] . 'w'; + } + + $atts = [ + 'class' => $class, + 'src' => $full[0], + 'srcset' => implode(', ', $srcsets), + 'width' => $width, + 'height' => $height, + 'alt' => $alt, + ]; + + if($args['lazy']): + $atts['class'] .= ' lazy'; + $atts['src'] = $lazy[0]; + $atts['srcset'] = null; + $atts['data-src'] = $full[0]; + $atts['data-srcset'] = implode(', ', $srcsets); + endif; + + ?> + + $value): + if($value) echo $att . '="' . $value . '" '; + endforeach; ?> + /> + + $video): + if($video): + $sizes[$size] = $video['width']; + endif; + endforeach; + + if(!empty($sizes)): + return json_encode($sizes); + else: + return false; + endif; + } + + public function smallest($video_srcset = []) + { + if(empty($video_srcset)) return false; + + $smallest = null; + + foreach($video_srcset as $size => $video): + if($smallest) continue; + if($video) $smallest = $size; + endforeach; + + return $smallest; + } +} diff --git a/app/View/Composers/App.php b/app/View/Composers/App.php index 0d870d4..9797355 100644 --- a/app/View/Composers/App.php +++ b/app/View/Composers/App.php @@ -3,6 +3,7 @@ namespace App\View\Composers; use Roots\Acorn\View\Composer; +use App\Utilities; class App extends Composer { @@ -23,7 +24,14 @@ class App extends Composer public function with() { return [ + 'Colour' => new Utilities\Colour, + 'VideoSrcset' => new Utilities\VideoSrcset, + 'ImageSrcset' => new Utilities\ImageSrcset, 'siteName' => $this->siteName(), + 'siteLogo' => @file_get_contents(get_template_directory() . '/resources/images/logo-rhythm-road-entertainment.svg'), + 'company_legal' => get_field('badegg_company_legal', 'option'), + 'company_tel' => get_field('badegg_company_tel', 'option'), + 'company_email' => get_field('badegg_company_email', 'option'), ]; } diff --git a/app/View/Composers/Socials.php b/app/View/Composers/Socials.php new file mode 100644 index 0000000..47115b7 --- /dev/null +++ b/app/View/Composers/Socials.php @@ -0,0 +1,35 @@ + get_posts([ + 'post_type' => 'social', + 'order' => 'ASC', + 'orderby' => 'menu_order name', + 'posts_per_page' => -1, + 'fields' => 'ids', + ]), + ]; + } +} diff --git a/app/setup.php b/app/setup.php index 695a7b3..705c663 100644 --- a/app/setup.php +++ b/app/setup.php @@ -122,3 +122,20 @@ add_action('widgets_init', function () { 'id' => 'sidebar-footer', ] + $config); }); + +add_filter('admin_post_thumbnail_size', function(){ + return "medium"; +}); + +add_action( 'init', __NAMESPACE__ . '\\cors', 15 ); +function cors() { + + if(WP_ENV == 'development'): + header( 'Access-Control-Allow-Origin: *' ); + endif; + +} + +$image_srcset = new Utilities\ImageSrcset; +$image_srcset->add(['name' => 'hero', 'width' => 1920, 'height' => 1000]); +add_image_size('lazy', 50, 50); diff --git a/composer.json b/composer.json index 97e64d1..870d4b7 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,8 @@ } }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "ourcodeworld/name-that-color": "dev-master" }, "require-dev": { "laravel/pint": "^1.13" diff --git a/composer.lock b/composer.lock index 4d1abeb..ae732c0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,58 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d8fb7181c59363e264a92e0c7c1c932f", - "packages": [], + "content-hash": "4a53dd50b29d4fb05ac63597d41276d0", + "packages": [ + { + "name": "ourcodeworld/name-that-color", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/ourcodeworld/name-that-color.git", + "reference": "758b1f9b4b521da63f0ae4226e80cae620b0f648" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ourcodeworld/name-that-color/zipball/758b1f9b4b521da63f0ae4226e80cae620b0f648", + "reference": "758b1f9b4b521da63f0ae4226e80cae620b0f648", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "ourcodeworld\\NameThatColor\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "mit" + ], + "authors": [ + { + "name": "Carlos Delgado", + "email": "dev@ourcodeworld.com", + "homepage": "https://ourcodeworld.com" + } + ], + "description": "A non-official PHP port of the NTC JS library to find out the name of the closest matching color.", + "keywords": [ + "color converted", + "hex", + "hsl", + "name that color", + "rgb" + ], + "support": { + "issues": "https://github.com/ourcodeworld/name-that-color/issues", + "source": "https://github.com/ourcodeworld/name-that-color/tree/master" + }, + "time": "2018-08-03T18:14:49+00:00" + } + ], "packages-dev": [ { "name": "laravel/pint", diff --git a/functions.php b/functions.php index 1a56319..f5a34ef 100644 --- a/functions.php +++ b/functions.php @@ -60,7 +60,10 @@ function autoload_psr4($name) { autoload_psr4('PostTypes'); autoload_psr4('ACF'); +autoload_psr4('Utilities'); autoload_psr4('Admin'); +autoload_psr4('Blocks'); +autoload_psr4('Ajax'); /* |-------------------------------------------------------------------------- diff --git a/resources/acf/group_block_bad_example.json b/resources/acf/group_block_bad_example.json new file mode 100644 index 0000000..46929d9 --- /dev/null +++ b/resources/acf/group_block_bad_example.json @@ -0,0 +1,144 @@ +{ + "key": "group_block_bad_example", + "title": "Block: Bad Example", + "fields": [ + { + "key": "field_676599038e31d", + "label": "", + "name": "", + "aria-label": "", + "type": "message", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "message": "

<\/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.", + "new_lines": "wpautop", + "esc_html": 0 + }, + { + "key": "field_67659a9bdc792", + "label": "Introduction", + "name": "introduction", + "aria-label": "", + "type": "clone", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "clone": [ + "group_block_intro" + ], + "display": "seamless", + "layout": "block", + "prefix_label": 0, + "prefix_name": 0 + }, + { + "key": "field_67659bca78cfa", + "label": "Footer", + "name": "footer", + "aria-label": "", + "type": "clone", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "clone": [ + "group_block_footer" + ], + "display": "seamless", + "layout": "block", + "prefix_label": 0, + "prefix_name": 0 + }, + { + "key": "field_67659ab5dc793", + "label": "Settings", + "name": "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": "acf\/badegg-bad-example" + } + ] + ], + "menu_order": 0, + "position": "normal", + "style": "default", + "label_placement": "top", + "instruction_placement": "label", + "hide_on_screen": "", + "active": true, + "description": "", + "show_in_rest": 0, + "modified": 1734712286 +} diff --git a/resources/acf/group_block_footer.json b/resources/acf/group_block_footer.json new file mode 100644 index 0000000..08e144c --- /dev/null +++ b/resources/acf/group_block_footer.json @@ -0,0 +1,109 @@ +{ + "key": "group_block_footer", + "title": "Clone: Block Footer", + "fields": [ + { + "key": "field_67659b49a6db2", + "label": "Footer", + "name": "", + "aria-label": "", + "type": "tab", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "placement": "top", + "endpoint": 0 + }, + { + "key": "field_67659b49a754a", + "label": "Blurb", + "name": "blurb_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", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "layout": "table", + "pagination": 0, + "min": 0, + "max": 2, + "collapsed": "", + "button_label": "Add Button", + "rows_per_page": 20, + "sub_fields": [ + { + "key": "field_67659b8702138", + "label": "Button", + "name": "button", + "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_67659b7502137" + } + ] + } + ], + "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": 1734712326 +} diff --git a/resources/acf/group_block_intro.json b/resources/acf/group_block_intro.json new file mode 100644 index 0000000..8c5494b --- /dev/null +++ b/resources/acf/group_block_intro.json @@ -0,0 +1,82 @@ +{ + "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 +} diff --git a/resources/acf/group_clone_background_settings.json b/resources/acf/group_clone_background_settings.json new file mode 100644 index 0000000..c4474f7 --- /dev/null +++ b/resources/acf/group_clone_background_settings.json @@ -0,0 +1,547 @@ +{ + "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", + "name": "bg_colour", + "aria-label": "", + "type": "select", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "20", + "class": "", + "id": "" + }, + "choices": { + "primary": "<\/i> Kimberly", + "secondary": "<\/i> Trendy Pink", + "tertiary": "<\/i> Turkish Rose", + "quaternary": "<\/i> Waikawa Gray", + "quinary": "<\/i> Boston Blue", + "black": "<\/i> Black", + "0": "<\/i> White" + }, + "default_value": 0, + "return_format": "value", + "multiple": 0, + "allow_null": 0, + "ui": 1, + "ajax": 0, + "placeholder": "" + }, + { + "key": "field_67325e213234f", + "label": "Background Tint", + "name": "bg_tint", + "aria-label": "", + "type": "select", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "20", + "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": 1, + "ajax": 0, + "placeholder": "" + }, + { + "key": "field_67350f526abf1", + "label": "Text Contrast", + "name": "contrast", + "aria-label": "", + "type": "select", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "20", + "class": "", + "id": "" + }, + "choices": { + "0": "Auto", + "dark": "Force dark text", + "light": "Force light text" + }, + "default_value": 0, + "return_format": "value", + "multiple": 0, + "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> Kimberly", + "secondary": "<\/i> Trendy Pink", + "tertiary": "<\/i> Turkish Rose", + "quaternary": "<\/i> Waikawa Gray", + "quinary": "<\/i> Boston Blue", + "black": "<\/i> Black", + "0": "<\/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> Kimberly", + "secondary": "<\/i> Trendy Pink", + "tertiary": "<\/i> Turkish Rose", + "quaternary": "<\/i> Waikawa Gray", + "quinary": "<\/i> Boston Blue", + "black": "<\/i> Black", + "0": "<\/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" + } + ] + } + ], + "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": 1733505903 +} diff --git a/resources/acf/group_clone_block_settings.json b/resources/acf/group_clone_block_settings.json new file mode 100644 index 0000000..49b97d2 --- /dev/null +++ b/resources/acf/group_clone_block_settings.json @@ -0,0 +1,132 @@ +{ + "key": "group_clone_block_settings", + "title": "Clone: Block Settings", + "fields": [ + { + "key": "field_673511c31122f", + "label": "Settings", + "name": "", + "aria-label": "", + "type": "tab", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "placement": "top", + "endpoint": 0 + }, + { + "key": "field_67350eb62cdf9", + "label": "Top Padding", + "name": "padding_top", + "aria-label": "", + "type": "radio", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "33.33", + "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": "33.33", + "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": 0, + "multi_expand": 0, + "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 + } + ], + "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": 1731536288 +} diff --git a/resources/acf/group_clone_button.json b/resources/acf/group_clone_button.json new file mode 100644 index 0000000..a0e81b2 --- /dev/null +++ b/resources/acf/group_clone_button.json @@ -0,0 +1,118 @@ +{ + "key": "group_clone_button", + "title": "Clone: Button", + "fields": [ + { + "key": "field_672d3d7b2c273", + "label": "Link", + "name": "link", + "aria-label": "", + "type": "link", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "40", + "class": "", + "id": "" + }, + "return_format": "array" + }, + { + "key": "field_673529a2a37a1", + "label": "Class", + "name": "class", + "aria-label": "", + "type": "text", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "20", + "class": "", + "id": "" + }, + "default_value": "", + "maxlength": "", + "placeholder": "", + "prepend": "", + "append": "" + }, + { + "key": "field_672d3db22c274", + "label": "Colour", + "name": "colour", + "aria-label": "", + "type": "select", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "20", + "class": "", + "id": "" + }, + "choices": { + "primary": "<\/i> Kimberly", + "secondary": "<\/i> Trendy Pink", + "tertiary": "<\/i> Turkish Rose", + "quaternary": "<\/i> Waikawa Gray", + "quinary": "<\/i> Boston Blue", + "black": "<\/i> Black", + "0": "<\/i> White" + }, + "default_value": 0, + "return_format": "value", + "multiple": 0, + "allow_null": 0, + "ui": 1, + "ajax": 0, + "placeholder": "" + }, + { + "key": "field_672d3dc52c275", + "label": "Style", + "name": "style", + "aria-label": "", + "type": "select", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "20", + "class": "", + "id": "" + }, + "choices": { + "0": "Solid", + "outline": "Outline" + }, + "default_value": 0, + "return_format": "value", + "multiple": 0, + "allow_null": 0, + "ui": 0, + "ajax": 0, + "placeholder": "" + } + ], + "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": 1731537485 +} diff --git a/resources/acf/group_options_global_settings.json b/resources/acf/group_options_global_settings.json new file mode 100644 index 0000000..78926cd --- /dev/null +++ b/resources/acf/group_options_global_settings.json @@ -0,0 +1,417 @@ +{ + "key": "group_options_global_settings", + "title": "Options: Global Settings", + "fields": [ + { + "key": "field_67658e28aba4e", + "label": "Colours", + "name": "", + "aria-label": "", + "type": "tab", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "placement": "top", + "endpoint": 0 + }, + { + "key": "field_67658e49aba4f", + "label": "Brand Colours", + "name": "badegg_colours", + "aria-label": "", + "type": "repeater", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "layout": "block", + "pagination": 0, + "min": 0, + "max": 12, + "collapsed": "field_67658e96aba50", + "button_label": "Add Colour", + "rows_per_page": 20, + "sub_fields": [ + { + "key": "field_67658e96aba50", + "label": "", + "name": "hex", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string", + "parent_repeater": "field_67658e49aba4f" + }, + { + "key": "field_67658fba41889", + "label": "Tints", + "name": "tints", + "aria-label": "", + "type": "radio", + "instructions": "", + "required": 0, + "conditional_logic": [ + [ + { + "field": "field_67658e49aba4f", + "operator": "!=empty" + }, + { + "field": "field_67658e49aba4f", + "operator": "==empty" + } + ] + ], + "wrapper": { + "width": "15", + "class": "", + "id": "" + }, + "choices": [ + "Auto", + "Manual" + ], + "default_value": 0, + "return_format": "value", + "allow_null": 0, + "other_choice": 0, + "layout": "horizontal", + "save_other_choice": 0, + "parent_repeater": "field_67658e49aba4f" + }, + { + "key": "field_67658fe84188a", + "label": "Tint Selection", + "name": "", + "aria-label": "", + "type": "message", + "instructions": "", + "required": 0, + "conditional_logic": [ + [ + { + "field": "field_67658fba41889", + "operator": "==", + "value": "0" + } + ], + [ + { + "field": "field_67658e49aba4f", + "operator": "!=empty" + }, + { + "field": "field_67658e49aba4f", + "operator": "==empty" + } + ] + ], + "wrapper": { + "width": "70", + "class": "", + "id": "" + }, + "message": "Colour tints are automatically set by mathematically adjusting the brightness.", + "new_lines": "wpautop", + "esc_html": 0, + "parent_repeater": "field_67658e49aba4f" + }, + { + "key": "field_6765902f4188b", + "label": "Tint Selection", + "name": "tints", + "aria-label": "", + "type": "group", + "instructions": "Colour tints are automatically set by mathematically adjusting the brightness. Specify manual overrides here:", + "required": 0, + "conditional_logic": [ + [ + { + "field": "field_67658fba41889", + "operator": "==", + "value": "1" + } + ], + [ + { + "field": "field_67658e49aba4f", + "operator": "!=empty" + }, + { + "field": "field_67658e49aba4f", + "operator": "==empty" + } + ] + ], + "wrapper": { + "width": "70", + "class": "", + "id": "" + }, + "layout": "block", + "sub_fields": [ + { + "key": "field_676590414188c", + "label": "Lightest", + "name": "lightest", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "16.66", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string" + }, + { + "key": "field_676590684188d", + "label": "Lighter", + "name": "lighter", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "16.66", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string" + }, + { + "key": "field_6765907f4188e", + "label": "Light", + "name": "light", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "16.66", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string" + }, + { + "key": "field_676590924188f", + "label": "Dark", + "name": "dark", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "16.66", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string" + }, + { + "key": "field_6765909941890", + "label": "Darker", + "name": "darker", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "16.66", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string" + }, + { + "key": "field_6765909f41891", + "label": "Darkest", + "name": "darkest", + "aria-label": "", + "type": "color_picker", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "16.66", + "class": "", + "id": "" + }, + "default_value": "", + "enable_opacity": 0, + "return_format": "string" + } + ], + "parent_repeater": "field_67658e49aba4f" + } + ] + }, + { + "key": "field_67659ca28081d", + "label": "Company", + "name": "", + "aria-label": "", + "type": "tab", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "placement": "top", + "endpoint": 0 + }, + { + "key": "field_67659cb08081e", + "label": "Legal Name", + "name": "badegg_company_legal", + "aria-label": "", + "type": "text", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "default_value": "", + "maxlength": "", + "placeholder": "", + "prepend": "", + "append": "" + }, + { + "key": "field_67659cf08081f", + "label": "Telephone", + "name": "badegg_company_tel", + "aria-label": "", + "type": "text", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "50", + "class": "", + "id": "" + }, + "default_value": "", + "maxlength": "", + "placeholder": "", + "prepend": "", + "append": "" + }, + { + "key": "field_67659d0780820", + "label": "Email", + "name": "badegg_company_email", + "aria-label": "", + "type": "email", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "50", + "class": "", + "id": "" + }, + "default_value": "", + "placeholder": "", + "prepend": "", + "append": "" + }, + { + "key": "field_676594565ead1", + "label": "Integrations", + "name": "", + "aria-label": "", + "type": "tab", + "instructions": "", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "placement": "top", + "endpoint": 0 + }, + { + "key": "field_676594615ead2", + "label": "Fathom Analytics ID", + "name": "badegg_integrations_fathom_id", + "aria-label": "", + "type": "text", + "instructions": "A Google Analytics alternative that’s simple & privacy-first. Visit website<\/a>", + "required": 0, + "conditional_logic": 0, + "wrapper": { + "width": "", + "class": "", + "id": "" + }, + "default_value": "", + "maxlength": "", + "placeholder": "", + "prepend": "", + "append": "" + } + ], + "location": [ + [ + { + "param": "options_page", + "operator": "==", + "value": "theme-global-settings" + } + ] + ], + "menu_order": 0, + "position": "normal", + "style": "seamless", + "label_placement": "top", + "instruction_placement": "label", + "hide_on_screen": "", + "active": true, + "description": "", + "show_in_rest": 0, + "modified": 1734712625 +} diff --git a/resources/acf/group_post_social.json b/resources/acf/group_post_social.json index 84aa814..70ca9ae 100644 --- a/resources/acf/group_post_social.json +++ b/resources/acf/group_post_social.json @@ -530,5 +530,5 @@ "active": true, "description": "", "show_in_rest": 0, - "modified": 1730933517 + "modified": 1734711372 } diff --git a/resources/scripts/app.js b/resources/scripts/app.js index 6711ed1..7206699 100644 --- a/resources/scripts/app.js +++ b/resources/scripts/app.js @@ -1,10 +1,15 @@ import domReady from '@roots/sage/client/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(); }); /** diff --git a/resources/scripts/blocks.js b/resources/scripts/blocks.js new file mode 100644 index 0000000..96e9858 --- /dev/null +++ b/resources/scripts/blocks.js @@ -0,0 +1,6 @@ +import BadExample from "./blocks/BadExample"; + +export default function() +{ + BadExample(); +} diff --git a/resources/scripts/blocks/BadExample.js b/resources/scripts/blocks/BadExample.js new file mode 100644 index 0000000..f0c2bde --- /dev/null +++ b/resources/scripts/blocks/BadExample.js @@ -0,0 +1,4 @@ +export default function BadExample() +{ + +} diff --git a/resources/scripts/lib/Lazy.js b/resources/scripts/lib/Lazy.js new file mode 100644 index 0000000..89249d5 --- /dev/null +++ b/resources/scripts/lib/Lazy.js @@ -0,0 +1,33 @@ +export default function LazyLoadInit() +{ + document.addEventListener('DOMContentLoaded', LazyLoad()); +} + +function LazyLoad() { + + var lazyImages = [].slice.call(document.querySelectorAll('img.lazy')); + + if ('IntersectionObserver' in window) { + let lazyImageObserver = new IntersectionObserver(function(entries, observer) { + entries.forEach(function(entry) { + if (entry.isIntersecting) { + let lazyImage = entry.target; + lazyImage.src = lazyImage.dataset.src; + + if(lazyImage.dataset.srcset) { + lazyImage.srcset = lazyImage.dataset.srcset; + } + + lazyImage.classList.remove('lazy'); + lazyImageObserver.unobserve(lazyImage); + } + }); + }); + + lazyImages.forEach(function(lazyImage) { + lazyImageObserver.observe(lazyImage); + }); + } else { + // Possibly fall back to a more compatible method here + } +} diff --git a/resources/scripts/lib/VideoSrcset.js b/resources/scripts/lib/VideoSrcset.js new file mode 100644 index 0000000..7703fbe --- /dev/null +++ b/resources/scripts/lib/VideoSrcset.js @@ -0,0 +1,24 @@ +export default function VideoSrcset( element ) +{ + const sizes = JSON.parse(element.dataset.sizes); + + Object.keys(sizes).forEach((key) => { + const size = key; + const source = element.querySelector('.bgvid-' + size); + + if(source) { + const sourceWidth = source.dataset.width; + const poster = source.dataset.poster; + + if(window.innerWidth >= sourceWidth) { + console.log('screen width is greater than or equal to the source width'); + console.log('screen width: ' + window.innerWidth); + console.log('source width: ' + sourceWidth); + + element.src = source.src; + element.poster = poster; + element.load; + } + } + }); +} diff --git a/resources/scripts/sections/header.js b/resources/scripts/sections/header.js new file mode 100644 index 0000000..4388622 --- /dev/null +++ b/resources/scripts/sections/header.js @@ -0,0 +1,33 @@ +export default function Header() { + const body = document.querySelector("body"); + // const menuToggle = document.querySelector(".js-menu-toggle"); + // const menuClose = document.querySelector(".js-menu-close"); + + // menuToggle.addEventListener("click", (e) => { + // e.preventDefault(); + // body.classList.toggle("menu-open"); + // }); + + // menuClose.addEventListener("click", (e) => { + // e.preventDefault(); + // body.classList.remove("menu-open"); + // }); + + // document.addEventListener("keyup", function (event) { + // if (event.key === "Escape") { + // body.classList.remove("menu-open"); + // } + // }); + + document.addEventListener("scroll", () => { + const scrolled = document.scrollingElement.scrollTop; + const position = body.offsetTop; + const header = document.querySelector(".site-header"); + + if (scrolled > position + header.offsetHeight) { + body.classList.add("scrolled"); + } else { + body.classList.remove("scrolled"); + } + }); +} diff --git a/resources/styles/app.scss b/resources/styles/app.scss index 5d8c941..75bbd92 100644 --- a/resources/styles/app.scss +++ b/resources/styles/app.scss @@ -9,8 +9,18 @@ @import "plugins/contact-form-7"; @import "plugins/mce"; +// Sections +@import "sections/header"; +@import "sections/footer"; + +// Components +@import "components/forms"; +@import "components/button"; +@import "components/card"; + +// Blocks +@import "blocks/BadExample"; + // Page Styles @import "views/page"; -// Component Styles -@import "components/card"; diff --git a/resources/styles/blocks/BadExample.scss b/resources/styles/blocks/BadExample.scss new file mode 100644 index 0000000..e69de29 diff --git a/resources/styles/components/_button.scss b/resources/styles/components/_button.scss new file mode 100644 index 0000000..f238a5e --- /dev/null +++ b/resources/styles/components/_button.scss @@ -0,0 +1,108 @@ +button { + &%block, + &.block { + background-color: transparent; + border: none; + font-size: 1em; + padding: 0; + } +} + +button, +input[type="submit"] { + &.button { + appearance: none; + } +} + +%button, +.button { + display: inline-block; + padding: 0.5em 1.25em; + border: 0.125em solid $black; + border-radius: 0.25em; + background-color: $black; + color: $white; + font-family: $font; + font-weight: 700; + text-decoration: none; + white-space: normal; + cursor: pointer; + transition: 300ms ease all; + + .knockout & { + background-color: $white; + border-color: $white; + color: currentcolor; + } + + &:hover, + &:focus { + color: $white; + text-decoration: none; + background-color: rgba($black, 0.5); + border-color: rgba($black, 0.5); + + .knockout & { + background-color: rgba($white, 0.5); + border-color: rgba($white, 0.5); + color: currentcolor; + } + } + + &.outline { + border-color: $black; + background-color: transparent; + color: $black; + + &:hover, + &:focus { + background-color: $black; + color: $white; + } + + .knockout & { + @media screen { + border-color: $white; + color: $white; + + &:hover, + &:focus { + background-color: $white; + color: $black; + } + } + } + } + + &.wide { + padding-right: 3em; + padding-left: 3em; + } + + &.thin { + padding-top: 0.5em; + padding-bottom: 0.5em; + } + + &.full { + display: block; + width: 100%; + padding-right: 0.625em; + padding-left: 0.625em; + text-align: center; + } + + &.small { font-size: 1em; } + &.smaller { font-size: 0.875em; } + &.big { font-size: 1.25em; } + &.bigger { font-size: 1.5em; } +} + +.button-wrap { + margin: 1.5em -0.25em -0.25em; + + .button { + margin: 0.25em; + } +} diff --git a/resources/styles/components/_card.scss b/resources/styles/components/_card.scss index 6ecd040..f84d64a 100644 --- a/resources/styles/components/_card.scss +++ b/resources/styles/components/_card.scss @@ -1,8 +1,13 @@ .card { position: relative; margin: 0.5em; + flex: 0 0 calc(100% - 1em); &-wrap { + display: flex; + flex-wrap: wrap; margin: -0.5em; } } + + diff --git a/resources/styles/components/_forms.scss b/resources/styles/components/_forms.scss new file mode 100644 index 0000000..3ddb776 --- /dev/null +++ b/resources/styles/components/_forms.scss @@ -0,0 +1,286 @@ +textarea { + min-height: 10.375em; +} + +input, +textarea { + color: $grey; + background: white; + font-weight: 400; + font-size: 1em; + font-family: $font; + width: 100%; + padding: 0.875em 1em; + margin: 0 0 1em; + // border-radius: 0.125em; + border: 0.0625em solid rgba($black, 0.1); + outline: none; + transition: all 300ms ease; + + &::placeholder { + color: $grey-light; + } + + &:focus { + box-shadow: 0 0.25em 0.5em rgba($black, 0.1); + } +} + +input[type="radio"], +input[type="checkbox"] { + padding: 0; + margin: 0; + width: auto; + + &:focus { + box-shadow: none; + } +} + +select { + width: 100%; +} + +.field-wrap { + flex: 1 1 calc(100% - 1em); + margin: 0 0.5em; + transition: all 300ms ease; + + p { + display: flex; + flex-wrap: wrap; + } + + label { + flex: 0 0 100%; + max-width: 100%; + width: 100%; + order: -1; + margin: 0; + } + + textarea, + input { + flex: 1 1 100%; + margin: 0; + } + + /* stylelint-disable selector-class-pattern */ + .mce_inline_error { + flex: 0 0 100%; + max-width: 100%; + width: 100%; + margin: 0; + font-family: $font; + } + /* stylelint-enable selector-class-pattern */ + + @media (min-width: $screen-sm) { + &.half { + flex: 0 0 calc(50% - 1em); + max-width: calc(50% - 1em); + width: calc(50% - 1em); + } + } +} + +.form-footer { + p { + margin: 0; + line-height: 1.2; + } + + button, + .button, + input[type="submit"] { + margin: 0; + } + + .wpcf7-list-item { + margin: 0; + user-select: none; + } + + .form-footer-button { + flex: 1 1 100%; + display: block; + margin: 2em 0 0; + } + + @media (min-width: $screen-sm) { + display: flex; + flex-wrap: wrap; + + .form-footer-button { + flex: 0 0 8.5em; + max-width: 8.5em; + width: 8.5em; + margin: 0 0 0 2em; + text-align: right; + } + + .form-footer-text { + flex: 1 1 5em; + margin: auto; + + p { + display: block; + } + } + } +} + +.section-form { + button { + margin: 1em 0 0; + } + + span.label { + font-weight: 700; + } + + .textarea-wrap { + span.label { + display: none; + } + } + + form { + display: flex; + flex-wrap: wrap; + margin: 1em -0.5em 0; + position: relative; + + .wpcf7 { + .screen-reader-response { + display: none; + } + + &-spinner { + position: absolute; + z-index: 1; + top: calc(50% - 12px); + left: calc(50% - 12px); + } + + &-not-valid-tip { + background: $error; + color: $white; + padding: 0.5em 1em; + border-radius: 0 0 0.5em 0.5em; + font-weight: 700; + } + + &-response-output { + margin: 1em 0.5em 0; + max-width: calc(100% - 1em); + width: calc(100% - 1em); + flex: 0 0 calc(100% - 1em); + text-align: center; + color: $white; + font-family: $font; + font-weight: 700; + background: $black; + border: 0.125em solid $white; + padding: 0.5em 1em; + border-radius: 0.5em; + } + + &-display-none { + display: none; + } + + &-checkbox { + label { + display: block; + padding: 0 0 0 1.75em; + margin: 0; + font-weight: 700; + } + + input[type="checkbox"] { + position: absolute; + z-index: 1; + top: 0; + left: 0; + appearance: none; + display: block; + width: 1.25em; + height: 1.25em; + border: 0.125em solid $black; + background: transparent; + color: currentcolor; + + &::before { + content: "\f00c"; + position: absolute; + z-index: 1; + top: 0; + left: 0.125em; + font-family: "Font Awesome 6 Free", serif; + font-weight: 900; + opacity: 0; + transition: all 300ms ease; + } + + &:checked { + &::before { + opacity: 1; + } + } + } + } + } + + &.submitting { + .field-wrap:not(.form-footer) { + opacity: 0.1; + } + + .form-footer { + .form-footer-text { + opacity: 0.1; + } + + .form-footer-button input { + opacity: 0.1; + } + } + } + + &.sent { + .wpcf7-response-output { + background: $success; + border-color: $white; + } + } + + &.invalid { + .wpcf7-response-output { + background: $error; + border-color: $white; + } + } + + .ajax-loader { + position: absolute; + z-index: 1; + top: calc(50% - 12px); + right: calc(50% - 12px); + display: block; + margin: 0; + } + } + + &.knockout { + form { + .wpcf7 { + &-checkbox { + input[type="checkbox"] { + border-color: $white; + } + } + } + } + } +} diff --git a/resources/styles/global/_typography.scss b/resources/styles/global/_typography.scss index 7959f84..a84bcb7 100644 --- a/resources/styles/global/_typography.scss +++ b/resources/styles/global/_typography.scss @@ -135,3 +135,13 @@ hr { } } } + +.align { + &-centre { + text-align: center; + } + + &-right { + text-align: right; + } +} diff --git a/resources/styles/global/framework/_normalise.scss b/resources/styles/global/framework/_normalise.scss index e3e71ea..b6df21d 100644 --- a/resources/styles/global/framework/_normalise.scss +++ b/resources/styles/global/framework/_normalise.scss @@ -23,3 +23,13 @@ html { white-space: nowrap; width: 1px; } + +img { + max-width: 100%; + height: auto; + transition: all 300ms ease; + + &.lazy { + filter: blur(0.25em); + } +} diff --git a/resources/styles/global/framework/_spacing.scss b/resources/styles/global/framework/_spacing.scss index 291b0f7..de7ef6e 100644 --- a/resources/styles/global/framework/_spacing.scss +++ b/resources/styles/global/framework/_spacing.scss @@ -1,3 +1,28 @@ +.brand { + display: block; + width: $brandWidth; + height: $brandHeight; + + svg, + img { + display: block; + width: $brandWidth; + height: $brandHeight; + } + + .knockout & { + @media screen { + .fill-primary { + fill: $white; + } + + .fill-grey { + fill: rgba($white, 0.8); + } + } + } +} + .container { width: 90%; margin: auto; @@ -9,19 +34,11 @@ } .section { - padding: $sectionSmall; + padding: $sectionMedium 0; - @media (min-width: $screen-md) { - padding: $sectionMedium; - } - - @media (min-width: $screen-lg) { - padding: $sectionLarge; - } - - &-small { padding: $sectionSmall; } - &-medium { padding: $sectionMedium; } - &-large { padding: $sectionLarge; } + &-small { padding: $sectionSmall 0; } + &-medium { padding: $sectionMedium 0; } + &-large { padding: $sectionLarge 0; } &-zero-top { padding-top: 0; } &-zero-bottom { padding-bottom: 0; } @@ -32,6 +49,16 @@ &-small { padding: $innerSmall; } &-large { padding: $innerLarge; } + + &-zero-x { + padding-left: 0; + padding-right: 0; + } + + &-zero-y { + padding-top: 0; + padding-top: 0; + } } .rounded { diff --git a/resources/styles/sections/_footer.scss b/resources/styles/sections/_footer.scss new file mode 100644 index 0000000..e69de29 diff --git a/resources/styles/sections/_header.scss b/resources/styles/sections/_header.scss new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/blocks/bad-example.blade.php b/resources/views/blocks/bad-example.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/resources/views/components/image.blade.php b/resources/views/components/image.blade.php new file mode 100644 index 0000000..bcc84e5 --- /dev/null +++ b/resources/views/components/image.blade.php @@ -0,0 +1,15 @@ +@php($image = wp_get_attachment_image_src(@$id, 'medium')) + +{{ get_post_meta( $id, '_wp_attachment_image_alt', true ) }} diff --git a/resources/views/components/socials.blade.php b/resources/views/components/socials.blade.php new file mode 100644 index 0000000..a1cdb13 --- /dev/null +++ b/resources/views/components/socials.blade.php @@ -0,0 +1,12 @@ + diff --git a/resources/views/layouts/block.blade.php b/resources/views/layouts/block.blade.php new file mode 100644 index 0000000..48f7e62 --- /dev/null +++ b/resources/views/layouts/block.blade.php @@ -0,0 +1,34 @@ +
+ @if(@$data['heading'] || @$data['blurb']) +
+

{{ @$data['heading'] }}

+ @include('components.divider') +

{{ @$data['blurb'] }}

+
+ @endif + +
+ @yield('block-content') +
+ + @if(@$data['links']) + + @endif + + @if(@$data['bg_image']) +
+ {!! $ImageSrcset->render([ + 'image' => $data['bg_image'], + 'name' => 'hero', + 'lazy' => true, + ]) !!} +
+ @endif + +
diff --git a/yarn.lock b/yarn.lock index 16eb97d..6e00503 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1840,9 +1840,9 @@ caniuse-lite@1.0.30001643: integrity sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg== caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001640, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001669: - version "1.0.30001677" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz#27c2e2c637e007cfa864a16f7dfe7cde66b38b5f" - integrity sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog== + version "1.0.30001690" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== ccount@^2.0.0: version "2.0.1"