FEATURE Transforming content box to be dynamic to avoid wp kses break block with non admin
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
4534fe6f39
commit
d68507a55b
|
|
@ -334,7 +334,12 @@ return array(
|
||||||
'editorStyle' => 'file:./index.css',
|
'editorStyle' => 'file:./index.css',
|
||||||
'style' => 'file:./style-index.css',
|
'style' => 'file:./style-index.css',
|
||||||
'viewScript' => 'file:./view.js',
|
'viewScript' => 'file:./view.js',
|
||||||
|
'render' => 'file:./render.php',
|
||||||
'attributes' => array(
|
'attributes' => array(
|
||||||
|
'align' => array(
|
||||||
|
'type' => 'string',
|
||||||
|
'default' => ''
|
||||||
|
),
|
||||||
'hasBackgroundColor' => array(
|
'hasBackgroundColor' => array(
|
||||||
'type' => 'boolean',
|
'type' => 'boolean',
|
||||||
'default' => false
|
'default' => false
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,12 @@
|
||||||
"editorStyle": "file:./index.css",
|
"editorStyle": "file:./index.css",
|
||||||
"style": "file:./style-index.css",
|
"style": "file:./style-index.css",
|
||||||
"viewScript": "file:./view.js",
|
"viewScript": "file:./view.js",
|
||||||
|
"render": "file:./render.php",
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"align": {
|
||||||
|
"type": "string",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
"hasBackgroundColor": {
|
"hasBackgroundColor": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-i18n'), 'version' => '43c5028b668a17d013bb');
|
<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-data', 'wp-i18n'), 'version' => 'ad3258cb116658d74939');
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,184 @@ function isColorLight(color) {
|
||||||
\************************************/
|
\************************************/
|
||||||
/***/ ((module) => {
|
/***/ ((module) => {
|
||||||
|
|
||||||
module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"carhop-blocks/content-box","version":"0.1.0","title":"Boite de contenu","category":"carhop-blocks","icon":"smiley","description":"Boite de contenu pour la mise en forme d\'éléments de contenu","example":{},"supports":{"html":false,"anchor":true,"align":["wide","full"]},"textdomain":"carhop-blocks","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","viewScript":"file:./view.js","attributes":{"hasBackgroundColor":{"type":"boolean","default":false},"backgroundColor":{"type":"string","default":"#f1fcf9"},"hasLightBackground":{"type":"boolean","default":true},"textColor":{"type":"string","default":"inherit"},"borderColor":{"type":"string","default":null},"blockVariant":{"type":"string","default":"backgrounded","enum":["nude","framed","framed-backgrounded","backgrounded"]},"shapeType":{"type":"string","default":"straight","enum":["straight","shapeA","shapeB","shapeC"]},"blockWidth":{"type":"string","default":"full","enum":["contained","wide","full"]}}}');
|
module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"carhop-blocks/content-box","version":"0.1.0","title":"Boite de contenu","category":"carhop-blocks","icon":"smiley","description":"Boite de contenu pour la mise en forme d\'éléments de contenu","example":{},"supports":{"html":false,"anchor":true,"align":["wide","full"]},"textdomain":"carhop-blocks","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","viewScript":"file:./view.js","render":"file:./render.php","attributes":{"align":{"type":"string","default":""},"hasBackgroundColor":{"type":"boolean","default":false},"backgroundColor":{"type":"string","default":"#f1fcf9"},"hasLightBackground":{"type":"boolean","default":true},"textColor":{"type":"string","default":"inherit"},"borderColor":{"type":"string","default":null},"blockVariant":{"type":"string","default":"backgrounded","enum":["nude","framed","framed-backgrounded","backgrounded"]},"shapeType":{"type":"string","default":"straight","enum":["straight","shapeA","shapeB","shapeC"]},"blockWidth":{"type":"string","default":"full","enum":["contained","wide","full"]}}}');
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ "./src/content-box/deprecated-save.js":
|
||||||
|
/*!********************************************!*\
|
||||||
|
!*** ./src/content-box/deprecated-save.js ***!
|
||||||
|
\********************************************/
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ "default": () => (/* binding */ deprecatedSave)
|
||||||
|
/* harmony export */ });
|
||||||
|
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
|
||||||
|
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
|
/* harmony import */ var _shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./shapeA.jsx */ "./src/content-box/shapeA.jsx");
|
||||||
|
/* harmony import */ var _shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shapeB.jsx */ "./src/content-box/shapeB.jsx");
|
||||||
|
/* harmony import */ var _shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shapeC.jsx */ "./src/content-box/shapeC.jsx");
|
||||||
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
|
||||||
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ancien save (blockWidth) — conservé pour la migration des blocs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function deprecatedSave({
|
||||||
|
attributes
|
||||||
|
}) {
|
||||||
|
const {
|
||||||
|
backgroundColor,
|
||||||
|
textColor,
|
||||||
|
hasLightBackground,
|
||||||
|
blockVariant,
|
||||||
|
blockWidth,
|
||||||
|
shapeType,
|
||||||
|
borderColor
|
||||||
|
} = attributes;
|
||||||
|
const blockWidthClass = blockWidth === "contained" ? "aligncontained" : blockWidth === "wide" ? "alignwide" : "alignfull";
|
||||||
|
const lightnessClass = hasLightBackground ? "content-box--bg-light" : "content-box--bg-dark";
|
||||||
|
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("section", {
|
||||||
|
..._wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.useBlockProps.save({
|
||||||
|
className: `content-box content-box--variant-${blockVariant} content-box--${shapeType} ${lightnessClass} ${blockWidthClass}`,
|
||||||
|
style: {
|
||||||
|
"--content-box-text-color": textColor !== null && textColor !== void 0 ? textColor : "inherit",
|
||||||
|
"--content-box-background-color": blockVariant === "backgrounded" || blockVariant === "framed-backgrounded" ? backgroundColor : "transparent"
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
children: [blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: "none"
|
||||||
|
}), blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: "none"
|
||||||
|
}), blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: "none"
|
||||||
|
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||||
|
backgroundColor: "none",
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||||
|
backgroundColor: "none",
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
|
backgroundColor: "none",
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: borderColor
|
||||||
|
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
|
||||||
|
className: "content-box__innerblocks",
|
||||||
|
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.InnerBlocks.Content, {})
|
||||||
|
})]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ "./src/content-box/deprecated.js":
|
||||||
|
/*!***************************************!*\
|
||||||
|
!*** ./src/content-box/deprecated.js ***!
|
||||||
|
\***************************************/
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
||||||
|
|
||||||
|
__webpack_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
||||||
|
/* harmony export */ });
|
||||||
|
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
|
||||||
|
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
|
/* harmony import */ var _shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./shapeA.jsx */ "./src/content-box/shapeA.jsx");
|
||||||
|
/* harmony import */ var _shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shapeB.jsx */ "./src/content-box/shapeB.jsx");
|
||||||
|
/* harmony import */ var _shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shapeC.jsx */ "./src/content-box/shapeC.jsx");
|
||||||
|
/* harmony import */ var _deprecated_save__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./deprecated-save */ "./src/content-box/deprecated-save.js");
|
||||||
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
|
||||||
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ancien save statique (SVG + section) — validation en éditeur
|
||||||
|
* des contenus publiés avant le passage au rendu dynamique.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function StaticSaveWithAlign({
|
||||||
|
attributes
|
||||||
|
}) {
|
||||||
|
const {
|
||||||
|
backgroundColor,
|
||||||
|
textColor,
|
||||||
|
hasLightBackground,
|
||||||
|
blockVariant,
|
||||||
|
align,
|
||||||
|
shapeType,
|
||||||
|
borderColor
|
||||||
|
} = attributes;
|
||||||
|
const lightnessClass = hasLightBackground ? "content-box--bg-light" : "content-box--bg-dark";
|
||||||
|
const alignClass = align === "full" ? "alignfull" : align === "wide" ? "alignwide" : "aligncontained";
|
||||||
|
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("section", {
|
||||||
|
..._wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.useBlockProps.save({
|
||||||
|
className: `content-box content-box--variant-${blockVariant} content-box--${shapeType} ${lightnessClass} ${alignClass}`,
|
||||||
|
style: {
|
||||||
|
"--content-box-text-color": textColor !== null && textColor !== void 0 ? textColor : "inherit",
|
||||||
|
"--content-box-background-color": blockVariant === "backgrounded" || blockVariant === "framed-backgrounded" ? backgroundColor : "transparent"
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
children: [blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: "none"
|
||||||
|
}), blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: "none"
|
||||||
|
}), blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: "none"
|
||||||
|
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||||
|
backgroundColor: "none",
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||||
|
backgroundColor: "none",
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
|
backgroundColor: "none",
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: borderColor
|
||||||
|
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColor: borderColor
|
||||||
|
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("div", {
|
||||||
|
className: "content-box__innerblocks",
|
||||||
|
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.InnerBlocks.Content, {})
|
||||||
|
})]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const deprecated = [{
|
||||||
|
save: StaticSaveWithAlign
|
||||||
|
}, {
|
||||||
|
save: _deprecated_save__WEBPACK_IMPORTED_MODULE_4__["default"]
|
||||||
|
}];
|
||||||
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (deprecated);
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
|
|
@ -341,33 +518,36 @@ __webpack_require__.r(__webpack_exports__);
|
||||||
/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ "./src/content-box/style.scss");
|
/* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./style.scss */ "./src/content-box/style.scss");
|
||||||
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/content-box/edit.js");
|
/* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/content-box/edit.js");
|
||||||
/* harmony import */ var _save__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./save */ "./src/content-box/save.js");
|
/* harmony import */ var _save__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./save */ "./src/content-box/save.js");
|
||||||
/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./block.json */ "./src/content-box/block.json");
|
/* harmony import */ var _deprecated__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./deprecated */ "./src/content-box/deprecated.js");
|
||||||
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
|
/* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./block.json */ "./src/content-box/block.json");
|
||||||
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
|
||||||
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_4__.name, {
|
|
||||||
|
(0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_0__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_5__.name, {
|
||||||
icon: {
|
icon: {
|
||||||
foreground: "#136f63",
|
foreground: "#136f63",
|
||||||
src: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("svg", {
|
src: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("svg", {
|
||||||
width: "40",
|
width: "40",
|
||||||
height: "40",
|
height: "40",
|
||||||
viewBox: "0 0 100 100",
|
viewBox: "0 0 100 100",
|
||||||
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)("g", {
|
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)("g", {
|
||||||
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("path", {
|
children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("path", {
|
||||||
d: "m50,99.84988l-43.14852,-24.92494l0,-49.84988l43.14852,-24.92494l43.14852,24.92494l0,49.84988l-43.14852,24.92494zm-40.75518,-26.32675l40.75518,23.52312l40.75518,-23.52312l0,-47.04625l-40.75518,-23.55731l-40.75518,23.55731l0,47.04625z"
|
d: "m50,99.84988l-43.14852,-24.92494l0,-49.84988l43.14852,-24.92494l43.14852,24.92494l0,49.84988l-43.14852,24.92494zm-40.75518,-26.32675l40.75518,23.52312l40.75518,-23.52312l0,-47.04625l-40.75518,-23.55731l-40.75518,23.55731l0,47.04625z"
|
||||||
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)("path", {
|
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)("path", {
|
||||||
d: "m50,86.13945l-31.28439,-18.05263l0,-36.13945l31.28439,-18.05263l31.28439,18.05263l0,36.13945l-31.28439,18.05263zm-13.50528,-28.344l13.50528,7.79545l13.50528,-7.79545l0,-15.59091l-13.50528,-7.79545l-13.50528,7.79545l0,15.59091z"
|
d: "m50,86.13945l-31.28439,-18.05263l0,-36.13945l31.28439,-18.05263l31.28439,18.05263l0,36.13945l-31.28439,18.05263zm-13.50528,-28.344l13.50528,7.79545l13.50528,-7.79545l0,-15.59091l-13.50528,-7.79545l-13.50528,7.79545l0,15.59091z"
|
||||||
})]
|
})]
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"],
|
edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"],
|
||||||
save: _save__WEBPACK_IMPORTED_MODULE_3__["default"]
|
save: _save__WEBPACK_IMPORTED_MODULE_3__["default"],
|
||||||
|
deprecated: _deprecated__WEBPACK_IMPORTED_MODULE_4__["default"]
|
||||||
});
|
});
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
@ -384,71 +564,12 @@ __webpack_require__.r(__webpack_exports__);
|
||||||
/* harmony export */ });
|
/* harmony export */ });
|
||||||
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
|
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/block-editor */ "@wordpress/block-editor");
|
||||||
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__);
|
/* harmony import */ var _wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__);
|
||||||
/* harmony import */ var _shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./shapeA.jsx */ "./src/content-box/shapeA.jsx");
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
|
||||||
/* harmony import */ var _shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shapeB.jsx */ "./src/content-box/shapeB.jsx");
|
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__);
|
||||||
/* harmony import */ var _shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shapeC.jsx */ "./src/content-box/shapeC.jsx");
|
|
||||||
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
|
|
||||||
/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__);
|
|
||||||
|
|
||||||
|
|
||||||
|
function save() {
|
||||||
|
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.InnerBlocks.Content, {});
|
||||||
|
|
||||||
function save({
|
|
||||||
attributes
|
|
||||||
}) {
|
|
||||||
const {
|
|
||||||
backgroundColor,
|
|
||||||
textColor,
|
|
||||||
hasLightBackground,
|
|
||||||
hasBackgroundColor,
|
|
||||||
blockVariant,
|
|
||||||
align,
|
|
||||||
shapeType,
|
|
||||||
borderColor
|
|
||||||
} = attributes;
|
|
||||||
const lightnessClass = hasLightBackground ? "content-box--bg-light" : "content-box--bg-dark";
|
|
||||||
const alignClass = align === "full" ? "alignfull" : align === "wide" ? "alignwide" : "aligncontained";
|
|
||||||
return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)("section", {
|
|
||||||
..._wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.useBlockProps.save({
|
|
||||||
className: `content-box content-box--variant-${blockVariant} content-box--${shapeType} ${lightnessClass} ${alignClass}`,
|
|
||||||
style: {
|
|
||||||
"--content-box-text-color": textColor !== null && textColor !== void 0 ? textColor : "inherit",
|
|
||||||
"--content-box-background-color": blockVariant === "backgrounded" || blockVariant === "framed-backgrounded" ? backgroundColor : "transparent"
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
children: [blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderColor: "none"
|
|
||||||
}), blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderColor: "none"
|
|
||||||
}), blockVariant === "backgrounded" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderColor: "none"
|
|
||||||
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
|
||||||
backgroundColor: "none",
|
|
||||||
borderColor: borderColor
|
|
||||||
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
|
||||||
backgroundColor: "none",
|
|
||||||
borderColor: borderColor
|
|
||||||
}), blockVariant === "framed" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
|
||||||
backgroundColor: "none",
|
|
||||||
borderColor: borderColor
|
|
||||||
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeA" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeA_jsx__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderColor: borderColor
|
|
||||||
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeB" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeB_jsx__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderColor: borderColor
|
|
||||||
}), blockVariant === "framed-backgrounded" && backgroundColor && shapeType === "shapeC" && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_shapeC_jsx__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
|
||||||
backgroundColor: backgroundColor,
|
|
||||||
borderColor: borderColor
|
|
||||||
}), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)("div", {
|
|
||||||
className: "content-box__innerblocks",
|
|
||||||
children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(_wordpress_block_editor__WEBPACK_IMPORTED_MODULE_0__.InnerBlocks.Content, {})
|
|
||||||
})]
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
110
plugins/carhop-blocks/build/content-box/render.php
Normal file
110
plugins/carhop-blocks/build/content-box/render.php
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rendu serveur : évite de persister du SVG dans le post
|
||||||
|
* (filtré par KSES pour les rôles sans unfiltered_html).
|
||||||
|
*
|
||||||
|
* @var array $attributes Attributs du bloc.
|
||||||
|
* @var string $content HTML des blocs internes (InnerBlocks).
|
||||||
|
* @var WP_Block $block Instance du bloc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$background_color = $attributes['backgroundColor'] ?? '#f1fcf9';
|
||||||
|
$text_color = $attributes['textColor'] ?? 'inherit';
|
||||||
|
$has_light_background = ! empty($attributes['hasLightBackground']);
|
||||||
|
$block_variant = $attributes['blockVariant'] ?? 'backgrounded';
|
||||||
|
$shape_type = $attributes['shapeType'] ?? 'straight';
|
||||||
|
$border_color = $attributes['borderColor'] ?? null;
|
||||||
|
|
||||||
|
$align = $attributes['align'] ?? '';
|
||||||
|
if ('' === $align && ! empty($attributes['blockWidth'])) {
|
||||||
|
$block_width = $attributes['blockWidth'];
|
||||||
|
$align = 'contained' === $block_width ? '' : $block_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ancien save statique : le HTML complet est déjà dans $content.
|
||||||
|
$is_legacy_static = $content && (
|
||||||
|
str_contains($content, 'content-box content-box--variant-')
|
||||||
|
|| str_contains($content, 'class="content-box ')
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($is_legacy_static) {
|
||||||
|
echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lightness_class = $has_light_background ? 'content-box--bg-light' : 'content-box--bg-dark';
|
||||||
|
|
||||||
|
$align_class = 'aligncontained';
|
||||||
|
if ('full' === $align) {
|
||||||
|
$align_class = 'alignfull';
|
||||||
|
} elseif ('wide' === $align) {
|
||||||
|
$align_class = 'alignwide';
|
||||||
|
}
|
||||||
|
|
||||||
|
$bg_css = ('backgrounded' === $block_variant || 'framed-backgrounded' === $block_variant)
|
||||||
|
? $background_color
|
||||||
|
: 'transparent';
|
||||||
|
|
||||||
|
$wrapper_attributes = get_block_wrapper_attributes(
|
||||||
|
array(
|
||||||
|
'class' => sprintf(
|
||||||
|
'content-box content-box--variant-%s content-box--%s %s %s',
|
||||||
|
esc_attr($block_variant),
|
||||||
|
esc_attr($shape_type),
|
||||||
|
esc_attr($lightness_class),
|
||||||
|
esc_attr($align_class)
|
||||||
|
),
|
||||||
|
'style' => sprintf(
|
||||||
|
'--content-box-text-color:%s;--content-box-background-color:%s',
|
||||||
|
esc_attr($text_color ? $text_color : 'inherit'),
|
||||||
|
esc_attr($bg_css)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
isset($block) ? $block : null
|
||||||
|
);
|
||||||
|
|
||||||
|
$show_shapes = $background_color && in_array($shape_type, array('shapeA', 'shapeB', 'shapeC'), true);
|
||||||
|
|
||||||
|
$shape_fill = 'none';
|
||||||
|
$shape_stroke = 'none';
|
||||||
|
|
||||||
|
if ($show_shapes) {
|
||||||
|
if ('backgrounded' === $block_variant) {
|
||||||
|
$shape_fill = $background_color;
|
||||||
|
$shape_stroke = 'none';
|
||||||
|
} elseif ('framed' === $block_variant) {
|
||||||
|
$shape_fill = 'none';
|
||||||
|
$shape_stroke = $border_color ? $border_color : 'none';
|
||||||
|
} elseif ('framed-backgrounded' === $block_variant) {
|
||||||
|
$shape_fill = $background_color;
|
||||||
|
$shape_stroke = $border_color ? $border_color : 'none';
|
||||||
|
} else {
|
||||||
|
$show_shapes = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$shape_fill_attr = esc_attr($shape_fill);
|
||||||
|
$shape_stroke_attr = esc_attr($shape_stroke && 'none' !== $shape_stroke ? $shape_stroke : 'none');
|
||||||
|
$stroke_width = ($shape_stroke && 'none' !== $shape_stroke) ? '2px' : '0';
|
||||||
|
?>
|
||||||
|
<section <?php echo $wrapper_attributes; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
|
||||||
|
<?php if ($show_shapes && 'shapeA' === $shape_type) : ?>
|
||||||
|
<svg width="1440" height="744" viewBox="0 0 1440 744" fill="none" xmlns="http://www.w3.org/2000/svg" class="content-box__shape" preserveAspectRatio="none" vector-effect="non-scaling-stroke" overflow="visible" aria-hidden="true" focusable="false">
|
||||||
|
<path d="M0 0H1440V686.701L0 744V0Z" fill="<?php echo $shape_fill_attr; ?>" stroke="<?php echo $shape_stroke_attr; ?>" stroke-width="<?php echo esc_attr($stroke_width); ?>" style="stroke-linejoin:round;vector-effect:non-scaling-stroke"></path>
|
||||||
|
</svg>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($show_shapes && 'shapeB' === $shape_type) : ?>
|
||||||
|
<svg class="content-box__shape" width="1302" height="654" viewBox="0 0 1302 654" preserveAspectRatio="none" vector-effect="non-scaling-stroke" overflow="visible" aria-hidden="true" focusable="false">
|
||||||
|
<path d="M1302 0L0 15.8281V654L1302 642.633L1302 0Z" fill="<?php echo $shape_fill_attr; ?>" stroke="<?php echo $shape_stroke_attr; ?>" stroke-width="<?php echo esc_attr($stroke_width); ?>" style="stroke-linejoin:round;vector-effect:non-scaling-stroke"></path>
|
||||||
|
</svg>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($show_shapes && 'shapeC' === $shape_type) : ?>
|
||||||
|
<svg width="1440" height="997" viewBox="0 0 1440 997" class="content-box__shape" preserveAspectRatio="none" vector-effect="non-scaling-stroke" overflow="visible" aria-hidden="true" focusable="false">
|
||||||
|
<path d="M1440 29.8887L0 0V997L1440 979.242V29.8887Z" fill="<?php echo $shape_fill_attr; ?>" stroke="<?php echo $shape_stroke_attr; ?>" stroke-width="<?php echo esc_attr($stroke_width); ?>" style="stroke-linejoin:round;vector-effect:non-scaling-stroke"></path>
|
||||||
|
</svg>
|
||||||
|
<?php endif; ?>
|
||||||
|
<div class="content-box__innerblocks">
|
||||||
|
<?php echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
@ -21,7 +21,12 @@
|
||||||
"editorStyle": "file:./index.css",
|
"editorStyle": "file:./index.css",
|
||||||
"style": "file:./style-index.css",
|
"style": "file:./style-index.css",
|
||||||
"viewScript": "file:./view.js",
|
"viewScript": "file:./view.js",
|
||||||
|
"render": "file:./render.php",
|
||||||
"attributes": {
|
"attributes": {
|
||||||
|
"align": {
|
||||||
|
"type": "string",
|
||||||
|
"default": ""
|
||||||
|
},
|
||||||
"hasBackgroundColor": {
|
"hasBackgroundColor": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
|
|
|
||||||
108
plugins/carhop-blocks/src/content-box/deprecated.js
Normal file
108
plugins/carhop-blocks/src/content-box/deprecated.js
Normal file
|
|
@ -0,0 +1,108 @@
|
||||||
|
import { useBlockProps, InnerBlocks } from "@wordpress/block-editor";
|
||||||
|
import ShapeA from "./shapeA.jsx";
|
||||||
|
import ShapeB from "./shapeB.jsx";
|
||||||
|
import ShapeC from "./shapeC.jsx";
|
||||||
|
import deprecatedSave from "./deprecated-save";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ancien save statique (SVG + section) — validation en éditeur
|
||||||
|
* des contenus publiés avant le passage au rendu dynamique.
|
||||||
|
*/
|
||||||
|
function StaticSaveWithAlign({ attributes }) {
|
||||||
|
const {
|
||||||
|
backgroundColor,
|
||||||
|
textColor,
|
||||||
|
hasLightBackground,
|
||||||
|
blockVariant,
|
||||||
|
align,
|
||||||
|
shapeType,
|
||||||
|
borderColor,
|
||||||
|
} = attributes;
|
||||||
|
|
||||||
|
const lightnessClass = hasLightBackground
|
||||||
|
? "content-box--bg-light"
|
||||||
|
: "content-box--bg-dark";
|
||||||
|
|
||||||
|
const alignClass =
|
||||||
|
align === "full"
|
||||||
|
? "alignfull"
|
||||||
|
: align === "wide"
|
||||||
|
? "alignwide"
|
||||||
|
: "aligncontained";
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section
|
||||||
|
{...useBlockProps.save({
|
||||||
|
className: `content-box content-box--variant-${blockVariant} content-box--${shapeType} ${lightnessClass} ${alignClass}`,
|
||||||
|
style: {
|
||||||
|
"--content-box-text-color": textColor ?? "inherit",
|
||||||
|
"--content-box-background-color":
|
||||||
|
blockVariant === "backgrounded" ||
|
||||||
|
blockVariant === "framed-backgrounded"
|
||||||
|
? backgroundColor
|
||||||
|
: "transparent",
|
||||||
|
},
|
||||||
|
})}
|
||||||
|
>
|
||||||
|
{blockVariant === "backgrounded" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeA" && (
|
||||||
|
<ShapeA backgroundColor={backgroundColor} borderColor={"none"} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "backgrounded" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeB" && (
|
||||||
|
<ShapeB backgroundColor={backgroundColor} borderColor={"none"} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "backgrounded" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeC" && (
|
||||||
|
<ShapeC backgroundColor={backgroundColor} borderColor={"none"} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "framed" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeA" && (
|
||||||
|
<ShapeA backgroundColor={"none"} borderColor={borderColor} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "framed" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeB" && (
|
||||||
|
<ShapeB backgroundColor={"none"} borderColor={borderColor} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "framed" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeC" && (
|
||||||
|
<ShapeC backgroundColor={"none"} borderColor={borderColor} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "framed-backgrounded" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeA" && (
|
||||||
|
<ShapeA backgroundColor={backgroundColor} borderColor={borderColor} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "framed-backgrounded" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeB" && (
|
||||||
|
<ShapeB backgroundColor={backgroundColor} borderColor={borderColor} />
|
||||||
|
)}
|
||||||
|
{blockVariant === "framed-backgrounded" &&
|
||||||
|
backgroundColor &&
|
||||||
|
shapeType === "shapeC" && (
|
||||||
|
<ShapeC backgroundColor={backgroundColor} borderColor={borderColor} />
|
||||||
|
)}
|
||||||
|
<div className="content-box__innerblocks">
|
||||||
|
<InnerBlocks.Content />
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const deprecated = [
|
||||||
|
{
|
||||||
|
save: StaticSaveWithAlign,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
save: deprecatedSave,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export default deprecated;
|
||||||
|
|
@ -3,6 +3,7 @@ import "./style.scss";
|
||||||
|
|
||||||
import Edit from "./edit";
|
import Edit from "./edit";
|
||||||
import save from "./save";
|
import save from "./save";
|
||||||
|
import deprecated from "./deprecated";
|
||||||
import metadata from "./block.json";
|
import metadata from "./block.json";
|
||||||
|
|
||||||
registerBlockType(metadata.name, {
|
registerBlockType(metadata.name, {
|
||||||
|
|
@ -19,4 +20,5 @@ registerBlockType(metadata.name, {
|
||||||
},
|
},
|
||||||
edit: Edit,
|
edit: Edit,
|
||||||
save,
|
save,
|
||||||
|
deprecated,
|
||||||
});
|
});
|
||||||
|
|
|
||||||
110
plugins/carhop-blocks/src/content-box/render.php
Normal file
110
plugins/carhop-blocks/src/content-box/render.php
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Rendu serveur : évite de persister du SVG dans le post
|
||||||
|
* (filtré par KSES pour les rôles sans unfiltered_html).
|
||||||
|
*
|
||||||
|
* @var array $attributes Attributs du bloc.
|
||||||
|
* @var string $content HTML des blocs internes (InnerBlocks).
|
||||||
|
* @var WP_Block $block Instance du bloc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$background_color = $attributes['backgroundColor'] ?? '#f1fcf9';
|
||||||
|
$text_color = $attributes['textColor'] ?? 'inherit';
|
||||||
|
$has_light_background = ! empty($attributes['hasLightBackground']);
|
||||||
|
$block_variant = $attributes['blockVariant'] ?? 'backgrounded';
|
||||||
|
$shape_type = $attributes['shapeType'] ?? 'straight';
|
||||||
|
$border_color = $attributes['borderColor'] ?? null;
|
||||||
|
|
||||||
|
$align = $attributes['align'] ?? '';
|
||||||
|
if ('' === $align && ! empty($attributes['blockWidth'])) {
|
||||||
|
$block_width = $attributes['blockWidth'];
|
||||||
|
$align = 'contained' === $block_width ? '' : $block_width;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ancien save statique : le HTML complet est déjà dans $content.
|
||||||
|
$is_legacy_static = $content && (
|
||||||
|
str_contains($content, 'content-box content-box--variant-')
|
||||||
|
|| str_contains($content, 'class="content-box ')
|
||||||
|
);
|
||||||
|
|
||||||
|
if ($is_legacy_static) {
|
||||||
|
echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$lightness_class = $has_light_background ? 'content-box--bg-light' : 'content-box--bg-dark';
|
||||||
|
|
||||||
|
$align_class = 'aligncontained';
|
||||||
|
if ('full' === $align) {
|
||||||
|
$align_class = 'alignfull';
|
||||||
|
} elseif ('wide' === $align) {
|
||||||
|
$align_class = 'alignwide';
|
||||||
|
}
|
||||||
|
|
||||||
|
$bg_css = ('backgrounded' === $block_variant || 'framed-backgrounded' === $block_variant)
|
||||||
|
? $background_color
|
||||||
|
: 'transparent';
|
||||||
|
|
||||||
|
$wrapper_attributes = get_block_wrapper_attributes(
|
||||||
|
array(
|
||||||
|
'class' => sprintf(
|
||||||
|
'content-box content-box--variant-%s content-box--%s %s %s',
|
||||||
|
esc_attr($block_variant),
|
||||||
|
esc_attr($shape_type),
|
||||||
|
esc_attr($lightness_class),
|
||||||
|
esc_attr($align_class)
|
||||||
|
),
|
||||||
|
'style' => sprintf(
|
||||||
|
'--content-box-text-color:%s;--content-box-background-color:%s',
|
||||||
|
esc_attr($text_color ? $text_color : 'inherit'),
|
||||||
|
esc_attr($bg_css)
|
||||||
|
),
|
||||||
|
),
|
||||||
|
isset($block) ? $block : null
|
||||||
|
);
|
||||||
|
|
||||||
|
$show_shapes = $background_color && in_array($shape_type, array('shapeA', 'shapeB', 'shapeC'), true);
|
||||||
|
|
||||||
|
$shape_fill = 'none';
|
||||||
|
$shape_stroke = 'none';
|
||||||
|
|
||||||
|
if ($show_shapes) {
|
||||||
|
if ('backgrounded' === $block_variant) {
|
||||||
|
$shape_fill = $background_color;
|
||||||
|
$shape_stroke = 'none';
|
||||||
|
} elseif ('framed' === $block_variant) {
|
||||||
|
$shape_fill = 'none';
|
||||||
|
$shape_stroke = $border_color ? $border_color : 'none';
|
||||||
|
} elseif ('framed-backgrounded' === $block_variant) {
|
||||||
|
$shape_fill = $background_color;
|
||||||
|
$shape_stroke = $border_color ? $border_color : 'none';
|
||||||
|
} else {
|
||||||
|
$show_shapes = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$shape_fill_attr = esc_attr($shape_fill);
|
||||||
|
$shape_stroke_attr = esc_attr($shape_stroke && 'none' !== $shape_stroke ? $shape_stroke : 'none');
|
||||||
|
$stroke_width = ($shape_stroke && 'none' !== $shape_stroke) ? '2px' : '0';
|
||||||
|
?>
|
||||||
|
<section <?php echo $wrapper_attributes; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>>
|
||||||
|
<?php if ($show_shapes && 'shapeA' === $shape_type) : ?>
|
||||||
|
<svg width="1440" height="744" viewBox="0 0 1440 744" fill="none" xmlns="http://www.w3.org/2000/svg" class="content-box__shape" preserveAspectRatio="none" vector-effect="non-scaling-stroke" overflow="visible" aria-hidden="true" focusable="false">
|
||||||
|
<path d="M0 0H1440V686.701L0 744V0Z" fill="<?php echo $shape_fill_attr; ?>" stroke="<?php echo $shape_stroke_attr; ?>" stroke-width="<?php echo esc_attr($stroke_width); ?>" style="stroke-linejoin:round;vector-effect:non-scaling-stroke"></path>
|
||||||
|
</svg>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($show_shapes && 'shapeB' === $shape_type) : ?>
|
||||||
|
<svg class="content-box__shape" width="1302" height="654" viewBox="0 0 1302 654" preserveAspectRatio="none" vector-effect="non-scaling-stroke" overflow="visible" aria-hidden="true" focusable="false">
|
||||||
|
<path d="M1302 0L0 15.8281V654L1302 642.633L1302 0Z" fill="<?php echo $shape_fill_attr; ?>" stroke="<?php echo $shape_stroke_attr; ?>" stroke-width="<?php echo esc_attr($stroke_width); ?>" style="stroke-linejoin:round;vector-effect:non-scaling-stroke"></path>
|
||||||
|
</svg>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($show_shapes && 'shapeC' === $shape_type) : ?>
|
||||||
|
<svg width="1440" height="997" viewBox="0 0 1440 997" class="content-box__shape" preserveAspectRatio="none" vector-effect="non-scaling-stroke" overflow="visible" aria-hidden="true" focusable="false">
|
||||||
|
<path d="M1440 29.8887L0 0V997L1440 979.242V29.8887Z" fill="<?php echo $shape_fill_attr; ?>" stroke="<?php echo $shape_stroke_attr; ?>" stroke-width="<?php echo esc_attr($stroke_width); ?>" style="stroke-linejoin:round;vector-effect:non-scaling-stroke"></path>
|
||||||
|
</svg>
|
||||||
|
<?php endif; ?>
|
||||||
|
<div class="content-box__innerblocks">
|
||||||
|
<?php echo $content; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
@ -1,92 +1,5 @@
|
||||||
import { useBlockProps, InnerBlocks } from "@wordpress/block-editor";
|
import { InnerBlocks } from "@wordpress/block-editor";
|
||||||
import ShapeA from "./shapeA.jsx";
|
|
||||||
import ShapeB from "./shapeB.jsx";
|
|
||||||
import ShapeC from "./shapeC.jsx";
|
|
||||||
export default function save({ attributes }) {
|
|
||||||
const {
|
|
||||||
backgroundColor,
|
|
||||||
textColor,
|
|
||||||
hasLightBackground,
|
|
||||||
hasBackgroundColor,
|
|
||||||
blockVariant,
|
|
||||||
align,
|
|
||||||
shapeType,
|
|
||||||
borderColor,
|
|
||||||
} = attributes;
|
|
||||||
|
|
||||||
const lightnessClass = hasLightBackground
|
export default function save() {
|
||||||
? "content-box--bg-light"
|
return <InnerBlocks.Content />;
|
||||||
: "content-box--bg-dark";
|
|
||||||
|
|
||||||
const alignClass =
|
|
||||||
align === "full"
|
|
||||||
? "alignfull"
|
|
||||||
: align === "wide"
|
|
||||||
? "alignwide"
|
|
||||||
: "aligncontained";
|
|
||||||
|
|
||||||
return (
|
|
||||||
<section
|
|
||||||
{...useBlockProps.save({
|
|
||||||
className: `content-box content-box--variant-${blockVariant} content-box--${shapeType} ${lightnessClass} ${alignClass}`,
|
|
||||||
style: {
|
|
||||||
"--content-box-text-color": textColor ?? "inherit",
|
|
||||||
"--content-box-background-color":
|
|
||||||
blockVariant === "backgrounded" ||
|
|
||||||
blockVariant === "framed-backgrounded"
|
|
||||||
? backgroundColor
|
|
||||||
: "transparent",
|
|
||||||
},
|
|
||||||
})}
|
|
||||||
>
|
|
||||||
{blockVariant === "backgrounded" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeA" && (
|
|
||||||
<ShapeA backgroundColor={backgroundColor} borderColor={"none"} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "backgrounded" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeB" && (
|
|
||||||
<ShapeB backgroundColor={backgroundColor} borderColor={"none"} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "backgrounded" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeC" && (
|
|
||||||
<ShapeC backgroundColor={backgroundColor} borderColor={"none"} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "framed" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeA" && (
|
|
||||||
<ShapeA backgroundColor={"none"} borderColor={borderColor} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "framed" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeB" && (
|
|
||||||
<ShapeB backgroundColor={"none"} borderColor={borderColor} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "framed" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeC" && (
|
|
||||||
<ShapeC backgroundColor={"none"} borderColor={borderColor} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "framed-backgrounded" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeA" && (
|
|
||||||
<ShapeA backgroundColor={backgroundColor} borderColor={borderColor} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "framed-backgrounded" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeB" && (
|
|
||||||
<ShapeB backgroundColor={backgroundColor} borderColor={borderColor} />
|
|
||||||
)}
|
|
||||||
{blockVariant === "framed-backgrounded" &&
|
|
||||||
backgroundColor &&
|
|
||||||
shapeType === "shapeC" && (
|
|
||||||
<ShapeC backgroundColor={backgroundColor} borderColor={borderColor} />
|
|
||||||
)}
|
|
||||||
<div className="content-box__innerblocks">
|
|
||||||
<InnerBlocks.Content />
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user