@plaudit/gutenberg-api-extensions 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -14,68 +14,52 @@ export function installLayeredBlockStylesSupport() {
|
|
|
14
14
|
}
|
|
15
15
|
window.plauditLayeredBlockStylesInstalled = true;
|
|
16
16
|
const layeredBlockStyles = (_a = window.plauditLayeredBlockStyles) !== null && _a !== void 0 ? _a : (window.plauditLayeredBlockStyles = new Map());
|
|
17
|
-
function
|
|
17
|
+
function layeredStyleValueGetter(layer, block) {
|
|
18
|
+
var _a, _b, _c, _d;
|
|
19
|
+
const currentLayerClassPrefix = `style-${layer.name}-`;
|
|
20
|
+
return (_d = (_c = (_b = (_a = block.attributes['className']) === null || _a === void 0 ? void 0 : _a.split(/\s+/).filter(cn => cn.startsWith(currentLayerClassPrefix))[0]) === null || _b === void 0 ? void 0 : _b.substring(currentLayerClassPrefix.length)) !== null && _c !== void 0 ? _c : layer.default) !== null && _d !== void 0 ? _d : '';
|
|
21
|
+
}
|
|
22
|
+
function layeredStyleValueSetter(attrs, layers, block) {
|
|
23
|
+
const [key, value] = Object.entries(attrs)[0];
|
|
24
|
+
if (!key.startsWith("layeredStyles__")) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
const layerName = key.substring(15);
|
|
28
|
+
const currentLayerClassPrefix = `style-${layerName}-`;
|
|
29
|
+
const classNames = block.attributes['className'] ? block.attributes['className'].split(/\s+/).filter(cn => !cn.startsWith(currentLayerClassPrefix)) : [];
|
|
30
|
+
const layerClassPrefixes = layers.map(layer => `style-${layer.name}-`);
|
|
31
|
+
const layerClasses = classNames.filter(cn => layerClassPrefixes.some(lcp => cn.startsWith(lcp)));
|
|
32
|
+
const nonLayerClasses = classNames.filter(cn => !layerClasses.includes(cn));
|
|
33
|
+
layerClasses.push(`${currentLayerClassPrefix}${value}`);
|
|
34
|
+
layerClasses.sort();
|
|
35
|
+
block.setAttributes({ className: [...nonLayerClasses, ...layerClasses].join(' ') });
|
|
36
|
+
}
|
|
37
|
+
function convertLayersToRadios(layer, layers, props) {
|
|
38
|
+
const value = layeredStyleValueGetter(layer, props);
|
|
39
|
+
const sharedProps = {
|
|
40
|
+
label: props.label,
|
|
41
|
+
attribute: `layeredStyles__${layer.name}`,
|
|
42
|
+
attributes: { [`layeredStyles__${layer.name}`]: value },
|
|
43
|
+
setAttributes: (attrs) => layeredStyleValueSetter(attrs, layers, props)
|
|
44
|
+
};
|
|
18
45
|
switch (layer.picker) {
|
|
19
46
|
case undefined:
|
|
20
47
|
case 'toggle-control':
|
|
21
|
-
return React.createElement(PickOneFromToggleGroup, Object.assign({}, layer,
|
|
48
|
+
return React.createElement(PickOneFromToggleGroup, Object.assign({}, layer, sharedProps));
|
|
22
49
|
case 'color':
|
|
23
|
-
return React.createElement(PickOneFromColors, Object.assign({}, layer,
|
|
50
|
+
return React.createElement(PickOneFromColors, Object.assign({}, layer, sharedProps));
|
|
24
51
|
case 'radio':
|
|
25
|
-
return React.createElement(PickOneFromRadios, Object.assign({}, layer,
|
|
52
|
+
return React.createElement(PickOneFromRadios, Object.assign({}, layer, sharedProps));
|
|
26
53
|
case 'select':
|
|
27
|
-
return React.createElement(PickOneFromSelect, Object.assign({}, layer,
|
|
54
|
+
return React.createElement(PickOneFromSelect, Object.assign({}, layer, sharedProps));
|
|
28
55
|
}
|
|
29
56
|
}
|
|
30
|
-
addFilter('blocks.registerBlockType', 'plaudit/gutenberg-api-extensions/layered-styles', (atts) => {
|
|
31
|
-
var _a;
|
|
32
|
-
if (layeredBlockStyles.has(atts.name)) {
|
|
33
|
-
(_a = layeredBlockStyles.get(atts.name)) === null || _a === void 0 ? void 0 : _a.layers.forEach(layer => {
|
|
34
|
-
const attName = `layeredStyles__${layer.name}`;
|
|
35
|
-
if (!atts.attributes[attName]) {
|
|
36
|
-
atts.attributes[attName] = { type: 'string', source: 'attribute', attribute: `data-layered-style-${layer.name}` };
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
return atts;
|
|
41
|
-
});
|
|
42
|
-
addFilter('blocks.getBlockAttributes', 'plaudit/gutenberg-api-extensions/layered-styles', (blockAttributes, blockType, innerHTML) => {
|
|
43
|
-
var _a;
|
|
44
|
-
if (layeredBlockStyles.has(blockType.name)) {
|
|
45
|
-
const blockRoot = new DOMParser().parseFromString(innerHTML, "application/xml").documentElement;
|
|
46
|
-
(_a = layeredBlockStyles.get(blockType.name)) === null || _a === void 0 ? void 0 : _a.layers.forEach(layer => {
|
|
47
|
-
var _a;
|
|
48
|
-
blockAttributes[`layeredStyles__${layer.name}`] = (_a = blockRoot.getAttribute(`data-layered-style-${layer.name}`)) !== null && _a !== void 0 ? _a : layer.default;
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
return blockAttributes;
|
|
52
|
-
});
|
|
53
|
-
addFilter('editor.BlockListBlock', 'plaudit/gutenberg-api-extensions/layered-styles', createHigherOrderComponent(BlockListBlock => (props) => {
|
|
54
|
-
var _a, _b;
|
|
55
|
-
const wrapperProps = Object.assign({}, ((_a = props.wrapperProps) !== null && _a !== void 0 ? _a : {}));
|
|
56
|
-
if (layeredBlockStyles.has(props.name)) {
|
|
57
|
-
(_b = layeredBlockStyles.get(props.name)) === null || _b === void 0 ? void 0 : _b.layers.forEach(layer => {
|
|
58
|
-
wrapperProps[`data-layered-style-${layer.name}`] = props.attributes[`layeredStyles__${layer.name}`];
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
return React.createElement(BlockListBlock, Object.assign({}, props, { wrapperProps: wrapperProps }));
|
|
62
|
-
}, 'layeredStylesMarkupInjector'));
|
|
63
|
-
addFilter('blocks.getSaveContent.extraProps', 'plaudit/gutenberg-api-extensions/layered-styles', (props, blockType, attributes) => {
|
|
64
|
-
if (!layeredBlockStyles.has(blockType.name)) {
|
|
65
|
-
return props;
|
|
66
|
-
}
|
|
67
|
-
const res = Object.assign({}, props);
|
|
68
|
-
layeredBlockStyles.get(blockType.name).layers.forEach(layer => {
|
|
69
|
-
res[`data-layered-style-${layer.name}`] = attributes[`layeredStyles__${layer.name}`];
|
|
70
|
-
});
|
|
71
|
-
return res;
|
|
72
|
-
});
|
|
73
57
|
addFilter('editor.BlockEdit', 'plaudit/gutenberg-api-extensions/layered-styles', createHigherOrderComponent(BlockEdit => (props) => {
|
|
74
58
|
if (!layeredBlockStyles.has(props['name'])) {
|
|
75
59
|
return React.createElement(BlockEdit, Object.assign({}, props));
|
|
76
60
|
}
|
|
77
61
|
return React.createElement(React.Fragment, null,
|
|
78
62
|
React.createElement(BlockEdit, Object.assign({}, props)),
|
|
79
|
-
React.createElement(InspectorPanel, { title: "Layered Styles", initialOpen: true }, ...layeredBlockStyles.get(props['name']).layers.map(layer => convertLayersToRadios(layer, props))));
|
|
63
|
+
React.createElement(InspectorPanel, { title: "Layered Styles", initialOpen: true }, ...layeredBlockStyles.get(props['name']).layers.map(layer => convertLayersToRadios(layer, layeredBlockStyles.get(props['name']).layers, props))));
|
|
80
64
|
}, 'plauditGutenbergApiExtensionsLayeredStyles'));
|
|
81
65
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { BlockEditProps } from "@wordpress/blocks";
|
|
2
|
-
export type
|
|
3
|
-
label: string;
|
|
2
|
+
export type SpecificValueBlockProps<T extends string, V> = {
|
|
4
3
|
attribute: T;
|
|
5
4
|
attributes: BlockEditProps<Record<T, V> & Record<string, unknown>>['attributes'];
|
|
6
5
|
setAttributes: BlockEditProps<any>['setAttributes'];
|
|
7
6
|
};
|
|
7
|
+
export type SimpleBlockControlProps<T extends string, V> = SpecificValueBlockProps<T, V> & {
|
|
8
|
+
label: string;
|
|
9
|
+
};
|
|
8
10
|
export type PickableOptions<T extends object = {}> = Record<string, string | ({
|
|
9
11
|
text: string;
|
|
10
12
|
} & T)>;
|