@eeacms/volto-eea-website-policy 1.0.1 → 1.0.3
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.
- package/.project.eslintrc.js +3 -1
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/src/components/Blocks/LayoutSettings/LayoutSettingsEdit.jsx +32 -0
- package/src/components/Blocks/LayoutSettings/LayoutSettingsView.jsx +15 -0
- package/src/components/Blocks/LayoutSettings/edit.less +4 -0
- package/src/components/Blocks/LayoutSettings/index.js +24 -0
- package/src/components/Blocks/LayoutSettings/schema.js +31 -0
- package/src/components/Blocks/icons/image-narrow.svg +5 -0
- package/src/components/Blocks/schema-utils.js +16 -0
- package/src/components/Blocks/schema.js +51 -0
- package/src/index.js +15 -0
package/.project.eslintrc.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
|
|
4
|
-
const projectRootPath = fs.
|
|
4
|
+
const projectRootPath = fs.existsSync('./project')
|
|
5
|
+
? fs.realpathSync('./project')
|
|
6
|
+
: fs.realpathSync('./../../../');
|
|
5
7
|
const packageJson = require(path.join(projectRootPath, 'package.json'));
|
|
6
8
|
const jsConfig = require(path.join(projectRootPath, 'jsconfig.json')).compilerOptions;
|
|
7
9
|
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. Dates are d
|
|
|
4
4
|
|
|
5
5
|
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
|
6
6
|
|
|
7
|
+
### [1.0.3](https://github.com/eea/volto-eea-website-policy/compare/1.0.2...1.0.3) - 16 November 2022
|
|
8
|
+
|
|
9
|
+
### [1.0.2](https://github.com/eea/volto-eea-website-policy/compare/1.0.1...1.0.2) - 16 November 2022
|
|
10
|
+
|
|
11
|
+
#### :nail_care: Enhancements
|
|
12
|
+
|
|
13
|
+
- change(policy): use image-fit for container option and enabled styling schema enhancer for group block [David Ichim - [`8132bae`](https://github.com/eea/volto-eea-website-policy/commit/8132baea590042390f56d26c1acf4f26b0ac33a7)]
|
|
14
|
+
- change(policy): added styling schema as a block enhancer useful for several packages [David Ichim - [`1cc294f`](https://github.com/eea/volto-eea-website-policy/commit/1cc294f0512db3cbd06e9951ab9d4893e0899444)]
|
|
15
|
+
|
|
16
|
+
#### :hammer_and_wrench: Others
|
|
17
|
+
|
|
18
|
+
- test(estlint): Fix .project.eslintrc.js [Alin Voinea - [`e6b49b6`](https://github.com/eea/volto-eea-website-policy/commit/e6b49b678e2917915332203fe34e8f6cc4f96372)]
|
|
7
19
|
### [1.0.1](https://github.com/eea/volto-eea-website-policy/compare/1.0.0...1.0.1) - 28 October 2022
|
|
8
20
|
|
|
9
21
|
#### :nail_care: Enhancements
|
package/package.json
CHANGED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { EditSchema } from '@eeacms/volto-eea-website-policy/components/Blocks/LayoutSettings/schema';
|
|
3
|
+
import { BlockDataForm, SidebarPortal } from '@plone/volto/components';
|
|
4
|
+
import LayoutSettingsView from '@eeacms/volto-eea-website-policy/components/Blocks/LayoutSettings/LayoutSettingsView';
|
|
5
|
+
import '@eeacms/volto-eea-website-policy/components/Blocks/LayoutSettings/edit.less';
|
|
6
|
+
|
|
7
|
+
const LayoutSettingsEdit = (props) => {
|
|
8
|
+
const schema = EditSchema();
|
|
9
|
+
return (
|
|
10
|
+
<>
|
|
11
|
+
<h3>Page layout settings</h3>
|
|
12
|
+
<LayoutSettingsView {...props} />
|
|
13
|
+
<SidebarPortal selected={props.selected}>
|
|
14
|
+
{props.selected && (
|
|
15
|
+
<BlockDataForm
|
|
16
|
+
title={schema.title}
|
|
17
|
+
schema={schema}
|
|
18
|
+
formData={props.data}
|
|
19
|
+
onChangeField={(id, value) => {
|
|
20
|
+
props.onChangeBlock(props.block, {
|
|
21
|
+
...props.data,
|
|
22
|
+
[id]: value,
|
|
23
|
+
});
|
|
24
|
+
}}
|
|
25
|
+
/>
|
|
26
|
+
)}
|
|
27
|
+
</SidebarPortal>
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default LayoutSettingsEdit;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BodyClass } from '@plone/volto/helpers';
|
|
3
|
+
import { getVoltoStyles } from '@eeacms/volto-eea-website-policy/components/Blocks/schema-utils';
|
|
4
|
+
import cx from 'classnames';
|
|
5
|
+
|
|
6
|
+
const LayoutSettingsView = (props) => {
|
|
7
|
+
const classNames = getVoltoStyles(props.data);
|
|
8
|
+
return <BodyClass className={cx(classNames)} />;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
function propsAreEqual(prevProps, nextProps) {
|
|
12
|
+
return prevProps.data === nextProps.data;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default React.memo(LayoutSettingsView, propsAreEqual);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import codeSVG from '@plone/volto/icons/code.svg';
|
|
2
|
+
import LayoutSettingsView from './LayoutSettingsView';
|
|
3
|
+
import LayoutSettingsEdit from './LayoutSettingsEdit';
|
|
4
|
+
import BlockSettingsSchema from '@plone/volto/components/manage/Blocks/Block/Schema';
|
|
5
|
+
|
|
6
|
+
export default (config) => {
|
|
7
|
+
config.blocks.blocksConfig.layoutSettings = {
|
|
8
|
+
id: 'layoutSettings',
|
|
9
|
+
title: 'Layout settings',
|
|
10
|
+
icon: codeSVG,
|
|
11
|
+
group: 'common',
|
|
12
|
+
view: LayoutSettingsView,
|
|
13
|
+
edit: LayoutSettingsEdit,
|
|
14
|
+
schema: BlockSettingsSchema,
|
|
15
|
+
restricted: ({ properties }) => {
|
|
16
|
+
return !!properties['@type'];
|
|
17
|
+
},
|
|
18
|
+
mostUsed: true,
|
|
19
|
+
blockHasOwnFocusManagement: true,
|
|
20
|
+
sidebarTab: 1,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
return config;
|
|
24
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import imageNarrowSVG from '@eeacms/volto-eea-website-policy/components/Blocks/icons/image-narrow.svg';
|
|
2
|
+
import imageFitSVG from '@plone/volto/icons/image-fit.svg';
|
|
3
|
+
import imageWideSVG from '@plone/volto/icons/image-wide.svg';
|
|
4
|
+
|
|
5
|
+
export const ALIGN_INFO_MAP = {
|
|
6
|
+
narrow_view: [imageNarrowSVG, 'Narrow width'],
|
|
7
|
+
container_view: [imageFitSVG, 'Container width'],
|
|
8
|
+
wide_view: [imageWideSVG, 'Wide width'],
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const EditSchema = () => {
|
|
12
|
+
return {
|
|
13
|
+
title: 'Page layout settings',
|
|
14
|
+
fieldsets: [
|
|
15
|
+
{
|
|
16
|
+
id: 'default',
|
|
17
|
+
title: 'Default',
|
|
18
|
+
fields: ['layout_size'],
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
required: [],
|
|
22
|
+
properties: {
|
|
23
|
+
layout_size: {
|
|
24
|
+
widget: 'style_align',
|
|
25
|
+
title: 'Layout size',
|
|
26
|
+
actions: Object.keys(ALIGN_INFO_MAP),
|
|
27
|
+
actionsInfoMap: ALIGN_INFO_MAP,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg width="36" height="36" viewBox="0 0 36 36" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M10 13L11.9333 11V25L10 23H26L24.0667 25V11L26 13H10ZM26 11V18V21.5V23.5V25H10V11H26Z" fill="black"/>
|
|
3
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 31H29V29H7V31Z"/>
|
|
4
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M7 7H29V5H7V7Z"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const getVoltoStyles = (props) => {
|
|
2
|
+
// return an object with same key and value for cx class setting
|
|
3
|
+
const styles = props ? props : {};
|
|
4
|
+
const output = {};
|
|
5
|
+
for (const [key, value] of Object.entries(styles)) {
|
|
6
|
+
if (key === '@type') {
|
|
7
|
+
continue;
|
|
8
|
+
}
|
|
9
|
+
if (styles[key] === true) {
|
|
10
|
+
output[key] = key;
|
|
11
|
+
} else {
|
|
12
|
+
output[value] = value;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return output;
|
|
16
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { cloneDeep } from 'lodash';
|
|
2
|
+
import imageNarrowSVG from '@eeacms/volto-eea-website-policy/components/Blocks/icons/image-narrow.svg';
|
|
3
|
+
import imageFitSVG from '@plone/volto/icons/image-fit.svg';
|
|
4
|
+
import imageWideSVG from '@plone/volto/icons/image-wide.svg';
|
|
5
|
+
import imageFullSVG from '@plone/volto/icons/image-full.svg';
|
|
6
|
+
|
|
7
|
+
export const ALIGN_INFO_MAP = {
|
|
8
|
+
narrow_width: [imageNarrowSVG, 'Narrow width'],
|
|
9
|
+
container_width: [imageFitSVG, 'Container width'],
|
|
10
|
+
wide_width: [imageWideSVG, 'Wide width'],
|
|
11
|
+
full: [imageFullSVG, 'Full width'],
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const addStylingFieldsetSchemaEnhancer = ({ schema }) => {
|
|
15
|
+
const applied = schema?.properties?.styles;
|
|
16
|
+
|
|
17
|
+
if (!applied) {
|
|
18
|
+
const resSchema = cloneDeep(schema);
|
|
19
|
+
|
|
20
|
+
resSchema.fieldsets.push({
|
|
21
|
+
id: 'styling',
|
|
22
|
+
fields: ['styles'],
|
|
23
|
+
title: 'Styling',
|
|
24
|
+
});
|
|
25
|
+
resSchema.properties.styles = {
|
|
26
|
+
widget: 'object',
|
|
27
|
+
title: 'Styling',
|
|
28
|
+
schema: {
|
|
29
|
+
fieldsets: [
|
|
30
|
+
{
|
|
31
|
+
id: 'default',
|
|
32
|
+
title: 'Default',
|
|
33
|
+
fields: ['size'],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
properties: {
|
|
37
|
+
size: {
|
|
38
|
+
widget: 'style_align',
|
|
39
|
+
title: 'Section size',
|
|
40
|
+
actions: Object.keys(ALIGN_INFO_MAP),
|
|
41
|
+
actionsInfoMap: ALIGN_INFO_MAP,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
required: [],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return resSchema;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return schema;
|
|
51
|
+
};
|
package/src/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { runtimeConfig } from '@plone/volto/runtime_config';
|
|
2
2
|
import installCallout from '@plone/volto-slate/editor/plugins/Callout';
|
|
3
3
|
import installContextNavigationBlock from '@eeacms/volto-eea-website-policy/components/Blocks/ContextNavigation';
|
|
4
|
+
import installLayoutSettingsBlock from '@eeacms/volto-eea-website-policy/components/Blocks/LayoutSettings';
|
|
5
|
+
import { addStylingFieldsetSchemaEnhancer } from '@eeacms/volto-eea-website-policy/components/Blocks/schema';
|
|
4
6
|
|
|
5
7
|
const applyConfig = (config) => {
|
|
6
8
|
// if (process.env.NODE_ENV === 'production') {
|
|
@@ -87,9 +89,15 @@ const applyConfig = (config) => {
|
|
|
87
89
|
config.blocks.blocksConfig.callToActionBlock.mostUsed = true;
|
|
88
90
|
}
|
|
89
91
|
|
|
92
|
+
// Group
|
|
93
|
+
if (config.blocks.blocksConfig.group) {
|
|
94
|
+
config.blocks.blocksConfig.group.schemaEnhancer = addStylingFieldsetSchemaEnhancer;
|
|
95
|
+
}
|
|
96
|
+
|
|
90
97
|
// Columns
|
|
91
98
|
if (config.blocks.blocksConfig.columnsBlock) {
|
|
92
99
|
config.blocks.blocksConfig.columnsBlock.mostUsed = true;
|
|
100
|
+
config.blocks.blocksConfig.columnsBlock.schemaEnhancer = addStylingFieldsetSchemaEnhancer;
|
|
93
101
|
}
|
|
94
102
|
|
|
95
103
|
// Accordion
|
|
@@ -103,11 +111,18 @@ const applyConfig = (config) => {
|
|
|
103
111
|
}
|
|
104
112
|
|
|
105
113
|
// Custom blocks
|
|
114
|
+
// context navigation
|
|
106
115
|
config = [installContextNavigationBlock].reduce(
|
|
107
116
|
(acc, apply) => apply(acc),
|
|
108
117
|
config,
|
|
109
118
|
);
|
|
110
119
|
|
|
120
|
+
// layout settings
|
|
121
|
+
config = [installLayoutSettingsBlock].reduce(
|
|
122
|
+
(acc, apply) => apply(acc),
|
|
123
|
+
config,
|
|
124
|
+
);
|
|
125
|
+
|
|
111
126
|
// Disable some blocks
|
|
112
127
|
if (config.blocks.blocksConfig.imagecards) {
|
|
113
128
|
config.blocks.blocksConfig.imagecards.restricted = true;
|