diff --git a/readme.txt b/readme.txt
index 0dacd0ee3..99d0791c0 100644
--- a/readme.txt
+++ b/readme.txt
@@ -63,10 +63,12 @@ e.g.
== Changelog ==
+
+[ Bug fix ][ Outer(Pro) ] cope with custom color palette
+
= 1.26.2 =
[ Other ] Rerelease
-= 1.26.1 =
[ Bugfix ][ Spacer ] fix spacer
= 1.26.0 =
diff --git a/src/blocks/_pro/outer/GenerateBgImage.js b/src/blocks/_pro/outer/GenerateBgImage.js
new file mode 100644
index 000000000..21703a997
--- /dev/null
+++ b/src/blocks/_pro/outer/GenerateBgImage.js
@@ -0,0 +1,102 @@
+const GenerateBgImage = (props) => {
+ const { attributes, clientId, prefix } = props;
+ const { bgImageMobile, bgImageTablet, bgImage, bgSize } = attributes;
+
+ const mobileViewport = 'max-width: 575.98px';
+ const tabletViewport = 'min-width: 576px';
+ const pcViewport = 'min-width: 992px';
+ const underPcViewport = 'max-width: 992.98px';
+
+ let backgroundStyle;
+ const backgroundPosition = 'background-position:center!important;';
+ if ('cover' === bgSize) {
+ backgroundStyle = `background-size:${bgSize}!important; ${backgroundPosition}`;
+ } else if ('repeat' === bgSize) {
+ backgroundStyle = `background-repeat:${bgSize}!important; background-size: auto; ${backgroundPosition}`;
+ } else {
+ backgroundStyle = ``;
+ }
+
+ //moible only
+ if (bgImageMobile && !bgImageTablet && !bgImage) {
+ return (
+
+ );
+ }
+ //tablet only
+ if (!bgImageMobile && bgImageTablet && !bgImage) {
+ return (
+
+ );
+ }
+ //pc only
+ if (!bgImageMobile && !bgImageTablet && bgImage) {
+ return (
+
+ );
+ }
+ //pc -mobile
+ if (bgImageMobile && !bgImageTablet && bgImage) {
+ return (
+
+ );
+ }
+ //pc -tablet
+ if (!bgImageMobile && bgImageTablet && bgImage) {
+ return (
+
+ );
+ }
+ //tablet - mobile
+ if (bgImageMobile && bgImageTablet && !bgImage) {
+ return (
+
+ );
+ }
+ //pc -tablet - mobile
+ if (bgImageMobile && bgImageTablet && bgImage) {
+ return (
+
+ );
+ }
+};
+export default GenerateBgImage;
diff --git a/src/blocks/_pro/outer/component-divider.js b/src/blocks/_pro/outer/component-divider.js
index 424809c98..4978d6e4d 100644
--- a/src/blocks/_pro/outer/component-divider.js
+++ b/src/blocks/_pro/outer/component-divider.js
@@ -1,8 +1,23 @@
+/**
+ * External dependencies
+ */
+import classnames from 'classnames';
+
+/**
+ * Internal dependencies
+ */
+import { isHexColor } from '@vkblocks/utils/is-hex-color';
+
const componentDivider = (level, color, whichSide, dividerType) => {
let sectionPadding;
let sectionClass;
let lenderDivider;
+ const pathClassNames = classnames({
+ [`has-text-color`]: color !== undefined,
+ [`has-${color}-color`]: color !== undefined && !isHexColor(color),
+ });
+
// eslint-disable-next-line no-shadow
const tiltSectionStyle = (level, color) => {
if (level > 0) {
@@ -10,7 +25,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
);
} else if (level < 0) {
@@ -21,7 +37,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
);
}
@@ -34,7 +51,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
);
} else if (level < 0) {
@@ -42,7 +60,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
);
}
@@ -57,7 +76,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
100 - level / 2
} q20,${level},40,0 t40,0 t40,0 V100 L0,100 z`}
strokeWidth="0"
- fill={color}
+ fill={isHexColor(color) ? color : 'currentColor'}
+ className={pathClassNames}
/>
);
} else if (level < 0) {
@@ -67,7 +87,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
level / 2 + 100
} q20,${level},40,0 t40,0 t40,0 V100 L0,100 z`}
strokeWidth="0"
- fill={color}
+ fill={isHexColor(color) ? color : 'currentColor'}
+ className={pathClassNames}
/>
);
}
@@ -85,7 +106,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
50 - DivideAbs4
} l${DivideAbs4},-${absLevel} l${DivideAbs4},${absLevel} h${DivideAbs4} v100 h-100 z`}
strokeWidth="0"
- fill={color}
+ fill={isHexColor(color) ? color : 'currentColor'}
+ className={pathClassNames}
/>
);
} else if (level < 0) {
@@ -97,7 +119,8 @@ const componentDivider = (level, color, whichSide, dividerType) => {
50 - DivideAbs4
} v${absLevel + 1} h-100 z`}
strokeWidth="0"
- fill={color}
+ fill={isHexColor(color) ? color : 'currentColor'}
+ className={pathClassNames}
/>
);
}
diff --git a/src/blocks/_pro/outer/deprecated/1.26.0/component-divider.js b/src/blocks/_pro/outer/deprecated/1.26.0/component-divider.js
new file mode 100644
index 000000000..313ab0409
--- /dev/null
+++ b/src/blocks/_pro/outer/deprecated/1.26.0/component-divider.js
@@ -0,0 +1,164 @@
+const componentDivider = (level, color, whichSide, dividerType) => {
+ let sectionPadding;
+ let sectionClass;
+ let lenderDivider;
+
+ // eslint-disable-next-line no-shadow
+ const tiltSectionStyle = (level, color) => {
+ if (level > 0) {
+ return (
+
+ );
+ } else if (level < 0) {
+ //絶対値に変換
+ const absLevel = Math.abs(level);
+
+ return (
+
+ );
+ }
+ };
+
+ // eslint-disable-next-line no-shadow
+ const curveSectionStyle = (level, color) => {
+ if (level > 0) {
+ return (
+
+ );
+ } else if (level < 0) {
+ return (
+
+ );
+ }
+ };
+
+ // eslint-disable-next-line no-shadow
+ const waveSectionStyle = (level, color) => {
+ if (level > 0) {
+ return (
+
+ );
+ } else if (level < 0) {
+ return (
+
+ );
+ }
+ };
+
+ // eslint-disable-next-line no-shadow
+ const triangleSectionStyle = (level, color) => {
+ const absLevel = Math.abs(level);
+ const DivideAbs4 = absLevel / 4;
+
+ if (level > 0) {
+ return (
+
+ );
+ } else if (level < 0) {
+ return (
+
+ );
+ }
+ };
+
+ //背景色をクリアした時は、白に変更
+ if (!color) {
+ color = '#fff';
+ }
+
+ //Paddingの条件分岐を追加
+ if (dividerType === 'tilt') {
+ sectionPadding = Math.abs(level);
+ lenderDivider = tiltSectionStyle(level, color);
+ } else if (dividerType === 'curve') {
+ if (level > 0) {
+ sectionPadding = Math.abs(level);
+ } else if (level < 0) {
+ sectionPadding = Math.abs(level) * 2;
+ }
+ lenderDivider = curveSectionStyle(level, color);
+ } else if (dividerType === 'wave') {
+ sectionPadding = Math.abs(level);
+ lenderDivider = waveSectionStyle(level, color);
+ } else if (dividerType === 'triangle') {
+ sectionPadding = Math.abs(level);
+ lenderDivider = triangleSectionStyle(level, color);
+ }
+
+ //classにdividerTypeを追加
+ // eslint-disable-next-line prefer-const
+ sectionClass = dividerType;
+
+ //upper-paddingを追加
+ if (whichSide === 'upper') {
+ return (
+
+
+ {lenderDivider}
+
+
+ );
+ //lower-paddingを追加
+ } else if (whichSide === 'lower') {
+ return (
+
+
+ {lenderDivider}
+
+
+ );
+ }
+};
+
+export { componentDivider };
diff --git a/src/blocks/_pro/outer/deprecated/1.26.0/save.js b/src/blocks/_pro/outer/deprecated/1.26.0/save.js
new file mode 100644
index 000000000..956a0fa48
--- /dev/null
+++ b/src/blocks/_pro/outer/deprecated/1.26.0/save.js
@@ -0,0 +1,133 @@
+import { InnerBlocks, useBlockProps } from '@wordpress/block-editor';
+import { componentDivider } from './component-divider';
+import GenerateBgImage from '@vkblocks/utils/GenerateBgImage';
+
+export default function save(props) {
+ const { attributes } = props;
+ const {
+ bgPosition,
+ outerWidth,
+ padding_left_and_right, //eslint-disable-line camelcase
+ padding_top_and_bottom, //eslint-disable-line camelcase
+ upper_level, //eslint-disable-line camelcase
+ lower_level, //eslint-disable-line camelcase
+ upperDividerBgColor,
+ lowerDividerBgColor,
+ dividerType,
+ borderWidth,
+ borderStyle,
+ borderColor,
+ borderRadius,
+ clientId,
+ } = attributes;
+
+ let classPaddingLR;
+ let classPaddingVertical;
+ let classBgPosition;
+ let whichSideUpper;
+ let whichSideLower;
+
+ //幅のクラス切り替え
+ const classWidth = `vk_outer-width-${outerWidth}`;
+
+ //classBgPositionのクラス切り替え
+ if (bgPosition === 'parallax') {
+ classBgPosition = 'vk_outer-bgPosition-parallax vk-prlx';
+ } else if (bgPosition === 'fixed') {
+ classBgPosition = 'vk_outer-bgPosition-fixed';
+ } else if (bgPosition === 'repeat') {
+ classBgPosition = 'vk_outer-bgPosition-repeat';
+ } else {
+ classBgPosition = 'vk_outer-bgPosition-normal';
+ }
+
+ //classPaddingLRのクラス切り替え
+ classPaddingLR = '';
+ //eslint-disable-next-line camelcase
+ if (padding_left_and_right === '0') {
+ classPaddingLR = 'vk_outer-paddingLR-none';
+ //eslint-disable-next-line camelcase
+ } else if (padding_left_and_right === '1') {
+ classPaddingLR = 'vk_outer-paddingLR-use';
+ //eslint-disable-next-line camelcase
+ } else if (padding_left_and_right === '2') {
+ // Fit to content area width
+ classPaddingLR = 'vk_outer-paddingLR-zero';
+ }
+
+ //classPaddingVerticalのクラス切り替
+ //eslint-disable-next-line camelcase
+ if (padding_top_and_bottom === '1') {
+ classPaddingVertical = 'vk_outer-paddingVertical-use';
+ } else {
+ classPaddingVertical = 'vk_outer-paddingVertical-none';
+ }
+
+ //上側セクションの傾き切り替
+ //eslint-disable-next-line camelcase
+ if (upper_level) {
+ whichSideUpper = 'upper';
+ }
+
+ //下側セクションの傾き切り替
+ //eslint-disable-next-line camelcase
+ if (lower_level) {
+ whichSideLower = 'lower';
+ }
+
+ //編集画面とサイト上の切り替え
+ const containerClass = 'vk_outer_container';
+
+ //Dividerエフェクトがない時のみ枠線を追
+ let borderStyleProperty = {};
+ //eslint-disable-next-line camelcase
+ if (
+ upper_level === 0 && //eslint-disable-line camelcase
+ lower_level === 0 && //eslint-disable-line camelcase
+ borderWidth > 0 &&
+ borderStyle !== 'none'
+ ) {
+ borderStyleProperty = {
+ border: `${borderWidth}px ${borderStyle} ${borderColor}`,
+ borderRadius: `${borderRadius}px`,
+ };
+ //eslint-disable-next-line camelcase
+ } else if (upper_level !== 0 || lower_level !== 0) {
+ //eslint-disable-line camelcase
+ borderStyleProperty = {
+ border: `none`,
+ borderRadius: `0px`,
+ };
+ }
+
+ const blockProps = useBlockProps.save({
+ className: `vkb-outer-${clientId} vk_outer ${classWidth} ${classPaddingLR} ${classPaddingVertical} ${classBgPosition}`,
+ style: borderStyleProperty,
+ });
+ return (
+
+
+
+ {componentDivider(
+ upper_level,
+ upperDividerBgColor,
+ whichSideUpper,
+ dividerType
+ )}
+
+
+
+ {componentDivider(
+ lower_level,
+ lowerDividerBgColor,
+ whichSideLower,
+ dividerType
+ )}
+
+
+ );
+}
diff --git a/src/blocks/_pro/outer/deprecated/component-divider.js b/src/blocks/_pro/outer/deprecated/component-divider.js
index 80976b7b7..c22f9624b 100644
--- a/src/blocks/_pro/outer/deprecated/component-divider.js
+++ b/src/blocks/_pro/outer/deprecated/component-divider.js
@@ -1,3 +1,5 @@
+// 区切り設定 0系で使用
+
const componentDivider = (level, color, whichSide, dividerType) => {
let sectionPadding;
let sectionClass;
diff --git a/src/blocks/_pro/outer/deprecated/hooks/0.0.1/index.js b/src/blocks/_pro/outer/deprecated/hooks/0.0.1/index.js
new file mode 100644
index 000000000..4162bf90e
--- /dev/null
+++ b/src/blocks/_pro/outer/deprecated/hooks/0.0.1/index.js
@@ -0,0 +1,3 @@
+export default function OuterHook({ el, attributes }) {
+ return el
+}
diff --git a/src/blocks/_pro/outer/deprecated/hooks/1.26.0/index.js b/src/blocks/_pro/outer/deprecated/hooks/1.26.0/index.js
new file mode 100644
index 000000000..090cd32e0
--- /dev/null
+++ b/src/blocks/_pro/outer/deprecated/hooks/1.26.0/index.js
@@ -0,0 +1,53 @@
+const generateInlineCss = (attributes) => {
+ let {
+ clientId,
+ innerSideSpaceValuePC,
+ innerSideSpaceValueTablet,
+ innerSideSpaceValueMobile,
+ innerSideSpaceUnit,
+ } = attributes;
+
+ //For recovering block.
+ if (undefined === innerSideSpaceUnit) {
+ innerSideSpaceUnit = 'px';
+ }
+ if (undefined === innerSideSpaceValueMobile) {
+ innerSideSpaceValueMobile = 0;
+ }
+ if (undefined === innerSideSpaceValueTablet) {
+ innerSideSpaceValueTablet = 0;
+ }
+ if (undefined === innerSideSpaceValuePC) {
+ innerSideSpaceValuePC = 0;
+ }
+
+ const containerSelector = `.vkb-outer-${clientId} .vk_outer_container`;
+ return `
+ ${containerSelector}{
+ padding-left:${innerSideSpaceValueMobile}${innerSideSpaceUnit};
+ padding-right:${innerSideSpaceValueMobile}${innerSideSpaceUnit};
+ }
+ @media (min-width: 577px) {
+ ${containerSelector}{
+ padding-left:${innerSideSpaceValueTablet}${innerSideSpaceUnit};
+ padding-right:${innerSideSpaceValueTablet}${innerSideSpaceUnit};
+ }
+ }
+ @media (min-width: 769px) {
+ ${containerSelector}{
+ padding-left:${innerSideSpaceValuePC}${innerSideSpaceUnit};
+ padding-right:${innerSideSpaceValuePC}${innerSideSpaceUnit};
+ }
+ }
+ `;
+};
+
+export default function OuterHook({ el, attributes }) {
+ const cssTag = generateInlineCss(attributes);
+ return (
+ <>
+ {el}
+
+ >
+ );
+}
diff --git a/src/blocks/_pro/outer/deprecated/hooks/index.js b/src/blocks/_pro/outer/deprecated/hooks/index.js
new file mode 100644
index 000000000..f6e135984
--- /dev/null
+++ b/src/blocks/_pro/outer/deprecated/hooks/index.js
@@ -0,0 +1,21 @@
+import OuterHook1_26_0 from './1.26.0/'
+import OuterHook0_0_1 from './0.0.1'
+
+// saveの数分必要
+export default [,
+ OuterHook1_26_0,
+ // 後方互換
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+ OuterHook0_0_1,
+];
diff --git a/src/blocks/_pro/outer/deprecated/index.js b/src/blocks/_pro/outer/deprecated/index.js
index 717d54656..211f24010 100644
--- a/src/blocks/_pro/outer/deprecated/index.js
+++ b/src/blocks/_pro/outer/deprecated/index.js
@@ -11,6 +11,7 @@ import save009 from './0.0.9/save';
import save0_37_1 from './0.37.1/save';
import save0_60_0 from './0.60.0/save';
import save1_0_13 from './1.0.13/save';
+import save1_26_0 from './1.26.0/save';
const blockAttributes = {
bgColor: {
@@ -81,6 +82,44 @@ const blockAttributes = {
const deprecated = [
//ブロックテンプレート用のdeprecated
+ {
+ attributes: {
+ ...blockAttributes,
+ defaultBgColor: {
+ type: 'string',
+ default: '#f3f4f5',
+ },
+ bgImageTablet: {
+ type: 'string',
+ default: null,
+ },
+ bgImageMobile: {
+ type: 'string',
+ default: null,
+ },
+ clientId: {
+ type: 'string',
+ default: null,
+ },
+ innerSideSpaceValuePC: {
+ type: "number",
+ default: 0
+ },
+ innerSideSpaceValueTablet: {
+ type: "number",
+ default: 0
+ },
+ innerSideSpaceValueMobile: {
+ type: "number",
+ default: 0
+ },
+ innerSideSpaceUnit: {
+ type: "string",
+ default: "px"
+ },
+ },
+ save: save1_26_0,
+ },
{
attributes: {
...blockAttributes,
diff --git a/src/blocks/_pro/outer/edit.js b/src/blocks/_pro/outer/edit.js
index 515ddedf6..e2b74327b 100644
--- a/src/blocks/_pro/outer/edit.js
+++ b/src/blocks/_pro/outer/edit.js
@@ -1,5 +1,22 @@
+/**
+ * External dependencies
+ */
+import classnames from 'classnames';
+
+/**
+ * Internal dependencies
+ */
import toNumber from '@vkblocks/utils/to-number';
import { AdvancedMediaUpload } from '@vkblocks/components/advanced-media-upload';
+import { componentDivider } from './component-divider';
+import GenerateBgImage from './GenerateBgImage';
+import { isHexColor } from '@vkblocks/utils/is-hex-color';
+import { AdvancedColorPalette } from '@vkblocks/components/advanced-color-palette';
+const prefix = 'vkb-outer';
+
+/**
+ * WordPress dependencies
+ */
import { __ } from '@wordpress/i18n';
import {
RangeControl,
@@ -12,19 +29,19 @@ import {
} from '@wordpress/components';
import {
InspectorControls,
- ColorPalette,
InnerBlocks,
useBlockProps,
} from '@wordpress/block-editor';
import { useEffect } from '@wordpress/element';
import { dispatch } from '@wordpress/data';
-import { componentDivider } from './component-divider';
-import GenerateBgImage from '@vkblocks/utils/GenerateBgImage';
export default function OuterEdit(props) {
const { attributes, setAttributes, clientId } = props;
const {
bgColor,
+ bgImage,
+ bgImageTablet,
+ bgImageMobile,
bgPosition,
outerWidth,
padding_left_and_right, //eslint-disable-line camelcase
@@ -89,6 +106,35 @@ export default function OuterEdit(props) {
});
}
+ const opacityClass = opacity && opacity * 10;
+ const bgColorClasses = classnames({
+ [`has-background`]: bgColor !== undefined,
+ [`has-${bgColor}-background-color`]:
+ bgColor !== undefined && !isHexColor(bgColor),
+ [`has-background-dim`]: opacity !== undefined,
+ [`has-background-dim-${opacityClass}`]: opacityClass !== undefined,
+ });
+
+ const bgColorStyles = {
+ backgroundColor: isHexColor(bgColor) ? bgColor : undefined,
+ };
+
+ const GetBgImage = (
+ <>
+ {(bgImage || bgImageTablet || bgImageMobile) && (
+
+ )}
+
+ >
+ );
+
//幅のクラス切り替え
// eslint-disable-next-line prefer-const
const classWidth = `vk_outer-width-${outerWidth}`;
@@ -143,11 +189,6 @@ export default function OuterEdit(props) {
setAttributes({ borderColor: '#fff' });
}
- //bgColorクリア時に白をセットする
- if (bgColor === null || bgColor === undefined) {
- setAttributes({ bgColor: '#f3f4f5' });
- }
-
//Dividerエフェクトがない時のみ枠線を追
let borderStyleProperty = {};
@@ -158,7 +199,12 @@ export default function OuterEdit(props) {
borderStyle !== 'none'
) {
borderStyleProperty = {
- border: `${borderWidth}px ${borderStyle} ${borderColor}`,
+ borderWidth: `${borderWidth}px`,
+ borderStyle: `${borderStyle}`,
+ borderColor:
+ isHexColor(borderColor) && borderColor
+ ? borderColor
+ : undefined,
borderRadius: `${borderRadius}px`,
};
//eslint-disable-next-line camelcase
@@ -171,7 +217,14 @@ export default function OuterEdit(props) {
}
const blockProps = useBlockProps({
- className: `vkb-outer-${clientId} vk_outer ${classWidth} ${classPaddingLR} ${classPaddingVertical} ${classBgPosition}`,
+ className: classnames(
+ `vkb-outer-${clientId} vk_outer ${classWidth} ${classPaddingLR} ${classPaddingVertical} ${classBgPosition}`,
+ {
+ [`has-border-color`]: borderColor !== undefined,
+ [`has-${borderColor}-border-color`]:
+ borderColor !== undefined && !isHexColor(borderColor),
+ }
+ ),
style: borderStyleProperty,
});
@@ -190,12 +243,7 @@ export default function OuterEdit(props) {
'vk-blocks'
)}
>
-
- setAttributes({ bgColor: value })
- }
- />
+
-
- setAttributes({
- upperDividerBgColor: value,
- })
- }
+
-
- setAttributes({
- lowerDividerBgColor: value,
- })
- }
+
@@ -520,11 +560,9 @@ export default function OuterEdit(props) {
/>
-
- setAttributes({ borderColor: value })
- }
+
-
+ {GetBgImage}
{componentDivider(
upper_level,
diff --git a/src/blocks/_pro/outer/index.js b/src/blocks/_pro/outer/index.js
index 49043288d..853b0aa58 100644
--- a/src/blocks/_pro/outer/index.js
+++ b/src/blocks/_pro/outer/index.js
@@ -10,6 +10,7 @@ import metadata from './block.json';
import edit from './edit';
import save from './save';
import deprecated from './deprecated/';
+import deprecatedHooks from './deprecated/hooks/';
const { name } = metadata;
@@ -51,13 +52,13 @@ const generateInlineCss = (attributes) => {
padding-left:${innerSideSpaceValueMobile}${innerSideSpaceUnit};
padding-right:${innerSideSpaceValueMobile}${innerSideSpaceUnit};
}
- @media (min-width: 577px) {
+ @media (min-width: 576px) {
${containerSelector}{
padding-left:${innerSideSpaceValueTablet}${innerSideSpaceUnit};
padding-right:${innerSideSpaceValueTablet}${innerSideSpaceUnit};
}
}
- @media (min-width: 769px) {
+ @media (min-width: 992px) {
${containerSelector}{
padding-left:${innerSideSpaceValuePC}${innerSideSpaceUnit};
padding-right:${innerSideSpaceValuePC}${innerSideSpaceUnit};
@@ -115,6 +116,16 @@ addFilter(
>
);
}
+
+ //後方互換
+ let DeprecatedHook;
+ // Deprecated Hooks が Deprecated Save関数より少ない場合にエラーが出ないように。
+ if (deprecatedHooks.length > deprecatedFuncIndex) {
+ DeprecatedHook = deprecatedHooks[deprecatedFuncIndex];
+ } else {
+ DeprecatedHook = deprecatedHooks[deprecatedHooks.length - 1];
+ }
+ return
;
}
return el;
},
diff --git a/src/blocks/_pro/outer/save.js b/src/blocks/_pro/outer/save.js
index 956a0fa48..89609b1c3 100644
--- a/src/blocks/_pro/outer/save.js
+++ b/src/blocks/_pro/outer/save.js
@@ -1,14 +1,33 @@
-import { InnerBlocks, useBlockProps } from '@wordpress/block-editor';
+/**
+ * External dependencies
+ */
+import classnames from 'classnames';
+
+/**
+ * Internal dependencies
+ */
import { componentDivider } from './component-divider';
-import GenerateBgImage from '@vkblocks/utils/GenerateBgImage';
+import GenerateBgImage from './GenerateBgImage';
+import { isHexColor } from '@vkblocks/utils/is-hex-color';
+const prefix = 'vkb-outer';
+
+/**
+ * WordPress dependencies
+ */
+import { InnerBlocks, useBlockProps } from '@wordpress/block-editor';
export default function save(props) {
const { attributes } = props;
const {
+ bgColor,
bgPosition,
+ bgImageMobile,
+ bgImageTablet,
+ bgImage,
outerWidth,
padding_left_and_right, //eslint-disable-line camelcase
padding_top_and_bottom, //eslint-disable-line camelcase
+ opacity,
upper_level, //eslint-disable-line camelcase
lower_level, //eslint-disable-line camelcase
upperDividerBgColor,
@@ -27,6 +46,35 @@ export default function save(props) {
let whichSideUpper;
let whichSideLower;
+ const opacityClass = opacity && opacity * 10;
+ const bgColorClasses = classnames({
+ [`has-background`]: bgColor !== undefined,
+ [`has-${bgColor}-background-color`]:
+ bgColor !== undefined && !isHexColor(bgColor),
+ [`has-background-dim`]: opacity !== undefined,
+ [`has-background-dim-${opacityClass}`]: opacityClass !== undefined,
+ });
+
+ const bgColorStyles = {
+ backgroundColor: isHexColor(bgColor) && bgColor ? bgColor : undefined,
+ };
+
+ const GetBgImage = (
+ <>
+ {(bgImage || bgImageTablet || bgImageMobile) && (
+
+ )}
+
+ >
+ );
+
//幅のクラス切り替え
const classWidth = `vk_outer-width-${outerWidth}`;
@@ -88,7 +136,12 @@ export default function save(props) {
borderStyle !== 'none'
) {
borderStyleProperty = {
- border: `${borderWidth}px ${borderStyle} ${borderColor}`,
+ borderWidth: `${borderWidth}px`,
+ borderStyle: `${borderStyle}`,
+ borderColor:
+ isHexColor(borderColor) && borderColor
+ ? borderColor
+ : undefined,
borderRadius: `${borderRadius}px`,
};
//eslint-disable-next-line camelcase
@@ -101,16 +154,19 @@ export default function save(props) {
}
const blockProps = useBlockProps.save({
- className: `vkb-outer-${clientId} vk_outer ${classWidth} ${classPaddingLR} ${classPaddingVertical} ${classBgPosition}`,
+ className: classnames(
+ `vkb-outer-${clientId} vk_outer ${classWidth} ${classPaddingLR} ${classPaddingVertical} ${classBgPosition}`,
+ {
+ [`has-border-color`]: borderColor !== undefined,
+ [`has-${borderColor}-border-color`]:
+ borderColor !== undefined && !isHexColor(borderColor),
+ }
+ ),
style: borderStyleProperty,
});
return (
-
+ {GetBgImage}
{componentDivider(
upper_level,
diff --git a/src/blocks/_pro/outer/style.scss b/src/blocks/_pro/outer/style.scss
index c9243229b..68ad0f904 100644
--- a/src/blocks/_pro/outer/style.scss
+++ b/src/blocks/_pro/outer/style.scss
@@ -20,12 +20,41 @@ $media-xxl-down: 1399.98px;
background-repeat: no-repeat;
position: relative;
transform: translateZ(0); // Safari 1px bug 対応
+
+ .has-background-dim::before {
+ content: "";
+ z-index: 1;
+ }
+
+ // 背景色が選択されていない時
+ .vk_outer-background-area:not([class*=-background-color]) {
+ background-color: #f3f4f5;
+ }
+
+ .vk_outer-background-area,
+ .has-background-dim::before {
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+ right: 0;
+ opacity: 0.5;
+ }
+
+ @for $i from 0 through 10 {
+ .has-background-dim-#{ $i } {
+ opacity: $i * 0.1;
+ }
+ }
+
.vk_outer_container {
+ position: relative;
min-height: 40px;
- h1:first-child,
- h2:first-child,
- h3:first-child,
- h4:first-child,
+ z-index: 1;
+ h1:first-child,
+ h2:first-child,
+ h3:first-child,
+ h4:first-child,
h5:first-child {//他テーマ用
margin-top: 0;
}
@@ -33,7 +62,7 @@ $media-xxl-down: 1399.98px;
}
// これがないとレスポンシブスペーサーの共通高さが検出しない。
.vk_outer{
- display:block;
+ display:block;
overflow:hidden;
}
//iOS Safari での1pxズレの予防のため Only Safari 10.1+
diff --git a/src/utils/GenerateBgImage.js b/src/utils/GenerateBgImage.js
index ab89baccf..7462e6c6e 100644
--- a/src/utils/GenerateBgImage.js
+++ b/src/utils/GenerateBgImage.js
@@ -1,3 +1,13 @@
+/**
+ * GenerateBgImage deprecated
+ *
+ * save.jsに反映される内容がutils内にあると互換性対応が出来ないので各ブロック内に移植
+ *
+ * 以下で使用
+ * Outer 0.60.0-1.26.0
+ * Slider Item 0.0.0-1.22.1
+ * 関連 #925 #950 #1032
+ */
import hex2rgba from './hex-to-rgba';
const GenerateBgImage = (props) => {
const { attributes, clientId, prefix } = props;
diff --git a/test/e2e-tests/fixtures/blocks/vk-blocks__outer.html b/test/e2e-tests/fixtures/blocks/vk-blocks__outer.html
index b0561f421..9c658a91e 100644
--- a/test/e2e-tests/fixtures/blocks/vk-blocks__outer.html
+++ b/test/e2e-tests/fixtures/blocks/vk-blocks__outer.html
@@ -1,30 +1,30 @@
-
-
+
\ No newline at end of file
diff --git a/test/e2e-tests/fixtures/blocks/vk-blocks__outer__deprecated-1-25-0.html b/test/e2e-tests/fixtures/blocks/vk-blocks__outer__deprecated-1-25-0.html
new file mode 100644
index 000000000..b0561f421
--- /dev/null
+++ b/test/e2e-tests/fixtures/blocks/vk-blocks__outer__deprecated-1-25-0.html
@@ -0,0 +1,30 @@
+
+
+
\ No newline at end of file