@eeacms/volto-embed 2.0.11 → 4.0.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.
- package/CHANGELOG.md +31 -0
- package/cypress/integration/block-basics.js +19 -9
- package/package.json +1 -1
- package/src/Iframe/EditIframe.jsx +15 -9
- package/src/Iframe/ViewIframe.jsx +2 -2
- package/src/PrivacyProtection/PrivacyProtection.jsx +191 -180
- package/src/{css/embed-styles.css → PrivacyProtection/styles.less} +17 -7
package/CHANGELOG.md
CHANGED
|
@@ -4,8 +4,39 @@ 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
|
+
#### [4.0.0](https://github.com/eea/volto-embed/compare/3.0.1...4.0.0)
|
|
8
|
+
|
|
9
|
+
- Prettier [`fffa1c9`](https://github.com/eea/volto-embed/commit/fffa1c9f42c9dacc7de1fed730e0a4494c04d2f8)
|
|
10
|
+
- Prettier [`f9ca05d`](https://github.com/eea/volto-embed/commit/f9ca05d3c55d204080f8769bd7d556b4d8f0ce21)
|
|
11
|
+
- Breaking changes. Bumped to version 4.0.0 [`eb78abf`](https://github.com/eea/volto-embed/commit/eb78abf98103ee8831814b3df4c441279c586da2)
|
|
12
|
+
- Volto 15.x compatibility: updated react-cookie library [`a480372`](https://github.com/eea/volto-embed/commit/a480372f47e6e34d6f3e14d7b54b345dc83fd328)
|
|
13
|
+
|
|
14
|
+
#### [3.0.1](https://github.com/eea/volto-embed/compare/3.0.0...3.0.1)
|
|
15
|
+
|
|
16
|
+
> 11 February 2022
|
|
17
|
+
|
|
18
|
+
- fix query case [`#20`](https://github.com/eea/volto-embed/pull/20)
|
|
19
|
+
|
|
20
|
+
#### [3.0.0](https://github.com/eea/volto-embed/compare/3.0.0-beta.0...3.0.0)
|
|
21
|
+
|
|
22
|
+
> 7 February 2022
|
|
23
|
+
|
|
24
|
+
- Make this compatible with volto-datablocks@3.x [`#19`](https://github.com/eea/volto-embed/pull/19)
|
|
25
|
+
|
|
26
|
+
#### [3.0.0-beta.0](https://github.com/eea/volto-embed/compare/2.0.11...3.0.0-beta.0)
|
|
27
|
+
|
|
28
|
+
> 7 February 2022
|
|
29
|
+
|
|
30
|
+
- Release 3.0.0-beta.0 [`c9af803`](https://github.com/eea/volto-embed/commit/c9af80319bc89b1a579d14538ac5509e71db813f)
|
|
31
|
+
- Updated cypress [`9112bee`](https://github.com/eea/volto-embed/commit/9112bee538e457e9f19a687c3442d222129eb95c)
|
|
32
|
+
- Update [`c5c1251`](https://github.com/eea/volto-embed/commit/c5c1251a69c76c341c8deb28e0f2ccc940b2411b)
|
|
33
|
+
- Make this compatible with volto-datablocks@3.x [`3457ee9`](https://github.com/eea/volto-embed/commit/3457ee9e3f5c78cf483525a274f03e6941d06f6f)
|
|
34
|
+
|
|
7
35
|
#### [2.0.11](https://github.com/eea/volto-embed/compare/2.0.10...2.0.11)
|
|
8
36
|
|
|
37
|
+
> 11 January 2022
|
|
38
|
+
|
|
39
|
+
- use latest volto-slate [`#17`](https://github.com/eea/volto-embed/pull/17)
|
|
9
40
|
- add cy tests [`#16`](https://github.com/eea/volto-embed/pull/16)
|
|
10
41
|
- improve arcgis map view [`#14`](https://github.com/eea/volto-embed/pull/14)
|
|
11
42
|
- Update package.json [`0ec673a`](https://github.com/eea/volto-embed/commit/0ec673a8178731b8c1e010101caee2a3c9fafaca)
|
|
@@ -24,14 +24,20 @@ describe('Blocks Tests', () => {
|
|
|
24
24
|
.first()
|
|
25
25
|
.contains('Embed external content');
|
|
26
26
|
|
|
27
|
-
cy.get('.field-wrapper-privacy_statement-0-dataprotection p')
|
|
27
|
+
cy.get('.field-wrapper-privacy_statement-0-dataprotection p')
|
|
28
|
+
.first()
|
|
29
|
+
.clear()
|
|
30
|
+
.type('Test text for privacy protection');
|
|
28
31
|
cy.get('.field-wrapper-privacy_cookie_key-1-dataprotection');
|
|
29
32
|
cy.get('.field-wrapper-enabled-2-dataprotection .checkbox').click();
|
|
30
33
|
|
|
31
34
|
const imageFile = 'cat.jpg';
|
|
32
|
-
cy.get(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
cy.get(
|
|
36
|
+
'.field-wrapper-background_image-3-dataprotection .dropzone-placeholder',
|
|
37
|
+
).attachFile(imageFile);
|
|
38
|
+
const embed_url =
|
|
39
|
+
'<div class="mapouter"><div class="gmap_canvas"><iframe width="600" height="500" id="gmap_canvas" src="https://maps.google.com/maps?q=2880%20Broadway,%20New%20York&t=&z=13&ie=UTF8&iwloc=&output=embed" frameborder="0" scrolling="no" marginheight="0" marginwidth="0"></iframe><a href="https://www.embedgooglemap.net/blog/divi-discount-code-elegant-themes-coupon/"></a><br></div></div>';
|
|
40
|
+
cy.get('.block.maps input').click().type(embed_url, { force: true });
|
|
35
41
|
|
|
36
42
|
cy.get('.block-editor-text').last().click();
|
|
37
43
|
cy.get('.block-add-button').first().click();
|
|
@@ -39,16 +45,20 @@ describe('Blocks Tests', () => {
|
|
|
39
45
|
cy.get('.ui.basic.icon.button.maps').contains('Maps').click();
|
|
40
46
|
|
|
41
47
|
cy.get('.align-widget.field-wrapper-align button').first().click();
|
|
42
|
-
cy.get('.block.maps input')
|
|
43
|
-
|
|
44
|
-
|
|
48
|
+
cy.get('.block.maps input')
|
|
49
|
+
.last()
|
|
50
|
+
.click()
|
|
51
|
+
.type(embed_url, { force: true });
|
|
52
|
+
cy.get(
|
|
53
|
+
'.field-wrapper-background_image-3-dataprotection .dropzone-placeholder',
|
|
54
|
+
).attachFile(imageFile);
|
|
45
55
|
|
|
46
56
|
// Save
|
|
47
57
|
cy.get('#toolbar-save').click();
|
|
48
58
|
cy.url().should('eq', Cypress.config().baseUrl + '/cypress/my-page');
|
|
49
59
|
|
|
50
60
|
// then the page view should contain our changes
|
|
51
|
-
cy.get('.ui.loader');
|
|
52
|
-
|
|
61
|
+
// cy.get('.ui.loader');
|
|
62
|
+
});
|
|
53
63
|
});
|
|
54
64
|
});
|
package/package.json
CHANGED
|
@@ -16,6 +16,7 @@ import aheadSVG from '@plone/volto/icons/ahead.svg';
|
|
|
16
16
|
import mapsBlockSVG from '@plone/volto/components/manage/Blocks/Maps/block-maps.svg';
|
|
17
17
|
import schema from './schema';
|
|
18
18
|
import { addPrivacyProtectionToSchema } from '../PrivacyProtection';
|
|
19
|
+
import { PrivacyProtection } from '../PrivacyProtection';
|
|
19
20
|
|
|
20
21
|
const messages = defineMessages({
|
|
21
22
|
MapsBlockInputPlaceholder: {
|
|
@@ -182,15 +183,20 @@ class Edit extends Component {
|
|
|
182
183
|
'full-width': this.props.data.align === 'full',
|
|
183
184
|
})}
|
|
184
185
|
>
|
|
185
|
-
<
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
186
|
+
<PrivacyProtection
|
|
187
|
+
data={this.props.data}
|
|
188
|
+
editable={this.props.editable}
|
|
189
|
+
>
|
|
190
|
+
<iframe
|
|
191
|
+
title={this.props.intl.formatMessage(
|
|
192
|
+
messages.GoogleMapsEmbeddedBlock,
|
|
193
|
+
)}
|
|
194
|
+
src={this.props.data.url}
|
|
195
|
+
className="google-map"
|
|
196
|
+
frameBorder="0"
|
|
197
|
+
allowFullScreen
|
|
198
|
+
/>
|
|
199
|
+
</PrivacyProtection>
|
|
194
200
|
</div>
|
|
195
201
|
) : (
|
|
196
202
|
<Message>
|
|
@@ -22,7 +22,7 @@ const messages = defineMessages({
|
|
|
22
22
|
* @extends Component
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
|
-
const View = ({ data, intl }) => {
|
|
25
|
+
const View = ({ data, intl, id }) => {
|
|
26
26
|
return (
|
|
27
27
|
<div
|
|
28
28
|
className={cx(
|
|
@@ -42,7 +42,7 @@ const View = ({ data, intl }) => {
|
|
|
42
42
|
})}
|
|
43
43
|
style={{ height: '100%' }}
|
|
44
44
|
>
|
|
45
|
-
<PrivacyProtection data={data}>
|
|
45
|
+
<PrivacyProtection data={data} id={id}>
|
|
46
46
|
<iframe
|
|
47
47
|
title={intl.formatMessage(messages.EmbededGoogleMaps)}
|
|
48
48
|
src={data.url}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
+
import { compose } from 'redux';
|
|
2
3
|
import { useSelector } from 'react-redux';
|
|
3
4
|
import VisibilitySensor from 'react-visibility-sensor';
|
|
4
5
|
import { Placeholder, Dimmer, Loader } from 'semantic-ui-react';
|
|
5
|
-
import
|
|
6
|
-
|
|
6
|
+
import { withCookies } from 'react-cookie';
|
|
7
7
|
//import { find, without } from 'lodash';
|
|
8
8
|
import { serializeNodes } from 'volto-slate/editor/render';
|
|
9
9
|
import { Button, Checkbox } from 'semantic-ui-react';
|
|
@@ -11,14 +11,15 @@ import { defineMessages, injectIntl } from 'react-intl';
|
|
|
11
11
|
import { useDispatch } from 'react-redux';
|
|
12
12
|
import { toast } from 'react-toastify';
|
|
13
13
|
import config from '@plone/volto/registry';
|
|
14
|
-
import '../css/embed-styles.css';
|
|
15
|
-
import { createImageUrl } from './helpers';
|
|
16
|
-
|
|
17
14
|
import { getBaseUrl } from '@plone/volto/helpers';
|
|
18
15
|
import { Toast } from '@plone/volto/components';
|
|
19
16
|
import { getConnectedDataParametersForContext } from '@eeacms/volto-datablocks/helpers';
|
|
17
|
+
|
|
18
|
+
import { createImageUrl } from './helpers';
|
|
20
19
|
import { ProtectionSchema } from './schema';
|
|
21
20
|
|
|
21
|
+
import './styles.less';
|
|
22
|
+
|
|
22
23
|
const messages = defineMessages({
|
|
23
24
|
success: {
|
|
24
25
|
id: 'Success',
|
|
@@ -37,29 +38,29 @@ const getExpDays = () =>
|
|
|
37
38
|
? config.settings.embedCookieExpirationDays
|
|
38
39
|
: 90;
|
|
39
40
|
|
|
40
|
-
function saveCookie(domain_key) {
|
|
41
|
+
function saveCookie(domain_key, cookies) {
|
|
41
42
|
const date = new Date();
|
|
42
43
|
date.setDate(date.getDate() + getExpDays());
|
|
43
44
|
|
|
44
|
-
|
|
45
|
+
cookies.set(key(domain_key), 'true', {
|
|
45
46
|
path: '/',
|
|
46
47
|
expires: date,
|
|
47
48
|
});
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
function canShow(domain_key) {
|
|
51
|
-
return
|
|
51
|
+
function canShow(domain_key, cookies) {
|
|
52
|
+
return cookies.get(key(domain_key)) === 'true';
|
|
52
53
|
}
|
|
53
54
|
|
|
54
|
-
const cookieExist = (domain_key) =>
|
|
55
|
+
const cookieExist = (domain_key, cookies) => cookies.get(key(domain_key));
|
|
55
56
|
|
|
56
|
-
const CookieWatcher = (
|
|
57
|
+
const CookieWatcher = (domain_key, cookies, pollingRate = 250) => {
|
|
57
58
|
// state for cookie existence
|
|
58
|
-
const [exist, setExist] = useState(cookieExist(
|
|
59
|
+
const [exist, setExist] = useState(cookieExist(domain_key, cookies));
|
|
59
60
|
|
|
60
61
|
React.useEffect(() => {
|
|
61
62
|
const interval = setInterval(
|
|
62
|
-
() => setExist(cookieExist(
|
|
63
|
+
() => setExist(cookieExist(domain_key, cookies)),
|
|
63
64
|
pollingRate,
|
|
64
65
|
);
|
|
65
66
|
return () => clearInterval(interval);
|
|
@@ -68,179 +69,189 @@ const CookieWatcher = (cookie, pollingRate = 250) => {
|
|
|
68
69
|
return exist;
|
|
69
70
|
};
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
height: `${height}px`,
|
|
115
|
-
position: 'relative',
|
|
116
|
-
};
|
|
117
|
-
React.useEffect(() => {
|
|
118
|
-
if (bgImg) {
|
|
119
|
-
setImage(createImageUrl(bgImg)); //create imageUrl from uploaded image
|
|
120
|
-
}
|
|
121
|
-
}, [bgImg]);
|
|
122
|
-
|
|
123
|
-
//Effect hook for polling the cookie_key
|
|
124
|
-
React.useEffect(
|
|
125
|
-
() => {
|
|
126
|
-
if (!isEditMode && defaultShow) {
|
|
127
|
-
setShow(true);
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
131
|
-
[checkExistance],
|
|
72
|
+
const getFilteredURL = (url, connected_data_parameters = []) => {
|
|
73
|
+
if (!connected_data_parameters?.length) return url;
|
|
74
|
+
let decodedURL = decodeURIComponent(url);
|
|
75
|
+
const queries = decodedURL.match(/(?<=(<<))(.*?)(?=(>>))/g);
|
|
76
|
+
if (!queries?.length) return url;
|
|
77
|
+
const keys = connected_data_parameters.map((param) => param.i);
|
|
78
|
+
for (let poz in queries) {
|
|
79
|
+
const key = queries[poz];
|
|
80
|
+
const paramPoz = keys.indexOf(key);
|
|
81
|
+
if (paramPoz > -1) {
|
|
82
|
+
decodedURL = decodedURL.replace(
|
|
83
|
+
`<<${key}>>`,
|
|
84
|
+
connected_data_parameters[paramPoz].v[0],
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return decodedURL;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const PrivacyProtection = (props) => {
|
|
94
|
+
const { children, data = {}, id, editable, intl, path, cookies } = props;
|
|
95
|
+
const {
|
|
96
|
+
enabled = false,
|
|
97
|
+
privacy_statement,
|
|
98
|
+
background_image: bgImg,
|
|
99
|
+
privacy_cookie_key = 'esri-maps',
|
|
100
|
+
} = data.dataprotection || {};
|
|
101
|
+
|
|
102
|
+
const [image, setImage] = React.useState(null);
|
|
103
|
+
const [visible, setVisibility] = useState(false);
|
|
104
|
+
const defaultShow = canShow(privacy_cookie_key, cookies);
|
|
105
|
+
const [show, setShow] = useState(defaultShow);
|
|
106
|
+
const [remember, setRemember] = useState(
|
|
107
|
+
cookieExist(privacy_cookie_key, cookies) ? defaultShow : true,
|
|
108
|
+
);
|
|
109
|
+
const dispatch = useDispatch();
|
|
110
|
+
const checkExistance = CookieWatcher(privacy_cookie_key, cookies);
|
|
111
|
+
const connected_data_parameters = useSelector((state) => {
|
|
112
|
+
return getConnectedDataParametersForContext(
|
|
113
|
+
state?.connected_data_parameters,
|
|
114
|
+
state.router?.location?.pathname,
|
|
132
115
|
);
|
|
116
|
+
});
|
|
117
|
+
const url = getFilteredURL(data.url, connected_data_parameters);
|
|
133
118
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
.then((blob) => {
|
|
146
|
-
setImage(URL.createObjectURL(blob));
|
|
147
|
-
if (isEditMode) {
|
|
148
|
-
toast.success(
|
|
149
|
-
<Toast
|
|
150
|
-
success
|
|
151
|
-
title={intl.formatMessage(messages.success)}
|
|
152
|
-
content={intl.formatMessage(messages.image)}
|
|
153
|
-
/>,
|
|
154
|
-
);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
119
|
+
React.useEffect(() => {
|
|
120
|
+
if (bgImg) {
|
|
121
|
+
setImage(createImageUrl(bgImg)); //create imageUrl from uploaded image
|
|
122
|
+
}
|
|
123
|
+
}, [bgImg]);
|
|
124
|
+
|
|
125
|
+
//Effect hook for polling the cookie_key
|
|
126
|
+
React.useEffect(
|
|
127
|
+
() => {
|
|
128
|
+
if (!editable && defaultShow) {
|
|
129
|
+
setShow(true);
|
|
157
130
|
}
|
|
158
|
-
},
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
131
|
+
},
|
|
132
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
133
|
+
[checkExistance],
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
//screenshot api
|
|
137
|
+
React.useEffect(() => {
|
|
138
|
+
if (enabled && !bgImg && !show) {
|
|
139
|
+
fetch(
|
|
140
|
+
`${getBaseUrl(
|
|
141
|
+
'',
|
|
142
|
+
)}/cors-proxy/https://screenshot.eea.europa.eu/api/v1/retrieve_image_for_url?url=${encodeURIComponent(
|
|
143
|
+
url,
|
|
144
|
+
)}&w=1920&waitfor=4000`,
|
|
145
|
+
)
|
|
146
|
+
.then((e) => e.blob())
|
|
147
|
+
.then((blob) => {
|
|
148
|
+
setImage(URL.createObjectURL(blob));
|
|
149
|
+
if (editable) {
|
|
150
|
+
toast.success(
|
|
151
|
+
<Toast
|
|
152
|
+
success
|
|
153
|
+
title={intl.formatMessage(messages.success)}
|
|
154
|
+
content={intl.formatMessage(messages.image)}
|
|
155
|
+
/>,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
})
|
|
159
|
+
.catch(() => {
|
|
160
|
+
if (__DEVELOPMENT__) {
|
|
161
|
+
/* eslint-disable-next-line */
|
|
162
|
+
console.log('Please enable your VPN!');
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}, [enabled, url, path, dispatch, bgImg, show, intl, editable]);
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
<VisibilitySensor
|
|
170
|
+
onChange={(isVisible) => {
|
|
171
|
+
!visible && isVisible && setVisibility(true);
|
|
172
|
+
}}
|
|
173
|
+
partialVisibility={true}
|
|
174
|
+
offset={{ bottom: 200 }}
|
|
175
|
+
>
|
|
176
|
+
{visible ? (
|
|
177
|
+
<div
|
|
178
|
+
className="privacy-protection-wrapper"
|
|
179
|
+
style={{ position: 'relative', minHeight: '200px' }}
|
|
180
|
+
>
|
|
181
|
+
{!enabled || show ? (
|
|
182
|
+
children
|
|
183
|
+
) : !__DEVELOPMENT__ && !image ? (
|
|
184
|
+
<Dimmer active>
|
|
185
|
+
<Loader />
|
|
186
|
+
</Dimmer>
|
|
187
|
+
) : (
|
|
188
|
+
<div
|
|
189
|
+
className="privacy-protection"
|
|
190
|
+
style={
|
|
191
|
+
image
|
|
192
|
+
? {
|
|
193
|
+
backgroundImage: `url(${image})`,
|
|
194
|
+
backgroundRepeat: 'no-repeat',
|
|
195
|
+
backgroundSize: 'cover',
|
|
196
|
+
backgroundPosition: 'center -70px',
|
|
197
|
+
}
|
|
198
|
+
: {}
|
|
199
|
+
}
|
|
200
|
+
>
|
|
201
|
+
<div className="overlay">
|
|
202
|
+
<div className="wrapped">
|
|
203
|
+
<div className="privacy-button">
|
|
204
|
+
<Button
|
|
205
|
+
primary
|
|
206
|
+
onClick={() => {
|
|
207
|
+
setShow(true);
|
|
208
|
+
if (remember) {
|
|
209
|
+
saveCookie(privacy_cookie_key, cookies);
|
|
210
|
+
}
|
|
211
|
+
}}
|
|
212
|
+
>
|
|
213
|
+
Show external content
|
|
214
|
+
</Button>
|
|
215
|
+
</div>
|
|
216
|
+
|
|
217
|
+
{!editable && (
|
|
218
|
+
<div className="privacy-toggle">
|
|
219
|
+
<Checkbox
|
|
220
|
+
toggle
|
|
221
|
+
label="Remember my choice"
|
|
222
|
+
id={`remember-choice-${id}`}
|
|
223
|
+
onChange={(ev, { checked }) => {
|
|
224
|
+
setRemember(checked);
|
|
201
225
|
}}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
</Button>
|
|
226
|
+
checked={remember}
|
|
227
|
+
/>
|
|
205
228
|
</div>
|
|
229
|
+
)}
|
|
206
230
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
/>
|
|
218
|
-
</div>
|
|
231
|
+
<p className="discreet">
|
|
232
|
+
Your choice will be saved in a cookie managed by{' '}
|
|
233
|
+
{config.settings.ownDomain || '.eea.europa.eu'} that will
|
|
234
|
+
expire in {getExpDays()} days.
|
|
235
|
+
</p>
|
|
236
|
+
<p className="discreet">
|
|
237
|
+
{serializeNodes(
|
|
238
|
+
privacy_statement ||
|
|
239
|
+
ProtectionSchema().properties.privacy_statement
|
|
240
|
+
.defaultValue,
|
|
219
241
|
)}
|
|
220
|
-
|
|
221
|
-
<p className="discreet">
|
|
222
|
-
Your choice will be saved in a cookie managed by{' '}
|
|
223
|
-
{config.settings.ownDomain || '.eea.europa.eu'} that will
|
|
224
|
-
expire in {getExpDays()} days.
|
|
225
|
-
</p>
|
|
226
|
-
<p className="discreet">
|
|
227
|
-
{serializeNodes(
|
|
228
|
-
dataprotection.privacy_statement ||
|
|
229
|
-
ProtectionSchema().properties.privacy_statement
|
|
230
|
-
.defaultValue,
|
|
231
|
-
)}
|
|
232
|
-
</p>
|
|
233
|
-
</div>
|
|
242
|
+
</p>
|
|
234
243
|
</div>
|
|
235
244
|
</div>
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
245
|
+
</div>
|
|
246
|
+
)}
|
|
247
|
+
</div>
|
|
248
|
+
) : (
|
|
249
|
+
<Placeholder style={{ height: '100%', width: '100%' }}>
|
|
250
|
+
<Placeholder.Image rectangular />
|
|
251
|
+
</Placeholder>
|
|
252
|
+
)}
|
|
253
|
+
</VisibilitySensor>
|
|
254
|
+
);
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
export default compose(injectIntl, withCookies)(PrivacyProtection);
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
.privacy-protection-wrapper {
|
|
2
|
+
.ui.dimmer {
|
|
3
|
+
z-index: 9;
|
|
4
|
+
|
|
5
|
+
.ui.loader {
|
|
6
|
+
padding: 0;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
1
11
|
.privacy-protection {
|
|
2
12
|
display: flex;
|
|
3
13
|
height: 100%;
|
|
@@ -8,7 +18,7 @@
|
|
|
8
18
|
}
|
|
9
19
|
|
|
10
20
|
.privacy-button {
|
|
11
|
-
margin-top:
|
|
21
|
+
margin-top: 0.5rem;
|
|
12
22
|
}
|
|
13
23
|
|
|
14
24
|
.privacy-toggle {
|
|
@@ -16,17 +26,17 @@
|
|
|
16
26
|
}
|
|
17
27
|
|
|
18
28
|
.wrapped {
|
|
19
|
-
position: absolute;
|
|
20
|
-
top: 50%;
|
|
21
|
-
left: 50%;
|
|
29
|
+
// position: absolute;
|
|
30
|
+
// top: 50%;
|
|
31
|
+
// left: 50%;
|
|
22
32
|
width: 300px;
|
|
23
33
|
padding: 1.4rem;
|
|
24
34
|
margin: 0 auto;
|
|
25
35
|
background: white;
|
|
26
36
|
border-radius: 5px;
|
|
27
|
-
opacity:
|
|
28
|
-
-ms-transform: translate(-50%, -50%);
|
|
29
|
-
transform: translate(-50%, -50%);
|
|
37
|
+
opacity: 1;
|
|
38
|
+
// -ms-transform: translate(-50%, -50%);
|
|
39
|
+
// transform: translate(-50%, -50%);
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
.discreet,
|