Compare commits

...

213 Commits

Author SHA1 Message Date
Konstantinos Triantafyllou 78d2bee5cb Merge remote-tracking branch 'origin/develop' 2023-11-30 10:27:00 +02:00
Konstantinos Triantafyllou 6712e54462 [develop]: Init version in package.json 2023-11-30 10:23:30 +02:00
Konstantinos Triantafyllou 9c7e018a7e [master]: Update libraries 2023-11-30 10:22:21 +02:00
Konstantinos Triantafyllou d1ab314ef2 [develop]: Update libraries 2023-11-30 10:16:49 +02:00
Konstantina Galouni aa8dd09ae2 [develop | DONE | FIXED] home.component.ts: Updated method called in refine query to get funders of projects (getNumbers) from "getRefineFieldsResultsByEntityName()" to "getAllRefineFieldResultsByFieldName()" to be able to get more than 100 funders each time. 2023-11-24 13:19:18 +02:00
Konstantinos Triantafyllou 8f31ec3612 Merge develop to master 2023-11-08 13:57:48 +02:00
Konstantinos Triantafyllou 37046a25fc [develop | TEMP]: Remove uk-parallax from home page until is fixed from browsers. 2023-11-08 13:50:39 +02:00
Konstantinos Triantafyllou 7e9c42eff4 [develop | DONE]: Removed deleted properties. Update libraries. Revert version of UIKit to version 3.16.24 2023-11-08 13:49:54 +02:00
Konstantinos Triantafyllou 5a36ee219e [develop | DONE | CHANGED]: Revert version of UIkit to version 3.16.14 because of parallax. 2023-10-30 16:57:54 +02:00
Konstantinos Triantafyllou 37aff3ed4d [develp]: Update libraries 2023-10-30 12:17:16 +02:00
Konstantinos Triantafyllou c992788ff1 Merge pull request 'Update to Angular-16' (#10) from angular-16 into develop
Reviewed-on: #10
2023-10-30 11:05:20 +01:00
Konstantinos Triantafyllou f31e1ce23c Update libraries before beta deplooy 2023-10-16 20:21:12 +03:00
Konstantinos Triantafyllou 4827140fd4 Update library 2023-09-15 15:20:48 +03:00
Konstantinos Triantafyllou a8faaf98ad Update readme with angular version 2023-09-15 14:43:17 +03:00
Konstantinos Triantafyllou cf47c65341 Change tablet section with new mocks 2023-09-15 14:40:06 +03:00
Konstantinos Triantafyllou db14d732e4 Update types/node to version 16 2023-09-15 13:18:04 +03:00
Konstantinos Triantafyllou b62adbb0df Add hasStickyHeader in Mobile for home page and support. Fix missing asset in get-started. Close canvas on click of get-started button. 2023-08-30 12:29:02 +03:00
Konstantinos Triantafyllou 6784297127 Update uikit to version 3.16.24 2023-08-23 15:37:03 +03:00
Konstantinos Triantafyllou 94d5b1ed1c Update material to angular 16. 2023-08-04 14:46:43 +03:00
Konstantinos Triantafyllou cd4f8a10fe Update angular to version 16 2023-08-04 14:45:56 +03:00
Konstantinos Triantafyllou cead11a42f Update Zone to 0.13.1 2023-08-04 14:40:55 +03:00
Konstantinos Triantafyllou 0e0fe849db Update material to angular 15. 2023-08-04 14:40:22 +03:00
Konstantinos Triantafyllou ca488b5459 Migrate angular core and cli to version 15 and update dependencies to be compatible with the newer version. 2023-08-04 14:38:45 +03:00
Konstantinos Triantafyllou 21f170b13c Update typescript to version 4.9.5 2023-08-04 14:37:25 +03:00
Konstantinos Triantafyllou 8fe46184d3 Update libraries 2023-08-04 14:36:10 +03:00
Konstantinos Triantafyllou 85d5f7ba0f Update library 2023-07-13 14:45:21 +03:00
Konstantinos Triantafyllou d25fcc6c04 Change piwik base on the new dynamic piwik. 2023-07-13 12:22:07 +03:00
Konstantinos Triantafyllou ec66503544 Merge remote-tracking branch 'origin/develop' 2023-07-12 13:08:47 +03:00
Konstantinos Triantafyllou a516a4bf6e Update libraries before merge from develop 2023-07-12 13:08:08 +03:00
Konstantinos Triantafyllou af937b8ee5 Add redirects from old routes to new ones 2023-07-12 11:59:57 +03:00
Konstantinos Triantafyllou ce77b73300 Update libraries 2023-07-12 09:41:24 +03:00
Konstantina Galouni 19f6419027 [Monitor | develop]: [Bug fix] home.component.ts: In ngOnDestroy, set quickContactService.setDisplay(true) - true is the default value. 2023-07-06 16:06:01 +03:00
Konstantina Galouni b6de9c6d70 [Monitor & Library | develop]: [Bug fix] Refactor code for showing help button or not.
1. quick-contact.service.ts: Initialize display to true (assume it is not intersecting, otherwise in pages without this section, it can't be initialized correctly).
2. home.component.ts: Removed field "showQuickContact" | In constructor set quickContactService.setDisplay(false) | Refactor intersectionObserver.
3. app-routing.module.ts: In "contact-us" route, set data: {hasQuickContact: false}.
4. app.component.ts: Updated checks for <quick-contact> | Added public showQuickContact: boolean; to be initialized by layoutService.hasQuickContact.
2023-07-06 15:28:53 +03:00
Konstantinos Triantafyllou cab7d72843 Rename FAQs page to Support and add contact-us button and How it works to about and Change the menu items in Navbar. 2023-07-06 13:45:12 +03:00
Konstantinos Triantafyllou 896e14fd7e Update before deploy 2023-06-28 11:49:22 +03:00
Konstantinos Triantafyllou d7af18fc7e Resolved Monitor release 16th May 2023 #8 2023-05-16 17:31:54 +03:00
Konstantinos Triantafyllou a9d452ea89 Update before deploy 2023-05-16 17:21:22 +03:00
Konstantinos Triantafyllou da8bbd3701 Rename OpenAIRE Research graph in to OpenAIRE Graph 2023-05-15 17:24:09 +03:00
Konstantinos Triantafyllou ef46a72d3f Merge remote-tracking branch 'origin/develop' 2023-05-09 13:12:49 +03:00
Konstantinos Triantafyllou d8f94cfd18 Update library 2023-05-09 13:11:42 +03:00
Konstantinos Triantafyllou 32ea650c6f Fix IntersectionObserver error for server 2023-05-09 12:26:15 +03:00
Konstantina Galouni 23131ac2fd [Monitor & Library | develop]: [Bug fix] Show quick contact button when not in contacts us and not intersecting either with contact us section (home page), nor with bottom.
1. layout.service.ts: Initialize hasQuickContactSubject to false (Don't ever show it unless it should be there).
2. quick-contact.service.ts: Initialize display to false (Assume it is intersecting, until it is proved it is not).
3. app.component.ts: Updated checks for <quick-contact> and added public bottomNotIntersecting: boolean; and public displayQuickContact: boolean;
2023-05-08 17:50:39 +03:00
Konstantinos Triantafyllou 2db3855cbb Update Uikit to version 3.13.10. Update library 2023-05-02 18:10:40 +03:00
Konstantinos Triantafyllou 3fba042c95 Update UIKit to version 3.13.0 2023-04-25 17:10:09 +03:00
Konstantinos Triantafyllou 20eadf6ab6 Sync library 2023-04-24 13:48:04 +03:00
Konstantinos Triantafyllou 24762681f3 Fix quick contact curators images. 2023-04-24 13:46:46 +03:00
Konstantinos Triantafyllou 1c7a2e6bd4 Update library 2023-04-19 17:32:25 +03:00
Konstantinos Triantafyllou 8443c25ecd Update libraries before deploy 2023-04-19 16:39:53 +03:00
Konstantinos Triantafyllou 1bd9bbb923 Merge pull request 'Update before Production April Release' (#5) from develop into master
Reviewed-on: #5
2023-04-19 15:38:54 +02:00
Konstantinos Triantafyllou 1e712a365d Fix image position for curators 2023-04-06 15:30:27 +03:00
Konstantinos Triantafyllou 59fa0150b8 Add curators' photos in contact-us section in home page 2023-04-06 15:22:50 +03:00
Konstantinos Triantafyllou 33fa38c3d4 Update before beta deploy 2023-04-05 12:59:07 +03:00
Konstantinos Triantafyllou 1b9cffc198 Merge pull request 'Latest Changes' (#3) from develop into master
Reviewed-on: #3
2023-03-28 14:57:18 +02:00
Konstantinos Triantafyllou af3dfcc6d1 Update libraries 2023-03-28 15:55:42 +03:00
Konstantinos Triantafyllou 6312a0db19 Update libraries before beta deploy 2023-03-27 18:01:23 +03:00
Konstantinos Triantafyllou 5c924393ba 1. Update UIkit to 3.12.2. 2. Add home in mobile menu. 3. Fix overflow: clip if not supported in how-it-works. 4. Add padding in stakeholder logo cards 2023-03-22 17:16:14 +02:00
Konstantinos Triantafyllou 745a4bab10 Update submodules 2023-03-22 00:53:12 +02:00
Konstantinos Triantafyllou cce347981f Merge pull request 'Complete mobile redesign' (#1) from develop into master
Reviewed-on: #1
2023-03-21 19:20:49 +01:00
Konstantinos Triantafyllou b83105355a Update submodules 2023-03-21 19:47:49 +02:00
Konstantinos Triantafyllou fc99f97397 Fix some paddings in slider tabs in home and how it works 2023-03-21 19:42:03 +02:00
Alex Martzios 01b153e1f7 fix text issue in 'About' page, update submodules 2023-03-17 11:49:09 +02:00
Konstantinos Triantafyllou 1c634dc0d7 Change table image in scrolling section of home page 2023-01-16 10:30:32 +02:00
Konstantinos Triantafyllou b73363206a Update libraries before beta deploy 2023-01-04 11:57:55 +02:00
Alex Martzios c10d316b35 fix an error in homepage, update submodules 2022-12-12 11:27:40 +02:00
Konstantinos Triantafyllou 9f6409ecf3 Home: Fix browse Dashboards sections in mobile 2022-12-09 18:19:14 +02:00
Alex Martzios d3a390802a minor tweak for homepage's hero section width on tablet view 2022-12-08 11:56:58 +02:00
Alex Martzios 017a38c667 reduce faq's page title, tweaks for homepage's scrolling section on mobile view, update submodules 2022-12-08 11:52:26 +02:00
Konstantinos Triantafyllou e5b7d4b5ba Merge branch 'mobile' of code-repo.d4science.org:MaDgIK/monitor into mobile 2022-12-07 16:58:22 +02:00
Konstantinos Triantafyllou ffabb68501 Search stakeholders apply mobile changes 2022-12-07 16:58:11 +02:00
Alex Martzios 2bcbfa2ac2 changes for scrolling-text section in homepage 2022-12-06 15:19:02 +02:00
Alex Martzios 2ea6834f50 progress on mobile pages, update submodules 2022-12-06 09:38:08 +02:00
Konstantinos Triantafyllou 44999ab06d Change get started button on mobile 2022-11-30 17:53:33 +02:00
Alex Martzios 289694288b start on mobile pages 2022-11-28 10:59:14 +02:00
Konstantinos Triantafyllou 751953e097 Some minor changes in how it works page 2022-11-28 10:54:33 +02:00
Konstantina Galouni 20f1752173 [Monitor]: app.component.ts: [Bug fix] Added check to create IntersectionObserver only on client side | Updated libraries. 2022-11-21 15:54:44 +02:00
Alex Martzios 395a6d6c78 tweak options for footer observer 2022-11-01 13:36:59 +02:00
Konstantinos Triantafyllou b992ade762 Move graph sticky placeholder display:none in common-assets 2022-11-01 13:27:16 +02:00
Alex Martzios 4c628921ae remove help button when reaching footer by scroll, update submodule 2022-11-01 12:20:03 +02:00
Konstantinos Triantafyllou 62c5c26dc2 How it works: Add some padding top in tabs and some padding in you-we content 2022-11-01 00:31:26 +02:00
Alex Martzios 73b45710c7 help button: release at the bottom, update submodules 2022-10-31 14:33:18 +02:00
Konstantinos Triantafyllou 3e34af709b How it works: Release tabs when reach bottom. Remove divider from you-we while it is sticky. Align tabs with main-content 2022-10-31 13:32:27 +02:00
Konstantinos Triantafyllou b7e97785bd How it works: Hero section add class for width of description 2022-10-27 01:21:08 +03:00
Konstantinos Triantafyllou fef9ce5d4a How it works: Add uk-first-column in you column to avoid divider on the left. 2022-10-27 01:08:42 +03:00
Konstantinos Triantafyllou b99cc07ccc Add you-we component in order to create a sticky behaviour 2022-10-26 18:25:50 +03:00
Alex Martzios bccfd41875 add icon aseets in cards - about page 2022-10-25 11:38:20 +03:00
Konstantinos Triantafyllou 601dccbedc Delete learn-how. Add new about route with how-it-works and faqs (Add them also in menu). Change search-stakeholder background to muted. 2022-10-24 16:38:21 +03:00
Alex Martzios b2e8ceb04e update submodule 2022-10-24 14:04:08 +03:00
Alex Martzios 94b6c6f387 about page redesign, add methodological-approach page, update submodules 2022-10-24 13:18:27 +03:00
Konstantinos Triantafyllou 90ab38e76b Merge from master 2022-10-23 01:52:55 +03:00
Konstantinos Triantafyllou fb8c7c8ab6 Change faws with helptext. Change dev apis urls. Update libraries 2022-10-21 17:11:16 +03:00
Alex Martzios 46ca9b68dd changes for faq page, terminology page and update submodules 2022-10-17 16:33:31 +03:00
Konstantinos Triantafyllou a12c96384b Merge from master and update submodules 2022-10-12 16:59:11 +03:00
Alex Martzios 5ff777b973 change fixed contact button text to "Help", update submodules 2022-10-12 15:34:47 +03:00
Konstantinos Triantafyllou 2f01b26314 Merge from master 2022-10-11 09:43:20 +03:00
Alex Martzios d5016fdf40 create FAQ page, add isDevelopmentGuard to it, change to new uoa-monitor-service duffy port 2022-10-10 16:57:46 +03:00
Konstantina Galouni de9fc95064 Merge remote-tracking branch 'origin/angular-13' into angular-14 2022-10-05 18:08:52 +03:00
Konstantina Galouni 93cbfb2004 Updating openaireLibrary & openaire-theme libraries 2022-10-05 18:08:35 +03:00
Konstantina Galouni 6bfdd5df80 Merge remote-tracking branch 'origin/angular-12' into angular-13 2022-10-05 18:06:16 +03:00
Konstantina Galouni 23f81162c9 Updating libraries 2022-10-05 18:06:00 +03:00
Konstantina Galouni 7149b8a955 Merge remote-tracking branch 'origin/master' into angular-12 2022-10-05 18:05:17 +03:00
Konstantina Galouni 9be1c59b8e Updating libraries 2022-10-05 18:05:06 +03:00
Konstantina Galouni d9f72b77d0 Updating libraries 2022-10-05 18:03:19 +03:00
Konstantinos Triantafyllou fe5f08e1cb Update submodules and remove some development logs 2022-10-05 16:42:19 +03:00
Alex Martzios 3aa3da9b21 homepage - scrolling dark section: change the layout to match explore and connect and enlarge the image 2022-10-04 10:44:44 +03:00
Konstantinos Triantafyllou 4a42fe3163 Disable inline critical css in angular.json 2022-10-03 13:34:22 +03:00
Konstantinos Triantafyllou 41848a1786 minor commit 2022-10-03 12:25:55 +03:00
Konstantinos Triantafyllou 9ff6d54aeb Disable inline critical css in server.ts 2022-10-03 12:25:00 +03:00
Alex Martzios 635f75333d move monitor stakeholder type colors to openaire-theme color.less file and update submodules 2022-10-03 11:54:50 +03:00
Alex Martzios f1ad7abb0e move monitor stakeholder type colors to openaire-theme color.less file and update submodules 2022-09-29 12:10:11 +03:00
Konstantinos Triantafyllou 63703cd057 Update library before beta deployment 2022-09-28 12:19:27 +03:00
Alex Martzios cc9e8e04e3 Update recaptcha to version 10.0.0 2022-09-26 17:03:10 +03:00
Konstantinos Triantafyllou 31caceb5c9 Add .angular folder in .gitignore and package.json after build clean script 2022-09-23 15:42:24 +03:00
Konstantinos Triantafyllou 64be2f7cac Update express-engine to version 14 2022-09-23 15:38:18 +03:00
Konstantinos Triantafyllou c3a9ef5438 Update material to version 14 2022-09-23 15:37:42 +03:00
Konstantinos Triantafyllou c984fb85bb Update angular core and cli to version 14 2022-09-23 15:36:10 +03:00
Konstantinos Triantafyllou 974a06ef5f Update express-engine to version 13 2022-09-23 15:33:56 +03:00
Konstantinos Triantafyllou 3dcf19c48d Update material and submodules to version 13 2022-09-23 15:31:13 +03:00
Konstantinos Triantafyllou 37ffa2ff6b Update core and cli to version 13 2022-09-23 15:29:25 +03:00
Konstantinos Triantafyllou ec38dab219 Update express-engine to version 12 2022-09-23 15:01:31 +03:00
Konstantinos Triantafyllou 70f4f5c14c Update material to version 12 2022-09-23 14:58:15 +03:00
Konstantinos Triantafyllou e82c319465 Update angular core and cli to version 12 2022-09-23 14:56:35 +03:00
Konstantinos Triantafyllou b7e9c76655 Update submodules before angular upgrade 2022-09-23 14:52:20 +03:00
Konstantinos Triantafyllou bc0777fecf Update modules before deployment. Remove environemnt condition for resources 2022-09-21 12:07:13 +03:00
Konstantina Galouni 550411b98a [Monitor | new-theme]: app.component.ts: Removed deprecated RootMenuItem and used MenuItem instead. 2022-09-21 00:08:20 +03:00
Alex Martzios 52b38d4a85 update submodules 2022-09-13 09:25:18 +03:00
Konstantinos Triantafyllou 3ae939aa31 Home page alignments 2022-09-06 17:07:56 +03:00
Konstantinos Triantafyllou 6738e0f938 Update library before beta deploy 2022-08-31 13:00:15 +03:00
Konstantinos Triantafyllou 21cdd4a55d Some text fixes in home page and alignments in about. Change indicators route configuration 2022-08-29 16:31:29 +03:00
Alex Martzios b0610bbfc3 update submodule 2022-08-29 15:23:42 +03:00
Alex Martzios 0e6007c549 change home page texts with Ioanna's suggestions from the doc 2022-08-25 15:06:05 +03:00
Konstantinos Triantafyllou ffd2122f93 Add indicator themes page 2022-08-05 15:51:13 +03:00
Konstantinos Triantafyllou 232ffc7380 Change order in menu. Delete deleted properties 2022-08-04 18:03:33 +03:00
Konstantinos Triantafyllou 2421642df8 Add resources in menu. Add methodology and indicators page. 2022-08-02 23:34:59 +03:00
Konstantinos Triantafyllou d03a7c3129 Update before beta deployment 2022-07-25 12:16:16 +03:00
Konstantinos Triantafyllou 2eed514eb4 Import specific less files from libray instead of _import 2022-07-18 12:23:41 +03:00
Konstantinos Triantafyllou 9f3c4113b3 Import library less. Rename all component css to less 2022-07-18 00:46:13 +03:00
Konstantinos Triantafyllou 3059aa0705 Update for deploy 2022-07-13 16:29:12 +03:00
Konstantinos Triantafyllou 5c68886610 Change link to manage profiles to _self. Update libraries before deployment 2022-07-12 12:13:28 +03:00
Alex Martzios f074b43221 update openaireLibrary 2022-06-28 09:55:57 +03:00
Konstantinos Triantafyllou 42dba753b3 Remove openaire.css from import 2022-06-27 13:24:57 +03:00
Konstantinos Triantafyllou eebea260b1 Get material.scss from library-css 2022-06-26 23:36:49 +03:00
Konstantinos Triantafyllou 320731de78 Get Started: Add some margins between numbers and first section. 2022-06-21 18:30:37 +03:00
Konstantinos Triantafyllou f0ef0dd364 Set up less theme. 2022-06-20 18:01:19 +03:00
Konstantinos Triantafyllou 8dc8d6ff4b Fix scroll section text start position. Add modal container 2022-06-20 15:47:49 +03:00
Konstantina Galouni 7533c9693b [Monitor | new-theme]: home.component.html & learn-how.component.html: Replaced class="graph" with class="text-graph". 2022-06-15 10:48:29 +03:00
Alex Martzios 4665bd9f22 changes for adding stakeholder entities as enum + update openaireLibrary repo 2022-06-09 11:21:37 +03:00
Konstantinos Triantafyllou 12e5c38625 Delete metricsAPIURL from properties 2022-06-08 15:02:11 +03:00
Alex Martzios 007358ae58 update openaireLibrary 2022-06-08 14:02:03 +03:00
Alex Martzios 8b55f2273d add StakeholderEntities as enumeration 2022-06-08 14:01:10 +03:00
Konstantinos Triantafyllou 804933a148 Change about route to /about and redirect the old one route. 2022-06-06 12:23:03 +03:00
Konstantinos Triantafyllou 2ed6117c6f Chnage breadcrumbs alignments 2022-06-03 13:38:34 +03:00
Konstantinos Triantafyllou f2a8eca3c4 Make some alignments in get-started page base on mocks 2022-06-03 12:45:14 +03:00
Konstantinos Triantafyllou f55ece6070 Quick Contact: Add images dynamically. Disable overflow in quick contact and browse-stakeholder modals. 2022-06-02 18:15:22 +03:00
Konstantinos Triantafyllou 11647a1e37 Change avatars position in contact us section. Update libraries 2022-05-27 12:25:26 +03:00
Konstantinos Triantafyllou 7853226c67 Add new avatar images for contact us 2022-05-20 16:38:46 +03:00
Alex Martzios 7a8eeece09 add errorLink property in all env files 2022-05-11 13:08:56 +03:00
Konstantinos Triantafyllou effaccacb7 Remove breaks from monitor pages. Rename entities base on enumaration 2022-05-09 13:39:45 +03:00
Alex Martzios dde0c08e87 add placeholder img 2022-05-06 16:23:10 +03:00
Konstantinos Triantafyllou 002c34a806 Fix url to datasets 2022-05-06 11:32:38 +03:00
Konstantinos Triantafyllou e6a75b6ce2 Add condition for observer to avoid server error 2022-05-06 10:53:20 +03:00
Konstantinos Triantafyllou b4ce9d620d Home scroll section change opacity breakpoint from 80% to 99% 2022-05-05 12:27:27 +03:00
Konstantinos Triantafyllou d54b3d545d Add graph link in home page scroll section 2022-05-05 12:22:17 +03:00
Konstantinos Triantafyllou cfaffcc271 Add mutation observer to handle active text in scrolling section 2022-05-05 10:44:00 +03:00
Konstantinos Triantafyllou eaaa4b863c Add images of curators in contact-us 2022-05-04 17:18:45 +03:00
Alex Martzios 225d7b6e6c update title on get-started page 2022-04-20 10:41:48 +03:00
Konstantinos Triantafyllou 88743bad63 Change secondary button background 2022-04-19 00:07:00 +03:00
Konstantinos Triantafyllou b53beeb326 Change all uk-button-text to uk-button uk-button-text. Change 1,2 svg for get-started and remove background. Home page fix section with open data 2022-04-16 01:37:44 +03:00
Alex Martzios 5eca45f0b7 Rename uk-text-primary-gradient to uk-text-background 2022-04-14 12:55:40 +03:00
Alex Martzios 8a39b76fb9 tweak graph-section background size 2022-04-13 14:38:43 +03:00
Alex Martzios ece54ce984 add background side-image and text on homepage 2022-04-13 14:27:51 +03:00
Konstantinos Triantafyllou bb02a9efee 1. Remove image from contact. 2. Change tabs in home page with uikit 2022-04-07 18:25:20 +03:00
Konstantina Galouni e875e04d9c Merge branch 'new-theme' of code-repo.d4science.org:MaDgIK/monitor into new-theme 2022-04-05 16:54:06 +03:00
Konstantina Galouni 2b9e59511c [Monitor | new-theme]: home.component.html: Added uk-grid and uk-sticky classes (not only attributes). 2022-04-05 16:53:49 +03:00
Alex Martzios 00f957b143 fix for select input options on get-started page 2022-04-05 13:18:32 +03:00
Konstantina Galouni aa16938bbc [Monitor | new-theme]: home.component.html: Removed usage of <section-scroll> component and use uikit sticky parallax classes only for the scrolling effect in the viewport. | monitor-custom.css: Commented background-size in monitor-dark-logo-background class. 2022-03-30 18:53:39 +03:00
Alex Martzios 9b9508d9a6 update submodules 2022-03-28 16:07:47 +03:00
Konstantinos Triantafyllou bd60ee025f Add new uikit 2022-03-17 10:12:19 +02:00
Konstantinos Triantafyllou 219660916a Add sticky animation in menu 2022-03-17 00:15:49 +02:00
Alex Martzios 01ae9e239f update monitor content based on Natalia's suggestions 2022-03-16 16:07:39 +02:00
Konstantinos Triantafyllou 6c4326d868 Add logo as svg. Update libraries 2022-03-16 14:24:53 +02:00
Konstantinos Triantafyllou 0a7b6c70c6 Add new masks. Change logo from svg to png 2022-03-14 19:17:49 +02:00
Konstantinos Triantafyllou 484e8491c1 Change monitor logo. Update libraries 2022-03-08 21:15:08 +02:00
Konstantinos Triantafyllou 806656c079 Make get-started button small 2022-03-04 17:51:22 +02:00
Konstantinos Triantafyllou c597c5e0c5 Change icons in get-started to outline. Add get-started button in navbar 2022-03-03 18:24:17 +02:00
Alex Martzios 9ae4bf6f82 add background color for get-started hero section 2022-03-03 15:04:02 +02:00
Alex Martzios 965ea8afb6 update hero section of get-started page 2022-03-03 14:32:00 +02:00
Alex Martzios 51e40a6ab0 Add get-started assets and scrollspy on all pages 2022-03-03 08:33:56 +02:00
Konstantinos Triantafyllou 4554febac9 Update library 2022-03-02 12:28:15 +02:00
Konstantinos Triantafyllou ed8ddb54ed Add scrollspy in all pages except get-started 2022-03-01 21:11:35 +02:00
Konstantinos Triantafyllou 0bdeea2a25 Change Browse to Browse Dashboards, remove contact us from menu 2022-02-28 18:05:16 +02:00
Konstantinos Triantafyllou 9083d47bdf Add contact in get-started 2022-02-28 14:39:50 +02:00
Konstantinos Triantafyllou 9524ad1b88 Fix show quick contact behaviour. Add contact methods in app component 2022-02-24 18:43:20 +02:00
Konstantinos Triantafyllou 45ba9517e6 Update library and openaire-theme. Add rules for secondary button and background. Home: Make Features section responsive 2022-02-23 12:42:49 +02:00
Alex Martzios 4491129142 update openaireLibrary 2022-02-23 10:47:06 +02:00
Konstantinos Triantafyllou aca976da06 Add color coding in stakeholders. Reduce breadcrumbs margin from top. Some UI changes in home 2022-02-23 00:39:14 +02:00
Alex Martzios f0388a8578 add quick-contact component on the app 2022-02-22 16:40:33 +02:00
Konstantinos Triantafyllou cbddeddb93 Fix a bug with stakeholders slider in home page 2022-02-21 17:31:15 +02:00
Konstantinos Triantafyllou f46f7d5278 Add assets in home page and contact-us. Add color coding in browse stakeholders 2022-02-21 16:37:12 +02:00
Alex Martzios 5052e40d59 create get-started page 2022-02-21 15:06:18 +02:00
Alex Martzios 3293249aac add assets for about page 2022-02-21 12:11:32 +02:00
Konstantinos Triantafyllou 3b1372c576 Finish my-stakeholders and browse-stakeholder. Update library, openaire-theme and assets 2022-02-17 17:31:58 +02:00
Alex Martzios 98bbd3625c add slider for stakeholders list - 6 per slide 2022-02-17 14:44:23 +02:00
Konstantinos Triantafyllou 02206c27c7 Add new my-stakeholders page. Create a browse-stakeholder component. Add property for after login redirect 2022-02-16 18:19:35 +02:00
Konstantinos Triantafyllou b49efdbe27 Change numbers in home and about with css class instead of gradient of icons. 2022-02-16 12:03:03 +02:00
Alex Martzios c5934683b0 change for gradient color in text 2022-02-16 11:23:52 +02:00
Konstantinos Triantafyllou 52b88066d9 Add class for monitor-gradient. Add numbers in learn-how steps. 2022-02-15 16:28:07 +02:00
Alex Martzios ba2218f6bd progress on monitor homepage re-design 2022-02-15 14:49:41 +02:00
Konstantinos Triantafyllou c310891954 Update library 2022-02-14 18:06:50 +02:00
Konstantinos Triantafyllou e07c59e1f9 Change monitor search dashboards page 2022-02-14 18:05:33 +02:00
Alex Martzios ad98410f16 about page re-design - need to work on some more details 2022-02-14 15:32:33 +02:00
Konstantinos Triantafyllou 839763ae5c Comment old css in monitor-custom.css. Change contact-us base on new mocks. 2022-02-11 15:37:21 +02:00
Konstantinos Triantafyllou 7285aa24d1 Import new-theme 2022-02-11 13:22:52 +02:00
Konstantinos Triantafyllou dac511ccaf Add openaire-theme 2022-02-11 13:20:22 +02:00
98 changed files with 3829 additions and 1352 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
.angular/
node_modules/
dist/
.idea/

3
.gitmodules vendored
View File

@ -4,3 +4,6 @@
[submodule "src/assets/common-assets"]
path = src/assets/common-assets
url = gitea@code-repo.d4science.org:MaDgIK/openaire-assets.git
[submodule "src/assets/openaire-theme"]
path = src/assets/openaire-theme
url = gitea@code-repo.d4science.org:MaDgIK/openaire-theme.git

View File

@ -1,6 +1,6 @@
# Monitor
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.3.10 and has been updated to 11.2.14.
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.3.10 and has been updated to 16.2.4.
## Install packages

View File

@ -22,7 +22,6 @@
"skipTests": true
},
"@schematics/angular:module": {
"skipTests": true
},
"@schematics/angular:pipe": {
"skipTests": true
@ -35,7 +34,6 @@
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"aot": true,
"outputPath": "dist/monitor/browser",
"index": "src/index.html",
"main": "src/main.ts",
@ -47,23 +45,34 @@
"src/sitemap.xml"
],
"styles": [
"src/styles.css",
"src/material.scss"
"src/styles.less",
"src/assets/common-assets/library-css/material.scss"
],
"scripts": [
"src/assets/common-assets/common/jquery.js",
"src/assets/common-assets/common/uikit.min.js",
"src/assets/common-assets/common/uikit-icons.min.js",
"node_modules/uikit/dist/js/uikit.min.js",
"node_modules/uikit/dist/js/uikit-icons.min.js",
"node_modules/jquery/dist/jquery.js"
]
],
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": false,
"sourceMap": true,
"optimization": false,
"namedChunks": true
},
"configurations": {
"development": {
"optimization": true,
"optimization": {
"scripts": true,
"styles": {
"minify": true,
"inlineCritical": false
},
"fonts": true
},
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
@ -86,11 +95,17 @@
"with": "src/environments/environment.beta.ts"
}
],
"optimization": true,
"optimization": {
"scripts": true,
"styles": {
"minify": true,
"inlineCritical": false
},
"fonts": true
},
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
@ -126,11 +141,17 @@
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"optimization": {
"scripts": true,
"styles": {
"minify": true,
"inlineCritical": false
},
"fonts": true
},
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
@ -146,7 +167,8 @@
}
]
}
}
},
"defaultConfiguration": ""
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
@ -181,30 +203,23 @@
]
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"src/tsconfig.app.json",
"src/tsconfig.spec.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"server": {
"builder": "@angular-devkit/build-angular:server",
"options": {
"outputPath": "dist/monitor/server",
"main": "server.ts",
"tsConfig": "src/tsconfig.server.json"
"tsConfig": "src/tsconfig.server.json",
"sourceMap": true,
"optimization": false,
"buildOptimizer": false
},
"configurations": {
"development": {
"outputHashing": "media",
"sourceMap": false,
"optimization": true
"optimization": true,
"vendorChunk": true,
"buildOptimizer": true
},
"beta": {
"outputHashing": "media",
@ -215,7 +230,8 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
},
"production": {
"outputHashing": "media",
@ -226,9 +242,11 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
}
}
},
"defaultConfiguration": ""
},
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server",
@ -274,18 +292,8 @@
"devServerTarget": "monitor:serve:production"
}
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "monitor"
}
}

View File

@ -1,13 +1,13 @@
{
"name": "monitor",
"version": "0.0.0",
"version": "1.0.0",
"scripts": {
"ng": "ng",
"start": " ng serve --port 4500 --disable-host-check --host 0.0.0.0",
"build": "ng build",
"build-dev": "ng build --configuration=development",
"build-beta": "ng build --configuration=beta",
"build-prod": "ng build --prod",
"build-prod": "ng build --configuration production",
"webpack-bundle-analyzer": "ng build --stats-json && webpack-bundle-analyzer dist/monitor/browser/stats-es2015.json --host 0.0.0.0",
"test": "ng test",
"e2e": "ng e2e",
@ -17,44 +17,45 @@
"build:ssr-beta": "npm run build-beta && ng run monitor:server:beta",
"build:ssr-prod": "npm run build-prod && ng run monitor:server:production",
"prerender": "ng run monitor:prerender",
"after-build-clean": "rm -rf dist/monitor/browser/assets/common-assets/.git/ src/app/openaireLibrary/.git node_modules src/assets/common-assets/.git/ .git/"
"after-build-clean": "rm -rf dist/monitor/browser/assets/common-assets/.git/ src/app/openaireLibrary/.git node_modules .angular src/assets/common-assets/.git/ .git/"
},
"private": true,
"dependencies": {
"@angular/animations": "~11.2.14",
"@angular/cdk": "^11.2.13",
"@angular/common": "~11.2.14",
"@angular/compiler": "~11.2.14",
"@angular/core": "~11.2.14",
"@angular/forms": "~11.2.14",
"@angular/localize": "^11.2.14",
"@angular/material": "^11.2.13",
"@angular/platform-browser": "~11.2.14",
"@angular/platform-browser-dynamic": "~11.2.14",
"@angular/platform-server": "~11.2.14",
"@angular/router": "~11.2.14",
"@nguniversal/express-engine": "^11.2.1",
"@angular/animations": "^16.1.8",
"@angular/cdk": "^16.1.7",
"@angular/common": "^16.1.8",
"@angular/compiler": "^16.1.8",
"@angular/core": "^16.1.8",
"@angular/forms": "^16.1.8",
"@angular/localize": "^16.1.8",
"@angular/material": "^16.1.7",
"@angular/platform-browser": "^16.1.8",
"@angular/platform-browser-dynamic": "^16.1.8",
"@angular/platform-server": "^16.1.8",
"@angular/router": "^16.1.8",
"@nguniversal/express-engine": "^16.1.1",
"clipboard": "^1.5.16",
"core-js": "^2.5.4",
"express": "^4.15.2",
"jquery": "^3.4.1",
"ng-recaptcha": "^7.0.1",
"ng-recaptcha": "^12.0.2",
"rxjs": "^6.5.1",
"ts-md5": "^1.2.0",
"tslib": "^2.0.0",
"zone.js": "~0.10.2"
"uikit": "3.16.24",
"zone.js": "~0.13.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "~0.1102.14",
"@angular/cli": "~11.2.14",
"@angular/compiler-cli": "~11.2.14",
"@angular/language-service": "~11.2.14",
"@nguniversal/builders": "^11.2.1",
"@types/express": "^4.17.0",
"@angular-devkit/build-angular": "^16.1.7",
"@angular/cli": "^16.1.7",
"@angular/compiler-cli": "^16.1.8",
"@angular/language-service": "^16.1.8",
"@nguniversal/builders": "^16.1.1",
"@types/compression": "^1.7.0",
"@types/node": "^12.11.1",
"@types/express": "^4.17.0",
"@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^16.18.50",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.8.0",
"jasmine-spec-reporter": "~5.0.0",
@ -65,6 +66,6 @@
"karma-jasmine-html-reporter": "^1.6.0",
"protractor": "~7.0.0",
"ts-node": "~7.0.0",
"typescript": "~4.0.7"
"typescript": "~4.9.5"
}
}

View File

@ -1,4 +1,4 @@
import 'zone.js/dist/zone-node';
import 'zone.js/node';
import { ngExpressEngine } from '@nguniversal/express-engine';
import * as express from 'express';
@ -20,6 +20,7 @@ export function app() {
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
server.engine('html', ngExpressEngine({
bootstrap: AppServerModule,
inlineCriticalCss: false
}));
server.set('view engine', 'html');

View File

@ -0,0 +1,5 @@
@import "~src/assets/openaire-theme/less/_import-variables";
.custom-translate-bottom-left {
transform: translate(-20%, 20%);
}

View File

@ -0,0 +1,667 @@
import {ChangeDetectorRef, Component} from "@angular/core";
import {Router} from '@angular/router';
import {Meta, Title} from '@angular/platform-browser';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {Subscriber} from "rxjs";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {properties} from "../../environments/environment";
import {StakeholderEntities} from "../openaireLibrary/monitor/entities/stakeholder";
@Component({
selector: 'about',
template: `
<div class="uk-visible@m">
<div class="uk-position-relative">
<div class="uk-background-muted">
<div class="uk-container uk-container-large uk-section uk-section-small">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
<div class="uk-flex uk-flex-column uk-flex-center uk-margin-bottom" uk-scrollspy-class>
<h1 class="uk-margin-medium-top" uk-scrollspy-class>How it works<span class="uk-text-primary">.</span></h1>
<div class="uk-text-large uk-width-1-2@l uk-width-2-3" uk-scrollspy-class>
Join the OpenAIRE Monitor service and we will create for you a dashboard to track, understand and
position your organization's research activities and their impact, discover and evaluate Open Science
trends for your organization and make data-driven decisions. Here's how it works.
</div>
<div class="uk-margin-medium-top uk-margin-small-bottom" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get Started</a>
</div>
</div>
</div>
</div>
<div class="uk-padding"></div>
<img class="uk-position-bottom-right uk-width-1-3@xl uk-width-1-2@l"
src="assets/monitor-assets/about/hero.svg" loading="lazy">
</div>
<div class="uk-section uk-section-small">
<div class="uk-sticky uk-blur-background uk-visible@l" [attr.uk-sticky]="shouldSticky?'':null" [attr.offset]="offset">
<div class="uk-container">
<div class="uk-padding uk-padding-remove-right uk-padding-remove-bottom">
<slider-tabs flexPosition="center" customClass="uk-text-large" connect="#tabs-content">
<slider-tab *ngFor="let section of sections; let i = index" [tabTitle]="section"
[tabId]="section"></slider-tab>
</slider-tabs>
</div>
</div>
</div>
<ul id="tabs-content" class="uk-switcher uk-margin-large-bottom">
<li>
<you-we [type]="stakeholderEntities.FUNDER" id="funder">
<ng-container you>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1a</span>
<p class="uk-text-large uk-margin-xsmall-top">You provide Information about your funded projects and
<a href="https://www.openaire.eu/funders-how-to-join-guide" target="_blank">join OpenAIRE</a>.</p>
<p>All information is exchanged under confidential agreements and we only make public what you agree
on.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-left custom-translate-bottom-left"
src="assets/monitor-assets/about/icon1.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 2a</span>
<p class="uk-text-large uk-margin-xsmall-top">You validate the results and approve for them to be shown
on the <a href="https://explore.openaire.eu" target="_blank">Explore</a> portal.</p>
<p>Examine your dashboard and the showcased information to ensure you are satisfied with what you
see.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 3a</span>
<p class="uk-text-large uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
us</p>
<ul class="uk-list uk-list-disc">
<li>to understand any gaps and deviations within the dashboard</li>
<li>to verify the data integrity</li>
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
</ul>
</div>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-medium-bottom">
<span class="uk-text-primary">Step 4a</span>
<p class="uk-text-large uk-margin-xsmall-top">Customise your dashboard and make your own profile.</p>
<p>Select the <a href="https://monitor.openaire.eu/indicators/funder" target="_blank">metrics</a> of
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-left" src="assets/monitor-assets/about/icon3.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
<span class="uk-text-primary">Step 5a</span>
<p class="uk-text-large uk-margin-xsmall-top">Select your team</p>
<p>And make them collaborators of the service.</p>
</div>
</ng-container>
<ng-container we>
<div class="uk-card uk-card-default uk-overflow-hidden uk-position-relative uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1b</span>
<p class="uk-text-large uk-margin-xsmall-top">We ingest your project metadata and mine the <a
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a>.
</p>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 2b</span>
<p class="uk-text-large uk-margin-xsmall-top">We present the results to you on our Beta portal.</p>
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
your dashboard.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 3b</span>
<p class="uk-text-large uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
advanced composite indicators.</p>
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
funded research activities.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 4b</span>
<p class="uk-text-large uk-margin-xsmall-top">We refine until we are happy with the results.</p>
<p>We present your dashboard to you.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
<span class="uk-text-primary">Step 5b</span>
<p class="uk-text-large uk-margin-xsmall-top">Notify you about new metrics and indicators</p>
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
</div>
</ng-container>
</you-we>
</li>
<li>
<you-we [type]="stakeholderEntities.RI" id="ri">
<ng-container you>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1a</span>
<p class="uk-text-large uk-margin-xsmall-top">You state your interest in having a research initiative
dashboard.</p>
<p>All information is exchanged under confidential agreements and we only make public what you agree
on.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-left custom-translate-bottom-left"
src="assets/monitor-assets/about/icon1.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 2a</span>
<p class="uk-text-large uk-margin-xsmall-top">You configure the criteria to identify the research
products that you want to be accounted for.</p>
<p>You use the administration dashboard we created for you. If this is not enough, you give us input for
the implementation of a customised full-text mining algorithm.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 3a</span>
<p class="uk-text-large uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
us</p>
<ul class="uk-list uk-list-disc">
<li>to understand any gaps and deviations within the dashboard</li>
<li>to verify the data integrity</li>
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
</ul>
</div>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-medium-bottom">
<span class="uk-text-primary">Step 4a</span>
<p class="uk-text-large uk-margin-xsmall-top">Customise your dashboard and make your own profile.</p>
<p>Select the <a href="https://monitor.openaire.eu/indicators/ri" target="_blank">metrics</a> of
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-left" src="assets/monitor-assets/about/icon3.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
<span class="uk-text-primary">Step 5a</span>
<p class="uk-text-large uk-margin-xsmall-top">Select your team</p>
<p>And make them collaborators of the service.</p>
</div>
</ng-container>
<ng-container we>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1b</span>
<p class="uk-text-large uk-margin-xsmall-top">We set up an administration dashboard that you can use
to specify which research products of the <a href="https://graph.openaire.eu" target="_blank"
class="text-graph">OpenAIRE Graph</a> are
relevant for you.</p>
<p>If needed, we develop a customized full-text mining algorithm to identify your publications.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 2b</span>
<p class="uk-text-large uk-margin-xsmall-top">We present the results to you on our Beta portal.</p>
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
your dashboard.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 3b</span>
<p class="uk-text-large uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
advanced composite indicators.</p>
<p>Aligned with the Open Science principles and following an evidence-based approach.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 4b</span>
<p class="uk-text-large uk-margin-xsmall-top">We refine until we are happy with the results.</p>
<p>We present your dashboard to you.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
<span class="uk-text-primary">Step 5b</span>
<p class="uk-text-large uk-margin-xsmall-top">Notify you about new metrics and indicators</p>
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
</div>
</ng-container>
</you-we>
</li>
<li>
<!-- RESEARCH INSTITUTION -->
<you-we [type]="stakeholderEntities.ORGANIZATION" id="organizations">
<ng-container you>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1a</span>
<p class="uk-text-large uk-margin-xsmall-top">You state your interest in having an institutional
dashboard for your institution.</p>
<p>All information is exchanged under confidential agreements and we only make public what you agree
on.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-left custom-translate-bottom-left"
src="assets/monitor-assets/about/icon1.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 2a</span>
<p class="uk-text-large uk-margin-xsmall-top">You validate and approve the results.</p>
<p>You examine your dashboard and the showcased information to ensure you are satisfied with what you
see.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 3a</span>
<p class="uk-text-large uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
us</p>
<ul class="uk-list uk-list-disc">
<li>to understand any gaps and deviations within the dashboard</li>
<li>to verify the data integrity</li>
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
</ul>
</div>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-medium-bottom">
<span class="uk-text-primary">Step 4a</span>
<p class="uk-text-large uk-margin-xsmall-top">Customise your dashboard and make your own profile.</p>
<p>Select the <a href="https://monitor.openaire.eu/indicators/organization" target="_blank">metrics</a> of
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-left" src="assets/monitor-assets/about/icon3.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
<span class="uk-text-primary">Step 5a</span>
<p class="uk-text-large uk-margin-xsmall-top">Select your team</p>
<p>And make them collaborators of the service.</p>
</div>
</ng-container>
<ng-container we>
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1b</span>
<p class="uk-text-large uk-margin-xsmall-top">Starting from the
<a href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a> we check for existing data for your institution.</p>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 2b</span>
<p class="uk-text-large uk-margin-xsmall-top">We present the results to you on our Beta portal.</p>
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
your dashboard.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 3b</span>
<p class="uk-text-large uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
advanced composite indicators.</p>
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
institutions research activities.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<span class="uk-text-primary">Step 4b</span>
<p class="uk-text-large uk-margin-xsmall-top">We refine until we are happy with the results.</p>
<p>We present your dashboard to you.</p>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
<span class="uk-text-primary">Step 5b</span>
<p class="uk-text-large uk-margin-xsmall-top">Notify you about new metrics and indicators</p>
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
</div>
</ng-container>
</you-we>
</li>
</ul>
</div>
</div>
<div class="uk-hidden@m">
<div class="uk-background-muted">
<div class="uk-container uk-container-large">
<div class="uk-text-center" uk-scrollspy-class>
<h1 class="uk-margin-medium-top uk-margin-medium-bottom" uk-scrollspy-class>How it works<span class="uk-text-primary">.</span></h1>
<div class="uk-text-large" uk-scrollspy-class>
Join the OpenAIRE Monitor service and we will create for you a dashboard to track, understand and
position your organization's research activities and their impact, discover and evaluate Open Science
trends for your organization and make data-driven decisions. Here's how it works.
</div>
<div class="uk-margin-medium-top" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get Started</a>
</div>
</div>
</div>
<div class="uk-position-relative uk-height-medium" style="overflow-x: hidden; overflow-x: clip;">
<img class="uk-width-large uk-position-absolute" src="assets/monitor-assets/about/hero.svg" loading="lazy"
style="bottom: -70px; right: -80px;">
</div>
<!-- style="transform: translate(60px, 40px);" -->
</div>
<div class="uk-section uk-section-large uk-margin-medium-top">
<div class="uk-sticky uk-blur-background" [attr.uk-sticky]="shouldSticky?'':null">
<div class="uk-padding-small uk-padding-remove-right uk-padding-remove-bottom">
<slider-tabs flexPosition="center" customClass="uk-text-large" connect="#tabs-content-mobile">
<slider-tab *ngFor="let section of sections; let i = index" [tabTitle]="section"
[tabId]="section"></slider-tab>
</slider-tabs>
</div>
</div>
<div class="uk-container uk-container-large">
<ul id="tabs-content-mobile" class="uk-switcher uk-margin-large-bottom">
<li id="funder">
<div class="uk-h1 uk-text-center uk-margin-xlarge-top uk-margin-xlarge-bottom">
Are you a <span class="uk-text-primary">Funder?</span>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 1a</span>
<h5 class="uk-margin-xsmall-top">You provide Information about your funded projects and
<a href="https://www.openaire.eu/funders-how-to-join-guide" target="_blank">join OpenAIRE</a>.</h5>
<p>All information is exchanged under confidential agreements and we only make public what you agree
on.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 1b</span>
<h5 class="uk-margin-xsmall-top">We ingest your project metadata and mine the <a
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a>.
</h5>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 2a</span>
<h5 class="uk-margin-xsmall-top">You validate the results and approve for them to be shown
on the <a href="https://explore.openaire.eu" target="_blank">Explore</a> portal.</h5>
<p>Examine your dashboard and the showcased information to ensure you are satisfied with what you
see.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 2b</span>
<h5 class="uk-margin-xsmall-top">We present the results to you on our Beta portal.</h5>
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
your dashboard.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 3a</span>
<h5 class="uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
us</h5>
<ul class="uk-list uk-list-disc">
<li>to understand any gaps and deviations within the dashboard</li>
<li>to verify the data integrity</li>
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
</ul>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 3b</span>
<h5 class="uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
advanced composite indicators.</h5>
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
funded research activities.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 4a</span>
<h5 class="uk-margin-xsmall-top">Customise your dashboard and make your own profile.</h5>
<p>Select the <a href="https://monitor.openaire.eu/indicators/funder" target="_blank">metrics</a> of
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 4b</span>
<h5 class="uk-margin-xsmall-top">We refine until we are happy with the results.</h5>
<p>We present your dashboard to you.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 5a</span>
<h5 class="uk-margin-xsmall-top">Select your team</h5>
<p>And make them collaborators of the service.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 5b</span>
<h5 class="uk-margin-xsmall-top">Notify you about new metrics and indicators</h5>
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
</div>
</div>
</li>
<li id="ri">
<div class="uk-h1 uk-text-center uk-margin-xlarge-top uk-margin-xlarge-bottom">
Are you a <span class="uk-text-primary">Research Initiative?</span>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 1a</span>
<h5 class="uk-margin-xsmall-top">You state your interest in having a research initiative
dashboard.</h5>
<p>All information is exchanged under confidential agreements and we only make public what you agree
on.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 1b</span>
<h5 class="uk-margin-xsmall-top">We set up an administration dashboard that you can use
to specify which research products of the <a href="https://graph.openaire.eu" target="_blank"
class="text-graph">OpenAIRE Graph</a> are
relevant for you.</h5>
<p>If needed, we develop a customized full-text mining algorithm to identify your publications.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 2a</span>
<h5 class="uk-margin-xsmall-top">You configure the criteria to identify the research
products that you want to be accounted for.</h5>
<p>You use the administration dashboard we created for you. If this is not enough, you give us input for
the implementation of a customised full-text mining algorithm.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 2b</span>
<h5 class="uk-margin-xsmall-top">We present the results to you on our Beta portal.</h5>
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
your dashboard.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 3a</span>
<h5 class="uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
us</h5>
<ul class="uk-list uk-list-disc">
<li>to understand any gaps and deviations within the dashboard</li>
<li>to verify the data integrity</li>
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
</ul>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 3b</span>
<h5 class="uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
advanced composite indicators.</h5>
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
institutions research activities.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 4a</span>
<h5 class="uk-margin-xsmall-top">Customise your dashboard and make your own profile.</h5>
<p>Select the <a href="https://monitor.openaire.eu/indicators/ri" target="_blank">metrics</a> of
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 4b</span>
<h5 class="uk-margin-xsmall-top">We refine until we are happy with the results.</h5>
<p>We present your dashboard to you.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 5a</span>
<h5 class="uk-margin-xsmall-top">Select your team</h5>
<p>And make them collaborators of the service.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 5b</span>
<h5 class="uk-margin-xsmall-top">Notify you about new metrics and indicators</h5>
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
</div>
</div>
</li>
<li id="organizations">
<div class="uk-h1 uk-text-center uk-margin-xlarge-top uk-margin-xlarge-bottom">
Are you a <span class="uk-text-primary">Research Institution?</span>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 1a</span>
<h5 class="uk-margin-xsmall-top">You state your interest in having an institutional
dashboard for your institution.</h5>
<p>All information is exchanged under confidential agreements and we only make public what you agree
on.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 1b</span>
<h5 class="uk-margin-xsmall-top">Starting from the <a href="https://graph.openaire.eu"
target="_blank" class="text-graph">OpenAIRE
Research Graph</a> we check for existing data for your institution.</h5>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 2a</span>
<h5 class="uk-margin-xsmall-top">You validate and approve the results.</h5>
<p>You examine your dashboard and the showcased information to ensure you are satisfied with what you
see.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 2b</span>
<h5 class="uk-margin-xsmall-top">We present the results to you on our Beta portal.</h5>
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
your dashboard.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 3a</span>
<h5 class="uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
us</h5>
<ul class="uk-list uk-list-disc">
<li>to understand any gaps and deviations within the dashboard</li>
<li>to verify the data integrity</li>
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
</ul>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 3b</span>
<h5 class="uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
advanced composite indicators.</h5>
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
institutions research activities.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 4a</span>
<h5 class="uk-margin-xsmall-top">Customise your dashboard and make your own profile.</h5>
<p>Select the <a href="https://monitor.openaire.eu/indicators/organization" target="_blank">metrics</a> of
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 4b</span>
<h5 class="uk-margin-xsmall-top">We refine until we are happy with the results.</h5>
<p>We present your dashboard to you.</p>
</div>
</div>
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
<div>
<span class="uk-text-primary">Step 5a</span>
<h5 class="uk-margin-xsmall-top">Select your team</h5>
<p>And make them collaborators of the service.</p>
</div>
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 5b</span>
<h5 class="uk-margin-xsmall-top">Notify you about new metrics and indicators</h5>
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
`,
styles: [`
.custom-translate-bottom-left {
transform: translate(-20%, 20%);
}
`]
})
export class AboutComponent {
public url: string = null;
public pageTitle: string = "OpenAIRE - Monitor | About";
public description: string = "OpenAIRE - Monitor | About - How it works";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'About'}];
public properties: EnvProperties = properties;
public sections: string[] = [StakeholderEntities.FUNDERS, StakeholderEntities.RIS, StakeholderEntities.ORGANIZATIONS];
public offset: number;
public stakeholderEntities = StakeholderEntities;
public shouldSticky: boolean = true;
subscriptions = [];
constructor(
private _router: Router,
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private helper: HelperService,
private cdr: ChangeDetectorRef) {
}
ngOnInit() {
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription(this.description);
}
ngAfterViewInit() {
if (typeof document !== 'undefined') {
this.offset = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-height'));
this.cdr.detectChanges();
this.observeBottom();
}
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
}
private observeBottom() {
let bottom = document.getElementById('bottom');
if (bottom) {
let bottomObs = new IntersectionObserver(entries => {
entries.forEach(entry => {
this.shouldSticky = !entry.isIntersecting;
this.cdr.detectChanges();
})
});
this.subscriptions.push(bottomObs);
bottomObs.observe(bottom);
}
}
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
}
private updateTitle(title: string) {
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
this._title.setTitle(_title);
this._meta.updateTag({content: _title}, "property='og:title'");
}
private updateUrl(url: string) {
this._meta.updateTag({content: url}, "property='og:url'");
}
}

View File

@ -0,0 +1,32 @@
import {CommonModule} from "@angular/common";
import {NgModule} from "@angular/core";
import {RouterModule} from "@angular/router";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {AboutComponent} from "./about.component";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {SliderTabsModule} from "../openaireLibrary/sharedComponents/tabs/slider-tabs.module";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {YouWeComponent} from "./you-we.component";
@NgModule({
declarations: [AboutComponent, YouWeComponent],
imports: [CommonModule, RouterModule.forChild([
{
path: '',
component: AboutComponent,
data: {extraOffset: 50}
},
{
path: 'how-it-works',
redirectTo: '/about'
},
{
path: 'faqs',
redirectTo: '/support'
}
]), BreadcrumbsModule, SliderTabsModule, HelperModule],
exports: [AboutComponent],
providers: [PreviousRouteRecorder, PiwikService]
})
export class AboutModule {}

View File

@ -0,0 +1,115 @@
import {
AfterContentChecked, AfterViewInit,
ChangeDetectorRef,
Component,
ElementRef,
Input,
OnDestroy,
ViewChild
} from "@angular/core";
import {StakeholderEntities} from "../openaireLibrary/monitor/entities/stakeholder";
declare var UIkit;
@Component({
selector: 'you-we',
template: `
<div>
<div class="uk-container">
<h2 class="uk-text-center uk-margin-large-top uk-margin-large-bottom">Are you a <span
class="uk-text-primary">{{type}}?</span></h2>
</div>
<div [id]="'sticky-' + id" #sticky class="uk-background-default uk-blur-background uk-sticky uk-visible@l"
uk-sticky="animation: uk-animation-slide-bottom" [attr.end]="'#' + id"
[attr.start]="'100vh -' + height + 'px'" [attr.offset]="offset">
<div class="uk-container">
<div class="uk-grid uk-grid-large uk-child-width-1-2@l" [class.uk-grid-divider]="!isSticky">
<div class="uk-text-center uk-first-column">
<h3 class="uk-margin-remove uk-margin-small-top uk-margin-small-bottom">You</h3>
</div>
<div class="uk-text-center">
<h3 class="uk-margin-remove uk-margin-small-top uk-margin-small-bottom">We</h3>
</div>
</div>
</div>
</div>
<div [id]="id" class="uk-container">
<div class="uk-padding uk-padding-remove-vertical">
<div class="uk-grid uk-grid-large uk-grid-divider uk-child-width-1-2@l" uk-grid
uk-height-match="target: .uk-card">
<div class="uk-flex uk-flex-column uk-flex-middle uk-child-width-1-1">
<div class="uk-margin-top uk-margin-xlarge-bottom">
<span class="uk-h3 uk-text-center uk-margin-bottom uk-hidden@l">You</span>
<ng-content select="[you]"></ng-content>
</div>
</div>
<div class="uk-flex uk-flex-column uk-flex-middle uk-child-width-1-1">
<div class="uk-margin-top uk-margin-xlarge-bottom">
<span class="uk-h3 uk-text-center uk-margin-bottom uk-hidden@l">We</span>
<ng-content select="[we]"></ng-content>
</div>
</div>
</div>
</div>
</div>
</div>
`
})
export class YouWeComponent implements AfterViewInit, AfterContentChecked, OnDestroy {
@Input()
public type: StakeholderEntities.FUNDER | StakeholderEntities.RI | StakeholderEntities.ORGANIZATION = StakeholderEntities.FUNDER;
@Input()
public id;
@ViewChild('sticky') sticky: ElementRef;
public isSticky: boolean = false;
public offset: number
public height: number;
private subscriptions: any[] = [];
constructor(private cdr: ChangeDetectorRef) {
}
ngAfterViewInit() {
if (this.sticky) {
this.observeSticky();
}
}
ngAfterContentChecked() {
if (this.sticky && typeof document !== 'undefined') {
this.offset = this.calcOffset(this.sticky.nativeElement);
}
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof (ResizeObserver || IntersectionObserver)) {
subscription.disconnect();
}
});
}
public observeSticky() {
let resizeObs = new ResizeObserver(entries => {
entries.forEach(entry => {
setTimeout(() => {
this.offset = this.calcOffset(entry.target);
this.cdr.detectChanges();
});
})
});
this.subscriptions.push(resizeObs);
resizeObs.observe(this.sticky.nativeElement);
this.subscriptions.push(UIkit.util.on('#sticky-' + this.id, 'active', (): void => {
this.isSticky = true;
}));
this.subscriptions.push(UIkit.util.on('#sticky-' + this.id, 'inactive', () => {
this.isSticky = false;
}));
}
calcOffset(element) {
this.height = element.offsetHeight;
return window.innerHeight - this.height;
}
}

View File

@ -3,20 +3,41 @@ import {RouterModule, Routes} from '@angular/router';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
const routes: Routes = [
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)},
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule), data: {hasStickyHeaderOnMobile: true}},
{path: 'about/learn-how', redirectTo: 'about', pathMatch: 'full'},
{
path: 'about',
loadChildren: () => import('./about/about.module').then(m => m.AboutModule)
},
{
path: 'support',
loadChildren: () => import('./support/support.module').then(m => m.SupportModule),
data: {hasStickyHeaderOnMobile: true}
},
{
path: 'methodology',
loadChildren: () => import('./openaireLibrary/monitor/methodology/methodology.module').then(m => m.MethodologyModule)
},
{
path: 'indicators',
loadChildren: () => import('./openaireLibrary/monitor/indicators/indicators.module').then(m => m.IndicatorsModule)
},
{
path: 'browse',
loadChildren: () => import('./search-stakeholders/search-stakeholders.module').then(m => m.SearchStakeholdersModule)
},
{path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'},
{
path: 'about/learn-how',
loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule)
},
{
path: 'contact-us',
loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule)
loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule),
data: {hasQuickContact: false}
},
{
path: 'get-started',
loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)
},
{
path: 'my-dashboards',
loadChildren: () => import('./my-stakeholders/my-stakeholders.module').then(m => m.MyStakeholdersModule)},
{
path: 'reload',
loadChildren: () => import('./reload/libReload.module').then(m => m.LibReloadModule)

View File

@ -1,32 +1,50 @@
import {Component} from '@angular/core';
import {ActivatedRoute, NavigationEnd, NavigationStart, Params, Router} from '@angular/router';
import {ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
import {ActivatedRoute, NavigationEnd, Router} from '@angular/router';
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
import {MenuItem, RootMenuItem} from './openaireLibrary/sharedComponents/menu';
import {MenuItem} from './openaireLibrary/sharedComponents/menu';
import {EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service';
import {Session, User} from './openaireLibrary/login/utils/helper.class';
import {HelperFunctions} from "./openaireLibrary/utils/HelperFunctions.class";
import {UserManagementService} from "./openaireLibrary/services/user-management.service";
import {properties} from "../environments/environment";
import {BehaviorSubject, Subscriber} from "rxjs";
import {Subscriber} from "rxjs";
import {StakeholderService} from "./openaireLibrary/monitor/services/stakeholder.service";
import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component";
import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
import {QuickContactService} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
import {Composer} from "./openaireLibrary/utils/email/composer";
import {NotificationHandler} from "./openaireLibrary/utils/notification-handler";
import {EmailService} from "./openaireLibrary/utils/email/email.service";
import {StringUtils} from "./openaireLibrary/utils/string-utils.class";
import {QuickContactComponent} from "./openaireLibrary/sharedComponents/quick-contact/quick-contact.component";
import {AlertModal} from "./openaireLibrary/utils/modal/alert";
import {StakeholderEntities} from './openaireLibrary/monitor/entities/stakeholder';
import {ResourcesService} from "./openaireLibrary/monitor/services/resources.service";
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
@Component({
selector: 'app-root',
template: `
<div class="monitorApp">
<navbar *ngIf="properties && showMenu && header" portal="monitor" [header]="header" [onlyTop]="false"
<div>
<div id="modal-container"></div>
<navbar *ngIf="properties && showMenu && header" #navbar portal="monitor" [header]="header" [onlyTop]="false"
[userMenuItems]=userMenuItems [menuItems]=menuItems [user]="user"
[showMenu]=showMenu [properties]="properties"></navbar>
[showMenu]=showMenu [properties]="properties">
<div *ngIf="showGetStarted" extra-s class="uk-margin-large-top uk-margin-left">
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started" (click)="navbar.closeCanvas()">Get Started</a>
</div>
<a *ngIf="showGetStarted" extra-m class="uk-button uk-button-small uk-button-primary uk-text-uppercase uk-margin-left" routerLink="/get-started">Get Started</a>
</navbar>
<schema2jsonld *ngIf="properties " [URL]="properties.domain + properties.baseLink"
[logoURL]="properties.domain + properties.baseLink+'/assets/common-assets/logo-small-monitor.png'"
type="home"
[logoURL]="properties.domain + properties.baseLink + logoPath + 'main.svg'"
type="home"
description="OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators. "
name="OpenAIRE Monitor" [searchAction]="true" [searchActionRoute]="properties.domain + properties.baseLink + '/browse'">
name="OpenAIRE Monitor" [searchAction]="true"
[searchActionRoute]="properties.domain + properties.baseLink + '/browse'">
</schema2jsonld>
<div class="custom-main-content">
<div class="uk-background-default">
<main>
<router-outlet></router-outlet>
</main>
@ -42,42 +60,68 @@ import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
points="7 4 13 10 7 16"></polyline></svg>
</span></a>
</cookie-law>
<bottom *ngIf="properties && showMenu" [grantAdvance]="false"
[properties]="properties"></bottom>
<bottom #bottom *ngIf="properties && showMenu" id="bottom" [grantAdvance]="false"
[properties]="properties"></bottom>
<quick-contact #quickContact *ngIf="bottomNotIntersecting && displayQuickContact && showQuickContact && contactForm"
(sendEmitter)="send($event)"
[contactForm]="contactForm" [sending]="sending" [images]="images" [contact]="'Help'"
[organizationTypes]="organizationTypes"
class="uk-visible@m"></quick-contact>
<modal-alert #modal [overflowBody]="false"></modal-alert>
</div>
`
})
export class AppComponent {
userMenuItems: MenuItem[] = [];
menuItems: RootMenuItem [] = [];
menuItems: MenuItem [] = [];
bottomMenuItems: MenuItem[] = [];
properties: EnvProperties = properties;
showMenu: boolean = false;
user: User;
params: BehaviorSubject<Params> = new BehaviorSubject<Params>(null);
url: string;
header: Header;
logoPath: string = 'assets/common-assets/';
logoPath: string = 'assets/common-assets/logo-services/monitor/';
/* Contact */
public showQuickContact: boolean;
public bottomNotIntersecting: boolean;
public displayQuickContact: boolean; // intersecting with specific section in home page
public showGetStarted: boolean = true;
public contactForm: UntypedFormGroup;
public organizationTypes: string[] = [
'Funding agency', 'University / Research Center',
'Research Infrastructure', 'Government',
'Non-profit', 'Industry', 'Other'
];
public images: string[] = ['assets/monitor-assets/curators/1.jpg', 'assets/monitor-assets/curators/2.jpg',
'assets/monitor-assets/curators/3.jpg', 'assets/monitor-assets/curators/4.jpg']
public sending = false;
@ViewChild('modal') modal: AlertModal;
@ViewChild('quickContact') quickContact: QuickContactComponent;
@ViewChild('bottom', {read: ElementRef}) bottom: ElementRef;
private subscriptions: any[] = [];
public stakeholderEntities = StakeholderEntities;
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
private configurationService: ConfigurationService,
private router: Router, private stakeholderService: StakeholderService, private smoothScroll: SmoothScroll,
private userManagementService: UserManagementService) {
private userManagementService: UserManagementService,
private quickContactService: QuickContactService,
private layoutService: LayoutService,
private fb: UntypedFormBuilder,
private emailService: EmailService,
private resourcesService: ResourcesService,
private cdr: ChangeDetectorRef) {
this.subscriptions.push(router.events.forEach((event) => {
if (event instanceof NavigationEnd) {
this.url = event.url;
let r = this.route;
while (r.firstChild) {
r = r.firstChild;
}
let params = r.snapshot.params;
this.params.next(params);
if (event instanceof NavigationEnd) {
this.showGetStarted = event.url !== '/get-started';
}
}));
}
ngOnInit() {
this.configurationService.initPortal(this.properties, "monitor");
this.userManagementService.fixRedirectURL = properties.afterLoginRedirectLink;
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
this.setUserMenu();
@ -85,47 +129,88 @@ export class AppComponent {
route: "/",
url: null,
title: 'monitor',
logoUrl: this.logoPath + 'logo-large-monitor.png',
logoSmallUrl:this.logoPath + 'logo-small-monitor.png',
position:'left',
badge:true
logoUrl: this.logoPath + 'main.svg',
logoSmallUrl: this.logoPath + 'small.svg',
position: 'left',
badge: true,
menuPosition: 'center'
};
this.buildMenu();
this.reset();
}));
this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => {
if(this.showQuickContact !== hasQuickContact) {
this.showQuickContact = hasQuickContact;
this.cdr.detectChanges();
}
}));
this.subscriptions.push(this.quickContactService.isDisplayed.subscribe(display => {
if(this.displayQuickContact !== display) {
this.displayQuickContact = display;
this.cdr.detectChanges();
}
}));
}
createObservers() {
let options = {
root: null,
rootMargin: '0px',
threshold: 0.1
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
// if (entry.isIntersecting && this.showQuickContact) {
if(this.bottomNotIntersecting !== (!entry.isIntersecting)) {
this.bottomNotIntersecting = !entry.isIntersecting;
this.cdr.detectChanges();
}
});
}, options);
intersectionObserver.observe(this.bottom.nativeElement);
this.subscriptions.push(intersectionObserver);
}
public ngOnDestroy() {
this.subscriptions.forEach(value => {
if (value instanceof Subscriber) {
value.unsubscribe();
} else if (typeof IntersectionObserver !== "undefined" && value instanceof IntersectionObserver) {
value.disconnect();
}
});
this.userManagementService.clearSubscriptions();
this.stakeholderService.clearSubscriptions();
this.smoothScroll.clearSubscriptions();
}
public buildMenu() {
this.menuItems = [];
this.menuItems.push({
rootItem: new MenuItem("about", "About", "", "/about/learn-how", false, [], null, {}),
items: []
});
this.menuItems.push({
rootItem: new MenuItem("stakeholders", "Browse", "", "browse", false, [], null, {}),
items: []
});
this.menuItems.push({
rootItem: new MenuItem("contact-us", "Contact us", "", "/contact-us", false, [], null, {}),
items: []
});
this.menuItems.push(
new MenuItem("home", "Home", "", "/", false, [], null, {}, null, null, "uk-hidden@m")
);
this.menuItems.push(
new MenuItem("stakeholders", "Browse " + this.stakeholderEntities.STAKEHOLDERS, "", "/browse", false, [], null, {})
);
this.resourcesService.setResources(this.menuItems);
this.menuItems.push(new MenuItem("support", "Support", "", "/support", false, [], null, {}));
this.menuItems.push(new MenuItem("about", "About", "", "/about", false, [], null, {}));
this.bottomMenuItems = [
new MenuItem("", "About", "https://beta.openaire.eu/project-factsheets", "", false, [], [], {}),
new MenuItem("", "News - Events", "https://beta.openaire.eu/news-events", "", false, [], [], {}),
new MenuItem("", "Blog", "https://blogs.openaire.eu/", "", false, [], [], {}),
new MenuItem("", "Contact us", "https://beta.openaire.eu/contact-us", "", false, [], [], {})
];
this.menuItems.push(
new MenuItem("contact-us", "Contact us", "", "/contact-us", false, [], null, {}, null, null, "uk-hidden@m")
);
this.showMenu = true;
if(typeof document !== 'undefined') {
setTimeout(() => {
this.createObservers();
})
}
}
public setUserMenu() {
@ -133,9 +218,72 @@ export class AppComponent {
if (this.user) {
if (Session.isPortalAdministrator(this.user) || Session.isMonitorCurator(this.user) || Session.isKindOfMonitorManager(this.user)) {
this.userMenuItems.push(new MenuItem("", "Manage profiles",
this.properties.domain + properties.baseLink + "/dashboard/admin", "", false, [], [], {}))
this.properties.domain + properties.baseLink + "/dashboard/admin", "", false, [], [], {}, null, null, null, null, "_self"));
}
this.userMenuItems.push(new MenuItem("", "My " + this.stakeholderEntities.STAKEHOLDERS, "", "/my-dashboards", false, [], [], {}));
this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
}
}
public send(event) {
if (event.valid === true) {
this.sendMail(this.properties.admins);
}
}
public reset() {
if (this.quickContact) {
this.quickContact.close();
}
this.contactForm = this.fb.group({
name: this.fb.control('', Validators.required),
surname: this.fb.control('', Validators.required),
email: this.fb.control('', [Validators.required, Validators.email]),
job: this.fb.control('', Validators.required),
organization: this.fb.control('', Validators.required),
organizationType: this.fb.control('', [Validators.required, StringUtils.validatorType(this.organizationTypes)]),
message: this.fb.control('', Validators.required),
recaptcha: this.fb.control('', Validators.required),
});
}
private sendMail(admins: string[]) {
this.sending = true;
this.subscriptions.push(this.emailService.contact(this.properties,
Composer.composeEmailForMonitor(this.contactForm.value, admins),
this.contactForm.value.recaptcha).subscribe(
res => {
if (res) {
this.sending = false;
this.reset();
this.modalOpen();
} else {
this.handleError('Email <b>sent failed!</b> Please try again.');
}
},
error => {
this.handleError('Email <b>sent failed!</b> Please try again.', error);
}
));
}
public modalOpen() {
this.modal.okButton = true;
this.modal.alertTitle = 'Your request has been successfully submitted';
this.modal.message = 'Our team will respond to your submission soon.';
this.modal.cancelButton = false;
this.modal.okButtonLeft = false;
this.modal.okButtonText = 'OK';
this.modal.open();
}
handleError(message: string, error = null) {
if (error) {
console.error(error);
}
this.sending = false;
this.quickContact.close();
NotificationHandler.rise(message, 'danger');
this.contactForm.get('recaptcha').setValue('');
}
}

View File

@ -1,22 +1,25 @@
import {NgModule} from '@angular/core';
import {APP_ID, NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {CommonModule} from '@angular/common';
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
import {BrowserModule, BrowserTransferStateModule} from '@angular/platform-browser';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {AppComponent} from './app.component';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
import {AppRoutingModule} from './app-routing.module';
import {SharedModule} from './shared/shared.module';
import {CookieLawModule} from './openaireLibrary/sharedComponents/cookie-law/cookie-law.module';
import {BottomModule} from './openaireLibrary/sharedComponents/bottom.module';
import {ErrorModule} from './openaireLibrary/error/error.module';
import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigationBar.module';
import {QuickContactModule} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.module';
import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service";
import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {HttpInterceptorService} from "./openaireLibrary/http-interceptor.service";
import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service";
import {SharedModule} from "./openaireLibrary/shared/shared.module";
import {AlertModalModule} from "./openaireLibrary/utils/modal/alertModal.module";
import {isDevelopmentGuard} from './openaireLibrary/error/isDevelopmentGuard.guard';
@NgModule({
@ -28,16 +31,19 @@ import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.servi
ErrorModule,
FormsModule,
NavigationBarModule,
QuickContactModule,
BottomModule,
CookieLawModule,
BrowserTransferStateModule,
BrowserModule.withServerTransition({ appId: 'monitor' }),
BrowserModule,
AppRoutingModule,
Schema2jsonldModule
Schema2jsonldModule,
AlertModalModule
],
declarations: [AppComponent, OpenaireErrorPageComponent],
exports: [AppComponent],
providers: [
isDevelopmentGuard,
{provide: APP_ID, useValue: 'monitor'},
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,

View File

@ -1,5 +1,5 @@
import { NgModule } from '@angular/core';
import {ServerModule, ServerTransferStateModule} from '@angular/platform-server';
import {ServerModule} from '@angular/platform-server';
import { AppModule } from './app.module';
import { AppComponent } from './app.component';
@ -7,8 +7,7 @@ import { AppComponent } from './app.component';
@NgModule({
imports: [
AppModule,
ServerModule,
ServerTransferStateModule
ServerModule
],
bootstrap: [AppComponent],
})

View File

@ -0,0 +1,32 @@
<a *ngIf="directLink && stakeholder" [href]="getStakeholderPageUrl()" target="_blank"
class="uk-height-1-1 uk-link-reset uk-display-block" [class.uk-disabled]="!hasPermission()">
<ng-container [ngTemplateOutlet]="card"></ng-container>
</a>
<a *ngIf="!directLink && stakeholder" (click)="confirmModalOpen()"
class="uk-height-1-1 uk-link-reset uk-display-block" [class.uk-disabled]="!hasPermission()">
<ng-container [ngTemplateOutlet]="card"></ng-container>
</a>
<ng-template #card>
<div class="uk-card uk-card-default uk-card-hover uk-card-body" [ngClass]="stakeholder.type" [class.uk-disabled]="!hasPermission()">
<div *ngIf="stakeholder.visibility && stakeholder.visibility !== 'PUBLIC'"
class="uk-position-top-right uk-margin-small-top uk-margin-small-right uk-flex uk-flex-column uk-flex-middle uk-position-z-index">
<icon [name]="visibilityIcon.get(stakeholder.visibility)" ratio="1.2" [flex]="true"></icon>
<span class="uk-text-small uk-text-capitalize">{{stakeholder.visibility.toLowerCase()}}</span>
</div>
<div class="uk-card-media-top uk-padding-large uk-padding-remove-vertical uk-flex uk-flex-center uk-flex-middle uk-height-xsmall">
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl" [alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall uk-blend-multiply">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall uk-blend-multiply">
</ng-template>
</div>
<div class="uk-card-body uk-padding-remove-horizontal">
<div class="uk-text-capitalize uk-text-small type">{{mapType(stakeholder.type)}}</div>
<div class="uk-h6 uk-margin-remove multi-line-ellipsis lines-2">
<p *ngIf="stakeholder.name" class="uk-margin-remove">
{{stakeholder.name}}
</p>
</div>
</div>
</div>
</ng-template>
<modal-alert #AlertModal [overflowBody]="false" (alertOutput)="goToPage($event)"></modal-alert>

View File

@ -0,0 +1,23 @@
@import (reference) "~src/assets/openaire-theme/less/color.less";
.setType(@color) {
border-bottom: 4px solid fade(@color, 30%);
& .type {
color: @color;
}
}
.uk-card {
&.funder {
.setType(@funder-color);
}
&.ri {
.setType(@ri-color);
}
&.organization {
.setType(@organization-color);
}
}

View File

@ -0,0 +1,91 @@
import {Component, Input, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {Location} from '@angular/common';
import {StakeholderInfo, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {properties} from "../../environments/environment"
import {LocalStorageService} from "../openaireLibrary/services/localStorage.service";
import {Subscriber} from "rxjs";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
@Component({
selector: 'browse-stakeholder',
templateUrl: 'browse-stakeholder.component.html',
styleUrls: ['browse-stakeholder.component.less']
})
export class BrowseStakeholderComponent {
@Input() public stakeholder: StakeholderInfo = null;
@ViewChild('AlertModal', { static: true }) modal;
public properties: EnvProperties = properties;
public directLink: boolean = true;
public visibilityIcon: Map<Visibility, string> = new Map<Visibility, string> ([
["PRIVATE", 'incognito'],
["RESTRICTED", 'restricted']
]);
private subscriptions: any[] = [];
constructor(private route: ActivatedRoute,
private router: Router,
private location: Location,
private localStorageService: LocalStorageService,
private layoutService: LayoutService) {
}
public ngOnInit() {
this.properties = properties;
this.subscriptions.push(this.layoutService.isMobile.subscribe(value => {
if(value) {
this.directLink = true;
} else {
this.subscriptions.push(this.localStorageService.get().subscribe(value => {
this.directLink = value;
}));
}
}));
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
}
mapType(type: string) {
return StringUtils.getStakeholderType(type, false);
}
public confirmModalOpen() {
this.modal.cancelButton = true;
this.modal.okButton = true;
this.modal.alertTitle = 'You are going to visit ' + this.stakeholder.name + ' Monitor Dashboard';
this.modal.message = 'You will be navigated to a new tab. Are you sure that you want to proceed?';
this.modal.okButtonLeft = false;
this.modal.okButtonText = 'Yes';
this.modal.cancelButtonText = 'No';
this.modal.choice = true;
this.modal.open();
}
public getStakeholderPageUrl() {
return this.properties.domain + this.properties.baseLink + '/dashboard/' + this.stakeholder.alias;
}
hasPermission() {
return this.stakeholder.visibility === "PUBLIC" ||
(this.stakeholder.visibility === "RESTRICTED" && (this.stakeholder.isManager || this.stakeholder.isMember)) ||
(this.stakeholder.visibility === "PRIVATE" && this.stakeholder.isManager);
}
public goToPage(data: any) {
if (data.value == true) {
let url = this.getStakeholderPageUrl();
this.localStorageService.setCommunityDirectLink(data.choice);
window.open(url, '_blank');
}
}
}

View File

@ -0,0 +1,30 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule} from '@angular/router';
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {ManageModule} from "../openaireLibrary/utils/manage/manage.module";
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {BrowseStakeholderComponent} from "./browse-stakeholder.component";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {incognito, restricted} from "../openaireLibrary/utils/icons/icons";
@NgModule({
imports: [
CommonModule, RouterModule,
ManageModule, AlertModalModule, LogoUrlPipeModule, IconsModule
],
declarations: [
BrowseStakeholderComponent
],
providers:[
],
exports: [
BrowseStakeholderComponent
]
})
export class BrowseStakeholderModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([incognito, restricted]);
}
}

View File

@ -1,28 +1,31 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld>
<div class="uk-section">
<div class="uk-align-center">
<div *ngIf="showLoading" class="uk-margin-large">
<div class="uk-animation-fade uk-margin-top uk-width-1-1" role="alert"><span
class="loading-gif uk-align-center"></span></div>
</div>
<div *ngIf="!showLoading" class="uk-container uk-container-large">
<div class="uk-grid-divider uk-grid uk-flex-center" uk-grid>
<div class="uk-width-1-1 uk-width-1-2@m">
<div class="uk-text-center uk-margin-medium-bottom">
<h1 class="uk-h2">Contact us to learn more</h1>
<h6 class="uk-text-muted uk-margin-remove-top">
Wed be happy to provide more information on OpenAIRE Monitor please fill in your details below to send your questions to our team.
</h6>
</div>
<contact-us [properties]="properties" [errorMessage]="errorMessage" [organizationTypes]="organizationTypes"
[contactForm]="contactForm" (sendEmitter)="send($event)"></contact-us>
</div>
</div>
</div>
<div>
<div class="uk-visible@m uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-section uk-padding-remove-top uk-container uk-container-large uk-flex uk-flex-center"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-padding-small uk-width-1-2@l uk-width-2-3@m uk-width-1-1">
<contact-us [organizationTypes]="organizationTypes" [sending]="sending" [scrollspy]="true"
[contactForm]="contactForm" (sendEmitter)="send($event)">
<h1 page-title class="uk-visible@m uk-margin-auto uk-text-center" uk-scrollspy-class>
Contact us<span class="uk-text-primary">.</span>
</h1>
<h1 page-title class="uk-hidden@m uk-heading-large uk-margin-auto uk-text-center" uk-scrollspy-class>
Contact us<span class="uk-text-primary">.</span>
</h1>
<div page-description class="uk-text-large uk-text-center" uk-scrollspy-class>
We would be happy to open a discussion with you to better understand your needs and share examples of how
OpenAIRE MONITOR can help your organization in your open science needs.
</div>
</contact-us>
</div>
</div>
</div>
<modal-alert #AlertModal (alertOutput)="goToHome()">
<div class="uk-text-center">
<modal-alert #modal (alertOutput)="goToHome()">
<div class="uk-padding-small uk-padding-remove-horizontal">
Our team will respond to your submission soon.<br>
Press OK to redirect to OpenAIRE Monitor home page.
</div>

View File

@ -1,52 +1,53 @@
import {Component, OnInit, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {EmailService} from "../openaireLibrary/utils/email/email.service";
import {Email} from "../openaireLibrary/utils/email/email";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {Composer} from "../openaireLibrary/utils/email/composer";
import {Meta, Title} from "@angular/platform-browser";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators} from "@angular/forms";
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
import {Subscriber} from "rxjs";
import {properties} from "../../environments/environment";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {NotificationHandler} from "../openaireLibrary/utils/notification-handler";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
@Component({
selector: 'contact',
templateUrl: './contact.component.html',
templateUrl: './contact.component.html'
})
export class ContactComponent implements OnInit {
public url: string = null;
public pageTitle: string = "OpenAIRE - Monitor | Contact Us";
public description: string = "OpenAIRE - Monitor . Any Questions? Contact us to learn more";
public piwiksub: any;
public showLoading = true;
public errorMessage = '';
public email: Email;
public properties: EnvProperties = null;
public sending = false;
public properties: EnvProperties = properties;
public pageContents = null;
public divContents = null;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Contact us'}];
public organizationTypes: string[] = [
'Funding agency', 'University / Research Center',
'Research Infrastructure', 'Government',
'Non-profit', 'Industry', 'Other'
];
public contactForm: FormGroup;
@ViewChild('AlertModal') modal;
public contactForm: UntypedFormGroup;
@ViewChild('modal') modal;
private subscriptions = [];
constructor(private route: ActivatedRoute,
private _router: Router,
private _emailService: EmailService,
private emailService: EmailService,
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private fb: FormBuilder,
private fb: UntypedFormBuilder,
private helper: HelperService) {
}
subscriptions = [];
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
@ -54,12 +55,9 @@ export class ContactComponent implements OnInit {
}
});
}
ngOnInit() {
this.properties = properties;
this.email = {body: '', subject: '', recipients: []};
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle, this.properties.piwikSiteId).subscribe());
}
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
@ -68,8 +66,6 @@ export class ContactComponent implements OnInit {
this.reset();
//this.getDivContents();
// this.getPageContents();
this.showLoading = false;
}
private getPageContents() {
@ -85,20 +81,8 @@ export class ContactComponent implements OnInit {
}
public send(event) {
HelperFunctions.scroll();
if(event.valid === true) {
this.sendMail(this.properties.admins);
} else {
this.errorMessage = 'Please fill in all the required fields!';
}
}
private validatorType(options: string[]): ValidatorFn {
return (control: AbstractControl): { [key: string]: boolean } | null => {
if (options.filter(type => type === control.value).length === 0) {
return {'type': false};
}
return null;
}
}
@ -109,32 +93,28 @@ export class ContactComponent implements OnInit {
email: this.fb.control('', [Validators.required, Validators.email]),
job: this.fb.control('', Validators.required),
organization: this.fb.control('', Validators.required),
organizationType: this.fb.control('', [Validators.required, this.validatorType(this.organizationTypes)]),
organizationType: this.fb.control('', [Validators.required, StringUtils.validatorType(this.organizationTypes)]),
message: this.fb.control('', Validators.required),
recaptcha: this.fb.control('', Validators.required),
});
this.errorMessage = '';
}
private sendMail(admins: any) {
this.showLoading = true;
this.subscriptions.push(this._emailService.contact(this.properties,
this.sending = true;
this.subscriptions.push(this.emailService.contact(this.properties,
Composer.composeEmailForMonitor(this.contactForm.value, admins),
this.contactForm.value.recaptcha).subscribe(
res => {
this.showLoading = false;
if (res) {
this.sending = false;
this.reset();
this.modalOpen();
} else {
this.errorMessage = 'Email sent failed! Please try again.';
this.contactForm.get('recaptcha').setValue('');
this.handleError('Email <b>sent failed!</b> Please try again.');
}
},
error => {
this.handleError('Email sent failed! Please try again.', error);
this.showLoading = false;
this.contactForm.get('recaptcha').setValue('');
this.handleError('Email <b>sent failed!</b> Please try again.', error);
}
));
}
@ -149,10 +129,13 @@ export class ContactComponent implements OnInit {
this.modal.open();
}
handleError(message: string, error) {
this.errorMessage = message;
console.log('Server responded: ' + error);
this.showLoading = false;
handleError(message: string, error = null) {
if(error) {
console.error(error);
}
NotificationHandler.rise(message, 'danger');
this.sending = false;
this.contactForm.get('recaptcha').setValue('');
}
public goToHome() {

View File

@ -13,14 +13,15 @@ import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
@NgModule({
imports: [
ContactRoutingModule, CommonModule, RouterModule,
AlertModalModule, RecaptchaModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, ContactUsModule
],
imports: [
ContactRoutingModule, CommonModule, RouterModule,
AlertModalModule, RecaptchaModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, ContactUsModule, BreadcrumbsModule
],
declarations: [
ContactComponent
],

View File

@ -0,0 +1,13 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {GetStartedComponent} from './get-started.component';
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: GetStartedComponent, canActivate: [], canDeactivate: [PreviousRouteRecorder]}
])
]
})
export class GetStartedRoutingModule { }

View File

@ -0,0 +1,126 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld>
<div class="uk-visible@m">
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
</div>
<div class="uk-container uk-container-large uk-section" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-margin-small-top uk-text-center uk-flex uk-flex-middle uk-child-width-1-1 uk-flex-column">
<h1 class="uk-width-3-4@m" uk-scrollspy-class>Get started with <br> OpenAIRE Monitor Dashboard <span class="uk-text-primary">.</span></h1>
<div class="uk-text-large uk-width-2-3@m" uk-scrollspy-class>
The OpenAIRE Monitor Dashboard is an <span class="uk-text-bold">open tracking platform</span> with all the tools you need
to understand and make insightful decisions — whether you are a <span class="uk-text-bold">funder</span>, a <span class="uk-text-bold">research initiative</span>
or a <span class="uk-text-bold">community</span>, and want to measure or increase uptake
of Open Science, understand your costs, gaps and strengths, or build a community around it.
</div>
</div>
<div class="uk-section uk-section-large uk-padding-remove-bottom" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-margin-auto uk-width-1-1 uk-width-3-4@l uk-grid uk-grid-large uk-child-width-1-2" uk-grid>
<div class="uk-flex uk-flex-center uk-flex-top" uk-scrollspy-class>
<img class="uk-visible@m" src="assets/monitor-assets/get-started/1.svg" alt="Step 1" loading="lazy">
<div class="uk-flex uk-flex-column uk-padding-small uk-margin-small-left">
<icon name="description" type="outlined" ratio="2" visuallyHidden="Provide some information"
customClass="uk-text-background"></icon>
<span class="uk-h5 uk-margin-remove uk-text-uppercase">Provide some <br> information</span>
</div>
</div>
<div class="uk-flex uk-flex-center uk-flex-top" uk-scrollspy-class>
<img class="uk-visible@m" src="assets/monitor-assets/get-started/2.svg" alt="Step 2" loading="lazy">
<div class="uk-flex uk-flex-column uk-padding-small uk-margin-small-left">
<icon name="email" type="outlined" ratio="2" visuallyHidden="Provide some information"
customClass="uk-text-background"></icon>
<span class="uk-h5 uk-margin-remove uk-margin-small-top uk-text-uppercase">We contact <br> you</span>
</div>
</div>
</div>
</div>
</div>
<div class="uk-container uk-container-large uk-section uk-section-large">
<div class="uk-padding-small">
<h2 class="uk-h1 uk-text-center">Provide some information<span class="uk-text-primary">.</span></h2>
<div class="uk-flex uk-flex-center uk-width-1-1">
<div class="uk-width-1-2@m uk-width-1-1 uk-margin-large-top">
<contact-us [organizationTypes]="organizationTypes" [sending]="sending"
[contactForm]="contactForm" alignButton="center" (sendEmitter)="send($event)">
</contact-us>
</div>
</div>
</div>
</div>
<div class="uk-container uk-container-large uk-section">
<div class="uk-grid uk-grid-large uk-flex-middle" uk-grid>
<div class="uk-width-1-2@m uk-width-1-1">
<div class="uk-padding-small">
<h2>Need more information?<br>View details on the process<span class="uk-text-primary">.</span></h2>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/about/learn-how">
<span class="uk-flex uk-flex-middle">
<span>Learn More</span>
</span>
</a>
</div>
</div>
<div class="uk-width-expand uk-flex uk-flex-center">
<img src="assets/monitor-assets/get-started/steps.svg" loading="lazy">
</div>
</div>
</div>
</div>
<div class="uk-hidden@m">
<div class="uk-container uk-container-large uk-section" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-text-center">
<h1 class="uk-heading-small uk-padding-small uk-padding-remove-vertical" uk-scrollspy-class>Get started with <br>OpenAIRE Monitor Dashboard<span class="uk-text-primary">.</span></h1>
<div class="uk-text-large uk-margin-large-top" uk-scrollspy-class>
The OpenAIRE Monitor Dashboard is an <span class="uk-text-bold">open tracking platform</span> with all the tools you need
to understand and make insightful decisions — whether you are a <span class="uk-text-bold">funder</span>, a <span class="uk-text-bold">research initiative</span>
or a <span class="uk-text-bold">community</span>, and want to measure or increase uptake
of Open Science, understand your costs, gaps and strengths, or build a community around it.
</div>
</div>
<div class="uk-section uk-section-large uk-padding-remove-bottom" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-flex uk-flex-column uk-flex-middle uk-text-center uk-padding-small uk-position-relative">
<img class="uk-position-absolute number-step number-step-1" src="assets/monitor-assets/get-started/1.svg" alt="Step 1" loading="lazy">
<icon name="description" type="outlined" ratio="2" visuallyHidden="Provide some information"
customClass="uk-text-background"></icon>
<span class="uk-h5 uk-margin-remove uk-text-uppercase">Provide some <br> information</span>
</div>
<div class="uk-flex uk-flex-column uk-flex-middle uk-text-center uk-padding-small uk-position-relative">
<img class="uk-position-absolute number-step number-step-2" src="assets/monitor-assets/get-started/2.svg" alt="Step 2" loading="lazy">
<icon name="email" type="outlined" ratio="2" visuallyHidden="Provide some information"
customClass="uk-text-background"></icon>
<span class="uk-h5 uk-margin-remove uk-margin-small-top uk-text-uppercase">We contact you</span>
</div>
</div>
</div>
<div class="uk-container uk-container-large uk-section uk-section-large">
<div class="uk-padding-small">
<h2 class="uk-heading-small uk-text-center">Provide some information<span class="uk-text-primary">.</span></h2>
<div class="uk-flex uk-flex-center uk-width-1-1">
<div class="uk-width-1-2@m uk-width-1-1 uk-margin-large-top">
<contact-us [organizationTypes]="organizationTypes" [sending]="sending"
[contactForm]="contactForm" alignButton="center" (sendEmitter)="send($event)">
</contact-us>
</div>
</div>
</div>
</div>
<div class="uk-container uk-container-large uk-section">
<div class="uk-flex uk-flex-column uk-flex-middle uk-text-center uk-padding uk-padding-remove-vertical">
<h2>Need more information?<br>View details on the process<span class="uk-text-primary">.</span></h2>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text uk-margin-large-top uk-margin-large-bottom"
routerLinkActive="router-link-active" routerLink="/about/learn-how">
<span class="uk-flex uk-flex-middle">
<span>Learn More</span>
</span>
</a>
<img src="assets/monitor-assets/get-started/steps.svg" loading="lazy">
</div>
</div>
</div>
<modal-alert #modal (alertOutput)="goToHome()">
<div class="uk-padding-small uk-padding-remove-horizontal">
Our team will respond to your submission soon.<br>
Press OK to redirect to OpenAIRE Monitor home page.
</div>
</modal-alert>

View File

@ -0,0 +1,14 @@
.number-step {
height: 70px;
opacity: 0.1;
top: 50%;
transform: translateY(-50%) rotate(20deg);
}
.number-step-1 {
right: 10%;
}
.number-step-2 {
left: 10%;
}

View File

@ -0,0 +1,163 @@
import {Component, OnInit, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {EmailService} from "../openaireLibrary/utils/email/email.service";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {Composer} from "../openaireLibrary/utils/email/composer";
import {Meta, Title} from "@angular/platform-browser";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
import {Subscriber} from "rxjs";
import {properties} from "../../environments/environment";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {NotificationHandler} from "../openaireLibrary/utils/notification-handler";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {StakeholderEntities} from '../openaireLibrary/monitor/entities/stakeholder';
@Component({
selector: 'get-started',
templateUrl: './get-started.component.html',
styleUrls: ['./get-started.component.less']
})
export class GetStartedComponent implements OnInit {
public url: string = null;
public pageTitle: string = "OpenAIRE - Monitor | Get Started";
public description: string = "OpenAIRE - Monitor . Any Questions? Contact us to learn more";
public piwiksub: any;
public sending = false;
public properties: EnvProperties = properties;
public pageContents = null;
public divContents = null;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Get started'}];
public organizationTypes: string[] = [
'Funding agency', 'University / Research Center',
'Research Infrastructure', 'Government',
'Non-profit', 'Industry', 'Other'
];
public contactForm: UntypedFormGroup;
@ViewChild('modal') modal;
private subscriptions = [];
public stakeholderEntities = StakeholderEntities;
constructor(private route: ActivatedRoute,
private _router: Router,
private _emailService: EmailService,
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private fb: UntypedFormBuilder,
private helper: HelperService) {
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
}
ngOnInit() {
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription(this.description);
this.reset();
//this.getDivContents();
// this.getPageContents();
}
private getPageContents() {
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'monitor', this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
private getDivContents() {
this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'monitor', this._router.url).subscribe(contents => {
this.divContents = contents;
}));
}
public send(event) {
if (event.valid === true) {
this.sendMail(this.properties.admins);
}
}
public reset() {
this.contactForm = this.fb.group({
name: this.fb.control('', Validators.required),
surname: this.fb.control('', Validators.required),
email: this.fb.control('', [Validators.required, Validators.email]),
job: this.fb.control('', Validators.required),
organization: this.fb.control('', Validators.required),
organizationType: this.fb.control('', [Validators.required, StringUtils.validatorType(this.organizationTypes)]),
message: this.fb.control('', Validators.required),
recaptcha: this.fb.control('', Validators.required),
});
}
private sendMail(admins: any) {
this.sending = true;
this.subscriptions.push(this._emailService.contact(this.properties,
Composer.composeEmailForMonitor(this.contactForm.value, admins),
this.contactForm.value.recaptcha).subscribe(
res => {
if (res) {
this.sending = false;
this.reset();
this.modalOpen();
} else {
this.handleError('Email <b>sent failed!</b> Please try again.');
}
},
error => {
this.handleError('Email <b>sent failed!</b> Please try again.', error);
}
));
}
public modalOpen() {
this.modal.okButton = true;
this.modal.alertTitle = 'Your request has been successfully submitted';
this.modal.alertMessage = false;
this.modal.cancelButton = false;
this.modal.okButtonLeft = false;
this.modal.okButtonText = 'OK';
this.modal.open();
}
handleError(message: string, error = null) {
if(error) {
console.error(error);
}
NotificationHandler.rise(message, 'danger');
this.sending = false;
this.contactForm.get('recaptcha').setValue('');
}
public goToHome() {
this._router.navigate(['/']);
}
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
}
private updateTitle(title: string) {
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
this._title.setTitle(_title);
this._meta.updateTag({content: _title}, "property='og:title'");
}
private updateUrl(url: string) {
this._meta.updateTag({content: url}, "property='og:url'");
}
}

View File

@ -0,0 +1,39 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule} from '@angular/router';
import {GetStartedComponent} from './get-started.component';
import {GetStartedRoutingModule} from "./get-started-routing.module";
import {EmailService} from "../openaireLibrary/utils/email/email.service";
import {RecaptchaModule} from "ng-recaptcha";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
@NgModule({
imports: [
GetStartedRoutingModule, CommonModule, RouterModule,
AlertModalModule, RecaptchaModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, ContactUsModule, BreadcrumbsModule, LoadingModule,
IconsModule
],
declarations: [
GetStartedComponent
],
providers: [
EmailService, PiwikService, IsRouteEnabled
],
exports: [
GetStartedComponent
]
})
export class GetStartedModule { }

View File

@ -4,11 +4,12 @@ import { RouterModule } from '@angular/router';
import{HomeComponent} from './home.component';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: HomeComponent, canDeactivate: [PreviousRouteRecorder] }
{ path: '', component: HomeComponent, canDeactivate: [PreviousRouteRecorder, CanExitGuard] }
])
]

View File

@ -1,98 +0,0 @@
@media only screen and (min-width:1200px) {
.girl-background {
background-size: 210px;
background-repeat: no-repeat;
background-position: 95% 50%;
background-image: url("/assets/monitor-assets/home/girl.png");
padding-bottom: 100px;
}
.dashboard-section .dashboard {
background-image: url("/assets/monitor-assets/home/dashboard-background.svg");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
}
.dashboard-section .info > div {
opacity: 0.3;
}
.dashboard-section .info > .uk-active > h5 {
color: var(--portal-main-color);
}
.dashboard-section .info > div:hover {
opacity: 1;
}
@media only screen and (min-width:960px) {
.hologram {
background-image: url("/assets/monitor-assets/home/hologram.png");
background-size: 20%;
background-repeat: no-repeat;
background-position: bottom center;
padding-bottom: 50px;
}
}
.hologram .part {
max-width: 370px;
}
.graph-section {
background-image: url("/assets/monitor-assets/home/graph-background.svg");
background-size: cover;
background-repeat: no-repeat;
padding: 5vh 0;
}
.stakeholder-section .stakeholders {
min-height: 300px;
}
.stakeholder-section .uk-subnav-pill > li > a {
color: currentColor;
font-size: 13px;
text-transform: none;
opacity: 0.5;
border-radius: 40px;
border: 1px solid currentColor;
padding: 6px 18px;
line-height: 18px;
}
.stakeholder-section .uk-subnav-pill > li:hover > a {
border-color: var(--portal-main-color);
color: var(--portal-main-color);
background-color: var(--portal-main-contrast);
opacity: 1;
}
.stakeholder-section .uk-subnav-pill > li.uk-active > a {
opacity: 1;
border-color: var(--portal-main-color);
color: var(--portal-main-contrast);
background-color: var(--portal-main-color);
font-weight: bold;
}
.stakeholder-section .uk-card {
border-radius: 20px;
color: currentColor;
font-family: "Roboto", sans-serif;
padding: 70px 20px;
}
.stakeholder-section .uk-card img {
max-height: 60px;
}
@media only screen and (max-width:639px) {
.stakeholder-section .uk-subnav-pill {
flex-wrap: nowrap;
overflow-x: auto;
}
}

View File

@ -1,253 +1,595 @@
<div class="image-front-topbar"
style="background: transparent linear-gradient(180deg, #F4F4F4 0%, #F5F5F5 83%, #FAFAFA 100%) no-repeat;">
<div
class="uk-section uk-container uk-container-large uk-text-center uk-section uk-section-small uk-margin-large-bottom"
uk-parallax="media: @l; y: -200; easing: 0.5">
<div class="uk-padding-small">
<h1 class="uk-margin-top">A new era of monitoring research.</h1>
<div class="girl-background">
<h4 class="uk-margin-remove-top">Open data. Open methodologies.</h4>
<div class="uk-margin-medium-top uk-text-muted">
Work together with us to view, understand and visualize<br>research statistics and indicators.
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-container uk-container-large dashboard-section">
<div class="uk-padding-small">
<div class="dashboard uk-flex uk-flex-center">
<img class="uk-width-1-2@l" src="/assets/monitor-assets/home/dashboard.png">
</div>
<div class="uk-margin-large-top">
<div class="uk-margin-medium-left uk-margin-medium-right uk-margin-large-bottom">
<div class="uk-child-width-1-3@m uk-grid info" uk-grid>
<div [@1]="state.toString()" class="clickable" [class.uk-active]="state === 1" (click)="startAnimation()">
<h5>
Get a complete picture
</h5>
<div class="uk-text-muted">
Track and discover your organizations research output. Use the OpenAIRE Research Graph to get a
360<span>&#176;</span>
view of your publications-data-code.
</div>
</div>
<div [@2]="state.toString()" class="clickable" [class.uk-active]="state === 2" (click)="startAnimation(2)">
<h5>
Monitor open science compliance
</h5>
<div class="uk-text-muted">
Work with the open science expert community for open and transparent metrics. Discover open science trends
for your organization and see how you fare in EOSC.
</div>
</div>
<div [@3]="state.toString()" class="clickable" [class.uk-active]="state === 3" (click)="startAnimation(3)">
<h5>
Turn research results to insights
</h5>
<div class="uk-text-muted">
Understand your community. Measure impact, discover trends, connections and collaborations to improve
and optimize your future actions.
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-container uk-container-large">
<div class="uk-padding-small hologram uk-position-relative">
<div class="uk-grid uk-grid-match uk-child-width-1-2 uk-visible@m" uk-grid>
<div uk-parallax="y: 40, -60; easing: 0.5">
<div class="uk-margin-large-left uk-margin-large-bottom uk-width-3-4 part">
<h5 class="uk-text-secondary">Global outlook</h5>
<div>
Monitor is built on the OpenAIRE Research Graph. An interconnected scholarly communication shared data
resource from open initiatives around the world, of global interest.
</div>
</div>
</div>
<div uk-parallax="y: 40, -60; easing: 0.5" class="uk-flex uk-flex-right">
<div class="part uk-width-3-4 uk-margin-medium-right">
<h5 class="uk-text-secondary">Transparent methodology</h5>
<div>
We base our service on open science principles. We rely on open data sources, and document our algorithms
for every metric and indicator we publish.
</div>
</div>
</div>
<div uk-parallax="y: -100; easing: 0.5">
<div class="part uk-width-3-4 uk-margin-medium-left">
<h5 class="uk-text-secondary">Customised to your needs</h5>
<div>
Choose from a variety of pre-defined metrics. Select how to visualize them, and who to share with. Use our
advanced tools and expertise add add your own metrics.
</div>
</div>
</div>
<div uk-parallax="y: -100; easing: 2" class="uk-flex uk-flex-center">
<div class="part uk-width-3-4 uk-margin-large-left">
<h5 class="uk-text-secondary">Minimum effort to join</h5>
<div>
You only share some information with us to include in out backend aggregating and data mining, and we
deliver a view of your world. As you see fit.
</div>
</div>
</div>
</div>
<div class="uk-hidden@m uk-grid uk-child-width-1-1" uk-grid>
<div>
<h5 class="uk-text-secondary">Global outlook</h5>
<div>
Monitor is built on the OpenAIRE Research Graph. An interconnected scholarly communication shared data
resource from open initiatives around the world, of global interest.
</div>
</div>
<div>
<h5 class="uk-text-secondary">Transparent methodology</h5>
<div>
We base our service on open science principles. We rely on open data sources, and document our algorithms for
every metric and indicator we publish.
</div>
</div>
<div>
<h5 class="uk-text-secondary">Customised to your needs</h5>
<div>
Choose from a variety of pre-defined metrics. Select how to visualize them, and who to share with. Use our
advanced tools and expertise add add your own metrics.
</div>
</div>
<div>
<h5 class="uk-text-secondary">Minimum effort to join</h5>
<div>
You only share some information with us to include in out backend aggregating and data mining, and we deliver
a view of your world. As you see fit.
</div>
</div>
</div>
</div>
<div class="uk-text-center uk-margin-large">
<a class="uk-button portal-button" routerLink="/about">Learn More</a>
</div>
</div>
<div class="graph-section">
<div class="uk-section uk-container uk-margin-large">
<div class="uk-text-center uk-padding-small">
<h2>Tap into the OpenAIRE Research Graph</h2>
<div class="uk-flex uk-flex-center">
<div class="uk-width-3-4@m uk-margin-large-top uk-grid uk-child-width-1-5@m uk-child-width-1-2">
<div *ngIf="publicationsSize" class="uk-margin-medium-bottom uk-text-center">
<h3 class="uk-margin-remove portal-color">
<a class="uk-link-reset"
href="https://explore.openaire.eu/search/find/research-outcomes?type=publications" target=_blank>
<span class="uk-text-bold number">{{publicationsSize.number|number}}</span>{{publicationsSize.size}}
</a>
</h3>
<div class="uk-margin-small uk-text-large uk-text-uppercase">publications</div>
</div>
<div *ngIf="datasetsSize" class="uk-margin-medium-bottom uk-text-center">
<h3 class="uk-margin-remove portal-color">
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/research-outcomes?type=datasets"
target=_blank>
<span class="uk-text-bold number">{{datasetsSize.number|number}}</span>{{datasetsSize.size}}
</a>
</h3>
<div class="uk-margin-small uk-text-large uk-text-uppercase">datasets</div>
</div>
<div *ngIf="softwareSize" class="uk-margin-medium-bottom uk-text-center">
<h3 class="uk-margin-remove portal-color">
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/research-outcomes?type=software"
target="_blank">
<span class="uk-text-bold number">{{softwareSize.number|number}}</span>{{softwareSize.size}}
</a>
</h3>
<div class="uk-margin-small uk-text-large uk-text-uppercase">software</div>
</div>
<div *ngIf="otherSize" class="uk-margin-medium-bottom uk-text-center">
<h3 class="uk-margin-remove portal-color">
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/research-outcomes?type=other"
target="_blank">
<span class="uk-text-bold number">{{otherSize.number|number}}</span>{{otherSize.size}}
</a>
</h3>
<div class="uk-margin-small uk-text-large uk-text-uppercase">other</div>
</div>
<div *ngIf="fundersSize" class="uk-margin-medium-bottom uk-text-center">
<h3 class="uk-margin-remove portal-color">
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/projects" target="_blank">
<span class="uk-text-bold number">{{fundersSize.number|number}}</span>{{fundersSize.size}}
</a>
</h3>
<div class="uk-margin-small uk-text-large uk-text-uppercase">Funders</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="loading && stakeholders.length === 0" class="uk-container uk-container-large uk-margin-large-bottom">
<errorMessages [status]="[status]" [type]="'stakeholders'"></errorMessages>
</div>
<div *ngIf="!loading && stakeholders && stakeholders.length > 0"
class="uk-section uk-section-large uk-margin-right uk-margin-left uk-margin-large-top stakeholder-section">
<div class="uk-container" uk-filter="target: .stakeholders">
<ul class="uk-subnav uk-subnav-pill">
<li class="uk-active" uk-filter-control><a (click)="type = null">All</a></li>
<li uk-filter-control="[data-type='funder']"><a (click)="type = 'funder'">Funders</a></li>
<li uk-filter-control="[data-type='ri']"><a (click)="type = 'ri'">Research Initiatives</a></li>
<!--<li uk-filter-control="[data-type='project']"><a (click)="type = 'project'">Projects</a></li>-->
<li uk-filter-control="[data-type='organization']"><a (click)="type = 'organization'">Institutions</a></li>
</ul>
<div class="stakeholders uk-margin-large-top uk-child-width-1-1 uk-child-width-1-2@s uk-child-width-1-3@m uk-grid uk-flex-top uk-flex-wrap-top"
uk-grid="masonry: true" uk-height-match="target: .uk-card; row: false;">
<div *ngFor="let stakeholder of stakeholders" [attr.data-type]="stakeholder.type">
<a *ngIf="directLink && hasPermission(stakeholder)" [href]="getStakeholderPageUrl(stakeholder)" target="_blank">
<ng-container *ngTemplateOutlet="stakeholderCard; context: {stakeholder: stakeholder}"></ng-container>
</a>
<a *ngIf="!directLink && hasPermission(stakeholder)" (click)="confirmModalOpen(stakeholder)">
<ng-container *ngTemplateOutlet="stakeholderCard; context: {stakeholder: stakeholder}"></ng-container>
</a>
<ng-container *ngIf="!hasPermission(stakeholder)">
<ng-container *ngTemplateOutlet="stakeholderCard; context: {stakeholder: stakeholder}"></ng-container>
</ng-container>
</div>
<div *ngIf="stakeholdersNumber === 0" [attr.data-type]="type"
class="uk-text-center uk-text-large uk-width-1-1 uk-margin-large-top uk-padding-large">
Nothing here yet.
</div>
</div>
</div>
</div>
<div style="background: linear-gradient(0deg, #FFFFFF 0%, #EFF3F8 0%, #FAFAFA 100%);">
<div class="uk-section uk-container uk-text-center uk-margin-large-bottom">
<div class="uk-padding-small">
<h3>Contact us to help you.</h3>
<div class="uk-text-muted uk-margin-medium">
Are you looking for more? Get in touch with our team and let us help you.
</div>
<a class="uk-button portal-button" routerLink="/contact-us">CONTACT US</a>
</div>
</div>
</div>
<div class="uk-section-muted"
uk-scrollspy="{&quot;target&quot;:&quot;[uk-scrollspy-class]&quot;,&quot;cls&quot;:&quot;uk-animation-fade&quot;,&quot;delay&quot;:false}">
<div class="uk-container uk-container-large">
<other-portals [properties]="properties" portal="monitor"></other-portals>
</div>
</div>
<modal-alert #AlertModal (alertOutput)="goToPage($event)">
<div class="uk-text-left">
You will be navigated to a new tab. Are you sure that you want to proceed?
</div>
</modal-alert>
<ng-template #stakeholderCard let-stakeholder="stakeholder">
<div class="uk-card uk-card-default uk-text-center uk-position-relative" [class.disabled]="!hasPermission(stakeholder)">
<div *ngIf="stakeholder.visibility && stakeholder.visibility !== 'PUBLIC'"
class="uk-position-top-right uk-margin-top uk-margin-right uk-flex uk-flex-middle">
<icon [name]="visibilityIcon.get(stakeholder.visibility)"></icon>
<span class="space uk-text-small uk-text-capitalize">{{stakeholder.visibility.toLowerCase()}}</span>
</div>
<img *ngIf="stakeholder.logoUrl" class="uk-margin-auto" [src]="stakeholder | logoUrl">
<div class="uk-text-light uk-margin-medium-top">{{stakeholder.name}}</div>
</div>
<ng-template #tablet_text>
<div>
<h6 class="uk-margin-xsmall-bottom">
Monitor, discover and understand.
</h6>
<div>Track your organizations research output in a comprehensive manner. Identify research pathways across key
dimensions with granular and timely indicators.</div>
</div>
<div>
<h6 class="uk-margin-xsmall-bottom">
<span class="uk-text-primary">Enhance</span> open science uptake<span class="uk-text-primary">.</span>
</h6>
<div>Work with the Open Science expert community for open and transparent metrics. Discover Open Science costs and
trends for your organization. See how you fare in the European Open Science Cloud.</div>
</div>
<div>
<h6 class="uk-margin-xsmall-bottom">
Turn data into <span class="uk-text-primary">actionable insights.</span>
</h6>
<div>See what works and what not, reveal hidden potential. Measure research impact, discover trends, connections
and collaborations to improve and optimize your future actions.</div>
</div>
</ng-template>
<div *ngIf="!isMobile" class="uk-visible@m">
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden home-background">
<div class="uk-container uk-container-large"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-grid uk-flex-middle" uk-grid>
<div class="uk-width-3-5@l uk-margin-large-bottom">
<h1 class="uk-heading-large" uk-scrollspy-class>
A new era of <span class="uk-text-primary">monitoring</span> research<span
class="uk-text-primary">.</span>
</h1>
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
<div>Discover, track and understand trends and impact</div>
<div>pathways for your organization.</div>
<div>Make informed decisions.</div>
</div>
<div class="uk-margin-medium-top" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get
Started</a>
</div>
</div>
<div class="uk-width-expand" uk-scrollspy-class>
<div class="uk-position-relative">
<img style="padding: 1px" src="assets/monitor-assets/home/monitor.jpg">
<img class="uk-position-top-left" src="assets/monitor-assets/home/mask.svg">
</div>
</div>
</div>
</div>
</div>
<div class="uk-section tablet-section">
<div class="uk-container">
<div class="uk-text-center">
<span class="uk-h6 uk-text-primary">Funders. Research Institutions. Research Initiatives.</span>
<h2 class="uk-h1 uk-margin-remove-top">Simplify research<br> monitoring & evaluation<span
class="uk-text-primary">.</span></h2>
</div>
<div class="uk-grid uk-child-width-1-2 uk-flex uk-flex-middle uk-margin-medium-top" uk-grid>
<div>
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
</div>
<div class="uk-margin-medium-bottom">
<div class="uk-grid uk-child-width-1-1" uk-grid>
<ng-container *ngTemplateOutlet="tablet_text"></ng-container>
</div>
</div>
</div>
</div>
</div>
<div class="uk-background-norepeat graph-background">
<div class="uk-section uk-section-large uk-container uk-container-large uk-margin-large-top uk-margin-large-bottom uk-overflow-hidden">
<div class="uk-flex uk-flex-column uk-flex-middle">
<h2 class="uk-h1 uk-width-1-2@m uk-text-center">
Tap into the OpenAIRE Graph<span class="uk-text-primary">.</span>
</h2>
<div class="uk-width-1-2@m uk-text-center uk-margin-top">
The OpenAIRE Graph is one of the largest open scholarly record collections
worldwide, key in fostering Open Science and establishing its practices in the daily
research activities. Conceived as a public and transparent good, populated out of data
sources trusted by scientists, the Graph aims at bringing discovery, monitoring, and
assessment of science back in the hands of the scientific community.
</div>
</div>
<div class="uk-flex uk-flex-center uk-margin-top uk-margin-medium-bottom">
<div class="uk-width-1-1 uk-flex-center uk-grid" uk-grid uk-height-match="target: .targetName;"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<ng-template #numberCard let-numberSize="numberSize" let-name="name" let-url="url">
<a class="uk-card uk-card-default uk-card-hover uk-position-relative uk-padding-small uk-display-block uk-link-reset"
[href]="url" target="_blank" uk-scrollspy-class>
<div class="uk-height-small uk-width-small uk-flex uk-flex-center uk-flex-column">
<div class="uk-text-center">
<div class="uk-text-background uk-text-bold number">{{(numberSize.number|number) + numberSize.size}}</div>
<div class="uk-margin-small-top uk-text-large targetName">{{name}}</div>
</div>
</div>
</a>
</ng-template>
<div *ngIf="publicationsSize">
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: publicationsSize, name: openaireEntities.PUBLICATIONS,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=publications'}">
</ng-container>
</div>
<div *ngIf="datasetsSize">
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: datasetsSize, name: openaireEntities.DATASETS,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=datasets'}">
</ng-container>
</div>
<div *ngIf="softwareSize">
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: softwareSize, name: openaireEntities.SOFTWARE,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=software'}">
</ng-container>
</div>
<div *ngIf="otherSize">
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: otherSize, name: openaireEntities.OTHER,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=other'}">
</ng-container>
</div>
<div *ngIf="fundersSize">
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: fundersSize, name: stakeholderEntities.FUNDERS,
url: 'https://explore.openaire.eu/search/find/projects'}">
</ng-container>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom">
<div class="uk-grid uk-grid-xlarge" uk-grid>
<div class="uk-width-1-3@m uk-width-1-1 uk-text-left@m uk-text-center">
<h3 class="uk-margin-small-top">Openness. Usability. Replicability. <span
class="uk-text-primary">Trust</span><span class="uk-margin-right">.</span></h3>
<div class="uk-text-large uk-margin-bottom">Learn and work with a thriving community behind you.</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/about/learn-how">
<span class="uk-flex uk-flex-middle">
<span>Learn More</span>
</span>
</a>
</div>
<div class="uk-width-expand uk-margin-large-left"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
<div class="uk-grid uk-child-width-1-2@s uk-child-width-1-1 uk-grid-large" uk-grid>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Global outlook"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-remove-top">Comprehensive outlook</h5>
<div>
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph"
target="_blank">OpenAIRE Graph</a>. A global linked research
graph, a shared data resource from open initiatives around the world. Our indicators cover a
wide range of themes from input to impact.
</div>
</div>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-remove-top">Showcasing, monitoring, analysis</h5>
<div>
Customize your dashboard by choosing from a variety of pre-defined metrics and select which
ones to show publicly, which to invited team members, and which are still work in progress
(private).
</div>
</div>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Transparent methodology"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-remove-top">Transparent methodology</h5>
<div>
We base our service on Open Science principles. We rely on open data sources, and document
our algorithms for every metric and indicator we publish.
</div>
</div>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Minimum effort to join"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-remove-top">Minimum effort to join</h5>
<div>
You only share some information with us to include in our backend aggregating and data
mining, and we deliver a view of your world.
</div>
</div>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-remove-top">Tailor-made monitoring, responsive to your needs</h5>
<div>
Our experts work with you on demand in one-on-one sessions to provide additional indicators
and curate your data.
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom">
<div class="uk-width-1-2@m uk-margin-bottom">
<h2 class="uk-heading-xlarge">{{stakeholderEntities.STAKEHOLDERS}} in action<span
class="uk-text-primary">.</span></h2>
<div class="uk-text-large">
View existing {{stakeholderEntities.STAKEHOLDERS | lowercase}} from collaborating organizations. Get a
preview on how they work and how our service can be customized to serve you.
</div>
</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/browse">
<span class="uk-flex uk-flex-middle">
<span>Browse</span>
</span>
</a>
<div class="uk-margin-large-top">
<div *ngIf="loading" class="uk-height-large uk-flex uk-flex-column uk-flex-center">
<loading></loading>
</div>
<ng-container *ngIf="!loading">
<div>
<slider-tabs position="horizontal">
<slider-tab [tabId]="'all'" tabTitle="All"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.FUNDERS"
tabTitle="{{stakeholderEntities.FUNDERS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.RIS"
tabTitle="{{stakeholderEntities.RIS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.ORGANIZATIONS"
tabTitle="{{stakeholderEntities.ORGANIZATIONS | titlecase}}"></slider-tab>
</slider-tabs>
</div>
<ul class="uk-switcher">
<li>
<ng-container
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.stakeholders}"></ng-container>
</li>
<li>
<ng-container
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.funders}"></ng-container>
</li>
<li>
<ng-container
*ngTemplateOutlet="sliderTemplate; context: {slides:stakeholdersSlider.ris}"></ng-container>
</li>
<li>
<ng-container
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.organizations}"></ng-container>
</li>
</ul>
</ng-container>
<!-- Slider Template for Tab Content -->
<ng-template #sliderTemplate let-slides="slides">
<div uk-slider class="uk-slider uk-margin-medium-top">
<ul class="uk-slider-items" uk-height-match="target: .uk-card; row: false">
<!-- Margin right -->
<li *ngFor="let slide of slides; let i=index" class="uk-width-1-1">
<div class="uk-padding-small">
<div uk-grid class="uk-grid uk-child-width-1-3@l uk-child-width-1-2@m"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<ng-container *ngIf="i === 0">
<div *ngFor="let stakeholder of slide" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</ng-container>
<ng-container *ngIf="i !== 0">
<div *ngFor="let stakeholder of slide">
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</ng-container>
</div>
</div>
</li>
</ul>
<ul class="uk-slider-nav uk-dotnav uk-flex-center uk-margin-medium-top"></ul>
</div>
</ng-template>
</div>
</div>
<div #contact
class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-center uk-position-relative contact-us">
<img class="uk-box-shadow-large one" src="assets/monitor-assets/curators/1.jpg">
<img class="uk-box-shadow-large two" src="assets/monitor-assets/curators/2.jpg">
<img class="uk-box-shadow-large three" src="assets/monitor-assets/curators/3.jpg">
<img class="uk-box-shadow-large four" src="assets/monitor-assets/curators/4.jpg">
<div class="uk-text-center uk-width-2-3@l uk-width-1-2">
<h3>
Need more information or a demo? Get in touch and let us show you in practice how you can apply OpenAIRE
Monitor to your needs<span class="uk-text-primary">.</span>
</h3>
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom"
routerLink="/contact-us">Contact us</a>
</div>
</div>
</div>
<div *ngIf="isMobile || isServer" class="uk-hidden@m">
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden home-background">
<div class="uk-container uk-container-large"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-margin-large-bottom" style="max-width: 500px;">
<h1 class="uk-heading-small" uk-scrollspy-class>
A new era of <span class="uk-text-primary">monitoring</span> research<span
class="uk-text-primary">.</span>
</h1>
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
<div>Discover, track and understand trends and impact pathways for your organization.</div>
<div>Make informed decisions.</div>
</div>
</div>
</div>
<div class="uk-container uk-padding-remove-right uk-height-medium uk-position-relative">
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%; padding: 1px;"
src="assets/monitor-assets/home/monitor.jpg">
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%;"
src="assets/monitor-assets/home/mask.svg">
<div>
<a class="uk-button uk-button-primary uk-text-uppercase uk-position-relative" routerLink="/get-started">Get
Started</a>
</div>
</div>
</div>
<div class="uk-section uk-section-small tablet-section">
<div class="uk-container">
<div>
<span class="uk-text-large uk-text-primary">Funders. Research Institutions. Research Initiatives.</span>
<h2 class="uk-h1 uk-margin-remove-top">Simplify research<br> monitoring & evaluation<span
class="uk-text-primary">.</span></h2>
</div>
<div class="uk-grid uk-child-width-1-1 uk-child-width-1-2@s uk-flex uk-flex-middle uk-margin-medium-top" uk-grid>
<div class="uk-visible@s">
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
</div>
<div class="uk-hidden@s uk-margin-medium-left">
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
</div>
<div class="uk-margin-medium-bottom">
<div class="uk-grid uk-child-width-1-1" uk-grid>
<ng-container *ngTemplateOutlet="tablet_text"></ng-container>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-section-large uk-position-relative uk-overflow-hidden">
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph" loading="lazy"
style="width: 200px; top: -80px; left: -80px;">
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph" loading="lazy"
style="width: 200px; top: 60px; right: -145px; transform: rotate(-25deg)">
<div class="uk-container uk-container-large uk-section uk-section-large uk-padding-remove-bottom">
<div class="uk-flex uk-flex-column uk-flex-middle">
<h2 class="uk-h1 uk-text-center uk-padding uk-padding-remove-vertical uk-margin-top">
Tap into the OpenAIRE Research Graph<span class="uk-text-primary">.</span>
</h2>
<div class="uk-text-center">
The OpenAIRE Graph is one of the largest open scholarly record collections
worldwide, key in fostering Open Science and establishing its practices in the daily
research activities. Conceived as a public and transparent good, populated out of data
sources trusted by scientists, the Graph aims at bringing discovery, monitoring, and
assessment of science back in the hands of the scientific community.
</div>
</div>
</div>
<div class="uk-container uk-container-large uk-position-relative uk-overflow-hidden">
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph"
loading="lazy"
style="width: 200px; top: 35%; right: -170px; transform: rotate(-100deg);">
<div class="uk-flex uk-flex-center uk-margin-medium-top uk-margin-medium-bottom">
<div class="uk-width-1-1 uk-flex-center uk-grid uk-child-width-1-2" uk-grid
uk-height-match="target: .targetName;"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<ng-template #numberCardMobile let-numberSize="numberSize" let-name="name" let-url="url">
<a class="uk-position-relative uk-display-block uk-link-reset"
[href]="url" target="_blank" uk-scrollspy-class>
<div class="uk-flex uk-flex-center uk-flex-column uk-margin-auto uk-margin-top">
<div class="uk-text-center">
<div class="uk-text-background uk-text-bold number">{{(numberSize.number|number) + numberSize.size}}</div>
<div class="uk-margin-small-top uk-text-bolder targetName">{{name}}</div>
</div>
</div>
</a>
</ng-template>
<div *ngIf="publicationsSize">
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: publicationsSize, name: openaireEntities.PUBLICATIONS,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=publications'}">
</ng-container>
</div>
<div *ngIf="datasetsSize">
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: datasetsSize, name: openaireEntities.DATASETS,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=datasets'}">
</ng-container>
</div>
<div *ngIf="softwareSize">
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: softwareSize, name: openaireEntities.SOFTWARE,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=software'}">
</ng-container>
</div>
<div *ngIf="otherSize">
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: otherSize, name: openaireEntities.OTHER,
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=other'}">
</ng-container>
</div>
<div *ngIf="fundersSize">
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: fundersSize, name: stakeholderEntities.FUNDERS,
url: 'https://explore.openaire.eu/search/find/projects'}">
</ng-container>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-section-large uk-container uk-container-large uk-background-muted">
<div class="uk-text-center">
<div class="">
<h3 class="uk-heading-small uk-margin-remove">Openness.</h3>
<h3 class="uk-heading-small uk-margin-remove">Usability.</h3>
<h3 class="uk-heading-small uk-margin-remove">Replicability.</h3>
<h3 class="uk-heading-small uk-text-primary uk-margin-remove">Trust.</h3>
<div class="uk-text-large uk-margin-medium-top uk-margin-medium-bottom">Learn and work with a thriving
community behind you.
</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/about/learn-how">
<span class="uk-flex uk-flex-middle">
<span>Learn More</span>
</span>
</a>
</div>
<div class="uk-margin-xlarge-top"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
<div class="">
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Global outlook"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-top">Comprehensive outlook</h5>
<div>
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph"
target="_blank">OpenAIRE Graph</a>. A global linked research
graph, a shared data resource from open initiatives around the world. Our indicators cover a
wide range of themes from input to impact.
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-top">Showcasing, monitoring, analysis</h5>
<div>
Customize your dashboard by choosing from a variety of pre-defined metrics and select which
ones to show publicly, which to invited team members, and which are still work in progress
(private).
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Transparent methodology"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-top">Transparent methodology</h5>
<div>
We base our service on Open Science principles. We rely on open data sources, and document
our algorithms for every metric and indicator we publish.
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Minimum effort to join"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-top">Minimum effort to join</h5>
<div>
You only share some information with us to include in our backend aggregating and data
mining, and we deliver a view of your world.
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
customClass="uk-text-background"></icon>
</div>
<h5 class="uk-margin-top">Tailor-made monitoring, responsive to your needs</h5>
<div>
Our experts work with you on demand in one-on-one sessions to provide additional indicators
and curate your data.
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-section-large uk-padding-remove-bottom uk-container uk-container-large">
<div class="uk-margin-bottom">
<h2 class="uk-heading-xlarge">{{stakeholderEntities.STAKEHOLDERS}} in action<span
class="uk-text-primary">.</span></h2>
<div class="uk-text-large">
View existing {{stakeholderEntities.STAKEHOLDERS | lowercase}} from collaborating organizations. Get a
preview on how they work and how our service can be customized to serve you.
</div>
</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/browse">
<span class="uk-flex uk-flex-middle">
<span>Browse</span>
</span>
</a>
</div>
<div class="uk-margin-xlarge-top uk-margin-xlarge-bottom">
<div *ngIf="loading" class="uk-height-large uk-flex uk-flex-column uk-flex-center">
<loading></loading>
</div>
<ng-container *ngIf="!loading">
<div class="uk-padding-small uk-padding-remove-right">
<slider-tabs position="horizontal">
<slider-tab [tabId]="'all'" tabTitle="All"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.FUNDERS"
tabTitle="{{stakeholderEntities.FUNDERS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.RIS"
tabTitle="{{stakeholderEntities.RIS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.ORGANIZATIONS"
tabTitle="{{stakeholderEntities.ORGANIZATIONS | titlecase}}"></slider-tab>
</slider-tabs>
</div>
<ul class="uk-switcher uk-margin-top uk-overflow-hidden">
<li [id]="'all'" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right"
uk-height-match="target: .uk-card; row: false">
<div class="uk-grid uk-grid-small uk-flex-nowrap"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let stakeholder of stakeholders"
class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</div>
</div>
</li>
<li [id]="stakeholderEntities.FUNDERS" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right"
uk-height-match="target: .uk-card; row: false">
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let funder of funders" class="uk-width-4-5 uk-width-2-5@s uk-flex-none"
uk-scrollspy-class>
<browse-stakeholder [stakeholder]="funder"></browse-stakeholder>
</div>
</div>
</div>
</li>
<li [id]="stakeholderEntities.RIS" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right"
uk-height-match="target: .uk-card; row: false">
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let ri of ris" class="uk-width-4-5 uk-width-2-5@s uk-flex-none"
uk-scrollspy-class>
<browse-stakeholder [stakeholder]="ri"></browse-stakeholder>
</div>
</div>
</div>
</li>
<li [id]="stakeholderEntities.ORGANIZATIONS" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right"
uk-height-match="target: .uk-card; row: false">
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let organization of organizations"
class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="organization"></browse-stakeholder>
</div>
</div>
</div>
</li>
</ul>
</ng-container>
</div>
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom contact-us">
<div class="uk-position-relative">
<h2 class="uk-margin-medium-bottom">
Need more information or a demo?
</h2>
<div class="uk-text-large">
Get in touch and let us show you in practice how you can apply OpenAIRE Monitor to your needs<span
class="uk-text-primary">.</span>
</div>
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom"
routerLink="/contact-us">Contact us</a>
</div>
</div>
</div>

View File

@ -0,0 +1,75 @@
@import (reference) "~src/assets/openaire-theme/less/_import-variables";
@home-curator-image-size: 136px;
.home-background {
background-color: @global-inverse-color;
}
.tablet-section {
background-image:linear-gradient(180deg, @global-inverse-color 0%, @global-muted-background 100%);
background-repeat: no-repeat;
background-position: top;
background-size: cover;
}
@media only screen and (min-width: @breakpoint-medium) {
.tablet-section {
background-image:url("~src/assets/monitor-assets/home/monitor-dark-logo.svg"), linear-gradient(180deg, @global-inverse-color 0%, @global-muted-background 100%);
background-repeat: no-repeat;
background-position: -5% 95%, top;
background-size: 60%, cover;
}
}
.graph-background {
background-image: url('~src/assets/monitor-assets/home/graph.svg');
background-position-y: 50%;
background-position-x: -5%;
background-size: 25%;
}
#bullets {
& > div {
max-width: 360px !important;
}
}
.contact-us {
img {
position: absolute;
width: @home-curator-image-size;
height: @home-curator-image-size;
object-fit: cover;
border-radius: 18px;
&.one {
top: 0;
left: @global-medium-gutter + (@home-curator-image-size/2);
transform: rotate(10deg);
}
&.two {
bottom: 0;
left: @global-medium-gutter;
transform: rotate(-10deg);
object-position: top;
}
&.three {
top: 0;
right: @global-medium-gutter;
transform: rotate(-10deg);
object-position: -60px;
}
&.four {
bottom: 0;
right: @global-medium-gutter + (@home-curator-image-size/2);
transform: rotate(-10deg);
object-position: 0;
}
}
}

View File

@ -1,10 +1,20 @@
import {Component, ViewChild} from '@angular/core';
import {
AfterViewInit,
ChangeDetectorRef,
Component,
ElementRef,
Inject,
OnDestroy,
OnInit,
PLATFORM_ID,
QueryList,
ViewChild,
ViewChildren
} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {Meta, Title} from '@angular/platform-browser';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.component';
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
@ -12,83 +22,59 @@ import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {RefineFieldResultsService} from "../openaireLibrary/services/refineFieldResults.service";
import {NumberUtils} from "../openaireLibrary/utils/number-utils.class";
import {SearchResearchResultsService} from "../openaireLibrary/services/searchResearchResults.service";
import {animate, state, style, transition, trigger} from "@angular/animations";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {LocalStorageService} from "../openaireLibrary/services/localStorage.service";
import {Stakeholder, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
import {Session, User} from "../openaireLibrary/login/utils/helper.class";
import {Stakeholder, StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
import {User} from "../openaireLibrary/login/utils/helper.class";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {properties} from "../../environments/environment";
import {Subscriber} from "rxjs";
import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
import {IDeactivateComponent} from "../openaireLibrary/utils/can-exit.guard";
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
import {isPlatformServer} from '@angular/common';
import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
@Component({
selector: 'home',
templateUrl: 'home.component.html',
styleUrls: ['home.component.css'],
animations: [
trigger('1', [
state('1', style({
opacity: 1
})),
transition('* => *', [
animate('0.3s')
])
]),
trigger('2', [
state('2', style({
opacity: 1
})),
transition('* => *', [
animate('0.3s')
])
]),
trigger('3', [
state('3', style({
opacity: 1
})),
transition('* => *', [
animate('0.3s')
])
])
]
styleUrls: ['home.component.less']
})
export class HomeComponent {
export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactivateComponent {
public pageTitle = "OpenAIRE | Monitor";
public stakeholders: Stakeholder[] = [];
public description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators.";
public stakeholders: StakeholderInfo[] = [];
public stakeholdersSlider: {
stakeholders: StakeholderInfo[][];
funders: StakeholderInfo[][];
ris: StakeholderInfo[][];
organizations: StakeholderInfo[][];
};
public selected: Stakeholder = null;
public pageContents = null;
public divContents = null;
// Message variables
public status: number;
public loading: boolean = true;
public subscriberErrorMessage: string = "";
public errorCodes: ErrorCodes;
private errorMessages: ErrorMessagesComponent;
properties: EnvProperties;
public keyword: string = "";
public type: string = null;
public properties: EnvProperties = properties;
public openaireEntities = OpenaireEntities;
public stakeholderEntities = StakeholderEntities;
public directLink: boolean = true;
public publicationsSize: any = null;
public datasetsSize: any = null;
public softwareSize: any = null;
public otherSize: any = null;
public fundersSize: any = null;
subscriptions = [];
public state = 1;
private timeouts: any[] = [];
@ViewChild('AlertModal') modal;
public directLink: boolean = true;
private errorMessages: ErrorMessagesComponent;
private subscriptions = [];
private mutationObserver: MutationObserver;
private user: User;
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string> ([
["PUBLIC", 'earth'],
["PRIVATE", 'lock'],
["RESTRICTED", 'group']
]);
@ViewChild('contact') contact: ElementRef;
isMobile: boolean = false;
isServer: boolean;
constructor(
private route: ActivatedRoute,
private _router: Router,
private _meta: Meta,
private _title: Title,
@ -98,63 +84,86 @@ export class HomeComponent {
private userManagementService: UserManagementService,
private helper: HelperService,
private seoService: SEOService,
private _refineFieldResultsService: RefineFieldResultsService, private _searchResearchResultsService: SearchResearchResultsService) {
var description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators. ";
var title = "OpenAIRE - Monitor";
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
this._meta.updateTag({content: title}, "property='og:title'");
this._title.setTitle(title);
private _refineFieldResultsService: RefineFieldResultsService,
private _searchResearchResultsService: SearchResearchResultsService,
private quickContactService: QuickContactService,
private layoutService: LayoutService,
private cdr: ChangeDetectorRef,
@Inject(PLATFORM_ID) private platform: any) {
this._meta.updateTag({content: this.description}, "name='description'");
this._meta.updateTag({content: this.description}, "property='og:description'");
this._meta.updateTag({content: this.pageTitle}, "property='og:title'");
this._title.setTitle(this.pageTitle);
this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent();
this.status = this.errorCodes.LOADING;
this.isServer = isPlatformServer(this.platform);
this.quickContactService.setDisplay(false);
}
public ngOnInit() {
this.properties = properties;
var url = this.properties.domain + this.properties.baseLink + this._router.url;
let url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Monitor", this.properties.piwikSiteId).subscribe());
}
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Monitor").subscribe());
this.getNumbers();
this.getStakeholders();
// this.createGifs();
//this.getDivContents();
// this.getPageContents();
this.subscriptions.push(this.localStorageService.get().subscribe(value => {
this.directLink = value;
}));
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
this.getStakeholders();
}));
if(typeof document != "undefined") {
this.startAnimation();
this.layoutService.isMobile.subscribe(isMobile => {
this.isMobile = isMobile;
this.cdr.detectChanges();
});
}
canExit(): boolean {
this.clear();
return true;
}
ngOnDestroy() {
this.quickContactService.setDisplay(true);
this.clear();
}
clear() {
this.subscriptions.forEach(value => {
if (value instanceof Subscriber) {
value.unsubscribe();
} else if (value instanceof IntersectionObserver || value instanceof MutationObserver) {
value.disconnect();
}
});
if(this.mutationObserver) {
this.mutationObserver.disconnect();
}
}
public startAnimation(state = 1) {
this.clearTimeouts();
this.state = state;
this.timeouts.push(setTimeout(() => {
if (this.state < 3) {
this.startAnimation(this.state + 1);
} else {
this.startAnimation();
}
}, 6000));
ngAfterViewInit() {
if(typeof window !== "undefined") {
this.createObservers();
}
}
private clearTimeouts() {
this.timeouts.forEach(timeout => {
clearTimeout(timeout);
});
createObservers() {
let options = {
root: null,
rootMargin: '200px',
threshold: 1.0
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
this.quickContactService.setDisplay(!entry.isIntersecting);
});
}, options);
if(this.contact) {
intersectionObserver.observe(this.contact.nativeElement);
}
this.subscriptions.push(intersectionObserver);
}
private getPageContents() {
@ -169,16 +178,8 @@ export class HomeComponent {
}));
}
public get stakeholdersNumber(): number {
if(this.type === null) {
return this.stakeholders.length;
} else {
return this.stakeholders.filter(stakeholder => stakeholder.type === this.type).length;
}
}
getNumbers() {
this.subscriptions.push(this._refineFieldResultsService.getRefineFieldsResultsByEntityName(["funder"], "project", this.properties).subscribe(
this.subscriptions.push(this._refineFieldResultsService.getAllRefineFieldResultsByFieldName("funder", "project", this.properties).subscribe(
data => {
if (data[1].length > 0 && data[1][0].filterId == "funder" && data[1][0].values) {
this.fundersSize = NumberUtils.roundNumber(data[1][0].values.length);
@ -188,7 +189,7 @@ export class HomeComponent {
//console.log(err);
this.handleError("Error getting 'funder' field results of projects", err);
}));
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("publication", "", this.properties).subscribe(
data => {
if (data && data > 0) {
@ -200,7 +201,7 @@ export class HomeComponent {
this.handleError("Error getting number of publications", err);
}
));
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("dataset", "", this.properties).subscribe(
data => {
if (data && data > 0) {
@ -212,7 +213,7 @@ export class HomeComponent {
this.handleError("Error getting number of research data", err);
}
));
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("software", "", this.properties).subscribe(
data => {
if (data && data > 0) {
@ -223,7 +224,7 @@ export class HomeComponent {
this.handleError("Error getting number of software data", err);
}
));
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("other", "", this.properties).subscribe(
data => {
if (data && data > 0) {
@ -241,107 +242,90 @@ export class HomeComponent {
public getStakeholders() {
this.loading = true;
this.status = this.errorCodes.LOADING;
this.subscriberErrorMessage = "";
this.subscriptions.push(this._stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL).subscribe(
stakeholders => {
if (!stakeholders || stakeholders.length == 0) {
this.status = this.errorCodes.NONE;
} else {
// compare function for alphabetical order based on the 'name' property
function compare (a, b) {
if(a.name < b.name) {
return -1;
}
if(a.name > b.name) {
return 1;
}
return 0;
}
let publicStakeholders = [];
let restrictedStakeholders = [];
stakeholders.forEach(stakeholder => {
if(stakeholder.visibility == "PUBLIC") {
publicStakeholders.push(stakeholder);
} else {
restrictedStakeholders.push(stakeholder);
}
});
// actual sorting of the arrays
publicStakeholders.sort(compare);
restrictedStakeholders.sort(compare);
// joining the two arrays again
this.stakeholders = publicStakeholders.concat(restrictedStakeholders);
this.stakeholders = StakeholderInfo.toStakeholderInfo(stakeholders, this.user);
this.sort(this.stakeholders);
this.stakeholders = this.publicStakeholders.concat(this.privateStakeholders);
this.stakeholdersSlider = {
stakeholders: this.stakeholderSlider(this.stakeholders),
funders: this.stakeholderSlider(this.funders),
ris: this.stakeholderSlider(this.ris),
organizations: this.stakeholderSlider(this.organizations)
};
}
this.loading = false;
},
error => {
this.status = this.handleError("Error getting funders", error);
this.status = this.handleError("Error getting stakeholders", error);
this.loading = false;
}
));
}
private isManager(stakeholder: Stakeholder) {
return Session.isPortalAdministrator(this.user) || Session.isMonitorCurator(this.user) || Session.isManager(stakeholder.type, stakeholder.alias, this.user);
private sort(results: StakeholderInfo[]) {
results.sort((left, right): number => {
if (left.name > right.name) {
return 1;
} else if (left.name < right.name) {
return -1;
} else {
return 0;
}
})
}
private isMember(stakeholder: Stakeholder) {
return Session.isMember(stakeholder.type, stakeholder.alias, this.user);
public stakeholderSlider(stakeholders: StakeholderInfo[], size: number = 6): StakeholderInfo[][] {
let slider: StakeholderInfo[][] = [];
for (let i = 0; i < (stakeholders.length / size); i++) {
slider.push(stakeholders.slice(i * size, ((i + 1) * size)));
}
return slider;
}
public confirmModalOpen(result: Stakeholder) {
this.selected = result;
this.modal.cancelButton = true;
this.modal.okButton = true;
this.modal.alertTitle = 'You are going to visit ' + result.name + ' Monitor Dashboard';
this.modal.alertMessage = false;
this.modal.okButtonLeft = false;
this.modal.okButtonText = 'Yes';
this.modal.cancelButtonText = 'No';
this.modal.choice = true;
this.modal.open();
get publicStakeholders(): StakeholderInfo[] {
return this.stakeholders.filter(stakeholder => stakeholder.visibility === "PUBLIC");
}
public getStakeholderPageUrl(stakeholder: Stakeholder) {
return this.properties.domain + this.properties.baseLink + '/dashboard/' + stakeholder.alias;
get privateStakeholders(): StakeholderInfo[] {
return this.stakeholders.filter(stakeholder => stakeholder.visibility !== "PUBLIC");
}
public goToPage(data: any) {
if (data.value == true) {
let url = this.getStakeholderPageUrl(this.selected);
this.localStorageService.setCommunityDirectLink(data.choice);
window.open(url, '_blank');
get funders(): StakeholderInfo[] {
if (this.stakeholders) {
return this.stakeholders.filter(stakeholder => stakeholder.type === "funder");
} else {
return [];
}
}
public quote(param: string): string {
return StringUtils.quote(param);
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
this.clearTimeouts();
get ris(): StakeholderInfo[] {
if (this.stakeholders) {
return this.stakeholders.filter(stakeholder => stakeholder.type === "ri");
} else {
return [];
}
}
hasPermission(stakeholder: Stakeholder) {
return stakeholder.visibility === "PUBLIC" || this.isManager(stakeholder) || this.isMember(stakeholder);
get organizations(): StakeholderInfo[] {
if (this.stakeholders) {
return this.stakeholders.filter(stakeholder => stakeholder.type === "organization");
} else {
return [];
}
}
private handleError(message: string, error): number {
var code = "";
let code = "";
if (!error.status) {
var error = error.json();
code = error.code;
} else {
code = error.status;
}
console.error("Home Component: " + message, error);
return this.errorMessages.getErrorCode(code);
}
}

View File

@ -2,11 +2,8 @@ import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {RouterModule} from '@angular/router';
import {HomeComponent} from './home.component';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {ErrorMessagesModule} from '../openaireLibrary/utils/errorMessages.module';
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
@ -18,16 +15,19 @@ import {RefineFieldResultsServiceModule} from "../openaireLibrary/services/refin
import {SearchResearchResultsServiceModule} from "../openaireLibrary/services/searchResearchResultsService.module";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {group, lock} from "../openaireLibrary/utils/icons/icons";
import {UrlPrefixModule} from "../openaireLibrary/utils/pipes/url-prefix.module";
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
import {SectionScrollModule} from '../openaireLibrary/utils/section-scroll/section-scroll.module';
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
import {BrowseStakeholderModule} from "../browse-stakeholder/browse-stakeholder.module";
import {SliderTabsModule} from '../openaireLibrary/sharedComponents/tabs/slider-tabs.module';
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule, ErrorMessagesModule, OtherPortalsModule,
HelperModule, Schema2jsonldModule, SEOServiceModule, HomeRoutingModule, SearchResearchResultsServiceModule,
RefineFieldResultsServiceModule, AlertModalModule, IconsModule, UrlPrefixModule, LogoUrlPipeModule
RefineFieldResultsServiceModule, AlertModalModule, IconsModule, UrlPrefixModule, LogoUrlPipeModule,
SectionScrollModule, LoadingModule, BrowseStakeholderModule, SliderTabsModule
],
declarations: [
HomeComponent
@ -41,7 +41,5 @@ import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.modu
]
})
export class HomeModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([group, lock])
}
constructor() {}
}

View File

@ -1,15 +0,0 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {LearnHowComponent} from "./learn-how.component";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: LearnHowComponent, canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class LearnHowRoutingModule { }

View File

@ -1,197 +0,0 @@
@media only screen and (min-width: 640px) {
.process .zero {
position: relative;
padding: 0 8% 0 3%;
}
.process .zero::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/1.svg");
top: 57%;
right: -6%;
width: 30%;
height: 21%;
background-size: contain;
background-repeat: no-repeat;
}
.process .first {
position: relative;
padding: 3% 6% 0 4%;
}
.process .first::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/2.svg");
top: 78%;
right: -9%;
width: 30%;
height: 21%;
background-size: contain;
background-repeat: no-repeat;
}
.process .second {
position: relative;
padding: 6% 6% 0 4.8%;
}
.process .second::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/3.svg");
top: 100%;
left: 50%;
width: 30%;
height: 48%;
background-size: contain;
background-repeat: no-repeat;
}
.process .third {
position: relative;
padding: 8% 9% 0 3%;
}
.process .third::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/4.svg");
top: 68%;
left: -25%;
width: 30%;
height: 15%;
background-size: contain;
background-repeat: no-repeat;
}
.process .fourth {
position: relative;
padding: 14% 8% 0 3%;
}
.process .fourth::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/5.svg");
top: 87%;
left: -25%;
width: 30%;
height: 15%;
background-size: contain;
background-repeat: no-repeat;
}
.process .fifth {
padding: 16% 10% 0 2%;
}
}
@media only screen and (max-width: 639px) {
.process .zero {
position: relative;
padding: 0 12% 0 12%;
}
.process .zero::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/1.svg");
top: 100%;
right: 11%;
width: 30%;
height: 21%;
-moz-transform: rotate(90deg);
-o-transform: rotate(90deg);
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
background-size: contain;
background-repeat: no-repeat;
}
.process .first {
position: relative;
padding: 20% 7% 0 12%;
}
.process .first::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/2.svg");
top: 105%;
left: 2%;
width: 30%;
height: 21%;
-moz-transform: rotate(35deg);
-o-transform: rotate(35deg);
-webkit-transform: rotate(35deg);
transform: rotate(35deg);
background-size: contain;
background-repeat: no-repeat;
}
.process .second {
position: relative;
padding: 20% 7% 0 12%;
}
.process .second::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/3.svg");
top: 100%;
left: 66%;
width: 30%;
height: 48%;;
background-size: contain;
background-repeat: no-repeat;
}
.process .third {
position: relative;
padding: 20% 7% 0 16%;
}
.process .third::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/4.svg");
top: 106%;
left: 5%;
width: 30%;
height: 15%;
-moz-transform: rotate(215deg) scaleY(-1);
-o-transform: rotate(215deg) scaleY(-1);
-webkit-transform: rotate(215deg) scaleY(-1);
transform: rotate(215deg) scaleY(-1);
background-size: contain;
background-repeat: no-repeat;
}
.process .fourth {
position: relative;
padding: 20% 8% 0 16%;
}
.process .fourth::after {
content: "";
position: absolute;
background-image: url("/assets/monitor-assets/about/arrows/5.svg");
top: 100%;
right: 0;
width: 30%;
height: 19%;
-moz-transform: rotate(310deg);
-o-transform: rotate(310deg);
-webkit-transform: rotate(310deg);
transform: rotate(310deg);
background-size: contain;
background-repeat: no-repeat;
}
.process .fifth {
padding: 20% 7.6% 0 16%;
}
}

View File

@ -1,98 +0,0 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld>
<div class="uk-section uk-container uk-container-large">
<div class="uk-padding-small">
<div class="uk-flex uk-flex-center">
<div class="uk-text-center uk-width-2-5@m uk-width-2-3@s">
<h1 class="uk-h2">Learn the process</h1>
<h6 class="uk-text-muted uk-margin-remove">
Use the Monitor Dashboard to view your research results, open science…
</h6>
</div>
</div>
<div class="process uk-margin-large-top">
<div class="uk-flex uk-flex-wrap uk-child-width-1-3@s">
<div class="zero">
<div class="uk-text-center">
<img width="90" src="../../assets/monitor-assets/about/process/0.png">
</div>
<h6>0. Starting from the OpenAIRE RESEARCH GRAPH</h6>
<div class="uk-text-small uk-text-muted">
<a class="uk-link" href="https://graph.openaire.eu" target="_blank">OpenAIRE Research Graph</a> aggregates
a collection of research data properties for funders, organizations,
researchers, research communities and publishers to interlink information by using a semantic graph
database approach.
</div>
</div>
<div class="first">
<div class="uk-text-center">
<img width="110" src="../../assets/monitor-assets/about/process/1.png">
</div>
<h6>1. Provide us some information</h6>
<div class="uk-text-small uk-text-muted">
You give us some simple (meta)data related to your organization function: e.g., funding database,
repositories, related projects, registry of people… All under confidential agreements.
</div>
</div>
<div class="second">
<div class="uk-text-center">
<img width="100" src="../../assets/monitor-assets/about/process/2.png">
</div>
<h6>2. We get the ball rolling</h6>
<div class="uk-text-small uk-text-muted">
We ingest your data in our system and start the work: we clean and normalize your data, we identify and
extract related information, we infer links. We refine until we are happy of the results and present to
you.
</div>
</div>
</div>
<div class="uk-flex uk-flex-wrap uk-child-width-1-3@s">
<div class="third uk-flex-last@s">
<div class="uk-text-center">
<img width="105" src="../../assets/monitor-assets/about/process/3.png">
</div>
<h6>3. You validate</h6>
<div class="uk-text-small uk-text-muted">
After the first iteration you examine our results to ensure you are satisfied with what you see. As
numbers are important, we advise you to take your time and tell us of any deviations. We correct, you
check, you approve.
</div>
</div>
<div class="fourth">
<div class="uk-text-center">
<img width="135" src="../../assets/monitor-assets/about/process/4.png">
</div>
<h6>4. You set up your portal</h6>
<div class="uk-text-small uk-text-muted">
Using our admin panel you set up your portal. You decide what metrics are of interest to you (full
documentation available). You decide what you want to publish, what to keep private, what to share with
colleagues.
</div>
</div>
<div class="fifth uk-flex-first@s">
<div class="uk-text-center">
<img width="105" src="../../assets/monitor-assets/about/process/5.png">
</div>
<h6>5. You track, monitor, report</h6>
<div class="uk-text-small uk-text-muted">
Now your views are updated every two weeks, as new content and new providers join OpenAIRE. You are
notified about new metrics and indicators as we keep on enriching the OpenAIRE Research Graph and you may
add them as they come along.
</div>
</div>
</div>
</div>
</div>
</div>
<div class="uk-section uk-container uk-container-large">
<div class="uk-padding-small">
<div class="uk-text-center">
<h2>See how it works</h2>
<h6 class="uk-text-muted uk-margin-remove">
Simplify research tracking & monitoring
</h6>
</div>
<div class="uk-margin-large-top">
<how></how>
</div>
</div>
</div>

View File

@ -1,30 +0,0 @@
import { NgModule} from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {LearnHowComponent} from "./learn-how.component";
import {LearnHowRoutingModule} from "./learn-how-routing.module";
import {GifSliderModule} from "../openaireLibrary/utils/gif-slider/gif-slider.module";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {HowModule} from "../openaireLibrary/monitor/how/how.module";
@NgModule({
imports: [
CommonModule, RouterModule, LearnHowRoutingModule, GifSliderModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, HowModule
],
declarations: [
LearnHowComponent
],
exports: [
LearnHowComponent
],
providers:[
PreviousRouteRecorder, PiwikService
]
})
export class LearnHowModule { }

View File

@ -0,0 +1,16 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
import {MyStakeholdersComponent} from "./my-stakeholders.component";
@NgModule({
imports: [
RouterModule.forChild([
{path: '', component: MyStakeholdersComponent, canActivate: [LoginGuard], canDeactivate: [PreviousRouteRecorder]}
])
]
})
export class MyStakeholdersRoutingModule {
}

View File

@ -0,0 +1,105 @@
<schema2jsonld [URL]="properties.domain + properties.baseLink"
[logoURL]="properties.domain + properties.baseLink+'/assets/common-assets/logo-small-monitor.png'"
type="home"
name="OpenAIRE Monitor">
</schema2jsonld>
<div>
<div class="uk-section uk-container uk-container-large">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
<div class="uk-margin-large-top uk-margin-large-bottom">
<div *ngIf="loading" class="uk-height-large uk-flex uk-flex-column uk-flex-center">
<loading></loading>
</div>
<div *ngIf="!loading">
<div *ngIf="manager.length > 0 || member.length > 0">
<div *ngIf="manager.length > 0" [class.uk-margin-xlarge-bottom]="member.length > 0">
<h1 class="uk-h1">You are managing</h1>
<div class="uk-margin-large-top" uk-height-match="target: .uk-card">
<div class="uk-visible@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-4 uk-flex-center" uk-grid>
<div *ngFor="let stakeholder of manager.slice(0, 4); let i = index">
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</div>
<div *ngIf="manager.length > 4" class="uk-text-center uk-margin-large-top">
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/browse"
[queryParams]="{role: quote('manager')}">
<span class="uk-flex uk-flex-middle">
<span>View All ({{manager.length}})</span>
</span>
</a>
</div>
</div>
<div class="uk-hidden@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-3@m uk-child-width-1-1 uk-flex-center" uk-grid>
<div *ngFor="let stakeholder of manager.slice(0, 3); let i = index">
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</div>
<div *ngIf="manager.length > 3" class="uk-text-center uk-margin-large-top">
<a class="uk-hidden@xl uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/browse"
[queryParams]="{role: quote('manager')}">
<span class="uk-flex uk-flex-middle">
<span>View All ({{manager.length}})</span>
</span>
</a>
</div>
</div>
</div>
</div>
<div *ngIf="member.length > 0">
<h1 class="uk-h1">You are member of</h1>
<div class="uk-margin-large-top" uk-height-match="target: .uk-card">
<div class="uk-visible@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-4 uk-flex-center" uk-grid>
<div *ngFor="let stakeholder of member.slice(0, 4); let i = index">
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</div>
<div *ngIf="member.length > 4" class="uk-text-center uk-margin-large-top">
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/browse"
[queryParams]="{role: quote('member')}">
<span class="uk-flex uk-flex-middle">
<span>View All ({{member.length}})</span>
</span>
</a>
</div>
</div>
<div class="uk-hidden@xl">
<div class="uk-grid-match uk-grid-medium uk-child-width-1-3@m uk-child-width-1-1 uk-flex-center" uk-grid>
<div *ngFor="let stakeholder of member.slice(0, 3); let i = index">
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</div>
<div *ngIf="member.length > 3" class="uk-text-center uk-margin-large-top">
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/browse"
[queryParams]="{role: quote('member')}">
<span class="uk-flex uk-flex-middle">
<span>View All ({{member.length}})</span>
</span>
</a>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="manager.length === 0 && member.length === 0">
<div class="uk-flex uk-flex-center uk-margin-large-bottom">
<div class="uk-card uk-card-default">
<div class="uk-card-body uk-text-bold uk-text-center ">
You are not yet member in any {{stakeholderEntities.STAKEHOLDERS}}.<br>
Start by browsing and subscribing in those that you are interested in.
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,151 @@
import {Component} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {Meta, Title} from '@angular/platform-browser';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {User} from '../openaireLibrary/login/utils/helper.class';
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.component';
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {properties} from "../../environments/environment";
import {Subscriber} from "rxjs";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
@Component({
selector: 'my-stakeholders',
templateUrl: 'my-stakeholders.component.html',
})
export class MyStakeholdersComponent {
public stakeholderEntities = StakeholderEntities;
public pageTitle = "OpenAIRE | My " + this.stakeholderEntities.STAKEHOLDERS;
public description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies | My managing and member of " + this.stakeholderEntities.STAKEHOLDERS;
public stakeholders: StakeholderInfo[] = [];
public pageContents = null;
public divContents = null;
// Message variables
public status: number;
public loading: boolean = true;
public subscriberErrorMessage: string = "";
public errorCodes: ErrorCodes;
private errorMessages: ErrorMessagesComponent;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'My ' + this.stakeholderEntities.STAKEHOLDERS}];
public properties: EnvProperties = properties;
private user: User;
private subscriptions = [];
constructor(
private route: ActivatedRoute,
private _router: Router,
private _meta: Meta,
private _title: Title,
private _piwikService: PiwikService,
private stakeholderService: StakeholderService,
private helper: HelperService,
private seoService: SEOService,
private userManagementService: UserManagementService) {
this._meta.updateTag({content: this.description}, "name='description'");
this._meta.updateTag({content: this.description}, "property='og:description'");
this._meta.updateTag({content: this.pageTitle}, "property='og:title'");
this._title.setTitle(this.pageTitle);
this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent();
this.status = this.errorCodes.LOADING;
}
public ngOnInit() {
var url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Connect").subscribe());
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
if (this.user) {
this.getStakeholders();
}
//this.getDivContents();
//this.getPageContents();
}));
}
private getPageContents() {
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
private getDivContents() {
this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => {
this.divContents = contents;
}));
}
get manager(): StakeholderInfo[] {
return (this.stakeholders)?this.stakeholders.filter(stakeholder => stakeholder.isManager):[];
}
get member(): StakeholderInfo[] {
return (this.stakeholders)?this.stakeholders.filter(stakeholder => stakeholder.isMember):[];
}
public getStakeholders() {
this.loading = true;
this.status = this.errorCodes.LOADING;
this.subscriberErrorMessage = "";
this.stakeholders = [];
this.subscriptions.push(this.stakeholderService.getMyStakeholders(properties.monitorServiceAPIURL).subscribe(
stakeholders => {
this.stakeholders = StakeholderInfo.toStakeholderInfo(stakeholders, this.user);
this.sort(this.stakeholders);
this.loading = false;
},
error => {
this.status = this.handleError("Error getting communities", error);
this.loading = false;
}
));
}
private sort(results: StakeholderInfo[]) {
results.sort((left, right): number => {
if (left.name > right.name) {
return 1;
} else if (left.name < right.name) {
return -1;
} else {
return 0;
}
})
}
public quote(param: string): string {
return StringUtils.quote(param);
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
}
private handleError(message: string, error): number {
let code = "";
if (!error.status) {
code = error.code;
} else {
code = error.status;
}
console.error("Communities (component): " + message, error);
return this.errorMessages.getErrorCode(code);
}
}

View File

@ -0,0 +1,38 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {RouterModule} from '@angular/router';
import {ManageModule} from '../openaireLibrary/utils/manage/manage.module';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {ErrorMessagesModule} from '../openaireLibrary/utils/errorMessages.module';
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {MyStakeholdersRoutingModule} from "./my-stakeholders-routing.module";
import {MyStakeholdersComponent} from "./my-stakeholders.component";
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
import {BrowseStakeholderModule} from "../browse-stakeholder/browse-stakeholder.module";
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule, HelperModule,
ManageModule, ErrorMessagesModule, Schema2jsonldModule, SEOServiceModule,
MyStakeholdersRoutingModule, BreadcrumbsModule, LoadingModule, BrowseStakeholderModule
],
declarations: [
MyStakeholdersComponent
],
providers: [
LoginGuard, PreviousRouteRecorder, PiwikService
],
exports: [
MyStakeholdersComponent
]
})
export class MyStakeholdersModule {
}

@ -1 +1 @@
Subproject commit 965b1ee134bc56313b5912e83a2ae23387e4c493
Subproject commit 1a7624eed148c35659891198c403580dd48e3619

View File

@ -1,4 +1,4 @@
import {Component, ViewChild} from "@angular/core";
import {ChangeDetectorRef, Component, ViewChild} from "@angular/core";
import {SearchUtilsClass} from "../openaireLibrary/searchPages/searchUtils/searchUtils.class";
import {ErrorMessagesComponent} from "../openaireLibrary/utils/errorMessages.component";
import {ErrorCodes} from "../openaireLibrary/utils/properties/errorCodes";
@ -10,30 +10,35 @@ import {Session, User} from "../openaireLibrary/login/utils/helper.class";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {NewSearchPageComponent} from "../openaireLibrary/searchPages/searchUtils/newSearchPage.component";
import {StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
import {NewSearchPageComponent, SearchForm} from "../openaireLibrary/searchPages/searchUtils/newSearchPage.component";
import {StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
import {properties} from "../../environments/environment";
import {Subscriber} from "rxjs";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {TitleCasePipe} from "@angular/common";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
@Component({
selector: 'search-stakeholders',
template: `
<new-search-page pageTitle="OpenAIRE-Monitor | Browse"
[hasPrefix]=false [piwikSiteId]="piwikSiteId"
[formPlaceholderText]="'Search profiles'"
[type]="(results.length > 1)?'organizations':'organization'" entityType="stakeholder"
<new-search-page pageTitle="OpenAIRE-Monitor | Browse {{this.stakeholderEntities.STAKEHOLDERS}}"
[hasPrefix]=false
[formPlaceholderText]="'Search ' + (!isMobile?'OpenAIRE Monitor ':'') + this.stakeholderEntities.STAKEHOLDERS"
[type]="(results.length > 1) ? this.stakeholderEntities.STAKEHOLDERS:this.stakeholderEntities.STAKEHOLDER"
entityType="stakeholder"
[results]="results" [searchUtils]="searchUtils"
[showResultCount]=true
[disableForms]="disableForms"
[showIndexInfo]=false
[simpleView]="true"
[searchForm]="searchForm"
[fieldIds]="fieldIds" [fieldIdsMap]="fieldIdsMap" [selectedFields]="selectedFields"
[showBreadcrumb]="true" [breadcrumbs]="breadcrumbs"
[simpleSearchLink]="searchLink" [entitiesSelection]="false">
</new-search-page>
`
})
export class SearchStakeholdersComponent {
public piwikSiteId = null;
private errorCodes: ErrorCodes;
private errorMessages: ErrorMessagesComponent;
public results: StakeholderInfo[] = [];
@ -59,20 +64,26 @@ export class SearchStakeholdersComponent {
};
public keyword = "";
public searchLink;
public stakeholderEntities = StakeholderEntities;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Browse ' + this.stakeholderEntities.STAKEHOLDERS}];
public searchForm: SearchForm = {class: 'uk-background-muted', dark: false};
public isMobile: boolean = false;
properties: EnvProperties = properties;
@ViewChild(NewSearchPageComponent, {static: true}) searchPage: NewSearchPageComponent;
private user: User;
constructor(private route: ActivatedRoute,
private _stakeholderService: StakeholderService,
private userManagementService: UserManagementService) {
private userManagementService: UserManagementService,
public titleCasePipe: TitleCasePipe,
private layoutService: LayoutService,
private cdr: ChangeDetectorRef) {
this.errorCodes = new ErrorCodes();
this.errorMessages = new ErrorMessagesComponent();
this.searchUtils.status = this.errorCodes.LOADING;
}
public ngOnInit() {
this.piwikSiteId = this.properties.piwikSiteId;
this.baseUrl = this.properties.searchLinkToStakeholders;
this.subscriptions.push(this.route.queryParams.subscribe(params => {
this.searchPage.resultsPerPage = 10;
@ -100,6 +111,10 @@ export class SearchStakeholdersComponent {
this.initFunders(queryParams);
}
}));
this.layoutService.isMobile.subscribe(isMobile => {
this.isMobile = isMobile;
this.cdr.detectChanges();
})
}
ngOnDestroy() {
@ -124,7 +139,7 @@ export class SearchStakeholdersComponent {
* @param params
*/
private initFunders(params) {
if(this.totalResults) {
if (this.totalResults) {
this.parseResults(this.totalResults);
this._getResults(params);
} else {
@ -435,7 +450,7 @@ export class SearchStakeholdersComponent {
let value_original_ids = [];
filter_names.push("Type");
filter_ids.push("type");
value_names.push(["Funders", "Research Initiatives", "Institutions"]);
value_names.push([this.stakeholderEntities.FUNDERS, this.titleCasePipe.transform(this.stakeholderEntities.RIS), this.titleCasePipe.transform(this.stakeholderEntities.ORGANIZATIONS)]);
value_original_ids.push(["funder", "ri", "organization"]);
filter_names.push("Accessibility");
filter_ids.push("access");

View File

@ -1,5 +1,5 @@
import {NgModule} from "@angular/core";
import {CommonModule} from "@angular/common";
import {CommonModule, TitleCasePipe} from "@angular/common";
import {FormsModule} from "@angular/forms";
import {SearchStakeholdersComponent} from "./search-stakeholders.component";
import {SearchFormModule} from "../openaireLibrary/searchPages/searchUtils/searchForm.module";
@ -16,7 +16,7 @@ import {NewSearchPageModule} from "../openaireLibrary/searchPages/searchUtils/ne
declarations: [
SearchStakeholdersComponent
],
providers:[ PreviousRouteRecorder],
providers:[ PreviousRouteRecorder, TitleCasePipe],
exports: [
SearchStakeholdersComponent
]

View File

@ -1,45 +0,0 @@
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
const MODULES = [
// Do NOT include UniversalModule, HttpModule, or JsonpModule here
CommonModule,
RouterModule,
FormsModule,
ReactiveFormsModule
];
const PIPES = [
// put pipes here
];
const COMPONENTS = [
// put shared components here
];
@NgModule({
imports: [
...MODULES
],
declarations: [
...PIPES,
...COMPONENTS
],
exports: [
...MODULES,
...PIPES,
...COMPONENTS
]
})
export class SharedModule {
static forRoot(): ModuleWithProviders<SharedModule> {
return {
ngModule: SharedModule,
};
}
}

View File

@ -0,0 +1,41 @@
<div class="uk-visible@m">
<div class="uk-background-muted">
<div class="uk-container uk-container-large uk-section uk-section-small">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
<div class="uk-flex uk-flex-middle" uk-scrollspy-class>
<div class="uk-width-1-2 uk-margin-medium-bottom">
<h1 class="uk-margin-medium-top">How can we help you?</h1>
<div class="uk-margin-medium-bottom">Monitor expert support team is ready and excited to help.</div>
<a routerLink="/contact-us" class="uk-button uk-button-primary">Contact Us</a>
</div>
<div class="uk-position-relative uk-width-1-2 uk-visible@l contact-us">
<img class="uk-box-shadow-large one" src="../../assets/monitor-assets/curators/1.jpg">
<img class="uk-box-shadow-large two" src="../../assets/monitor-assets/curators/2.jpg">
<img class="uk-box-shadow-large three" src="../../assets/monitor-assets/curators/3.jpg">
<img class="uk-box-shadow-large four" src="../../assets/monitor-assets/curators/4.jpg">
</div>
</div>
</div>
</div>
<div class="uk-margin-large-top">
<h3 class="uk-text-center">Frequently Asked Questions</h3>
</div>
<helper *ngIf="pageContents" [texts]="pageContents.top"></helper>
</div>
<div class="uk-hidden@m">
<div class="uk-background-muted">
<div class="uk-section-small uk-container uk-container-large">
<div class="uk-text-center" uk-scrollspy-class>
<h1 class="uk-margin-top">How can we help you?</h1>
<div class="uk-margin-medium-bottom">Monitor expert support team is ready and excited to help.</div>
<a routerLink="/contact-us" class="uk-button uk-button-small uk-button-primary">Contact Us</a>
</div>
</div>
</div>
<div class="uk-margin-medium-top">
<h3 class="uk-text-center">Frequently Asked Questions</h3>
</div>
<helper *ngIf="pageContents" [texts]="pageContents.top"></helper>
</div>

View File

@ -0,0 +1,44 @@
@import (reference) "~../../assets/openaire-theme/less/_import-variables";
@faqs-curator-image-size: 136px;
@faqs-contact-us-height: 450px;
.contact-us {
height: @faqs-contact-us-height;
img {
position: absolute;
width: @faqs-curator-image-size;
height: @faqs-curator-image-size;
object-fit: cover;
border-radius: 18px;
&.one {
top: @global-medium-gutter;
right: @global-medium-gutter + (@faqs-curator-image-size/2);
transform: rotate(10deg);
}
&.two {
bottom: @global-medium-gutter;
right: @global-medium-gutter + (@faqs-curator-image-size);
transform: rotate(-10deg);
object-position: top;
}
&.three {
top: 0;
left: @global-medium-gutter + (@faqs-curator-image-size);
transform: rotate(-10deg);
object-position: -60px;
}
&.four {
bottom: 2*@global-medium-gutter;
left: 2*@global-medium-gutter;
transform: rotate(-10deg);
object-position: 0;
}
}
}

View File

@ -7,21 +7,24 @@ import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {properties} from "../../environments/environment";
import {Subscriber} from "rxjs";
import {Breadcrumb} from '../openaireLibrary/utils/breadcrumbs/breadcrumbs.component';
@Component({
selector: 'learn-how',
styleUrls: ['learn-how.component.css'],
templateUrl: 'learn-how.component.html',
selector: 'support',
templateUrl: 'support.component.html',
styleUrls: ['support.component.less']
})
export class LearnHowComponent {
export class SupportComponent {
public pageContents = null;
public divContents = null;
public url: string = null;
public pageTitle: string = "OpenAIRE - Monitor | Learn How";
public description: string = "Learn the process: Use the Monitor Dashboard to view your research results, open science. See how it works. Simplify research tracking & monitoring ";
properties: EnvProperties;
public pageTitle: string = "OpenAIRE - Monitor | Support";
public description: string = "OpenAIRE - Monitor | Support";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Support'}];
public properties: EnvProperties = properties;
subscriptions = [];
constructor(
private route: ActivatedRoute,
private _router: Router,
@ -33,19 +36,14 @@ export class LearnHowComponent {
}
public ngOnInit() {
this.properties = properties;
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle, this.properties.piwikSiteId).subscribe());
}
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription("OpenAIRE - Monitor, Funders, Statistics, EC - Learn How");``
this.updateDescription(this.description);
//this.getDivContents();
//this.getPageContents();
this.getPageContents();
}
private getPageContents() {

View File

@ -0,0 +1,22 @@
import {CommonModule} from "@angular/common";
import {NgModule} from "@angular/core";
import {RouterModule} from "@angular/router";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {SupportComponent} from "./support.component";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
@NgModule({
declarations: [SupportComponent],
imports: [CommonModule, RouterModule.forChild([
{
path: '',
component: SupportComponent,
data: {extraOffset: 50}
}
]), BreadcrumbsModule, HelperModule],
exports: [SupportComponent],
providers: [PreviousRouteRecorder, PiwikService]
})
export class SupportModule {}

@ -1 +1 @@
Subproject commit 04d799f089c93ae28c9d2ca8436f283ebc0be3ae
Subproject commit e77e591bbb8264895adb9934210844e70f01e219

View File

@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="95.647" height="60.692" viewBox="0 0 95.647 60.692">
<g id="Group_905" data-name="Group 905" transform="translate(70.298 97.482) rotate(-161)">
<path id="Path_2339" data-name="Path 2339" d="M87.648,29.439C24.781,46.54,24.677-5.5,39.79.481,53.326,5.835,44.623,25.816,0,17.558" transform="translate(-0.02 39.459)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
<path id="Path_2366" data-name="Path 2366" d="M0,0,2.814,1.387l-.607,3.29" transform="translate(-3.724 59.204) rotate(-150)" fill="none" stroke="#212121" stroke-width="1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 625 B

View File

@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="96.457" height="61.415" viewBox="0 0 96.457 61.415">
<g id="Group_906" data-name="Group 906" transform="translate(59.107 54.14) rotate(-152)">
<path id="Path_2339" data-name="Path 2339" d="M67.968,21.473c-54.526,13.788-31.41-33.246-25.4-10.629C47.607,28.611.938-12.841-23.762,21.873" transform="translate(1.017 0)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="6"/>
<path id="Path_55797" data-name="Path 55797" d="M0,0,3.3,1.628,2.591,5.49" transform="matrix(-0.921, 0.391, -0.391, -0.921, -22.719, 28.548)" fill="none" stroke="#212121" stroke-width="1"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 645 B

View File

@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="103.827" height="153.958" viewBox="0 0 103.827 153.958">
<g id="Group_2401" data-name="Group 2401" transform="translate(-1318.198 -779.424) rotate(-20)">
<g id="Group_1141" data-name="Group 1141" transform="matrix(-0.174, 0.985, -0.985, -0.174, 1046.902, 1211.049)">
<path id="Path_2339" data-name="Path 2339" d="M135.26,80.668C60.034-45.855,6.029,11.188,0,23.336" transform="translate(0 0)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
</g>
<g id="Group_1142" data-name="Group 1142" transform="translate(936.789 1330.947) rotate(-43)">
<line id="Line_345" data-name="Line 345" x1="1.778" y1="4.377" transform="translate(0.089 1.532)" fill="none" stroke="#212121" stroke-width="1"/>
<line id="Line_346" data-name="Line 346" x2="2.189" y2="3.556" transform="translate(0 2.189) rotate(-90)" fill="none" stroke="#212121" stroke-width="1"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 963 B

View File

@ -1,9 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="117.496" height="64.012" viewBox="0 0 117.496 64.012">
<g id="Group_1143" data-name="Group 1143" transform="translate(55.846 -4.676) rotate(-19)">
<path id="Path_2339" data-name="Path 2339" d="M33.748,7.2C7.979,32.136-55.782,25.421-38.011,8.591-20.191-7.271-28.973,53.122-80.2,26.067" transform="translate(13.972 16.105)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
<g id="Group_1144" data-name="Group 1144" transform="translate(-69.001 39.672)">
<line id="Line_345" data-name="Line 345" x1="2.651" y1="5.302" transform="translate(0.132 1.855)" fill="none" stroke="#212121" stroke-width="1"/>
<line id="Line_346" data-name="Line 346" x2="2.651" y2="5.302" transform="translate(0 2.651) rotate(-90)" fill="none" stroke="#212121" stroke-width="1"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 864 B

View File

@ -1,11 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="107.525" height="69.445" viewBox="0 0 107.525 69.445">
<g id="Group_11721" data-name="Group 11721" transform="translate(112.848 -39.172) rotate(56)">
<g id="Group_1141" data-name="Group 1141" transform="matrix(-0.174, 0.985, -0.985, -0.174, 53.579, 43.214)">
<path id="Path_2339" data-name="Path 2339" d="M96.963,31.663C43.036-18,4.322,4.391,0,9.159" transform="translate(0 0)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
</g>
<g id="Group_1142" data-name="Group 1142" transform="translate(-0.484 133.795) rotate(-43)">
<line id="Line_345" data-name="Line 345" x1="1.663" y1="4.095" transform="translate(0.083 1.433)" fill="none" stroke="#212121" stroke-width="1"/>
<line id="Line_346" data-name="Line 346" x2="2.048" y2="3.327" transform="translate(0 2.048) rotate(-90)" fill="none" stroke="#212121" stroke-width="1"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 947 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 179 KiB

View File

@ -0,0 +1,99 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="632.213" height="519.857" viewBox="0 0 632.213 519.857">
<defs>
<filter id="dark" x="312.065" y="348.286" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-2" x="119.861" y="0" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-2"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-2"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-3" x="23.937" y="225.984" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-3"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-3"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-4" x="266.709" y="50.667" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-4"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-4"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-5" x="407.988" y="122.304" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-5"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-5"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-6" x="166.589" y="286.537" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-6"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-6"/>
<feComposite in="SourceGraphic"/>
</filter>
</defs>
<g id="Group_14281" data-name="Group 14281" transform="matrix(0.985, 0.174, -0.174, 0.985, -733.479, -286.153)">
<g id="Group_12983" data-name="Group 12983" transform="translate(877.932 158.215) rotate(13)">
<path id="Path_104359" data-name="Path 104359" d="M19.757,27.133S166.609,0,290.143,0s305.85,5.749,277.5,40.262S204.069,143.135,204.069,143.135-75.4,210.955,19.757,242.683s547.888,0,547.888,0" transform="translate(0 0)" fill="none" stroke="#dedede" stroke-width="5"/>
<g id="Group_12980" data-name="Group 12980" transform="translate(375.294 219.485)">
<g id="Group_12847" data-name="Group 12847" transform="translate(0 0)">
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -479.34, -199.34)" filter="url(#dark)">
<rect id="dark-7" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 363.34, 370.79)" fill="#f9f9f9"/>
</g>
<rect id="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
</g>
</g>
</g>
<g id="Group_12979" data-name="Group 12979" transform="translate(944.471 146.878) rotate(13)">
<g id="Group_12847-2" data-name="Group 12847" transform="translate(0 0)">
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -166.33, 46.16)" filter="url(#dark-2)">
<rect id="dark-8" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 171.14, 22.5)" fill="#f9f9f9"/>
</g>
<rect id="neutral-2" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12982" data-name="Group 12982" transform="translate(889.246 386.086) rotate(13)">
<g id="Group_12847-3" data-name="Group 12847" transform="translate(0 0)">
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -166.33, -199.34)" filter="url(#dark-3)">
<rect id="dark-9" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 75.21, 248.48)" fill="#f9f9f9"/>
</g>
<rect id="neutral-3" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12977" data-name="Group 12977" transform="translate(1097.886 171.275) rotate(13)">
<g id="Group_12847-4" data-name="Group 12847" transform="translate(0 0)">
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -321.3, 56.9)" filter="url(#dark-4)">
<rect id="dark-10" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 317.99, 73.17)" fill="#f9f9f9"/>
</g>
<rect id="neutral-4" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12978" data-name="Group 12978" transform="translate(1249.459 217.291) rotate(13)">
<g id="Group_12847-5" data-name="Group 12847" transform="translate(0 0)">
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -479.34, 46.16)" filter="url(#dark-5)">
<rect id="dark-11" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 459.27, 144.8)" fill="#f9f9f9"/>
</g>
<rect id="neutral-5" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12981" data-name="Group 12981" transform="translate(1040.246 420.948) rotate(13)">
<g id="Group_12847-6" data-name="Group 12847" transform="translate(0 0)">
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -321.3, -199.34)" filter="url(#dark-6)">
<rect id="dark-12" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 217.87, 309.04)" fill="#f9f9f9"/>
</g>
<rect id="neutral-6" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230.46 231.21"><defs><style>.cls-1{fill:#e0e0e0;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><g id="Layer_2-2" data-name="Layer 2-2"><g id="Layer_1-2-2" data-name="Layer 1-2-2"><path class="cls-1" d="M200.49,115.56A64.68,64.68,0,0,1,176.8,120a46.06,46.06,0,0,1-6.55-.31A70.26,70.26,0,1,1,90.08,61a71.42,71.42,0,0,1,10.74-.82,69.75,69.75,0,0,1,11.27.92q-.28-3-.28-6.13a64.92,64.92,0,0,1,4.6-24,97.65,97.65,0,0,0-15.56-1.23A100.79,100.79,0,1,0,201.57,130.48v0a98.63,98.63,0,0,0-1.11-15Zm-32.68-6.36a53.06,53.06,0,0,0,9,.77,55,55,0,0,0,21.69-4.48,100.5,100.5,0,0,0-16.29-34.4v3.46a5.38,5.38,0,0,1-10.74.63,2.22,2.22,0,0,1,0-.63V59.81H156.72a4.86,4.86,0,1,1,0-9.72h5.08A101,101,0,0,0,126.67,33a54.33,54.33,0,0,0-4.6,22,49,49,0,0,0,.57,8.55,70.57,70.57,0,0,1,45.17,45.64Z"/><path class="cls-1" d="M176.8,0a55,55,0,0,0-50.35,33,54,54,0,0,0-4.6,22,49,49,0,0,0,.69,8.55,55.05,55.05,0,0,0,45.27,45.64,53,53,0,0,0,9,.76A55,55,0,0,0,176.8,0ZM197,59.81H182.2V74.52a5.38,5.38,0,0,1-10.74.63,2.22,2.22,0,0,1,0-.63V59.81H156.72a4.86,4.86,0,1,1,0-9.72h14.84V35.42a5.37,5.37,0,1,1,10.73-.64V50.09H197a4.86,4.86,0,0,1,0,9.72Z"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 229.31 217.01"><defs><style>.cls-1{fill:#e0e0e0;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="129.5" cy="27.44" r="10.66"/><circle class="cls-1" cx="54.7" cy="80.97" r="7.66"/><circle class="cls-1" cx="202.92" cy="64.54" r="7.66"/><circle class="cls-1" cx="7.66" cy="153.55" r="7.66"/><circle class="cls-1" cx="86.21" cy="199.22" r="7.66"/><circle class="cls-1" cx="82.67" cy="140.04" r="4.09"/><circle class="cls-1" cx="225.44" cy="138.17" r="3.87"/><circle class="cls-1" cx="136.31" cy="211.34" r="4.34"/><circle class="cls-1" cx="61.34" cy="171.09" r="2.68"/><circle class="cls-1" cx="154.49" cy="72.12" r="3.99"/><circle class="cls-1" cx="19.05" cy="176.68" r="2.36"/><circle class="cls-1" cx="70.19" cy="77.74" r="2.06"/><circle class="cls-1" cx="137.94" cy="4.54" r="4.54"/><path class="cls-1" d="M86.77,200.12,7,153.72,54.41,80.56l74.49-53,.13-.32,8.44-22.87.94.35-8.35,22.62,73.28,36.85L225.92,138l-1,.29L202.51,64.89,129.69,28.27,83.18,140.12ZM8.37,153.38l77.29,44.94L82.17,140l0-.1,46-110.54-73.11,52Z"/><polygon class="cls-1" points="7.75 154.04 7.57 153.06 81.94 139.66 54.25 81.19 55.15 80.76 83.41 140.41 82.76 140.53 7.75 154.04"/><polygon class="cls-1" points="154.22 72.66 129.06 27.68 129.93 27.19 154.75 71.57 202.85 64.05 203 65.04 154.22 72.66"/><rect class="cls-1" x="18.86" y="173.38" width="42.66" height="1" transform="translate(-22.39 6.75) rotate(-7.51)"/><polygon class="cls-1" points="136.19 211.83 88.85 200.38 113.86 216.98 113.84 217.01 112.09 217.01 83.57 198.07 136.42 210.86 136.19 211.83"/></g></g></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 257.04 125.21"><defs><style>.cls-1{fill:#e0e0e0;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M67,125.21H25.49L.2,25.47a6.44,6.44,0,0,1,4.66-7.83l26.51-6.72a6.45,6.45,0,0,1,7.82,4.66Z"/><path class="cls-1" d="M131.38,125.21H89.87L75.69,69.28a6.44,6.44,0,0,1,4.66-7.83l26.51-6.72a6.44,6.44,0,0,1,7.83,4.66Z"/><path class="cls-1" d="M195.06,125.21h-41.5l-28-110.46a6.43,6.43,0,0,1,4.66-7.82L156.72.2a6.45,6.45,0,0,1,7.83,4.67Z"/><path class="cls-1" d="M257,125.21H215.55l-11.7-46.15a6.43,6.43,0,0,1,4.66-7.82L235,64.52a6.43,6.43,0,0,1,7.82,4.66Z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 680 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 303 KiB

View File

@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="152.064" height="298.117" viewBox="0 0 152.064 298.117">
<g id="Group_13811" data-name="Group 13811" transform="translate(-311 -600)">
<g id="Group_13810" data-name="Group 13810" transform="translate(311 600)" style="isolation: isolate">
<path id="Path_104582" data-name="Path 104582" d="M103.163-138h-28.3c-15.812,0-30.793,4.161-46.189,12.9L-37.9-85.57v54.095L45.739-77.664V149.117h57.424V-138Z" transform="translate(37.9 138)" fill="#3086ed"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 528 B

View File

@ -0,0 +1,5 @@
<svg xmlns="http://www.w3.org/2000/svg" width="219.715" height="298.559" viewBox="0 0 219.715 298.559">
<g id="Group_13812" data-name="Group 13812" transform="translate(-767.284 -600)">
<path id="Path_104612" data-name="Path 104612" d="M35.232,101.726,87.361,50.819C138.675.726,156.187-24.524,156.187-59.956,156.187-108.012,123.607-141,61.7-141-1.422-141-38.889-108.012-44.591-47.738L-45-43.665H10.8l.407-4.073c3.665-33.8,17.1-51.315,45.206-51.315,26.065,0,40.319,17.512,40.319,42.355,0,26.879-15.069,46.835-52.944,83.9L-50.7,119.645v26.472H154.151V101.726Z" transform="translate(817.984 741)" fill="#3086ed"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 631 B

View File

@ -0,0 +1,159 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="418.875" height="364.357" viewBox="0 0 418.875 364.357">
<defs>
<filter id="dark" x="228.772" y="231.79" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="light" x="198.772" y="201.79" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-2"/>
<feFlood flood-color="#fff"/>
<feComposite operator="in" in2="blur-2"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-2" x="65.992" y="30" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-3"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-3"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="light-2" x="35.992" y="0" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-4"/>
<feFlood flood-color="#fff"/>
<feComposite operator="in" in2="blur-4"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-3" x="30" y="185.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-5"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-5"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="light-3" x="0" y="155.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-6"/>
<feFlood flood-color="#fff"/>
<feComposite operator="in" in2="blur-6"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-4" x="165.979" y="45.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-7"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-7"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="light-4" x="135.979" y="15.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-8"/>
<feFlood flood-color="#fff"/>
<feComposite operator="in" in2="blur-8"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-5" x="264.764" y="75.891" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-9"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-9"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="light-5" x="234.764" y="45.891" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-10"/>
<feFlood flood-color="#fff"/>
<feComposite operator="in" in2="blur-10"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="dark-6" x="128.412" y="208.621" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="15" dy="15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-11"/>
<feFlood flood-opacity="0.102"/>
<feComposite operator="in" in2="blur-11"/>
<feComposite in="SourceGraphic"/>
</filter>
<filter id="light-6" x="98.412" y="178.621" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="12.5" result="blur-12"/>
<feFlood flood-color="#fff"/>
<feComposite operator="in" in2="blur-12"/>
<feComposite in="SourceGraphic"/>
</filter>
</defs>
<g id="Group_13415" data-name="Group 13415" transform="translate(-799.043 -94.379)">
<g id="Group_12983" data-name="Group 12983" transform="translate(86.549 -222.191) rotate(13)">
<path id="Path_104359" data-name="Path 104359" d="M-18163.937-17731.363s95.709-17.684,176.221-17.684,199.334,3.746,180.857,26.24-236.955,67.047-236.955,67.047-182.137,44.2-120.123,64.879,357.078,0,357.078,0" transform="translate(19010.223 17943)" fill="none" stroke="#dedede" stroke-width="1"/>
<g id="Group_12980" data-name="Group 12980" transform="translate(931.002 -818)">
<g id="Group_12847" data-name="Group 12847" transform="translate(147 1155)">
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -188.82)" filter="url(#dark)">
<rect id="dark-7" data-name="dark" width="48" height="48" rx="24" transform="translate(262.07 254.29) rotate(13)" fill="#f9f9f9"/>
</g>
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -188.82)" filter="url(#light)">
<rect id="light-7" data-name="light" width="48" height="48" rx="24" transform="translate(262.07 254.29) rotate(13)" fill="#f9f9f9"/>
</g>
<rect id="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
</g>
</g>
</g>
<g id="Group_12979" data-name="Group 12979" transform="translate(1014.92 -1011.586) rotate(13)">
<g id="Group_12847-2" data-name="Group 12847" transform="translate(147 1155)">
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -28.82)" filter="url(#dark-2)">
<rect id="dark-8" data-name="dark" width="48" height="48" rx="24" transform="translate(99.29 52.5) rotate(13)" fill="#f9f9f9"/>
</g>
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -28.82)" filter="url(#light-2)">
<rect id="light-8" data-name="light" width="48" height="48" rx="24" transform="translate(99.29 52.5) rotate(13)" fill="#f9f9f9"/>
</g>
<rect id="neutral-2" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12982" data-name="Group 12982" transform="translate(978.928 -855.686) rotate(13)">
<g id="Group_12847-3" data-name="Group 12847" transform="translate(147 1155)">
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -188.82)" filter="url(#dark-3)">
<rect id="dark-9" data-name="dark" width="48" height="48" rx="24" transform="translate(63.3 208.4) rotate(13)" fill="#f9f9f9"/>
</g>
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -188.82)" filter="url(#light-3)">
<rect id="light-9" data-name="light" width="48" height="48" rx="24" transform="translate(63.3 208.4) rotate(13)" fill="#f9f9f9"/>
</g>
<rect id="neutral-3" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12977" data-name="Group 12977" transform="translate(1114.906 -995.686) rotate(13)">
<g id="Group_12847-4" data-name="Group 12847" transform="translate(147 1155)">
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -21.82)" filter="url(#dark-4)">
<rect id="dark-10" data-name="dark" width="48" height="48" rx="24" transform="translate(199.28 68.4) rotate(13)" fill="#f9f9f9"/>
</g>
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -21.82)" filter="url(#light-4)">
<rect id="light-10" data-name="light" width="48" height="48" rx="24" transform="translate(199.28 68.4) rotate(13)" fill="#f9f9f9"/>
</g>
<rect id="neutral-4" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12978" data-name="Group 12978" transform="translate(1213.691 -965.695) rotate(13)">
<g id="Group_12847-5" data-name="Group 12847" transform="translate(147 1155)">
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -28.82)" filter="url(#dark-5)">
<rect id="dark-11" data-name="dark" width="48" height="48" rx="24" transform="translate(298.06 98.39) rotate(13)" fill="#f9f9f9"/>
</g>
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -28.82)" filter="url(#light-5)">
<rect id="light-11" data-name="light" width="48" height="48" rx="24" transform="translate(298.06 98.39) rotate(13)" fill="#f9f9f9"/>
</g>
<rect id="neutral-5" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
</g>
</g>
<g id="Group_12981" data-name="Group 12981" transform="translate(1077.34 -832.965) rotate(13)">
<g id="Group_12847-6" data-name="Group 12847" transform="translate(147 1155)">
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -188.82)" filter="url(#dark-6)">
<rect id="dark-12" data-name="dark" width="48" height="48" rx="24" transform="translate(161.71 231.12) rotate(13)" fill="#f9f9f9"/>
</g>
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -188.82)" filter="url(#light-6)">
<rect id="light-12" data-name="light" width="48" height="48" rx="24" transform="translate(161.71 231.12) rotate(13)" fill="#f9f9f9"/>
</g>
<rect id="neutral-6" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,14 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="891.972" height="404" viewBox="0 0 891.972 404">
<g id="Group_11723" data-name="Group 11723" transform="translate(-250 -759)">
<g id="Group_3098" data-name="Group 3098" transform="translate(-80 574.953)">
<path id="Path_16420" data-name="Path 16420" d="M338.05,210.66l-18.6,6.887-19.11,7.078-33.015,12.223-9.235,3.424-19.136,7.084" transform="translate(855.417 86.511)" fill="none" stroke="#09091e" stroke-miterlimit="10" stroke-width="3"/>
<path id="Path_17201" data-name="Path 17201" d="M131.762,0,107.036,22.093,81.626,44.8l-43.9,39.214L25.446,95,0,117.726" transform="translate(1057.45 316.813) rotate(-20)" fill="none" stroke="#09091e" stroke-miterlimit="10" stroke-width="1"/>
<path id="Path_17202" data-name="Path 17202" d="M110.125,0,89.459,18.465,68.221,37.444,31.53,70.218,21.267,79.4,0,98.393" transform="translate(1122.86 315.774) rotate(50)" fill="none" stroke="#09091e" stroke-miterlimit="10" stroke-width="1"/>
</g>
<circle id="Ellipse_360" data-name="Ellipse 360" cx="124" cy="124" r="124" transform="translate(250 759)" fill="#8bcc00" opacity="0.5"/>
<g id="Ellipse_372" data-name="Ellipse 372" transform="translate(906 984)" fill="none" stroke="#4687e6" stroke-width="1">
<circle cx="89.5" cy="89.5" r="89.5" stroke="none"/>
<circle cx="89.5" cy="89.5" r="89" fill="none"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 448 KiB

View File

@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1367" height="393.812" viewBox="0 0 1367 393.812">
<g id="Group_11724" data-name="Group 11724" transform="translate(1 -2386)">
<path id="Path_2342" data-name="Path 2342" d="M1366-68.381S1070.67-131.445,608.9-142.3C354.509-148.279-.867-68.381-.867-68.381V190.035s538.452,102.97,836.881,41.69c286.66-60.522,529.986,0,529.986,0Z" transform="translate(-0.133 2528.619)" fill="#eff3f8"/>
<path id="Path_2356" data-name="Path 2356" d="M-.867,176.956s295.142,63.063,756.615,73.918c254.234,5.98,609.385-73.918,609.385-73.918V-81.46s-538.111-102.97-836.35-41.69c-286.478,60.522-529.65,0-529.65,0Z" transform="translate(0.867 2528.619)" fill="#eff3f8" opacity="0.499"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 731 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 677.14 1140.24"><defs><style>.cls-1{fill:#fff;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><g id="Layer_2-2" data-name="Layer 2"><g id="Layer_1-2-2" data-name="Layer 1-2"><path class="cls-1" d="M0,0V1140.24H677.14V0ZM610.28,223,486.33,650l-80.56-23.4,124-427Zm23.35,290.67L580.34,697.23l-80.55-23.38L553.07,490.3ZM452,384.54l-123.94,427L247.52,788.1l124-426.95Zm-169.26-119,80.57,23.39L328.07,410.36,247.51,387Zm35.93,177.17L239.38,715.86l-80.56-23.39,79.3-273.17ZM207,436.4,116,749.91,35.39,726.52,126.4,413ZM509.68,940.64l-80.55-23.39L490.4,706.17,571,729.56Z"/></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 684 B

View File

@ -0,0 +1,426 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="955.582" height="215.812" viewBox="0 0 955.582 215.812">
<defs>
<filter id="Path_104565">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur"/>
<feFlood flood-opacity="0.302" result="color"/>
<feComposite operator="out" in="SourceGraphic" in2="blur"/>
<feComposite operator="in" in="color"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104566">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-2"/>
<feFlood flood-opacity="0.302" result="color-2"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-2"/>
<feComposite operator="in" in="color-2"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104567">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-3"/>
<feFlood flood-opacity="0.302" result="color-3"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-3"/>
<feComposite operator="in" in="color-3"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Rectangle_2960">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-4"/>
<feFlood flood-opacity="0.302" result="color-4"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-4"/>
<feComposite operator="in" in="color-4"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104568">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-5"/>
<feFlood flood-opacity="0.302" result="color-5"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-5"/>
<feComposite operator="in" in="color-5"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104569">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-6"/>
<feFlood flood-opacity="0.302" result="color-6"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-6"/>
<feComposite operator="in" in="color-6"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104570">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-7"/>
<feFlood flood-opacity="0.302" result="color-7"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-7"/>
<feComposite operator="in" in="color-7"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104571">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-8"/>
<feFlood flood-opacity="0.302" result="color-8"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-8"/>
<feComposite operator="in" in="color-8"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104572">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-9"/>
<feFlood flood-opacity="0.302" result="color-9"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-9"/>
<feComposite operator="in" in="color-9"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104573">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-10"/>
<feFlood flood-opacity="0.302" result="color-10"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-10"/>
<feComposite operator="in" in="color-10"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104574">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-11"/>
<feFlood flood-opacity="0.302" result="color-11"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-11"/>
<feComposite operator="in" in="color-11"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104575">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-12"/>
<feFlood flood-opacity="0.302" result="color-12"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-12"/>
<feComposite operator="in" in="color-12"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104576">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-13"/>
<feFlood flood-opacity="0.302" result="color-13"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-13"/>
<feComposite operator="in" in="color-13"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104577">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-14"/>
<feFlood flood-opacity="0.302" result="color-14"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-14"/>
<feComposite operator="in" in="color-14"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104578">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-15"/>
<feFlood flood-opacity="0.302" result="color-15"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-15"/>
<feComposite operator="in" in="color-15"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104579">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-16"/>
<feFlood flood-opacity="0.302" result="color-16"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-16"/>
<feComposite operator="in" in="color-16"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104580">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-17"/>
<feFlood flood-opacity="0.302" result="color-17"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-17"/>
<feComposite operator="in" in="color-17"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104581">
<feOffset dx="1" dy="1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-18"/>
<feFlood flood-opacity="0.302" result="color-18"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-18"/>
<feComposite operator="in" in="color-18"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104565-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-19"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-19"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-19"/>
<feComposite operator="in" in="color-19"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104566-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-20"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-20"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-20"/>
<feComposite operator="in" in="color-20"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104567-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-21"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-21"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-21"/>
<feComposite operator="in" in="color-21"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Rectangle_2960-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-22"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-22"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-22"/>
<feComposite operator="in" in="color-22"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104568-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-23"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-23"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-23"/>
<feComposite operator="in" in="color-23"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104569-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-24"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-24"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-24"/>
<feComposite operator="in" in="color-24"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104570-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-25"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-25"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-25"/>
<feComposite operator="in" in="color-25"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104571-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-26"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-26"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-26"/>
<feComposite operator="in" in="color-26"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104572-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-27"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-27"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-27"/>
<feComposite operator="in" in="color-27"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104573-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-28"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-28"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-28"/>
<feComposite operator="in" in="color-28"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104574-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-29"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-29"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-29"/>
<feComposite operator="in" in="color-29"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104575-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-30"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-30"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-30"/>
<feComposite operator="in" in="color-30"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104576-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-31"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-31"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-31"/>
<feComposite operator="in" in="color-31"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104577-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-32"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-32"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-32"/>
<feComposite operator="in" in="color-32"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104578-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-33"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-33"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-33"/>
<feComposite operator="in" in="color-33"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104579-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-34"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-34"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-34"/>
<feComposite operator="in" in="color-34"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104580-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-35"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-35"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-35"/>
<feComposite operator="in" in="color-35"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
<filter id="Path_104581-2">
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
<feGaussianBlur stdDeviation="1.5" result="blur-36"/>
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-36"/>
<feComposite operator="out" in="SourceGraphic" in2="blur-36"/>
<feComposite operator="in" in="color-36"/>
<feComposite operator="in" in2="SourceGraphic"/>
</filter>
</defs>
<g id="Group_13397" data-name="Group 13397" transform="translate(24202 16582.441)" opacity="0.4">
<g id="Group_13397-2" data-name="Group 13397" transform="translate(-24202 -16582.441)">
<path id="Path_104565-3" data-name="Path 104565" d="M302.219,78.851,291.25,51.59H277.78V96.728h9.582V65.184l12.752,31.545H304.3L317.05,65.184V96.728h9.657V51.59H313.163Z" transform="translate(374.139 47.526)" fill="#56a601" opacity="0.2"/>
<path id="Path_104566-3" data-name="Path 104566" d="M323.833,51.3a22.656,22.656,0,0,0-23.547,23.324A23.6,23.6,0,1,0,323.833,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856,13.742,6.363,13.742,14.856S332.178,89.481,323.833,89.481Z" transform="translate(407.344 47.073)" fill="#56a601" opacity="0.2"/>
<path id="Path_104567-3" data-name="Path 104567" d="M352.946,79.941,331.9,51.59h-9.83V96.728H331.7V67.288l21.517,29.44h9.335V51.59h-9.607Z" transform="translate(439.514 47.526)" fill="#56a601" opacity="0.2"/>
<rect id="Rectangle_2960-3" data-name="Rectangle 2960" width="9.533" height="45.163" transform="translate(810.955 99.092)" fill="#56a601" opacity="0.2"/>
<path id="Path_104568-3" data-name="Path 104568" d="M348.38,60.033h13.2v36.7h9.681v-36.7h13.123V51.59h-36Z" transform="translate(478.348 47.526)" fill="#56a601" opacity="0.2"/>
<path id="Path_104569-3" data-name="Path 104569" d="M387.157,51.3a23.349,23.349,0,1,0,23.622,23.324A22.656,22.656,0,0,0,387.157,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856S400.9,66.134,400.9,74.627,395.476,89.483,387.157,89.483Z" transform="translate(501.522 47.071)" fill="#56a601" opacity="0.2"/>
<path id="Path_104570-3" data-name="Path 104570" d="M411.986,79.559a12.95,12.95,0,0,0,9.9-13.4c0-8.394-5.744-14.584-15.153-14.584H385.69V96.743h9.632V80.7h7.007l8.889,16.045h10.944Zm-6.636-7.428H395.272V60.048H405.35a6.116,6.116,0,1,1,0,12.182Z" transform="translate(533.42 47.512)" fill="#56a601" opacity="0.2"/>
<path id="Path_104571-3" data-name="Path 104571" d="M269.072,31.72a1.659,1.659,0,0,0-1.634,1.634V171.79a1.659,1.659,0,1,0,3.293,0V33.354A1.659,1.659,0,0,0,269.072,31.72Z" transform="translate(358.855 18.197)" fill="#56a601" opacity="0.2"/>
<path id="Path_104572-3" data-name="Path 104572" d="M131.979,48.36c-18.447,0-30.629,14.262-30.629,31.3s12.232,31.248,30.629,31.248,30.629-14.237,30.629-31.248S150.45,48.36,131.979,48.36Zm0,54.671c-14.039,0-21.938-10.969-21.938-23.374s7.923-23.374,21.938-23.374,21.938,10.994,21.938,23.374S146.043,103.031,131.979,103.031Z" transform="translate(113.72 42.759)" fill="#303030"/>
<path id="Path_104573-3" data-name="Path 104573" d="M150.98,56.863a16.317,16.317,0,0,0-14.287,7.775V61.245a4.11,4.11,0,0,0-4.16-4.036h-.371a3.937,3.937,0,0,0-3.615,4.234v49.249a4.259,4.259,0,1,0,8.518,0V90.562a16.193,16.193,0,0,0,14.014,7.8c10.424,0,18.942-8.22,18.942-20.749C169.922,65.628,161.4,56.863,150.98,56.863ZM149.247,91.3c-7.428,0-12.38-6.438-12.38-13.693s4.952-13.668,12.38-13.668h0c7.428,0,12.108,5.6,12.108,13.742S156.626,91.3,149.247,91.3Z" transform="translate(153.846 55.302)" fill="#303030"/>
<path id="Path_104574-3" data-name="Path 104574" d="M166.938,56.851A19.982,19.982,0,0,0,146.659,77.6c0,11.316,7.156,20.749,20.65,20.749a21.591,21.591,0,0,0,16.119-6.636,3.739,3.739,0,0,0,1.089-2.476,3.516,3.516,0,0,0-3.491-3.516,4.135,4.135,0,0,0-2.823,1.387,14.015,14.015,0,0,1-10.5,4.432,11.39,11.39,0,0,1-12.38-10.969h27.113c2.476,0,3.244-1.436,3.244-2.9C185.78,66.112,178.352,56.876,166.938,56.851ZM155.622,73.763A11.241,11.241,0,0,1,166.938,63.71h0a11.043,11.043,0,0,1,10.969,10.078Z" transform="translate(180.576 55.289)" fill="#303030"/>
<path id="Path_104575-3" data-name="Path 104575" d="M183.4,56.863h-.817A18.546,18.546,0,0,0,164.463,75.8V93.756a4.284,4.284,0,0,0,8.542,0V74.814a10.523,10.523,0,0,1,20.923,0V93.756a4.259,4.259,0,1,0,8.518,0V75.037A18.62,18.62,0,0,0,183.4,56.863Z" transform="translate(206.871 55.302)" fill="#303030"/>
<path id="Path_104576-3" data-name="Path 104576" d="M215.825,51.451a4.655,4.655,0,0,0-4.7-2.922,4.779,4.779,0,0,0-4.729,2.922l-23.126,51.428a5.25,5.25,0,0,0-.545,2.179v.248a5.125,5.125,0,0,0,5.249,4.952,4.8,4.8,0,0,0,4.63-2.971l5.15-11.043h26.84l5.1,11.142a4.779,4.779,0,0,0,4.605,2.971h.248a5.125,5.125,0,0,0,4.952-5.249,4.729,4.729,0,0,0-.545-2.179ZM201.761,86.586l9.409-23.027L220.6,86.586Z" transform="translate(233.826 42.986)" fill="#303030"/>
<path id="Path_104577-3" data-name="Path 104577" d="M212.971,48.52a5.67,5.67,0,0,0-5.621,5.621V104.7a5.621,5.621,0,0,0,5.621,5.6h0a5.5,5.5,0,0,0,5.4-5.6V54.091a5.522,5.522,0,0,0-5.4-5.571Z" transform="translate(270.181 42.995)" fill="#303030"/>
<path id="Path_104578-3" data-name="Path 104578" d="M266.153,66.984c0-10.746-6.462-18.174-21.492-18.174H221.312a5.5,5.5,0,0,0-5.472,5.546v49.991a5.546,5.546,0,0,0,11.068,0V85.059h18.224L255.853,106.9a4.952,4.952,0,0,0,4.952,2.971h0a5.447,5.447,0,0,0,5.447-5.5,5.6,5.6,0,0,0-.668-2.476l-9.31-18.917a16.491,16.491,0,0,0,9.88-16Zm-11.192.768a8.27,8.27,0,0,1-8.74,7.8H226.933V58.987H246.2a7.973,7.973,0,0,1,8.79,8.047,6.953,6.953,0,0,1-.025.718Z" transform="translate(282.713 43.423)" fill="#303030"/>
<path id="Path_104579-3" data-name="Path 104579" d="M278.916,98.779H250.293V83.551h23a5.076,5.076,0,0,0,5.076-4.952,5.15,5.15,0,0,0-5.076-5.274H250.368V59.038H277.6a5.249,5.249,0,0,0,5.249-5.176h0a5.125,5.125,0,0,0-5.249-4.952H244.846a5.571,5.571,0,0,0-5.6,5.546v49.15h0a5.546,5.546,0,0,0,5.621,5.5h34.145a5.125,5.125,0,0,0,5.15-5.1,5.249,5.249,0,0,0-5.249-5.224Z" transform="translate(317.267 43.569)" fill="#303030"/>
<path id="Path_104580-3" data-name="Path 104580" d="M179.667,106.98q-3.046,0-6.091-.3A65.516,65.516,0,1,1,98.824,51.938a64.578,64.578,0,0,1,9.9-.768,65.319,65.319,0,0,1,10.523.842c-.173-1.882-.272-3.788-.272-5.72a60.638,60.638,0,0,1,4.308-22.433A94.1,94.1,0,1,0,202.67,116.81a96.566,96.566,0,0,0-1.015-13.891,60.688,60.688,0,0,1-21.987,4.061Z" transform="translate(-14.49 4.913)" fill="#303030"/>
<path id="Path_104581-3" data-name="Path 104581" d="M111.754,11.56A51.329,51.329,0,0,0,60.5,62.814a49.091,49.091,0,0,0,.668,8.069,51.3,51.3,0,0,0,42.093,42.467,47.836,47.836,0,0,0,8.493.817,50.982,50.982,0,0,0,20.2-4.16,1.413,1.413,0,0,0,0-.347,51.254,51.254,0,0,0-20.2-98.1Zm18.719,55.785H116.781V81.038a5.035,5.035,0,0,1-7.552,4.63,5.175,5.175,0,0,1-1.956-2.1,4.952,4.952,0,0,1-.5-1.931,2.475,2.475,0,0,1,0-.594V67.345H93.06a4.531,4.531,0,0,1-4.531-4.531,4.482,4.482,0,0,1,4.407-4.531h13.841V44.591a4.961,4.961,0,1,1,9.9-.594V58.283h13.693a4.531,4.531,0,1,1,0,9.062Z" transform="translate(53.423 -11.56)" fill="#303030"/>
</g>
<g id="dark" transform="translate(-24202 -16582.441)">
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104565)">
<path id="Path_104565-4" data-name="Path 104565" d="M302.219,78.851,291.25,51.59H277.78V96.728h9.582V65.184l12.752,31.545H304.3L317.05,65.184V96.728h9.657V51.59H313.163Z" transform="translate(374.14 47.53)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104566)">
<path id="Path_104566-4" data-name="Path 104566" d="M323.833,51.3a22.656,22.656,0,0,0-23.547,23.324A23.6,23.6,0,1,0,323.833,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856,13.742,6.363,13.742,14.856S332.178,89.481,323.833,89.481Z" transform="translate(407.34 47.07)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104567)">
<path id="Path_104567-4" data-name="Path 104567" d="M352.946,79.941,331.9,51.59h-9.83V96.728H331.7V67.288l21.517,29.44h9.335V51.59h-9.607Z" transform="translate(439.51 47.53)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Rectangle_2960)">
<rect id="Rectangle_2960-4" data-name="Rectangle 2960" width="9.533" height="45.163" transform="translate(810.96 99.09)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104568)">
<path id="Path_104568-4" data-name="Path 104568" d="M348.38,60.033h13.2v36.7h9.681v-36.7h13.123V51.59h-36Z" transform="translate(478.35 47.53)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104569)">
<path id="Path_104569-4" data-name="Path 104569" d="M387.157,51.3a23.349,23.349,0,1,0,23.622,23.324A22.656,22.656,0,0,0,387.157,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856S400.9,66.134,400.9,74.627,395.476,89.483,387.157,89.483Z" transform="translate(501.52 47.07)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104570)">
<path id="Path_104570-4" data-name="Path 104570" d="M411.986,79.559a12.95,12.95,0,0,0,9.9-13.4c0-8.394-5.744-14.584-15.153-14.584H385.69V96.743h9.632V80.7h7.007l8.889,16.045h10.944Zm-6.636-7.428H395.272V60.048H405.35a6.116,6.116,0,1,1,0,12.182Z" transform="translate(533.42 47.51)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104571)">
<path id="Path_104571-4" data-name="Path 104571" d="M269.072,31.72a1.659,1.659,0,0,0-1.634,1.634V171.79a1.659,1.659,0,1,0,3.293,0V33.354A1.659,1.659,0,0,0,269.072,31.72Z" transform="translate(358.85 18.2)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104572)">
<path id="Path_104572-4" data-name="Path 104572" d="M131.979,48.36c-18.447,0-30.629,14.262-30.629,31.3s12.232,31.248,30.629,31.248,30.629-14.237,30.629-31.248S150.45,48.36,131.979,48.36Zm0,54.671c-14.039,0-21.938-10.969-21.938-23.374s7.923-23.374,21.938-23.374,21.938,10.994,21.938,23.374S146.043,103.031,131.979,103.031Z" transform="translate(113.72 42.76)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104573)">
<path id="Path_104573-4" data-name="Path 104573" d="M150.98,56.863a16.317,16.317,0,0,0-14.287,7.775V61.245a4.11,4.11,0,0,0-4.16-4.036h-.371a3.937,3.937,0,0,0-3.615,4.234v49.249a4.259,4.259,0,1,0,8.518,0V90.562a16.193,16.193,0,0,0,14.014,7.8c10.424,0,18.942-8.22,18.942-20.749C169.922,65.628,161.4,56.863,150.98,56.863ZM149.247,91.3c-7.428,0-12.38-6.438-12.38-13.693s4.952-13.668,12.38-13.668h0c7.428,0,12.108,5.6,12.108,13.742S156.626,91.3,149.247,91.3Z" transform="translate(153.85 55.3)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104574)">
<path id="Path_104574-4" data-name="Path 104574" d="M166.938,56.851A19.982,19.982,0,0,0,146.659,77.6c0,11.316,7.156,20.749,20.65,20.749a21.591,21.591,0,0,0,16.119-6.636,3.739,3.739,0,0,0,1.089-2.476,3.516,3.516,0,0,0-3.491-3.516,4.135,4.135,0,0,0-2.823,1.387,14.015,14.015,0,0,1-10.5,4.432,11.39,11.39,0,0,1-12.38-10.969h27.113c2.476,0,3.244-1.436,3.244-2.9C185.78,66.112,178.352,56.876,166.938,56.851ZM155.622,73.763A11.241,11.241,0,0,1,166.938,63.71h0a11.043,11.043,0,0,1,10.969,10.078Z" transform="translate(180.58 55.29)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104575)">
<path id="Path_104575-4" data-name="Path 104575" d="M183.4,56.863h-.817A18.546,18.546,0,0,0,164.463,75.8V93.756a4.284,4.284,0,0,0,8.542,0V74.814a10.523,10.523,0,0,1,20.923,0V93.756a4.259,4.259,0,1,0,8.518,0V75.037A18.62,18.62,0,0,0,183.4,56.863Z" transform="translate(206.87 55.3)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104576)">
<path id="Path_104576-4" data-name="Path 104576" d="M215.825,51.451a4.655,4.655,0,0,0-4.7-2.922,4.779,4.779,0,0,0-4.729,2.922l-23.126,51.428a5.25,5.25,0,0,0-.545,2.179v.248a5.125,5.125,0,0,0,5.249,4.952,4.8,4.8,0,0,0,4.63-2.971l5.15-11.043h26.84l5.1,11.142a4.779,4.779,0,0,0,4.605,2.971h.248a5.125,5.125,0,0,0,4.952-5.249,4.729,4.729,0,0,0-.545-2.179ZM201.761,86.586l9.409-23.027L220.6,86.586Z" transform="translate(233.83 42.99)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104577)">
<path id="Path_104577-4" data-name="Path 104577" d="M212.971,48.52a5.67,5.67,0,0,0-5.621,5.621V104.7a5.621,5.621,0,0,0,5.621,5.6h0a5.5,5.5,0,0,0,5.4-5.6V54.091a5.522,5.522,0,0,0-5.4-5.571Z" transform="translate(270.18 42.99)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104578)">
<path id="Path_104578-4" data-name="Path 104578" d="M266.153,66.984c0-10.746-6.462-18.174-21.492-18.174H221.312a5.5,5.5,0,0,0-5.472,5.546v49.991a5.546,5.546,0,0,0,11.068,0V85.059h18.224L255.853,106.9a4.952,4.952,0,0,0,4.952,2.971h0a5.447,5.447,0,0,0,5.447-5.5,5.6,5.6,0,0,0-.668-2.476l-9.31-18.917a16.491,16.491,0,0,0,9.88-16Zm-11.192.768a8.27,8.27,0,0,1-8.74,7.8H226.933V58.987H246.2a7.973,7.973,0,0,1,8.79,8.047,6.953,6.953,0,0,1-.025.718Z" transform="translate(282.71 43.42)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104579)">
<path id="Path_104579-4" data-name="Path 104579" d="M278.916,98.779H250.293V83.551h23a5.076,5.076,0,0,0,5.076-4.952,5.15,5.15,0,0,0-5.076-5.274H250.368V59.038H277.6a5.249,5.249,0,0,0,5.249-5.176h0a5.125,5.125,0,0,0-5.249-4.952H244.846a5.571,5.571,0,0,0-5.6,5.546v49.15h0a5.546,5.546,0,0,0,5.621,5.5h34.145a5.125,5.125,0,0,0,5.15-5.1,5.249,5.249,0,0,0-5.249-5.224Z" transform="translate(317.27 43.57)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104580)">
<path id="Path_104580-4" data-name="Path 104580" d="M179.667,106.98q-3.046,0-6.091-.3A65.516,65.516,0,1,1,98.824,51.938a64.578,64.578,0,0,1,9.9-.768,65.319,65.319,0,0,1,10.523.842c-.173-1.882-.272-3.788-.272-5.72a60.638,60.638,0,0,1,4.308-22.433A94.1,94.1,0,1,0,202.67,116.81a96.566,96.566,0,0,0-1.015-13.891,60.688,60.688,0,0,1-21.987,4.061Z" transform="translate(-14.49 4.91)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104581)">
<path id="Path_104581-4" data-name="Path 104581" d="M111.754,11.56A51.329,51.329,0,0,0,60.5,62.814a49.091,49.091,0,0,0,.668,8.069,51.3,51.3,0,0,0,42.093,42.467,47.836,47.836,0,0,0,8.493.817,50.982,50.982,0,0,0,20.2-4.16,1.413,1.413,0,0,0,0-.347,51.254,51.254,0,0,0-20.2-98.1Zm18.719,55.785H116.781V81.038a5.035,5.035,0,0,1-7.552,4.63,5.175,5.175,0,0,1-1.956-2.1,4.952,4.952,0,0,1-.5-1.931,2.475,2.475,0,0,1,0-.594V67.345H93.06a4.531,4.531,0,0,1-4.531-4.531,4.482,4.482,0,0,1,4.407-4.531h13.841V44.591a4.961,4.961,0,1,1,9.9-.594V58.283h13.693a4.531,4.531,0,1,1,0,9.062Z" transform="translate(53.42 -11.56)" fill="#fff"/>
</g>
</g>
<g id="light" transform="translate(-24202 -16582.441)">
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104565-2)">
<path id="Path_104565-5" data-name="Path 104565" d="M302.219,78.851,291.25,51.59H277.78V96.728h9.582V65.184l12.752,31.545H304.3L317.05,65.184V96.728h9.657V51.59H313.163Z" transform="translate(374.14 47.53)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104566-2)">
<path id="Path_104566-5" data-name="Path 104566" d="M323.833,51.3a22.656,22.656,0,0,0-23.547,23.324A23.6,23.6,0,1,0,323.833,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856,13.742,6.363,13.742,14.856S332.178,89.481,323.833,89.481Z" transform="translate(407.34 47.07)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104567-2)">
<path id="Path_104567-5" data-name="Path 104567" d="M352.946,79.941,331.9,51.59h-9.83V96.728H331.7V67.288l21.517,29.44h9.335V51.59h-9.607Z" transform="translate(439.51 47.53)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Rectangle_2960-2)">
<rect id="Rectangle_2960-5" data-name="Rectangle 2960" width="9.533" height="45.163" transform="translate(810.96 99.09)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104568-2)">
<path id="Path_104568-5" data-name="Path 104568" d="M348.38,60.033h13.2v36.7h9.681v-36.7h13.123V51.59h-36Z" transform="translate(478.35 47.53)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104569-2)">
<path id="Path_104569-5" data-name="Path 104569" d="M387.157,51.3a23.349,23.349,0,1,0,23.622,23.324A22.656,22.656,0,0,0,387.157,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856S400.9,66.134,400.9,74.627,395.476,89.483,387.157,89.483Z" transform="translate(501.52 47.07)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104570-2)">
<path id="Path_104570-5" data-name="Path 104570" d="M411.986,79.559a12.95,12.95,0,0,0,9.9-13.4c0-8.394-5.744-14.584-15.153-14.584H385.69V96.743h9.632V80.7h7.007l8.889,16.045h10.944Zm-6.636-7.428H395.272V60.048H405.35a6.116,6.116,0,1,1,0,12.182Z" transform="translate(533.42 47.51)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104571-2)">
<path id="Path_104571-5" data-name="Path 104571" d="M269.072,31.72a1.659,1.659,0,0,0-1.634,1.634V171.79a1.659,1.659,0,1,0,3.293,0V33.354A1.659,1.659,0,0,0,269.072,31.72Z" transform="translate(358.85 18.2)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104572-2)">
<path id="Path_104572-5" data-name="Path 104572" d="M131.979,48.36c-18.447,0-30.629,14.262-30.629,31.3s12.232,31.248,30.629,31.248,30.629-14.237,30.629-31.248S150.45,48.36,131.979,48.36Zm0,54.671c-14.039,0-21.938-10.969-21.938-23.374s7.923-23.374,21.938-23.374,21.938,10.994,21.938,23.374S146.043,103.031,131.979,103.031Z" transform="translate(113.72 42.76)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104573-2)">
<path id="Path_104573-5" data-name="Path 104573" d="M150.98,56.863a16.317,16.317,0,0,0-14.287,7.775V61.245a4.11,4.11,0,0,0-4.16-4.036h-.371a3.937,3.937,0,0,0-3.615,4.234v49.249a4.259,4.259,0,1,0,8.518,0V90.562a16.193,16.193,0,0,0,14.014,7.8c10.424,0,18.942-8.22,18.942-20.749C169.922,65.628,161.4,56.863,150.98,56.863ZM149.247,91.3c-7.428,0-12.38-6.438-12.38-13.693s4.952-13.668,12.38-13.668h0c7.428,0,12.108,5.6,12.108,13.742S156.626,91.3,149.247,91.3Z" transform="translate(153.85 55.3)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104574-2)">
<path id="Path_104574-5" data-name="Path 104574" d="M166.938,56.851A19.982,19.982,0,0,0,146.659,77.6c0,11.316,7.156,20.749,20.65,20.749a21.591,21.591,0,0,0,16.119-6.636,3.739,3.739,0,0,0,1.089-2.476,3.516,3.516,0,0,0-3.491-3.516,4.135,4.135,0,0,0-2.823,1.387,14.015,14.015,0,0,1-10.5,4.432,11.39,11.39,0,0,1-12.38-10.969h27.113c2.476,0,3.244-1.436,3.244-2.9C185.78,66.112,178.352,56.876,166.938,56.851ZM155.622,73.763A11.241,11.241,0,0,1,166.938,63.71h0a11.043,11.043,0,0,1,10.969,10.078Z" transform="translate(180.58 55.29)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104575-2)">
<path id="Path_104575-5" data-name="Path 104575" d="M183.4,56.863h-.817A18.546,18.546,0,0,0,164.463,75.8V93.756a4.284,4.284,0,0,0,8.542,0V74.814a10.523,10.523,0,0,1,20.923,0V93.756a4.259,4.259,0,1,0,8.518,0V75.037A18.62,18.62,0,0,0,183.4,56.863Z" transform="translate(206.87 55.3)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104576-2)">
<path id="Path_104576-5" data-name="Path 104576" d="M215.825,51.451a4.655,4.655,0,0,0-4.7-2.922,4.779,4.779,0,0,0-4.729,2.922l-23.126,51.428a5.25,5.25,0,0,0-.545,2.179v.248a5.125,5.125,0,0,0,5.249,4.952,4.8,4.8,0,0,0,4.63-2.971l5.15-11.043h26.84l5.1,11.142a4.779,4.779,0,0,0,4.605,2.971h.248a5.125,5.125,0,0,0,4.952-5.249,4.729,4.729,0,0,0-.545-2.179ZM201.761,86.586l9.409-23.027L220.6,86.586Z" transform="translate(233.83 42.99)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104577-2)">
<path id="Path_104577-5" data-name="Path 104577" d="M212.971,48.52a5.67,5.67,0,0,0-5.621,5.621V104.7a5.621,5.621,0,0,0,5.621,5.6h0a5.5,5.5,0,0,0,5.4-5.6V54.091a5.522,5.522,0,0,0-5.4-5.571Z" transform="translate(270.18 42.99)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104578-2)">
<path id="Path_104578-5" data-name="Path 104578" d="M266.153,66.984c0-10.746-6.462-18.174-21.492-18.174H221.312a5.5,5.5,0,0,0-5.472,5.546v49.991a5.546,5.546,0,0,0,11.068,0V85.059h18.224L255.853,106.9a4.952,4.952,0,0,0,4.952,2.971h0a5.447,5.447,0,0,0,5.447-5.5,5.6,5.6,0,0,0-.668-2.476l-9.31-18.917a16.491,16.491,0,0,0,9.88-16Zm-11.192.768a8.27,8.27,0,0,1-8.74,7.8H226.933V58.987H246.2a7.973,7.973,0,0,1,8.79,8.047,6.953,6.953,0,0,1-.025.718Z" transform="translate(282.71 43.42)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104579-2)">
<path id="Path_104579-5" data-name="Path 104579" d="M278.916,98.779H250.293V83.551h23a5.076,5.076,0,0,0,5.076-4.952,5.15,5.15,0,0,0-5.076-5.274H250.368V59.038H277.6a5.249,5.249,0,0,0,5.249-5.176h0a5.125,5.125,0,0,0-5.249-4.952H244.846a5.571,5.571,0,0,0-5.6,5.546v49.15h0a5.546,5.546,0,0,0,5.621,5.5h34.145a5.125,5.125,0,0,0,5.15-5.1,5.249,5.249,0,0,0-5.249-5.224Z" transform="translate(317.27 43.57)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104580-2)">
<path id="Path_104580-5" data-name="Path 104580" d="M179.667,106.98q-3.046,0-6.091-.3A65.516,65.516,0,1,1,98.824,51.938a64.578,64.578,0,0,1,9.9-.768,65.319,65.319,0,0,1,10.523.842c-.173-1.882-.272-3.788-.272-5.72a60.638,60.638,0,0,1,4.308-22.433A94.1,94.1,0,1,0,202.67,116.81a96.566,96.566,0,0,0-1.015-13.891,60.688,60.688,0,0,1-21.987,4.061Z" transform="translate(-14.49 4.91)" fill="#fff"/>
</g>
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104581-2)">
<path id="Path_104581-5" data-name="Path 104581" d="M111.754,11.56A51.329,51.329,0,0,0,60.5,62.814a49.091,49.091,0,0,0,.668,8.069,51.3,51.3,0,0,0,42.093,42.467,47.836,47.836,0,0,0,8.493.817,50.982,50.982,0,0,0,20.2-4.16,1.413,1.413,0,0,0,0-.347,51.254,51.254,0,0,0-20.2-98.1Zm18.719,55.785H116.781V81.038a5.035,5.035,0,0,1-7.552,4.63,5.175,5.175,0,0,1-1.956-2.1,4.952,4.952,0,0,1-.5-1.931,2.475,2.475,0,0,1,0-.594V67.345H93.06a4.531,4.531,0,0,1-4.531-4.531,4.482,4.482,0,0,1,4.407-4.531h13.841V44.591a4.961,4.961,0,1,1,9.9-.594V58.283h13.693a4.531,4.531,0,1,1,0,9.062Z" transform="translate(53.42 -11.56)" fill="#fff"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View File

@ -1,65 +0,0 @@
:root {
--portal-main-color: #8DCA26;
--portal-main-contrast: white;
--portal-dark-color: #7cb021;
--openaire-main-color: #313179;
--explore-portal-color: #D95F2D;
--provide-portal-color: #37C7E9;
--monitor-portal-color: #8DCA26;
--connect-portal-color: #EBB13E;
--develop-portal-color: #DA65AB;
--explore-portal-lower-tone: #a0462c;
--provide-portal-lower-tone: #3A8FA3;
--monitor-portal-lower-tone: #7cb021;
--connect-portal-lower-tone: #b48536;
--develop-portal-lower-tone: #9f4e7e;
}
.tm-toolbar .uk-subnav-line .custom-monitor-li {
background: var(--portal-main-color);
}
.monitorApp, .searchForm {
background: #F9F9F9 !important;
}
.monitorApp .login text {
stroke: white;
fill: white;
}
.uk-card {
color: #1a1a1a;
}
main {
min-height: calc(100vh - 100px);
line-height: 23px;
font-size: 16px;
color: #1a1a1a;
font-family: "Open Sans", sans-serif;
}
.monitorApp .uk-text-small {
font-size: 14px;
}
.monitorApp .uk-text-muted {
color: #4D4D4D !important;
}
.monitorApp .portal-button {
color: white !important;
font-weight: 700;
}
.monitorApp .uk-grid-divider>:not(.uk-first-column)::before {
border-left: 1px solid #DEDEDE;
}

View File

@ -0,0 +1,33 @@
/** Global */
@global-primary-gradient: linear-gradient(110deg, @monitor-light-color 0%, @monitor-dark-color 100%);
/** Background*/
@background-primary-background: @monitor-color;
@background-primary-background-gradient: none;
/** Buttons */
@button-primary-background: @monitor-color;
@button-secondary-border: @monitor-color;
@button-secondary-color: @monitor-color;
@button-secondary-hover-background: @global-secondary-background;
@button-secondary-hover-background-gradient: none;
@button-secondary-active-background: @global-secondary-background;
@button-secondary-active-background-gradient: none;
/** Label */
@label-secondary-color: @monitor-color;
@label-secondary-border: @monitor-color;
/** List */
@list-primary-color: @monitor-color;
/** Text */
@text-primary-color: @monitor-color;
@text-background-color: @monitor-color;
@inverse-text-primary-color: @monitor-color;
/* Slider */
@dotnav-item-background: fade(@monitor-color, 50%);
@dotnav-item-hover-background: @monitor-color;
@dotnav-item-onclick-background: @monitor-color;
@dotnav-item-active-background: @monitor-color;

@ -0,0 +1 @@
Subproject commit 5b2ec5ad3c5d43fcd69f82ddfa3a841a0d34ba0c

View File

@ -5,8 +5,6 @@ export let properties: EnvProperties = {
enablePiwikTrack: true,
useCache: true,
showContent: true,
metricsAPIURL: "https://beta.services.openaire.eu/usagestats/",
framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "https://stats.madgik.di.uoa.gr/stats-api/",
@ -29,11 +27,6 @@ export let properties: EnvProperties = {
r3DataURL: "http://service.re3data.org/repository/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
utilsService: "https://demo.openaire.eu/utils-service",
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
@ -59,6 +52,7 @@ export let properties: EnvProperties = {
resultsPerPage: 10,
baseLink : "",
domain : "https://beta.monitor.openaire.eu",
afterLoginRedirectLink: '/my-dashboards',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
@ -74,13 +68,12 @@ export let properties: EnvProperties = {
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToEntityRegistriesDataProvidersTable: "/search/entity-registries-table",
searchLinkToJournals: "/search/journals",
searchLinkToJournalsTable: "/search/journals-table",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
errorLink: '/error',
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",

View File

@ -5,8 +5,6 @@ export let properties: EnvProperties = {
enablePiwikTrack: true,
useCache: true,
showContent: true,
metricsAPIURL: "https://services.openaire.eu/usagestats/",
framesAPIURL: "https://www.openaire.eu/stats3/",
statisticsAPIURL: "https://services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://www.openaire.eu/stats/",
statisticsFrameNewAPIURL: "",
@ -29,11 +27,6 @@ export let properties: EnvProperties = {
r3DataURL: "http://service.re3data.org/repository/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
utilsService: "https://explore.openaire.eu/utils-service",
vocabulariesAPI: "https://services.openaire.eu/provision/mvc/vocabularies/",
@ -59,6 +52,7 @@ export let properties: EnvProperties = {
resultsPerPage: 10,
baseLink : "",
domain : "https://monitor.openaire.eu",
afterLoginRedirectLink: '/my-dashboards',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
@ -74,13 +68,12 @@ export let properties: EnvProperties = {
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToEntityRegistriesDataProvidersTable: "/search/entity-registries-table",
searchLinkToJournals: "/search/journals",
searchLinkToJournalsTable: "/search/journals-table",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
errorLink: '/error',
lastIndexInformationLink: "https://www.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
widgetLink: "https://www.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",

View File

@ -5,8 +5,6 @@ export let properties: EnvProperties = {
enablePiwikTrack: false,
useCache: false,
showContent: true,
metricsAPIURL: "https://beta.services.openaire.eu/usagestats/",
framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "http://88.197.53.71:8080/stats-api/",
@ -29,25 +27,20 @@ export let properties: EnvProperties = {
r3DataURL: "http://service.re3data.org/repository/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
utilsService: "http://mpagasas.di.uoa.gr:8000",
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
piwikSiteId: "298",
registryUrl: 'http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/registry/',
loginUrl: "http://mpagasas.di.uoa.gr:8080/login-service/openid_connect_login",
userInfoUrl: "http://mpagasas.di.uoa.gr:8080/login-service/userInfo",
logoutUrl: "http://mpagasas.di.uoa.gr:8080/login-service/openid_logout",
loginUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_connect_login",
userInfoUrl: "http://mpagasas.di.uoa.gr:19080/login-service/userInfo",
logoutUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_logout",
cookieDomain: ".di.uoa.gr",
feedbackmail: "openaire.test@gmail.com",
cacheUrl: "http://scoobydoo.di.uoa.gr:3000/get?url=",
monitorServiceAPIURL: "http://duffy.di.uoa.gr:8080/uoa-monitor-service",
adminToolsAPIURL: "http://duffy.di.uoa.gr:8080/uoa-monitor-service/",
monitorServiceAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service",
adminToolsAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service/",
adminToolsPortalType: "monitor",
adminToolsCommunity: "monitor",
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/search/",
@ -59,6 +52,7 @@ export let properties: EnvProperties = {
resultsPerPage: 10,
baseLink : "",
domain : "http://dl170.madgik.di.uoa.gr/monitor",
afterLoginRedirectLink: '/my-dashboards',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
@ -74,13 +68,12 @@ export let properties: EnvProperties = {
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToEntityRegistriesDataProvidersTable: "/search/entity-registries-table",
searchLinkToJournals: "/search/journals",
searchLinkToJournalsTable: "/search/journals-table",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
errorLink: '/error',
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
@ -89,7 +82,7 @@ export let properties: EnvProperties = {
depositSearchPage: "/participate/deposit/search",
shareInZenodoPage: "/participate/deposit/zenodo",
reCaptchaSiteKey: "6LcVtFIUAAAAAB2ac6xYivHxYXKoUvYRPi-6_rLu",
admins: ["kostis30fylloy@gmail.com", "argirok@di.uoa.gr"],
admins: ["kostis30fylloy@gmail.com"],
lastIndexUpdate: "2019-05-16",
indexInfoAPI: "https://beta.services.openaire.eu/openaire/info/",
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",

View File

@ -12,4 +12,4 @@ if (properties.environment !== "development") {
}
export {AppServerModule} from './app/app.server.module';
export {renderModule, renderModuleFactory} from '@angular/platform-server';

View File

@ -1,9 +0,0 @@
@import '../node_modules/@angular/material/theming';
@include mat-core();
$my-app-primary: mat-palette($mat-gray, 900);
$my-app-accent: mat-palette($mat-light-green, 700);
$my-app-theme: mat-light-theme($my-app-primary, $my-app-accent);
@include angular-material-theme($my-app-theme);

View File

@ -22,16 +22,6 @@ import '@angular/localize/init';
* BROWSER POLYFILLS
*/
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js'; // Run `npm install --save classlist.js`.
/**
* Web Animations `@angular/platform-browser/animations`
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
*/
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
/**
* By default, zone.js will patch all possible macroTask and DomEvents
* user can disable parts of macroTask/DomEvents patch by setting following flags
@ -59,7 +49,7 @@ import '@angular/localize/init';
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
import 'zone.js/dist/zone'; // Included with Angular CLI.
import 'zone.js'; // Included with Angular CLI.
/***************************************************************************************************

View File

@ -1,5 +0,0 @@
/* You can add global styles to this file, and also import other style files */
@import "assets/common-assets/common/theme.css";
@import "assets/common-assets/common/custom.css";
@import "assets/common-assets/library.css";
@import "assets/monitor-custom.css";

5
src/styles.less Normal file
View File

@ -0,0 +1,5 @@
/* You can add global styles to this file, and also import other style files */
@import "~src/assets/openaire-theme/less/_import";
@import "~src/assets/common-assets/less/general";
@import "~src/assets/common-assets/less/user";
@import "assets/monitor-custom";

View File

@ -1,20 +1,16 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone-testing';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
platformBrowserDynamicTesting(), {
teardown: { destroyAfterEach: false }
}
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@ -2,7 +2,6 @@
"extends": "./tsconfig.app.json",
"compilerOptions": {
"outDir": "../out-tsc/app-server",
"target": "es2016",
"types": [
"node"
]

View File

@ -8,16 +8,16 @@
"declaration": false,
"module": "es2020",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"importHelpers": true,
"target": "es2015",
"target": "ES2022",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
]
],
"useDefineForClassFields": false
}
}