diff --git a/app/blocks.php b/app/blocks.php
index 5f1e190..6a9d961 100644
--- a/app/blocks.php
+++ b/app/blocks.php
@@ -147,6 +147,14 @@ add_action('init', function () {
'type' => 'string',
'default' => '',
],
+ 'background_fixed' => [
+ 'type' => 'boolean',
+ 'default' => false,
+ ],
+ 'background_contrast' => [
+ 'type' => 'boolean',
+ 'default' => false,
+ ],
],
];
diff --git a/resources/js/lib/blocks/AttachmentImage.jsx b/resources/js/blocks/components/AttachmentImage.jsx
similarity index 100%
rename from resources/js/lib/blocks/AttachmentImage.jsx
rename to resources/js/blocks/components/AttachmentImage.jsx
diff --git a/resources/js/blocks/components/BackgroundImage.jsx b/resources/js/blocks/components/BackgroundImage.jsx
new file mode 100644
index 0000000..46bae7b
--- /dev/null
+++ b/resources/js/blocks/components/BackgroundImage.jsx
@@ -0,0 +1,33 @@
+import { useSelect } from '@wordpress/data';
+
+/**
+ * BackgroundImage
+ *
+ * This component is used to display a background image for a block based on its attributes.
+ *
+ * @param {object} props
+ * @param {string} props.background_image The url of the background image.
+ * @param {string} props.background_position The background-position property.
+ * @param {boolean} props.background_fixed Toggle for background-attachment: fixed.
+ * @param {number} props.background_opacity The opacity value applied to the image.
+ * @returns {*} React JSX
+ */
+export default function BackgroundImage({ background_url, background_position = 'center', background_fixed = false, background_opacity = 70 }) {
+
+ return (
+ <>
+ {background_url && (
+
+ )}
+ >
+ )
+}
diff --git a/resources/js/blocks/components/BlockSettings.jsx b/resources/js/blocks/components/BlockSettings.jsx
new file mode 100644
index 0000000..7ed5aa1
--- /dev/null
+++ b/resources/js/blocks/components/BlockSettings.jsx
@@ -0,0 +1,23 @@
+import { useSelect } from '@wordpress/data';
+
+/**
+ * BlockSettings
+ *
+ * Bundles the used for several blocks
+ * *
+ * @param {object} props
+ * @param {number} props.imageId The ID of the image to display.
+ * @param {string} props.size The size of the image to display. Defaults to 'full'.
+ * @returns {*} React JSX
+ */
+export default function BlockSettings(props) {
+
+
+
+ return (
+ <>
+
+
+ >
+ )
+}
diff --git a/resources/js/lib/blocks/classNames.js b/resources/js/blocks/lib/classNames.js
similarity index 87%
rename from resources/js/lib/blocks/classNames.js
rename to resources/js/blocks/lib/classNames.js
index dd73d16..0dcb496 100644
--- a/resources/js/lib/blocks/classNames.js
+++ b/resources/js/blocks/lib/classNames.js
@@ -42,9 +42,12 @@ export function sectionClassNames(attributes, defaultClasses, extraClasses = [])
classNames.push(bg);
}
- if('background_image'in attributes && attributes.background_image != '0')
+ if('background_image' in attributes && attributes.background_image != '0')
classNames.push('has-bg-image');
+ if('background_contrast' in attributes && attributes.background_contrast)
+ classNames.push('knockout');
+
// combine arrays
classNames = classNames.concat(defaultClasses).concat(extraClasses);
diff --git a/resources/js/lib/blocks/BlockSettings.jsx b/resources/js/lib/blocks/BlockSettings.jsx
deleted file mode 100644
index 4cbbfd2..0000000
--- a/resources/js/lib/blocks/BlockSettings.jsx
+++ /dev/null
@@ -1,43 +0,0 @@
-import { useSelect } from '@wordpress/data';
-
-/**
- * BlockSettings
- *
- * Bundles the used for several blocks
- * *
- * @param {object} props
- * @param {number} props.imageId The ID of the image to display.
- * @param {string} props.size The size of the image to display. Defaults to 'full'.
- * @returns {*} React JSX
- */
-export default function BlockSettings({ imageId, size = 'full' }) {
-
- const { image } = useSelect((select) => ({
- image: select('core').getEntityRecord('postType', 'attachment', imageId),
- }));
-
- const imageAttributes = () =>{
- let attributes = {
- src: image.source_url,
- alt: image.alt_text,
- className: `attachment-${size} size-${size}`,
- width: image.media_details.width,
- height: image.media_details.height,
- };
- if (image.media_details && image.media_details.sizes && image.media_details.sizes[size]) {
- attributes.src = image.media_details.sizes[size].source_url;
- attributes.width = image.media_details.sizes[size].width;
- attributes.height = image.media_details.sizes[size].height;
- }
-
- return attributes;
- };
-
- return (
- <>
- {image && (
-
- )}
- >
- )
-}
diff --git a/resources/views/blocks/article/index.jsx b/resources/views/blocks/article/index.jsx
index 3c9bf8f..57e2427 100644
--- a/resources/views/blocks/article/index.jsx
+++ b/resources/views/blocks/article/index.jsx
@@ -30,8 +30,9 @@ import {
import { useState, useEffect } from '@wordpress/element';
import metadata from './block.json';
import allowedBlocks from '../../../json/core-block-whitelist.json';
-import { containerClassNames, sectionClassNames } from '../../../js/lib/blocks/classNames';
-import AttachmentImage from '../../../js/lib/blocks/AttachmentImage';
+import { containerClassNames, sectionClassNames } from '../../../js/blocks/lib/classNames';
+import AttachmentImage from '../../../js/blocks/components/AttachmentImage';
+import BackgroundImage from '../../../js/blocks/components/BackgroundImage';
import apiFetch from '@wordpress/api-fetch';
@@ -52,6 +53,8 @@ registerBlockType(metadata.name, {
background_url,
background_position,
background_opacity,
+ background_contrast,
+ background_fixed,
} = attributes;
const [
@@ -111,10 +114,7 @@ registerBlockType(metadata.name, {
__nextHasNoMarginBottom
/>
-
+
{ __('Colour', 'badegg') }
@@ -160,9 +160,21 @@ registerBlockType(metadata.name, {
{ background_image != 0 && (
<>
- */}
+ setAttributes({ background_contrast: value }) }
+ __nextHasNoMarginBottom
+ />
+ setAttributes({ background_fixed: value }) }
+ __nextHasNoMarginBottom
/>
- { attributes.background_image != 0 && (
-
- ) }
+
);
@@ -243,7 +246,7 @@ registerBlockType(metadata.name, {
save({ attributes }) {
return (