@eeacms/volto-n2k 1.0.14 → 1.0.16

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 CHANGED
@@ -4,11 +4,21 @@ 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.14](https://github.com/eea/volto-n2k/compare/1.0.13...1.0.14) - 16 February 2023
7
+ ### [1.0.16](https://github.com/eea/volto-n2k/compare/1.0.15...1.0.16) - 22 February 2023
8
+
9
+ #### :hammer_and_wrench: Others
10
+
11
+ - stylelint fix [Miu Razvan - [`4b97345`](https://github.com/eea/volto-n2k/commit/4b973453416261c5a9e00a8860f3dd4f1072b815)]
12
+ - update styles [Miu Razvan - [`ba5cfaf`](https://github.com/eea/volto-n2k/commit/ba5cfafe4fb6a25937ea96501da6ee7e94001237)]
13
+ - update styles [Miu Razvan - [`4fabfe2`](https://github.com/eea/volto-n2k/commit/4fabfe2d4c94bef263d59e806a4ad242fbc08963)]
14
+ ### [1.0.15](https://github.com/eea/volto-n2k/compare/1.0.14...1.0.15) - 17 February 2023
8
15
 
9
16
  #### :hammer_and_wrench: Others
10
17
 
11
- - update [Miu Razvan - [`ceef220`](https://github.com/eea/volto-n2k/commit/ceef2206cb2be9b74d646861bbbc0a7639df3f99)]
18
+ - fix prettier [Claudia Ifrim - [`aa0d6fe`](https://github.com/eea/volto-n2k/commit/aa0d6fee19dcf0fc83dae5daa09e615fdeaa2b53)]
19
+ - fix prettier [Claudia Ifrim - [`726a157`](https://github.com/eea/volto-n2k/commit/726a157f0467977ccb970e8a2dc583b25a6de37f)]
20
+ ### [1.0.14](https://github.com/eea/volto-n2k/compare/1.0.13...1.0.14) - 16 February 2023
21
+
12
22
  ### [1.0.13](https://github.com/eea/volto-n2k/compare/1.0.12...1.0.13) - 16 February 2023
13
23
 
14
24
  #### :hammer_and_wrench: Others
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-n2k",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "description": "volto-n2k: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: IDM2 A-Team",
@@ -7,10 +7,9 @@ const View = (props) => {
7
7
  const {
8
8
  code_2000 = [],
9
9
  // habitat_description = [],
10
- habitat_prioriy = [],
11
10
  habitat_type = [],
12
11
  // number_countries = [],
13
- // number_sites = [],
12
+ number_sites = [],
14
13
  scientific_name = [],
15
14
  } = provider_data;
16
15
 
@@ -22,12 +21,16 @@ const View = (props) => {
22
21
  <div className="habitat-metadata">
23
22
  <h2 className="name">{scientific_name[0]}</h2>
24
23
  <p className="info">
25
- {habitat_type[0]} {code_2000[0]}
24
+ {habitat_type[0]} habitat code {code_2000[0]}
26
25
  </p>
27
- {habitat_prioriy[0] ? (
28
- <p className="info">Priority habitat {habitat_prioriy[0]}</p>
29
- ) : (
30
- ''
26
+ <br />
27
+ {number_sites[0] && (
28
+ <>
29
+ <h3 style={{ marginBottom: '0.15rem' }}>{number_sites[0]}</h3>
30
+ <h4 className="radjhan-normal">
31
+ NATURA 2000 SITES PROTECTING THIS HABITAT
32
+ </h4>
33
+ </>
31
34
  )}
32
35
  </div>
33
36
  </div>
@@ -32,6 +32,26 @@ div#view .habitat-banner-details .ui.container > * {
32
32
  text-transform: uppercase;
33
33
  }
34
34
 
35
+ h3 {
36
+ margin-top: 0 !important;
37
+ margin-bottom: 0 !important;
38
+ color: #fff !important;
39
+ font-family: inherit;
40
+ font-size: 32px;
41
+ line-height: 32px;
42
+ text-transform: uppercase;
43
+ }
44
+
45
+ h4 {
46
+ margin-top: 0 !important;
47
+ margin-bottom: 0 !important;
48
+ color: #fff !important;
49
+ font-family: inherit;
50
+ font-size: 32px;
51
+ line-height: 32px;
52
+ text-transform: uppercase;
53
+ }
54
+
35
55
  .info {
36
56
  font-family: 'RajdhaniR', 'Helvetica Neue', Arial, Helvetica, sans-serif;
37
57
  font-size: 18px;
@@ -25,6 +25,8 @@ div#view .ui.container > .sticky-navigation-anchors {
25
25
  }
26
26
 
27
27
  .navigation-anchors {
28
+ display: flex;
29
+ align-items: center;
28
30
  padding: 1rem 0;
29
31
 
30
32
  .ui.container > .ui.menu {
@@ -81,7 +81,7 @@ const View = (props) => {
81
81
  >
82
82
  <Link
83
83
  className="description"
84
- to={`/natura2000/habitats/h/${item.code_2000}`}
84
+ to={`/habitats/${item.code_2000}`}
85
85
  >
86
86
  {item.habitat_description} ({item.code_2000})
87
87
  </Link>
@@ -168,10 +168,7 @@ const View = (props) => {
168
168
  >
169
169
  <div className="metadata">
170
170
  <div className="name">
171
- <Link
172
- as="h3"
173
- to={`/natura2000/species/s/${speciesData.id_eunis}`}
174
- >
171
+ <Link as="h3" to={`/species/${speciesData.id_eunis}`}>
175
172
  {speciesData.common_name
176
173
  ? speciesData.common_name + ' '
177
174
  : ''}
@@ -1,3 +1,4 @@
1
+ /* eslint-disable react/jsx-no-target-blank */
1
2
  import React from 'react';
2
3
  import { Container } from 'semantic-ui-react';
3
4
  import loadable from '@loadable/component';
@@ -15,9 +16,10 @@ const View = (props) => {
15
16
  const {
16
17
  author = [],
17
18
  common_name = [],
18
- common_name_list = [],
19
+ code_2000 = [],
19
20
  id_eunis = [],
20
21
  license = [],
22
+ number_sites = [],
21
23
  picture_url = [],
22
24
  scientific_name = [],
23
25
  source = [],
@@ -47,15 +49,28 @@ const View = (props) => {
47
49
  <Container>
48
50
  <div className="species-details">
49
51
  <div className="species-metadata">
50
- <h2 className="name">{scientific_name[0]}</h2>
51
- <p className="info">
52
- {common_name[0] ? common_name[0] + ' - ' : ''} {author[0]}
53
- </p>
54
- {common_name_list[0] ? (
55
- <p className="info">Common names: {common_name_list[0]}</p>
56
- ) : (
57
- ''
52
+ <h2 className="name">
53
+ {common_name[0] ? common_name[0] + ' - ' : ''}{' '}
54
+ <span style={{ fontStyle: 'italic' }}>{scientific_name[0]}</span>
55
+ </h2>
56
+ {author[0] && (
57
+ <p
58
+ className="info radjhan-bold"
59
+ style={{ marginBottom: '0.15rem' }}
60
+ >
61
+ {author[0]}
62
+ </p>
63
+ )}
64
+ {code_2000[0] && (
65
+ <p className="info">Natura 2000 species code {code_2000[0]}</p>
66
+ )}
67
+ <br />
68
+ {number_sites[0] && (
69
+ <h3 style={{ marginBottom: '0.15rem' }}>{number_sites[0]}</h3>
58
70
  )}
71
+ <h4 className="radjhan-normal">
72
+ NATURA 2000 SITES PROTECTING THIS SPECIES
73
+ </h4>
59
74
  </div>
60
75
  <div
61
76
  className={cx('species-pictures', {
@@ -99,6 +114,14 @@ const View = (props) => {
99
114
  />
100
115
  </div>
101
116
  )}
117
+ <div className="find-image">
118
+ <a
119
+ href={`http://images.google.com/images?q=${scientific_name[0]}`}
120
+ target="_blank"
121
+ >
122
+ Find image on the web
123
+ </a>
124
+ </div>
102
125
  </div>
103
126
  </div>
104
127
  </Container>
@@ -30,6 +30,26 @@ div#view .species-banner-details .ui.container > * {
30
30
  text-transform: uppercase;
31
31
  }
32
32
 
33
+ h3 {
34
+ margin-top: 0 !important;
35
+ margin-bottom: 0 !important;
36
+ color: #fff !important;
37
+ font-family: inherit;
38
+ font-size: 32px;
39
+ line-height: 32px;
40
+ text-transform: uppercase;
41
+ }
42
+
43
+ h4 {
44
+ margin-top: 0 !important;
45
+ margin-bottom: 0 !important;
46
+ color: #fff !important;
47
+ font-family: inherit;
48
+ font-size: 32px;
49
+ line-height: 32px;
50
+ text-transform: uppercase;
51
+ }
52
+
33
53
  .info {
34
54
  margin-bottom: 1rem;
35
55
  font-family: 'RajdhaniR', 'Helvetica Neue', Arial, Helvetica, sans-serif;
@@ -100,6 +120,15 @@ div#view .species-banner-details .ui.container > * {
100
120
  height: fit-content;
101
121
  }
102
122
  }
123
+
124
+ .find-image {
125
+ padding: 0.25rem 1rem;
126
+ text-align: left;
127
+
128
+ a {
129
+ color: #fff;
130
+ }
131
+ }
103
132
  }
104
133
  }
105
134
 
@@ -4,49 +4,88 @@
4
4
  */
5
5
 
6
6
  import React, { useEffect, useContext, useMemo } from 'react';
7
+ import cx from 'classnames';
7
8
  import { matchPath, withRouter } from 'react-router';
8
- import { Container, Sticky } from 'semantic-ui-react';
9
+ import { Link } from 'react-router-dom';
10
+ import { compose } from 'redux';
9
11
  import { connect } from 'react-redux';
10
12
  import { Portal } from 'react-portal';
13
+ import { Container, Segment, Sticky, Image } from 'semantic-ui-react';
11
14
  import config from '@plone/volto/registry';
12
15
  import { Anontools } from '@plone/volto/components';
13
16
  import { withLocalStorage } from '@eeacms/volto-n2k/hocs';
14
- import Navigation from '../Navigation/Navigation';
15
17
  import { StickyContext } from '@eeacms/volto-bise/components';
18
+ import Navigation from '../Navigation/Navigation';
19
+ import LanguageSelector from '../LanguageSelector/LanguageSelector';
20
+
21
+ import BISELogo from '@eeacms/volto-bise/customizations/volto/components/theme/Logo/Logo.svg';
16
22
 
17
23
  function removeTrailingSlash(str) {
18
24
  return str.replace(/\/+$/, '');
19
25
  }
20
26
 
27
+ function matchPaths(paths, pathname) {
28
+ if (
29
+ matchPath(pathname, {
30
+ path: paths,
31
+ exact: true,
32
+ strict: false,
33
+ })
34
+ ) {
35
+ return true;
36
+ }
37
+ return false;
38
+ }
39
+
21
40
  const Navbar = (props) => {
22
41
  const currentLang = props.localStorage.get('N2K_LANGUAGE');
23
42
 
24
43
  return (
25
- <Container>
26
- <div className="header-wrapper">
27
- <div className="header">
28
- <div className="logo-nav-wrapper">
29
- <div className="tools-search-wrapper">
30
- {currentLang ? (
31
- <Navigation
32
- isSticky={props.isSticky}
33
- isRoot={props.isRoot}
34
- isExplorer={props.isExplorer}
35
- pathname={props.pathname}
36
- />
37
- ) : (
38
- ''
44
+ <div>
45
+ <Segment basic role="banner" className={cx('header-wrapper')}>
46
+ <Container>
47
+ <div className="header">
48
+ <div className="logo-nav-wrapper">
49
+ <div className="logo">
50
+ <Link title="Natura 2000" to="/">
51
+ <Image
52
+ src={BISELogo}
53
+ alt="Biodiversity logo"
54
+ title="Biodiversity logo"
55
+ height={64}
56
+ width={192}
57
+ />
58
+ </Link>
59
+ </div>
60
+ <div className="tools-search-wrapper">
61
+ {currentLang ? (
62
+ <Navigation
63
+ pathname={props.pathname}
64
+ isSticky={props.isSticky}
65
+ isRoot={props.isRoot}
66
+ isExplorer={props.isExplorer}
67
+ />
68
+ ) : (
69
+ ''
70
+ )}
71
+ </div>
72
+ {!props.isSdf && !props.isExplorer && (
73
+ <div className="mobile hidden tablet hidden computer hidden language-selector-wrapper">
74
+ <LanguageSelector navigation={props.navigation} />
75
+ </div>
39
76
  )}
40
77
  </div>
41
78
  </div>
42
- </div>
43
- </div>
44
- {!props.token && (
45
- <Portal node={__CLIENT__ && document.querySelector('#footer_links')}>
46
- <Anontools />
47
- </Portal>
48
- )}
49
- </Container>
79
+ {!props.token && (
80
+ <Portal
81
+ node={__CLIENT__ && document.querySelector('#footer_links')}
82
+ >
83
+ <Anontools />
84
+ </Portal>
85
+ )}
86
+ </Container>
87
+ </Segment>
88
+ </div>
50
89
  );
51
90
  };
52
91
 
@@ -64,16 +103,13 @@ const Header = (props) => {
64
103
  [props.pathname],
65
104
  );
66
105
 
106
+ const isSdf = useMemo(() => matchPaths(config.settings.sdf, props.pathname), [
107
+ props.pathname,
108
+ ]);
109
+
67
110
  const isExplorer = useMemo(
68
- () =>
69
- (isRoot &&
70
- !config.settings.n2k.supportedLanguages.includes(isRoot.params.lang)) ||
71
- matchPath(props.pathname, {
72
- path: '/natura2000/explore-natura2000/*',
73
- exact: true,
74
- strict: false,
75
- }),
76
- [props.pathname, isRoot],
111
+ () => matchPaths(config.settings.explorer, props.pathname),
112
+ [props.pathname],
77
113
  );
78
114
 
79
115
  useEffect(() => {
@@ -86,13 +122,14 @@ const Header = (props) => {
86
122
  /* eslint-disable-next-line */
87
123
  }, []);
88
124
 
89
- return isRoot || isExplorer ? (
125
+ return isRoot ? (
90
126
  <div className="ui basic segment sticky-header-wrapper">
91
127
  <div className="ui sticky">
92
128
  <Navbar
93
129
  {...props}
94
130
  isSticky={false}
95
131
  isRoot={isRoot}
132
+ isSdf={isSdf}
96
133
  isExplorer={isExplorer}
97
134
  />
98
135
  </div>
@@ -113,12 +150,20 @@ const Header = (props) => {
113
150
  {...props}
114
151
  isSticky={isSticky}
115
152
  isRoot={isRoot}
153
+ isSdf={isSdf}
116
154
  isExplorer={isExplorer}
117
155
  />
118
156
  </Sticky>
119
157
  );
120
158
  };
121
159
 
122
- export default connect((state) => ({
123
- token: state.userSession.token,
124
- }))(withRouter(withLocalStorage(Header)));
160
+ export default compose(
161
+ withRouter,
162
+ withLocalStorage,
163
+ connect((state) => {
164
+ return {
165
+ token: state.userSession.token,
166
+ navigation: state.navigation,
167
+ };
168
+ }),
169
+ )(Header);
@@ -1,19 +1,37 @@
1
+ .computer.hidden.language-selector-wrapper {
2
+ .language-selector > .ui.dropdown {
3
+ display: flex;
4
+ flex-flow: row-reverse;
5
+ align-items: center;
6
+ }
7
+ }
8
+
1
9
  .language-selector {
10
+ margin-right: 0;
11
+
2
12
  .ui.dropdown {
3
- &:not(.button) .text,
4
- &:not(.button) .default.text {
5
- color: #005248;
13
+ .divider.text {
14
+ display: inline-block;
15
+ color: #005248 !important;
6
16
  font-family: OpenSans, 'Raleway', sans-serif;
17
+ font-weight: 700;
7
18
  text-transform: uppercase;
19
+ }
8
20
 
9
- &:hover {
10
- color: #00a390;
21
+ .ui.image {
22
+ display: inline-block;
23
+ margin-right: 0.25rem;
24
+ }
25
+
26
+ &:hover {
27
+ .divider.text {
28
+ color: #00a390 !important;
11
29
  }
12
30
  }
13
31
 
14
- .menu {
15
- margin-top: 0.5rem;
16
- margin-left: -0.6rem;
32
+ > .menu {
33
+ position: absolute;
34
+ top: 30px !important;
17
35
 
18
36
  .item {
19
37
  background: #fff !important;
@@ -22,20 +40,13 @@
22
40
  color: #005248;
23
41
  font-family: OpenSans, 'Raleway', sans-serif;
24
42
  font-size: 1rem;
25
- font-weight: bold;
43
+ font-weight: 700;
26
44
  text-transform: uppercase;
27
45
  }
28
46
 
29
- &.active.selected {
30
- background: #fff !important;
31
-
47
+ &:hover {
32
48
  .text {
33
- color: #005248;
34
- }
35
-
36
- &::before {
37
- display: none !important;
38
- opacity: 0;
49
+ color: #00a390;
39
50
  }
40
51
  }
41
52
  }
@@ -10,7 +10,7 @@ import { compose } from 'redux';
10
10
  import { matchPath, withRouter } from 'react-router';
11
11
  import { Link } from 'react-router-dom';
12
12
  import { defineMessages, injectIntl } from 'react-intl';
13
- import { Menu, Dropdown, Image } from 'semantic-ui-react';
13
+ import { Menu, Dropdown } from 'semantic-ui-react';
14
14
  import cx from 'classnames';
15
15
  import {
16
16
  getBaseUrl,
@@ -23,7 +23,6 @@ import { getNavigation } from '@plone/volto/actions';
23
23
  import config from '@plone/volto/registry';
24
24
  import { withLocalStorage } from '@eeacms/volto-n2k/hocs';
25
25
  import LanguageSelector from '../LanguageSelector/LanguageSelector';
26
- import BISELogo from '@eeacms/volto-bise/customizations/volto/components/theme/Logo/Logo.svg';
27
26
 
28
27
  const dropdownBlacklist = ['/natura2000'];
29
28
 
@@ -248,7 +247,7 @@ class Navigation extends Component {
248
247
  className={cx('navigation', this.props.className || '')}
249
248
  ref={this.container}
250
249
  >
251
- <div className="mobile only">
250
+ <div className="mobile only tablet only computer only">
252
251
  <Hamburger
253
252
  {...this.props}
254
253
  isMobileMenuOpen={this.state.isMobileMenuOpen}
@@ -263,30 +262,14 @@ class Navigation extends Component {
263
262
  open: this.state.isMobileMenuOpen,
264
263
  'is-sdf': this.state.isSdf,
265
264
  'is-sticky': this.state.isSdf || this.props.isSticky,
266
- 'mobile hidden': !this.state.isMobileMenuOpen,
267
- 'mobile only': this.state.isMobileMenuOpen,
265
+ 'mobile hidden tablet hidden computer hidden': !this.state
266
+ .isMobileMenuOpen,
267
+ 'mobile only tablet only computer only': this.state
268
+ .isMobileMenuOpen,
268
269
  })}
269
270
  onClick={this.closeMobileMenu}
270
271
  onBlur={() => this.closeMobileMenu}
271
272
  >
272
- <div className="mobile only">
273
- <Hamburger
274
- {...this.props}
275
- isMobileMenuOpen={this.state.isMobileMenuOpen}
276
- toggleMobileMenu={this.toggleMobileMenu}
277
- />
278
- </div>
279
- <Menu.Item className="home-button">
280
- <Link title="Natura 2000" to="/">
281
- <Image
282
- src={BISELogo}
283
- alt="Biodiversity logo"
284
- title="Biodiversity logo"
285
- height={64}
286
- width={192}
287
- />
288
- </Link>
289
- </Menu.Item>
290
273
  {this.state.isSdf ? (
291
274
  <>
292
275
  <button
@@ -320,228 +303,159 @@ class Navigation extends Component {
320
303
  ''
321
304
  )}
322
305
 
323
- {this.props.isRoot &&
324
- this.props.biseItems
325
- .filter((item) => !['/natura2000'].includes(item.url))
326
- .map((item) => {
327
- const flatUrl = flattenToAppURL(item.url);
328
- const itemID = item.title.split(' ').join('-').toLowerCase();
329
- return item.items &&
330
- item.items.length &&
331
- !dropdownBlacklist.includes(item.url) ? (
332
- <Dropdown
333
- id={itemID}
334
- className={
335
- this.isActive(flatUrl)
336
- ? 'item firstLevel menuActive'
337
- : 'item firstLevel'
338
- }
339
- key={flatUrl}
340
- trigger={
341
- <Link to={flatUrl === '' ? '/' : flatUrl} key={flatUrl}>
342
- {item.title}
343
- </Link>
344
- }
345
- item
346
- simple
347
- >
348
- {item.title === 'Countries' ? (
349
- <Dropdown.Menu>
350
- <div className="submenu-wrapper">
351
- <div className="submenu countries-submenu">
352
- {item.items.map((subsubitem) => {
353
- const flatSubSubUrl = flattenToAppURL(
354
- subsubitem.url,
355
- );
356
- return (
357
- <Link
358
- to={
359
- flatSubSubUrl === '' ? '/' : flatSubSubUrl
360
- }
361
- title={subsubitem.title}
362
- key={flatSubSubUrl}
363
- className={
364
- this.isActive(flatSubSubUrl)
365
- ? 'item thirdLevel menuActive'
366
- : 'item thirdLevel'
367
- }
368
- >
369
- {subsubitem.title}
370
- </Link>
371
- );
372
- })}
306
+ {(this.props.isRoot || this.props.isExplorer) && (
307
+ <>
308
+ {this.props.biseItems
309
+ .filter((item) => !['/natura2000'].includes(item.url))
310
+ .map((item) => {
311
+ const flatUrl = flattenToAppURL(item.url);
312
+ const itemID = item.title.split(' ').join('-').toLowerCase();
313
+ return item.items &&
314
+ item.items.length &&
315
+ !dropdownBlacklist.includes(item.url) ? (
316
+ <Dropdown
317
+ id={itemID}
318
+ className={
319
+ this.isActive(flatUrl)
320
+ ? 'item firstLevel menuActive'
321
+ : 'item firstLevel'
322
+ }
323
+ key={flatUrl}
324
+ trigger={
325
+ <Link to={flatUrl === '' ? '/' : flatUrl} key={flatUrl}>
326
+ {item.title}
327
+ </Link>
328
+ }
329
+ item
330
+ simple
331
+ >
332
+ {item.title === 'Countries' ? (
333
+ <Dropdown.Menu>
334
+ <div className="submenu-wrapper">
335
+ <div className="submenu countries-submenu">
336
+ {item.items.map((subsubitem) => {
337
+ const flatSubSubUrl = flattenToAppURL(
338
+ subsubitem.url,
339
+ );
340
+ return (
341
+ <Link
342
+ to={
343
+ flatSubSubUrl === '' ? '/' : flatSubSubUrl
344
+ }
345
+ title={subsubitem.title}
346
+ key={flatSubSubUrl}
347
+ className={
348
+ this.isActive(flatSubSubUrl)
349
+ ? 'item thirdLevel menuActive'
350
+ : 'item thirdLevel'
351
+ }
352
+ >
353
+ {subsubitem.title}
354
+ </Link>
355
+ );
356
+ })}
357
+ </div>
373
358
  </div>
374
- </div>
375
- </Dropdown.Menu>
376
- ) : (
377
- <Dropdown.Menu>
378
- {item.items.map((subitem) => {
379
- const flatSubUrl = flattenToAppURL(subitem.url);
380
- const subItemID = subitem.title
381
- .split(' ')
382
- .join('-')
383
- .toLowerCase();
384
- return (
385
- <Dropdown.Item key={flatSubUrl}>
386
- <div className="secondLevel-wrapper">
387
- <Link
388
- id={subItemID}
389
- to={flatSubUrl === '' ? '/' : flatSubUrl}
390
- key={flatSubUrl}
391
- className={
392
- this.isActive(flatSubUrl)
393
- ? 'item secondLevel menuActive'
394
- : 'item secondLevel'
395
- }
396
- >
397
- {subitem.title}
398
- </Link>
399
- </div>
400
- {subitem.items && (
401
- <div className="submenu-wrapper">
402
- <div className="submenu">
403
- {subitem.items.map((subsubitem) => {
404
- const flatSubSubUrl = flattenToAppURL(
405
- subsubitem.url,
406
- );
407
- return (
408
- <Link
409
- to={
410
- flatSubSubUrl === ''
411
- ? '/'
412
- : flatSubSubUrl
413
- }
414
- title={subsubitem.title}
415
- key={flatSubSubUrl}
416
- className={
417
- this.isActive(flatSubSubUrl)
418
- ? 'item thirdLevel menuActive'
419
- : 'item thirdLevel'
420
- }
421
- >
422
- {subsubitem.title}
423
- </Link>
424
- );
425
- })}
426
- </div>
359
+ </Dropdown.Menu>
360
+ ) : (
361
+ <Dropdown.Menu>
362
+ {item.items.map((subitem) => {
363
+ const flatSubUrl = flattenToAppURL(subitem.url);
364
+ const subItemID = subitem.title
365
+ .split(' ')
366
+ .join('-')
367
+ .toLowerCase();
368
+ return (
369
+ <Dropdown.Item key={flatSubUrl}>
370
+ <div className="secondLevel-wrapper">
371
+ <Link
372
+ id={subItemID}
373
+ to={flatSubUrl === '' ? '/' : flatSubUrl}
374
+ key={flatSubUrl}
375
+ className={
376
+ this.isActive(flatSubUrl)
377
+ ? 'item secondLevel menuActive'
378
+ : 'item secondLevel'
379
+ }
380
+ >
381
+ {subitem.title}
382
+ </Link>
427
383
  </div>
428
- )}
429
- </Dropdown.Item>
430
- );
431
- })}
432
- </Dropdown.Menu>
433
- )}
434
- </Dropdown>
435
- ) : (
436
- <Link
437
- to={flatUrl === '' ? '/' : flatUrl}
438
- key={flatUrl}
439
- className={
440
- this.isActive(flatUrl)
441
- ? 'item menuActive firstLevel'
442
- : 'item firstLevel'
443
- }
444
- >
445
- {item.title}
446
- </Link>
447
- );
448
- })}
384
+ {subitem.items && (
385
+ <div className="submenu-wrapper">
386
+ <div className="submenu">
387
+ {subitem.items.map((subsubitem) => {
388
+ const flatSubSubUrl = flattenToAppURL(
389
+ subsubitem.url,
390
+ );
391
+ return (
392
+ <Link
393
+ to={
394
+ flatSubSubUrl === ''
395
+ ? '/'
396
+ : flatSubSubUrl
397
+ }
398
+ title={subsubitem.title}
399
+ key={flatSubSubUrl}
400
+ className={
401
+ this.isActive(flatSubSubUrl)
402
+ ? 'item thirdLevel menuActive'
403
+ : 'item thirdLevel'
404
+ }
405
+ >
406
+ {subsubitem.title}
407
+ </Link>
408
+ );
409
+ })}
410
+ </div>
411
+ </div>
412
+ )}
413
+ </Dropdown.Item>
414
+ );
415
+ })}
416
+ </Dropdown.Menu>
417
+ )}
418
+ </Dropdown>
419
+ ) : (
420
+ <Link
421
+ to={flatUrl === '' ? '/' : flatUrl}
422
+ key={flatUrl}
423
+ className={
424
+ this.isActive(flatUrl)
425
+ ? 'item menuActive firstLevel'
426
+ : 'item firstLevel'
427
+ }
428
+ >
429
+ {item.title}
430
+ </Link>
431
+ );
432
+ })}
433
+ </>
434
+ )}
449
435
 
450
- {(!this.state.isSdf && !this.props.isRoot) || this.props.isExplorer
436
+ {!this.state.isSdf && !this.props.isExplorer && !this.props.isRoot
451
437
  ? this.props.items.map((item) => {
452
438
  const flatUrl = flattenToAppURL(item.url);
453
- const itemID = item.title.split(' ').join('-').toLowerCase();
454
- return item.items && item.items.length && false ? (
455
- <Dropdown
456
- id={itemID}
457
- className={cx({
458
- item: true,
459
- firstLevel: true,
439
+ return (
440
+ <div
441
+ key={flatUrl}
442
+ className={cx('item firstLevel', {
460
443
  menuActive: this.isActive(flatUrl),
461
444
  })}
462
- key={flatUrl}
463
- trigger={
464
- <Link to={flatUrl === '' ? '/' : flatUrl} key={flatUrl}>
465
- {item.title}
466
- </Link>
467
- }
468
- item
469
- simple
445
+ role="listbox"
446
+ tabIndex={0}
447
+ aria-expanded={false}
470
448
  >
471
- <Dropdown.Menu>
472
- {item.items.map((subitem) => {
473
- const flatSubUrl = flattenToAppURL(subitem.url);
474
- const subItemID = subitem.title
475
- .split(' ')
476
- .join('-')
477
- .toLowerCase();
478
- return (
479
- <Dropdown.Item key={flatSubUrl}>
480
- <div className="secondLevel-wrapper">
481
- <Link
482
- id={subItemID}
483
- to={flatSubUrl === '' ? '/' : flatSubUrl}
484
- key={flatSubUrl}
485
- className={
486
- this.isActive(flatSubUrl)
487
- ? 'item secondLevel menuActive'
488
- : 'item secondLevel'
489
- }
490
- >
491
- {subitem.title}
492
- </Link>
493
- </div>
494
- {subitem.items && (
495
- <div className="submenu-wrapper">
496
- <div className="submenu">
497
- {subitem.items.map((subsubitem) => {
498
- const flatSubSubUrl = flattenToAppURL(
499
- subsubitem.url,
500
- );
501
- return (
502
- <Link
503
- to={
504
- flatSubSubUrl === ''
505
- ? '/'
506
- : flatSubSubUrl
507
- }
508
- title={subsubitem.title}
509
- key={flatSubSubUrl}
510
- className={
511
- this.isActive(flatSubSubUrl)
512
- ? 'item thirdLevel menuActive'
513
- : 'item thirdLevel'
514
- }
515
- >
516
- {subsubitem.title}
517
- </Link>
518
- );
519
- })}
520
- </div>
521
- </div>
522
- )}
523
- </Dropdown.Item>
524
- );
525
- })}
526
- </Dropdown.Menu>
527
- </Dropdown>
528
- ) : (
529
- <Link
530
- to={flatUrl === '' ? '/' : flatUrl}
531
- key={flatUrl}
532
- className={
533
- this.isActive(flatUrl)
534
- ? 'item menuActive firstLevel'
535
- : 'item firstLevel'
536
- }
537
- >
538
- {item.title}
539
- </Link>
449
+ <Link to={flatUrl === '' ? '/' : flatUrl}>
450
+ {item.title}
451
+ </Link>
452
+ </div>
540
453
  );
541
454
  })
542
455
  : ''}
543
- {!this.state.isSdf && !this.props.isExplorer ? (
544
- <Menu.Item className="firstLevel language-selector-wrapper">
456
+
457
+ {!this.state.isSdf && !this.state.isExplorer ? (
458
+ <Menu.Item className="firstLevel language-selector-wrapper mobile only tablet only computer only">
545
459
  <LanguageSelector navigation={this.props.navigation} />
546
460
  </Menu.Item>
547
461
  ) : (
@@ -127,7 +127,7 @@
127
127
  text-align: left;
128
128
  transform: translate(-100%, 0);
129
129
 
130
- @media only screen and (max-width: calc(@largestMobileScreen + 53px)) {
130
+ @media only screen and (max-width: 1700px) {
131
131
  display: none;
132
132
  }
133
133
  }
@@ -182,7 +182,7 @@ body.grey-bg {
182
182
  a,
183
183
  ul,
184
184
  li {
185
- font-size: 16px;
185
+ // font-size: 16px;
186
186
  }
187
187
 
188
188
  a {
@@ -288,252 +288,34 @@ body.grey-bg {
288
288
  }
289
289
 
290
290
  .header-wrapper {
291
- padding: 0;
292
-
293
291
  .header {
294
292
  .logo-nav-wrapper {
295
- top: 0;
296
-
297
- .tools-search-wrapper {
298
- width: 100%;
299
- margin-left: 0 !important;
300
- }
301
-
302
293
  .navigation {
303
- width: 100%;
304
- min-height: 80px;
305
- align-items: center;
306
- align-self: normal;
307
- justify-content: flex-end;
308
-
309
294
  .ui.secondary.pointing.menu {
310
- top: 0;
311
- width: 100%;
312
- min-height: 80px;
313
- flex-wrap: wrap;
314
- justify-content: center;
315
- padding: 4px 0;
316
- margin-right: 0 !important;
317
-
318
- > * {
319
- align-self: center;
320
- }
321
-
322
- &.is-sticky {
323
- justify-content: center;
324
- padding: 0;
325
- }
326
-
327
- &.mobile.hidden {
328
- max-width: calc(100% - 272px);
329
- margin-right: 80px !important;
330
- }
331
-
332
- &.mobile.only {
333
- .language-selector-wrapper {
334
- display: flex;
335
- align-items: flex-end;
336
- }
337
- }
338
-
339
- &:not(.is-sdf) {
340
- justify-content: center;
341
- padding: 4px 0;
342
- }
343
-
344
- &:not(.mobile.only) {
345
- .item.firstLevel.at-glance {
346
- align-self: stretch;
347
- padding-bottom: 1.5rem !important;
348
- margin-bottom: -0.5rem;
349
- background: #00a390 0% 0% no-repeat padding-box;
350
- border-radius: 0px 0px 10px 10px;
351
- color: #fff !important;
352
- cursor: pointer;
353
-
354
- &:hover {
355
- color: #fff !important;
356
- }
357
- }
358
- }
359
-
360
- .home-button {
361
- // width: 56px !important;
362
- // height: 40px !important;
363
- padding-right: 0 !important;
364
- padding-left: 0 !important;
365
- margin: 4px 0;
366
-
367
- &.logo {
368
- img {
369
- width: 100%;
370
- height: 100%;
371
- }
372
- }
373
- }
295
+ height: 100%;
374
296
 
375
297
  .item.firstLevel.at-glance {
376
- color: #00a390 !important;
298
+ align-self: stretch;
299
+ margin-top: -1rem;
300
+ margin-bottom: -1rem;
301
+ background: #00a390 0 0 no-repeat padding-box;
302
+ border-radius: 0 0 10px 10px;
303
+ color: #fff;
377
304
  cursor: pointer;
378
305
 
379
306
  &:hover {
380
- color: #00a390 !important;
307
+ color: #fff !important;
381
308
  }
382
309
  }
383
310
 
384
311
  .item.firstLevel.deep-dive {
385
- color: #00a390 !important;
312
+ align-self: center;
313
+ color: #00a390;
386
314
  cursor: pointer;
387
315
 
388
316
  &:hover {
389
- color: #00a390 !important;
390
- }
391
- }
392
-
393
- &:not(.open) {
394
- .home-button {
395
- position: absolute;
396
- // top: 50%;
397
- left: 0;
398
- padding: 0 !important;
399
- margin: 0;
400
- transform: translateX(-100%);
401
-
402
- > a {
403
- display: flex;
404
- }
405
- }
406
-
407
- .language-selector-wrapper {
408
- position: absolute;
409
- right: 0;
410
- margin: 0;
411
- margin-bottom: 0;
412
- transform: translateX(100%);
413
-
414
- &:hover {
415
- background-color: transparent !important;
416
- }
417
-
418
- .language-selector .ui.dropdown {
419
- display: flex;
420
- flex-direction: row-reverse;
421
- align-items: center;
422
-
423
- img {
424
- margin-right: 0.25rem;
425
- }
426
- }
427
- }
428
- }
429
-
430
- &.open {
431
- .hamburger-wrapper {
432
- position: absolute;
433
- z-index: 0;
434
- top: 1rem;
435
- right: 15px;
436
- }
437
-
438
- .home-button {
439
- &.logo {
440
- // margin-top: 1rem;
441
- // margin-bottom: 1rem;
442
- margin-left: 0.8rem;
443
- }
444
- }
445
- }
446
-
447
- &.stackable.open {
448
- top: 0 !important;
449
- height: 100vh !important;
450
- margin-top: 0;
451
- }
452
-
453
- .item {
454
- position: relative;
455
- color: @darkGreen;
456
-
457
- &:not(.home-button) {
458
- padding-right: 0.8rem !important;
459
- padding-left: 0.8rem !important;
460
- }
461
-
462
- &:not(.active),
463
- &:not(.menuActive) > a {
464
- color: @darkGreen;
465
- }
466
-
467
- &.firstLevel,
468
- &.firstLevel > a {
469
- border: none;
470
- font-size: 1.15rem;
471
- font-weight: bold;
472
-
473
- &.language-selector-wrapper {
474
- .language-selector {
475
- margin-right: 0;
476
-
477
- .visible.menu {
478
- left: 50%;
479
- min-width: 70px !important;
480
- transform: translate(-50%, 0);
481
- }
482
- }
483
- }
484
-
485
- &:hover {
486
- color: @lightGreen !important;
487
-
488
- &.language-selector-wrapper {
489
- border-color: transparent !important;
490
- }
491
-
492
- > a {
493
- color: @darkGreen !important;
494
- }
495
- }
496
- }
497
-
498
- &.secondLevel {
499
- &:hover {
500
- background: initial !important;
501
- color: #005248;
502
- }
503
- }
504
-
505
- &.active,
506
- &.menuActive {
507
- color: #005248;
317
+ color: #00a390;
508
318
  }
509
-
510
- &.active:not(.secondLevel):not(.thirdLevel),
511
- &.menuActive:not(.secondLevel):not(.thirdLevel) {
512
- @media only screen and (min-width: 1655px) {
513
- &::before {
514
- position: absolute;
515
- top: 4px;
516
- left: 50%;
517
- display: block !important;
518
- width: 6px;
519
- height: 6px;
520
- background-color: #005248;
521
- border-radius: 100%;
522
- content: '';
523
- transform: translateX(-50%);
524
- }
525
- }
526
- }
527
- }
528
- }
529
-
530
- .hamburger-wrapper {
531
- height: 24px;
532
- margin: 0.5rem 0;
533
-
534
- button.hamburger {
535
- padding: 0;
536
- cursor: pointer;
537
319
  }
538
320
  }
539
321
  }
@@ -551,11 +333,15 @@ body.grey-bg {
551
333
  }
552
334
  }
553
335
 
336
+ .sdf-nav {
337
+ height: 86px;
338
+ }
339
+
554
340
  .back-to-top {
555
341
  margin-top: 2em;
556
342
  margin-bottom: 3rem;
557
343
  color: #7b7b7b;
558
- font-size: 16px;
344
+ // font-size: 16px;
559
345
  font-weight: bold;
560
346
 
561
347
  .ui.circular.button {
@@ -761,8 +547,8 @@ img.slick-image {
761
547
  }
762
548
 
763
549
  .tabs-block .slick-dots-wrapper .slick-dots li.slick-active button {
764
- border-color: #005248 !important;
765
- background-color: #005248 !important;
550
+ border-color: #00a390 !important;
551
+ background-color: #00a390 !important;
766
552
  }
767
553
 
768
554
  .tabs-block.light .slick-dots-wrapper .slick-dots li.slick-active::before {
@@ -814,6 +600,45 @@ img.slick-image {
814
600
  margin-bottom: 0 !important;
815
601
  }
816
602
 
603
+ .tabs-block {
604
+ .slick-next {
605
+ p {
606
+ font-size: 14px;
607
+ }
608
+ }
609
+ }
610
+
611
+ .explorer-tabs .tabs-block .tabs > .ui.menu {
612
+ > a {
613
+ padding: 1rem;
614
+ }
615
+
616
+ > a:nth-child(1) {
617
+ padding-left: 1rem !important;
618
+ }
619
+
620
+ > a.active:nth-child(1),
621
+ > a.active:hover:nth-child(1) {
622
+ background: #4aa47f;
623
+ border-radius: 4px;
624
+ color: #fff;
625
+ }
626
+
627
+ > a.active:nth-child(2),
628
+ > a.active:hover:nth-child(2) {
629
+ background: #b78730;
630
+ border-radius: 4px;
631
+ color: #fff;
632
+ }
633
+
634
+ > a.active:nth-child(3),
635
+ > a.active:hover:nth-child(3) {
636
+ background: #2e80ec;
637
+ border-radius: 4px;
638
+ color: #fff;
639
+ }
640
+ }
641
+
817
642
  @media only screen and (max-width: @largestTabletScreen) {
818
643
  .tabs-block .slick-slider {
819
644
  order: 2;
@@ -863,3 +688,11 @@ img.slick-image {
863
688
  width: 650px;
864
689
  }
865
690
  }
691
+
692
+ .radjhan-normal {
693
+ font-family: RajdhaniR, 'Helvetica Neue', Arial, Helvetica, sans-serif !important;
694
+ }
695
+
696
+ .radjhan-bold {
697
+ font-family: RajdhaniB, 'Helvetica Neue', Arial, Helvetica, sans-serif !important;
698
+ }