diff --git a/resources/js/blocks/components/BackgroundImage.jsx b/resources/js/blocks/components/BackgroundImage.jsx
index 46bae7b..13c9c38 100644
--- a/resources/js/blocks/components/BackgroundImage.jsx
+++ b/resources/js/blocks/components/BackgroundImage.jsx
@@ -1,4 +1,4 @@
-import { useSelect } from '@wordpress/data';
+import { select } from '@wordpress/data';
/**
* BackgroundImage
@@ -6,28 +6,48 @@ import { useSelect } from '@wordpress/data';
* 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_url The desired full size url.
+ * @param {string} props.background_url_lazy Tiny lazy url.
+ * @param {boolean} props.background_lazy Whether or not to lazy load 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 }) {
+export default function BackgroundImage({
+ background_url,
+ background_url_lazy,
+ background_lazy,
+ background_position = 'center',
+ background_fixed = false,
+ background_opacity = 70,
+}) {
+
+ if (background_url) {
+ let styles = {
+ backgroundImage: `url(${background_url})`,
+ backgroundPosition: background_position,
+ backgroundSize: 'cover',
+ backgroundAttachment: background_fixed ? 'fixed' : 'scroll',
+ opacity: Number(background_opacity) * 0.01,
+ }
+
+ let attributes = {
+ className: 'badegg-block-background',
+ style: styles,
+ };
+
+ if(background_lazy) {
+ attributes['data-bg'] = background_url;
+ attributes.style.backgroundImage = `url(${background_url_lazy})`;
+ attributes.className += ' lazy-bg';
+ }
+
+ return (
+
+ )
+ } else {
+ return;
+ }
- return (
- <>
- {background_url && (
-
- )}
- >
- )
}
diff --git a/resources/js/blocks/components/BlockSettings.jsx b/resources/js/blocks/components/BlockSettings.jsx
index 824cc1c..6944100 100644
--- a/resources/js/blocks/components/BlockSettings.jsx
+++ b/resources/js/blocks/components/BlockSettings.jsx
@@ -1,5 +1,3 @@
-import { useSelect } from '@wordpress/data';
-
/**
* BlockSettings
*
@@ -12,6 +10,7 @@ import { useSelect } from '@wordpress/data';
*/
import { __ } from '@wordpress/i18n';
+import { select } from '@wordpress/data';
import { useState, useEffect } from '@wordpress/element';
import apiFetch from '@wordpress/api-fetch';
@@ -85,7 +84,8 @@ export default function BlockSettings({ attributes, setAttributes }) {
background_hex,
background_tint,
background_image,
- background_url,
+ background_lazy,
+ background_size,
background_opacity,
background_contrast,
background_fixed,
@@ -159,7 +159,7 @@ export default function BlockSettings({ attributes, setAttributes }) {
{ 'background_colour' in attributes && attributes.background_colour && ![0, '0', 'white', 'black'].includes(attributes.background_colour) ? (
<>
setAttributes({ background_tint: value }) }
@@ -183,6 +183,12 @@ export default function BlockSettings({ attributes, setAttributes }) {
onChange={(value) => setAttributes({ background_fixed: value }) }
__nextHasNoMarginBottom
/>
+ setAttributes({ background_lazy: value }) }
+ __nextHasNoMarginBottom
+ />
{
- setAttributes({
+
+ let bgAttributes = {
background_image: media.id,
background_url: media.url,
- });
+ background_url_lazy: '',
+ };
+
+ const image = select('core').getEntityRecord('postType', 'attachment', media.id);
+
+ if(image && image.media_details) {
+ bgAttributes.background_url_lazy = image.media_details.sizes.lazy.source_url;
+ bgAttributes.background_url = image.media_details.sizes.hero.source_url;
+ }
+
+ setAttributes( bgAttributes );
}}
allowedTypes={ ['image'] }
value={ background_image }
@@ -219,7 +236,11 @@ export default function BlockSettings({ attributes, setAttributes }) {
{ background_image != 0 && (