@eeacms/volto-clms-theme 1.0.40 → 1.0.44
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 +71 -0
- package/locales/bg/LC_MESSAGES/volto.po +208 -14
- package/locales/cs/LC_MESSAGES/volto.po +208 -14
- package/locales/da/LC_MESSAGES/volto.po +208 -14
- package/locales/de/LC_MESSAGES/volto.po +208 -14
- package/locales/el/LC_MESSAGES/volto.po +208 -14
- package/locales/en/LC_MESSAGES/volto.po +208 -14
- package/locales/es/LC_MESSAGES/volto.po +208 -14
- package/locales/et/LC_MESSAGES/volto.po +208 -14
- package/locales/fi/LC_MESSAGES/volto.po +208 -14
- package/locales/fr/LC_MESSAGES/volto.po +208 -14
- package/locales/hr/LC_MESSAGES/volto.po +208 -14
- package/locales/hu/LC_MESSAGES/volto.po +208 -14
- package/locales/it/LC_MESSAGES/volto.po +208 -14
- package/locales/lt/LC_MESSAGES/volto.po +208 -14
- package/locales/lv/LC_MESSAGES/volto.po +208 -14
- package/locales/mt/LC_MESSAGES/volto.po +208 -14
- package/locales/nl/LC_MESSAGES/volto.po +208 -14
- package/locales/pl/LC_MESSAGES/volto.po +208 -14
- package/locales/pt/LC_MESSAGES/volto.po +208 -14
- package/locales/ro/LC_MESSAGES/volto.po +208 -14
- package/locales/sk/LC_MESSAGES/volto.po +208 -14
- package/locales/sl/LC_MESSAGES/volto.po +208 -14
- package/locales/sv/LC_MESSAGES/volto.po +208 -14
- package/locales/volto.pot +258 -17
- package/package.json +5 -3
- package/src/actions/index.js +2 -0
- package/src/actions/registry/registry.js +21 -0
- package/src/components/Blocks/CclHomeBgImageBlock/CclGreenBgView.jsx +32 -8
- package/src/components/Blocks/CclHomeBgImageBlock/CclHomeBgImageBlockEdit.jsx +5 -1
- package/src/components/Blocks/CclHomeBgImageBlock/CclHomeBgImageSchema.js +36 -7
- package/src/components/Blocks/CclRelatedListingBlock/CclRelatedListingEdit.jsx +95 -0
- package/src/components/Blocks/CclRelatedListingBlock/CclRelatedListingView.jsx +67 -0
- package/src/components/Blocks/CclRelatedListingBlock/schema.js +34 -0
- package/src/components/Blocks/CustomTemplates/VoltoListingBlock/CclListingWorkOpportunities.jsx +5 -15
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/CclCarouselView.jsx +7 -2
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/CclProductTabsView.jsx +41 -0
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/CclVerticalFaqTabsView.jsx +19 -60
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/CclVerticalTabsView.jsx +3 -47
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/FixTemplates.jsx +19 -0
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/RoutingHOC.jsx +63 -0
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/index.js +6 -2
- package/src/components/Blocks/customBlocks.js +87 -35
- package/src/components/CLMSDatasetDetailView/CLMSDatasetDetailView.jsx +2 -4
- package/src/components/CLMSDatasetDetailView/DataSetInfoContent.jsx +6 -7
- package/src/components/CclCard/CclCard.jsx +1 -7
- package/src/components/CclLoginModal/CclLoginModal.jsx +83 -0
- package/src/components/CclLoginModal/ccl-login-modal.css +7 -0
- package/src/components/CclModal/CclModal.jsx +15 -5
- package/src/customizations/volto/components/theme/Header/Header.jsx +2 -11
- package/src/customizations/volto/components/theme/SearchWidget/SearchWidget.jsx +11 -3
- package/src/index.js +5 -5
- package/src/reducers/index.js +2 -0
- package/src/reducers/registry/registry.js +46 -0
- package/theme/clms/css/breadcrumbs.css +1 -0
- package/theme/clms/css/carousel.css +45 -0
- package/theme/clms/css/forms.css +6 -1
- package/theme/clms/css/home.css +11 -0
- package/theme/clms/css/maps.css +2 -1
- package/theme/clms/css/maps.less +2 -1
- package/theme/clms/css/styles.less +4 -0
- package/src/components/Blocks/CclTechnicalLibrariesList/CclTechnicalLibrariesListEdit.jsx +0 -63
- package/src/components/Blocks/CclTechnicalLibrariesList/CclTechnicalLibrariesListView.jsx +0 -43
- package/src/components/Blocks/CclTechnicalLibrariesList/TechnicalLibrariesListSchema.js +0 -17
- package/src/components/Blocks/CustomTemplates/VoltoTabsBlock/VerticalRouteTabsView.jsx +0 -156
- package/src/components/CLMSServiceDeskView/CLMSServiceDeskView.jsx +0 -113
|
@@ -430,3 +430,48 @@
|
|
|
430
430
|
.tabs-block .slick-slider:not(.slick-vertical) .slick-slide {
|
|
431
431
|
padding-top: 0;
|
|
432
432
|
}
|
|
433
|
+
|
|
434
|
+
/* .ccl-banner-top-bar {
|
|
435
|
+
display: flex;
|
|
436
|
+
align-items: flex-end;
|
|
437
|
+
justify-content: flex-end;
|
|
438
|
+
margin-right: auto;
|
|
439
|
+
margin-left: auto;
|
|
440
|
+
} */
|
|
441
|
+
|
|
442
|
+
/* Banner info */
|
|
443
|
+
.ccl-banner-info {
|
|
444
|
+
position: absolute;
|
|
445
|
+
z-index: 1;
|
|
446
|
+
right: 0;
|
|
447
|
+
bottom: 2rem;
|
|
448
|
+
display: none;
|
|
449
|
+
width: 100%;
|
|
450
|
+
padding: 1.5rem;
|
|
451
|
+
background: #ffffffd9;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
@media (min-width: 768px) {
|
|
455
|
+
.ccl-banner-info {
|
|
456
|
+
width: 30%;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
.ccl-banner-info .ccl-banner-info-title {
|
|
461
|
+
margin-bottom: 1rem;
|
|
462
|
+
color: black !important;
|
|
463
|
+
font-size: 1rem !important;
|
|
464
|
+
font-weight: bold;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.ccl-banner-info .ccl-banner-info-content p {
|
|
468
|
+
margin-bottom: 0.5rem;
|
|
469
|
+
font-size: 1rem;
|
|
470
|
+
line-height: 1.125rem;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.ccl-banner-info-link {
|
|
474
|
+
display: inline-block;
|
|
475
|
+
width: 100%;
|
|
476
|
+
text-align: right;
|
|
477
|
+
}
|
package/theme/clms/css/forms.css
CHANGED
package/theme/clms/css/home.css
CHANGED
|
@@ -71,6 +71,11 @@
|
|
|
71
71
|
color: #fff;
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
.ccl-banner-top-bar .ccl-container .ccl-banner-top-bar-right {
|
|
75
|
+
margin-left: 0.5rem;
|
|
76
|
+
cursor: pointer;
|
|
77
|
+
}
|
|
78
|
+
|
|
74
79
|
.ccl-banner-top-bar .ccl-container {
|
|
75
80
|
display: flex;
|
|
76
81
|
height: 100%;
|
|
@@ -78,6 +83,12 @@
|
|
|
78
83
|
justify-content: space-between;
|
|
79
84
|
}
|
|
80
85
|
|
|
86
|
+
.ccl-banner-top-bar-left .ccl-banner-top-bar-right {
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
text-overflow: ellipsis;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
}
|
|
91
|
+
|
|
81
92
|
.ccl-banner-top-bar .ccl-banner-top-bar-left,
|
|
82
93
|
.ccl-banner-top-bar .ccl-banner-top-bar-right {
|
|
83
94
|
overflow: hidden;
|
package/theme/clms/css/maps.css
CHANGED
package/theme/clms/css/maps.less
CHANGED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { TechnicalLibrariesListSchema } from './TechnicalLibrariesListSchema';
|
|
3
|
-
import { SidebarPortal } from '@plone/volto/components';
|
|
4
|
-
import InlineForm from '@plone/volto/components/manage/Form/InlineForm';
|
|
5
|
-
import { useSelector, useDispatch } from 'react-redux';
|
|
6
|
-
import { searchContent } from '@plone/volto/actions';
|
|
7
|
-
import CclCard from '@eeacms/volto-clms-theme/components/CclCard/CclCard';
|
|
8
|
-
|
|
9
|
-
const CclTechnicalLibrariesListEdit = (props) => {
|
|
10
|
-
const {
|
|
11
|
-
block,
|
|
12
|
-
data,
|
|
13
|
-
onChangeBlock,
|
|
14
|
-
selected,
|
|
15
|
-
id,
|
|
16
|
-
properties,
|
|
17
|
-
metadata,
|
|
18
|
-
} = props;
|
|
19
|
-
const dispatch = useDispatch();
|
|
20
|
-
const searchSubrequests = useSelector((state) => state.search.subrequests);
|
|
21
|
-
const path = metadata ? metadata['@id'] : properties['@id'];
|
|
22
|
-
let libraries = searchSubrequests?.[props.id]?.items || [];
|
|
23
|
-
React.useEffect(() => {
|
|
24
|
-
dispatch(
|
|
25
|
-
searchContent(
|
|
26
|
-
path,
|
|
27
|
-
{
|
|
28
|
-
fullobjects: 1,
|
|
29
|
-
portal_type: 'TechnicalLibrary',
|
|
30
|
-
path: '/',
|
|
31
|
-
associated_products: metadata['id'],
|
|
32
|
-
},
|
|
33
|
-
id,
|
|
34
|
-
),
|
|
35
|
-
);
|
|
36
|
-
}, [path, data, id, metadata, dispatch]);
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<>
|
|
40
|
-
<div className="technical-libraries">
|
|
41
|
-
<h2>Technical Libraries</h2>
|
|
42
|
-
{libraries.map((item, index) => (
|
|
43
|
-
<CclCard key={index} type="doc" card={item} />
|
|
44
|
-
))}
|
|
45
|
-
</div>
|
|
46
|
-
<SidebarPortal selected={selected}>
|
|
47
|
-
<InlineForm
|
|
48
|
-
schema={TechnicalLibrariesListSchema()}
|
|
49
|
-
title="TechnicalLibraries List block"
|
|
50
|
-
onChangeField={(id, value) => {
|
|
51
|
-
onChangeBlock(block, {
|
|
52
|
-
...data,
|
|
53
|
-
[id]: value,
|
|
54
|
-
});
|
|
55
|
-
}}
|
|
56
|
-
formData={data}
|
|
57
|
-
/>
|
|
58
|
-
</SidebarPortal>
|
|
59
|
-
</>
|
|
60
|
-
);
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export default CclTechnicalLibrariesListEdit;
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { useSelector, useDispatch } from 'react-redux';
|
|
3
|
-
import { searchContent } from '@plone/volto/actions';
|
|
4
|
-
import CclCard from '@eeacms/volto-clms-theme/components/CclCard/CclCard';
|
|
5
|
-
|
|
6
|
-
const CclTechnicalLibrariesListView = (props) => {
|
|
7
|
-
const { data, id, properties, metadata } = props;
|
|
8
|
-
const dispatch = useDispatch();
|
|
9
|
-
const searchSubrequests = useSelector((state) => state.search.subrequests);
|
|
10
|
-
const path = metadata ? metadata['@id'] : properties['@id'];
|
|
11
|
-
let libraries = searchSubrequests?.[props.id]?.items || [];
|
|
12
|
-
|
|
13
|
-
React.useEffect(() => {
|
|
14
|
-
dispatch(
|
|
15
|
-
searchContent(
|
|
16
|
-
path,
|
|
17
|
-
{
|
|
18
|
-
fullobjects: 1,
|
|
19
|
-
portal_type: 'TechnicalLibrary',
|
|
20
|
-
path: '/',
|
|
21
|
-
associated_products: metadata['id'],
|
|
22
|
-
},
|
|
23
|
-
id,
|
|
24
|
-
),
|
|
25
|
-
);
|
|
26
|
-
}, [path, data, id, metadata, dispatch]);
|
|
27
|
-
|
|
28
|
-
return (
|
|
29
|
-
<>
|
|
30
|
-
<div className="technical-libraries">
|
|
31
|
-
{libraries.length > 0 ? (
|
|
32
|
-
libraries.map((item, index) => (
|
|
33
|
-
<CclCard key={index} type="doc" card={item} />
|
|
34
|
-
))
|
|
35
|
-
) : (
|
|
36
|
-
<p>There are no technical libraries for this product.</p>
|
|
37
|
-
)}
|
|
38
|
-
</div>
|
|
39
|
-
</>
|
|
40
|
-
);
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export default CclTechnicalLibrariesListView;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export const TechnicalLibrariesListSchema = () => ({
|
|
2
|
-
title: 'TechnicalLibraries List block',
|
|
3
|
-
fieldsets: [
|
|
4
|
-
{
|
|
5
|
-
id: 'default',
|
|
6
|
-
title: 'Default',
|
|
7
|
-
fields: ['title'],
|
|
8
|
-
},
|
|
9
|
-
],
|
|
10
|
-
properties: {
|
|
11
|
-
title: {
|
|
12
|
-
title: 'Title',
|
|
13
|
-
type: 'string',
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
required: [],
|
|
17
|
-
});
|
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { connect } from 'react-redux';
|
|
3
|
-
import { compose } from 'redux';
|
|
4
|
-
import { withRouter } from 'react-router';
|
|
5
|
-
import { RenderBlocks } from '@plone/volto/components';
|
|
6
|
-
import { withScrollToTarget } from '@eeacms/volto-tabs-block/hocs';
|
|
7
|
-
import './fontawesome';
|
|
8
|
-
import cx from 'classnames';
|
|
9
|
-
import { NavLink } from 'react-router-dom';
|
|
10
|
-
|
|
11
|
-
const CclRouteTabsView = (props) => {
|
|
12
|
-
const {
|
|
13
|
-
metadata = {},
|
|
14
|
-
data = {},
|
|
15
|
-
tabsList = [],
|
|
16
|
-
activeTabIndex = 0,
|
|
17
|
-
hashlink = {},
|
|
18
|
-
setActiveTab = () => {},
|
|
19
|
-
} = props;
|
|
20
|
-
const [hashlinkOnMount, setHashlinkOnMount] = React.useState(false);
|
|
21
|
-
|
|
22
|
-
React.useEffect(() => {
|
|
23
|
-
const urlHash = props.location.hash.substring(1) || '';
|
|
24
|
-
if (
|
|
25
|
-
hashlink.counter > 0 ||
|
|
26
|
-
(hashlink.counter === 0 && urlHash && !hashlinkOnMount)
|
|
27
|
-
) {
|
|
28
|
-
const id = hashlink.hash || urlHash || '';
|
|
29
|
-
const index = tabsList.indexOf(id);
|
|
30
|
-
const parentId = data.id || props.id;
|
|
31
|
-
const parent = document.getElementById(parentId);
|
|
32
|
-
const headerWrapper = document.querySelector('.header-wrapper');
|
|
33
|
-
const offsetHeight = headerWrapper?.offsetHeight || 0;
|
|
34
|
-
if (id !== parentId && index > -1 && parent) {
|
|
35
|
-
if (activeTabIndex !== index) {
|
|
36
|
-
setActiveTab(id);
|
|
37
|
-
}
|
|
38
|
-
props.scrollToTarget(parent, offsetHeight);
|
|
39
|
-
} else if (id === parentId && parent) {
|
|
40
|
-
props.scrollToTarget(parent, offsetHeight);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
if (!hashlinkOnMount) {
|
|
44
|
-
setHashlinkOnMount(true);
|
|
45
|
-
}
|
|
46
|
-
if (
|
|
47
|
-
String(window.performance.getEntriesByType('navigation')[0].type) ===
|
|
48
|
-
'navigate' ||
|
|
49
|
-
String(window.performance.getEntriesByType('navigation')[0].type) ===
|
|
50
|
-
'reload'
|
|
51
|
-
) {
|
|
52
|
-
if (window.location.hash.length === 0) {
|
|
53
|
-
setActiveTab(tabsList[0]);
|
|
54
|
-
} else {
|
|
55
|
-
setActiveTab(tabsList[window.location.hash.substring(4) - 1]);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}, [
|
|
59
|
-
activeTabIndex,
|
|
60
|
-
data.id,
|
|
61
|
-
hashlink.counter,
|
|
62
|
-
hashlink.hash,
|
|
63
|
-
hashlinkOnMount,
|
|
64
|
-
props,
|
|
65
|
-
setActiveTab,
|
|
66
|
-
tabsList,
|
|
67
|
-
]);
|
|
68
|
-
|
|
69
|
-
const PanelsComponent = () => {
|
|
70
|
-
const { activeTab = null, tabs = {} } = props;
|
|
71
|
-
return (
|
|
72
|
-
<div className="right-content cont-w-75">
|
|
73
|
-
{tabsList.map((tab, index) => {
|
|
74
|
-
return (
|
|
75
|
-
<div
|
|
76
|
-
id={tab}
|
|
77
|
-
key={index}
|
|
78
|
-
className={cx('panel', tab === activeTab && 'panel-selected')}
|
|
79
|
-
role="tabpanel"
|
|
80
|
-
aria-hidden="false"
|
|
81
|
-
>
|
|
82
|
-
<RenderBlocks
|
|
83
|
-
{...props}
|
|
84
|
-
metadata={metadata}
|
|
85
|
-
content={tabs[tab]}
|
|
86
|
-
/>
|
|
87
|
-
</div>
|
|
88
|
-
);
|
|
89
|
-
})}
|
|
90
|
-
</div>
|
|
91
|
-
);
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
const TabsComponent = () => {
|
|
95
|
-
return (
|
|
96
|
-
<div className="left-content cont-w-25">
|
|
97
|
-
<nav className="left-menu">
|
|
98
|
-
{tabsList.map((tab, index) => {
|
|
99
|
-
const {
|
|
100
|
-
activeTab = null,
|
|
101
|
-
tabs = {},
|
|
102
|
-
setActiveTab = () => {},
|
|
103
|
-
} = props;
|
|
104
|
-
const tabIndex = index + 1;
|
|
105
|
-
const title = tabs[tab].title || `Tab ${tabIndex}`;
|
|
106
|
-
return (
|
|
107
|
-
<div
|
|
108
|
-
key={index}
|
|
109
|
-
id={tabIndex}
|
|
110
|
-
className={cx('card', tab === activeTab && 'active')}
|
|
111
|
-
>
|
|
112
|
-
<NavLink
|
|
113
|
-
id={'tab' + tabIndex}
|
|
114
|
-
content={tab}
|
|
115
|
-
// to={'#' + title.toLowerCase().replace(/\s/g, '-')}
|
|
116
|
-
to={`#Tab${tabIndex}`}
|
|
117
|
-
className="collapsed"
|
|
118
|
-
onClick={() => {
|
|
119
|
-
if (activeTab !== tab) {
|
|
120
|
-
setActiveTab(tab);
|
|
121
|
-
}
|
|
122
|
-
}}
|
|
123
|
-
onKeyDown={() => {
|
|
124
|
-
if (activeTab !== tab) {
|
|
125
|
-
setActiveTab(tab);
|
|
126
|
-
}
|
|
127
|
-
}}
|
|
128
|
-
>
|
|
129
|
-
{title}
|
|
130
|
-
</NavLink>
|
|
131
|
-
</div>
|
|
132
|
-
);
|
|
133
|
-
})}
|
|
134
|
-
</nav>
|
|
135
|
-
</div>
|
|
136
|
-
);
|
|
137
|
-
};
|
|
138
|
-
// console.log('props', props);
|
|
139
|
-
|
|
140
|
-
return (
|
|
141
|
-
<div className="ccl-container ccl-container-flex tab-container" id="froga">
|
|
142
|
-
<TabsComponent />
|
|
143
|
-
<PanelsComponent />
|
|
144
|
-
</div>
|
|
145
|
-
);
|
|
146
|
-
};
|
|
147
|
-
|
|
148
|
-
export default compose(
|
|
149
|
-
connect((state) => {
|
|
150
|
-
return {
|
|
151
|
-
hashlink: state.hashlink,
|
|
152
|
-
location: state.router.location.hash,
|
|
153
|
-
};
|
|
154
|
-
}),
|
|
155
|
-
withScrollToTarget,
|
|
156
|
-
)(withRouter(CclRouteTabsView));
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/* eslint-disable jsx-a11y/label-has-associated-control */
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import CclButton from '@eeacms/volto-clms-theme/components/CclButton/CclButton';
|
|
4
|
-
|
|
5
|
-
const ServiceDeskView = () => {
|
|
6
|
-
return (
|
|
7
|
-
<>
|
|
8
|
-
<div className="ui container">
|
|
9
|
-
<section className="page-section">
|
|
10
|
-
<h1 className="page-title">Service desk</h1>
|
|
11
|
-
<div className="page-description">
|
|
12
|
-
<p>
|
|
13
|
-
Have you checked our <a href="/en/faq">FAQ section</a>? If you
|
|
14
|
-
haven't found an answer to your problem or question, please fill
|
|
15
|
-
in this form to contact the Copernicus land service desk.
|
|
16
|
-
</p>
|
|
17
|
-
<p>
|
|
18
|
-
We will try to respond as soon as possible within office working
|
|
19
|
-
hours from Monday to Friday.
|
|
20
|
-
</p>
|
|
21
|
-
<p>Please note, that the support is provided in English only.</p>
|
|
22
|
-
</div>
|
|
23
|
-
<div className="ccl-container">
|
|
24
|
-
<form className="ccl-form user-form contact-form">
|
|
25
|
-
<div className="ccl-fieldset">
|
|
26
|
-
<div className="ccl-form-group">
|
|
27
|
-
<label
|
|
28
|
-
className="ccl-form-label"
|
|
29
|
-
htmlFor="contact_form_email"
|
|
30
|
-
>
|
|
31
|
-
E-mail
|
|
32
|
-
<span className="label-required">*</span>
|
|
33
|
-
</label>
|
|
34
|
-
<input
|
|
35
|
-
// maxlength="10"
|
|
36
|
-
type="text"
|
|
37
|
-
className="ccl-text-input"
|
|
38
|
-
id="contact_form_email"
|
|
39
|
-
name=""
|
|
40
|
-
placeholder="Enter an email address"
|
|
41
|
-
/>
|
|
42
|
-
</div>
|
|
43
|
-
<div className="ccl-form-group">
|
|
44
|
-
<label
|
|
45
|
-
className="ccl-form-label"
|
|
46
|
-
htmlFor="contact_form_subject"
|
|
47
|
-
>
|
|
48
|
-
Subject
|
|
49
|
-
<span className="label-required">*</span>
|
|
50
|
-
</label>
|
|
51
|
-
<span className="form-tip">
|
|
52
|
-
A short indication of the problem, question or issue, i.e.
|
|
53
|
-
login, download, errors in the product, thematic question
|
|
54
|
-
etc.
|
|
55
|
-
</span>
|
|
56
|
-
<input
|
|
57
|
-
type="text"
|
|
58
|
-
className="ccl-text-input"
|
|
59
|
-
id="contact_form_subject"
|
|
60
|
-
name=""
|
|
61
|
-
placeholder="Enter an subject"
|
|
62
|
-
/>
|
|
63
|
-
</div>
|
|
64
|
-
<div className="ccl-form-group">
|
|
65
|
-
<label
|
|
66
|
-
className="ccl-form-label"
|
|
67
|
-
htmlFor="contact_form_message"
|
|
68
|
-
>
|
|
69
|
-
Message
|
|
70
|
-
<span className="label-required">*</span>
|
|
71
|
-
</label>
|
|
72
|
-
<span className="form-tip">
|
|
73
|
-
A short description of the problem, question or issue.
|
|
74
|
-
Please don't forget to specify which product(s) you are
|
|
75
|
-
referring to in your message.
|
|
76
|
-
</span>
|
|
77
|
-
<textarea
|
|
78
|
-
className="ccl-textarea"
|
|
79
|
-
id="contact_form_message"
|
|
80
|
-
name=""
|
|
81
|
-
cols="30"
|
|
82
|
-
rows="10"
|
|
83
|
-
placeholder="Enter a message"
|
|
84
|
-
></textarea>
|
|
85
|
-
</div>
|
|
86
|
-
<div className="ccl-form-group">
|
|
87
|
-
<label
|
|
88
|
-
className="ccl-form-label"
|
|
89
|
-
htmlFor="contact_form_verification"
|
|
90
|
-
>
|
|
91
|
-
Verification
|
|
92
|
-
<span className="label-required">*</span>
|
|
93
|
-
</label>
|
|
94
|
-
<div className="validation-image"></div>
|
|
95
|
-
<input
|
|
96
|
-
type="text"
|
|
97
|
-
className="ccl-text-input"
|
|
98
|
-
id="contact_form_verification"
|
|
99
|
-
name=""
|
|
100
|
-
placeholder="Enter validation code"
|
|
101
|
-
/>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
<CclButton mode="default">Submit</CclButton>
|
|
105
|
-
</form>
|
|
106
|
-
</div>
|
|
107
|
-
</section>
|
|
108
|
-
</div>
|
|
109
|
-
</>
|
|
110
|
-
);
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
export default ServiceDeskView;
|