Compare commits

...

487 Commits

Author SHA1 Message Date
Konstantina Galouni 2a4b92ba00 Merge remote-tracking branch 'origin/develop' 3 weeks ago
Konstantina Galouni 4ad1f4e51c [develop | DONE | CHANGED]: CHANGELOG.md: Added changelog for production-release-march-2024. 3 weeks ago
Konstantina Galouni 3d2ad5336b Merge remote-tracking branch 'origin/develop' 3 weeks ago
Konstantina Galouni 60de7eb2a0 Updating libraries 3 weeks ago
Konstantina Galouni 45561bddb2 Updating openaireLibrary 3 weeks ago
Konstantina Galouni 215c3fbc83 [develop | DONE | FIXED]: home.module.ts: Moved HomeRoutingModule first to make sure that this routing is loaded in Home page. 3 weeks ago
Konstantina Galouni a79b936629 [develop | DONE | FIXED]: Moved RoutingModule as first imported module with possible routing (advanced search projects & organizations were loading orcid routing instead of their own). 3 weeks ago
Alex Martzios b7a05316c0 [develop | DONE | FIXED] update submodule 3 weeks ago
Konstantina Galouni a99e6378fc Updating openaireLibrary 4 weeks ago
Konstantina Galouni 8949088e0e [develop | DONE | CHANGED]: funders.component.html: Added loading="lazy" on images (<img> elements). 4 weeks ago
Konstantina Galouni 463410a135 [develop | DONE | CHANGED]: Removed "PreviousRouteRecorder", "IsRouteEnabled", "PiwikService", "LoginGuard", "EmailService" from providers array declared in module.ts & removed import of "PiwikServiceModule". 4 weeks ago
Konstantina Galouni 17165e83ae [develop | DONE | CHANGED]: Removed folders: error, fos, landingPages, login, orcid, reload, sdg (were just calling library components) | app.module.ts: Removed declaration of OpenaireErrorPageComponent | app-routing.module.ts: Updates routes for 'sdgs', 'fields-of-science', 'orcid', 'my-orcid-links', landing pages routes, 'reload', 'user-info' to import library modules instead of intermediate project specific modules & replaced OpenaireErrorPageComponent with ErrorPageComponent (from library). 4 weeks ago
Alex Martzios f3115b9f98 [develop | DONE | CHANGED] change footer text and update submodules 1 month ago
Alex Martzios f226482ba3 [develop | DONE | CHANGED] compress all .png and .jpg images on explore-assets and exploreLogos 1 month ago
Konstantina Galouni 38337e296f [develop | WIP | CHANGED]: assets/:Restores jpg and png images and deleted their webp version - pngs will be compressed | funders.component & home.component: Updated images - use the png/jpg version again. 1 month ago
argirok c81c6196c0 [ develop | DONE | ADDED] Utils servise: add a method to get counts for results, use the same method in /explore/home 1 month ago
Konstantina Galouni 178846353c [develop | DONE | DELETED]: assets: Deleted unused images: logo-large-explore.webp & logo-sma
.
1 month ago
Konstantina Galouni 49dce466ce [develop | DONE | CHANGED]: assets: Deleted unused images & replaced jpg and png images with their webp version | funders.component & home.component: Updated images - use the webp version. 1 month ago
argirok 68662693a4 [ develop | DONE | ADDED] Cache: add a method to get info 1 month ago
Konstantina Galouni e8e4c410dd Updating openaireLibrary & openaire-theme 1 month ago
Konstantina Galouni c51b2b58f4 [develop | DONE | CHANGED]: app.component.ts: Added check, not to add "My ORCID Links" user menu item in beta environment. 1 month ago
Konstantinos Triantafyllou 85320e8653 [develop]: Remove userInfoURL property usage 1 month ago
Konstantina Galouni 9f53423ae3 Merge remote-tracking branch 'origin/develop' 1 month ago
Konstantina Galouni 15499aa4ca Updating openaireLibrary 1 month ago
Konstantina Galouni a762efab08 Merge remote-tracking branch 'origin/develop' into develop 1 month ago
Konstantina Galouni 8cdc423f02 [develop | DONE | CHANGED]: CHANGELOG.md: Added changelogs for [production-release-february-2024]. 1 month ago
Konstantinos Triantafyllou 3797ddcc3a Merge branch 'develop' of code-repo.d4science.org:MaDgIK/explore-services into develop 1 month ago
Konstantinos Triantafyllou e57f1b02ed [develop]: Split style of deposit and funders to new css files and use rootClass to appy style in html 1 month ago
Konstantina Galouni b6db196e68 Merge pull request 'Production release February 2024 - Fixes and updates in cache' (#13) from develop into master
Reviewed-on: #13
1 month ago
Konstantina Galouni 6af07478b4 [develop | DONE | CHANGED]: cache.js: Increased "cacheMaxSize" from 300 to 1000 requests. 1 month ago
argirok 3b058ee74d [ develop | DONE | CHANGED] Cache: update isAllowed Method, correct https check, decode urls before check 2 months ago
Konstantina Galouni 4258055e51 Merge pull request 'Production release February 2024 - Home page logos update' (#12) from develop into master
Reviewed-on: #12
2 months ago
Konstantina Galouni c20002c9e9 [develop | DONE | CHANGED]: home.component & assets/ExploreLogos: Grouped logos of slider in Home page (per slide) into one image and replaced the old logos - better performance. 2 months ago
Konstantina Galouni 134c21d6be Merge pull request 'Production release February 2024 - Fix' (#11) from develop into master
Reviewed-on: #11
2 months ago
Konstantina Galouni fbdc3710dc [develop | DONE | FIXED]: cache.js: Updated checks in method "isAllowedToBeCached()" to check for encoded urls. 2 months ago
Konstantina Galouni a5019e083c Merge remote-tracking branch 'origin/develop' 2 months ago
Konstantina Galouni ee38203ee4 Updating openaireLibrary & openaire-theme 2 months ago
Konstantina Galouni 1d7a7ae2c4 Updating openaireLibrary & openaire-theme 2 months ago
Konstantina Galouni d639261fbe [develop | WIP | FIXED]: Added correct alt on images, width and height in FoS and SDG images and lazy loading everywhere. 2 months ago
Konstantina Galouni a7d0cc5d4e [develop | DONE | CHANGED]: app.module.ts: Removed CacheInterceptorService from EXPLORE. 2 months ago
Konstantina Galouni 9952b55f2c [develop | DONE | CHANGED]: cache.js: Added "lab.idiap.ch/enermaps" in "isAllowedToBeCached()" method. 2 months ago
argirok b94006ea99 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	services/cache/mecache/cache.js
2 months ago
argirok b0db89f826 [ develop | DONE | CHANGED] Cache: change to LRU cache, remove short/long cache related code and properties, add preload requests in properties to load on init cache (on start, on clear and on daily reset) 2 months ago
Konstantina Galouni 07681241c0 [develop | DONE | CHANGED]: contact.component.ts: Do not request page help contents (helptexts). 2 months ago
Konstantina Galouni ee00eaaebf Merge remote-tracking branch 'origin/grouped-queries' into develop 2 months ago
Konstantina Galouni 1738dfcccc Updating openaireLibrary 2 months ago
Konstantina Galouni 5b5000b2fe Updating openaireLibrary 2 months ago
Konstantina Galouni af50558136 [grouped-queries | DONE | CHANGED] funders.component.ts: Replaced search & stakeholders queries of funders (in Funders page) with grouped query for Funders page of EXPLORE 2 months ago
Konstantina Galouni 36f1ed105d Updating openaireLibrary & common-assets 2 months ago
Konstantina Galouni 414ff59fd0 Merge remote-tracking branch 'origin/develop' 2 months ago
Konstantina Galouni 5408bd9f82 Updating openaireLibrary & common-assets 2 months ago
Konstantina Galouni a3c79137aa [develop | DONE | CHANGED]: Remove preselected "Open Access" filter from search.
1. home.component.ts: Set field "resultsQuickFilter" to null.
2. searchAll.component.ts: Set field "quickFilter" to null | In method "entityChanged()" do not set parameter "resultbestaccessright" | [BUG FIX] Clear subscriptions from fetchOrps.
3. searchResearchResults.component.ts: Set field "quickFilter" to null.
4. navigationBar.component.ts: Set field "resultsQuickFilter" to null.
5. app.component.ts: Remove "resultbestaccessright" parameter from menu items of Search research products.
2 months ago
Konstantina Galouni 4131de601c [develop | DONE | ADDED]: cache.js: Added in "longCachingRequests", the endpoints "/utils-service/explore/search" and "/utils-service/explore/funders" to be used as a grouped responses in explore search and funders pages. 2 months ago
argirok 7761eeeedc [ develop | DONE | CHANGED] Utils services: update funders response, remove open access filter from results query in /explore/search 2 months ago
argirok 46ad6aef36 [ develop | DONE | ADDED] Utils services: add /explore/funders method that groups requests for funder page 2 months ago
argirok f64b410dd5 Merge remote-tracking branch 'origin/develop' into develop 2 months ago
argirok 629d3efb08 [ develop | DONE | ADDED] Cache services: add initialization method to initiate grouped requests from utils service. Init after clear and when cache starts 2 months ago
argirok a9d06e61fa [ develop | DONE | ADDED] Utils services: group common requests in a single request 2 months ago
Konstantina Galouni 102f41722e Updating openaireLibrary & common-assets 2 months ago
Konstantina Galouni 109be1c6f6 [cache | develop | DONE | ADDED]: cache.js: Added in "longCachingRequests", the endpoint "/utils-service/explore/home" to be used as a grouped response for the numbers in explore home page. 2 months ago
Konstantina Galouni 3678f7c5ea [cache | develop | DONE | CHANGED]: cache.js: Increased time of short cache from 2 minutes to 1 hour. 2 months ago
Konstantina Galouni 278fefb45a Merge remote-tracking branch 'origin/develop' 2 months ago
Konstantina Galouni 3562d4f6c6 Updating openaireLibrary 2 months ago
Konstantina Galouni cca45918d8 Merge branch 'develop' of code-repo.d4science.org:MaDgIK/explore-services into develop 2 months ago
Konstantina Galouni 099f6a6ce6 [develop | DONE | CHANGED]: CHANGELOG.md: Added logs for [production-release-january-2024]. 2 months ago
Konstantina Galouni b21d7dcd93 Merge remote-tracking branch 'origin/develop' 2 months ago
Konstantina Galouni 2adb378467 Updating libraries 2 months ago
Konstantina Galouni c41cbb6355 Updating openaireLibrary 2 months ago
Konstantina Galouni 5c95fac244 [develop | DONE | FIXED]: routes.ts: Added missing routes for prometheus logs. 2 months ago
Konstantina Galouni 17325b3ab2 [develop | DONE | DELETED]: Removed legacy unused files htmlProjectReport.component.ts & htmlProjectReport-routing.module.ts & libHtmlProjectReport.module.ts & mailPrefs.component.ts & mailPrefs.module.ts & mailPrefs-routing.module.ts | app-routing.module.ts: Deleted legacy routes 'mail-preferences' & 'project-report'. 2 months ago
Konstantina Galouni 6fd19ea661 Updating libraries 2 months ago
Alex Martzios e01371ff14 [master | DONE | ADDED] update submodules 2 months ago
Konstantina Galouni 96e400552a [develop | DONE | ADDED]: Added CHANGELOG.md file in the explore folder. 2 months ago
Konstantina Galouni da33e403f6 Updating openaireLibrary 3 months ago
Konstantina Galouni 9ca57b8f4d [develop | DONE | CHANGED]: explore-assets/funders/logos: Renamed all funder logos by using only their shortnames | funders.component.ts: For static logos, split funder id and get only their shortname, to get the static logo - Special characters where causing problems in pulling the project in Windows environment. 3 months ago
Konstantina Galouni 5b86f1a4d1 Updating libraries 3 months ago
Konstantina Galouni c3587bb2c4 Merge remote-tracking branch 'origin/develop' 4 months ago
Konstantina Galouni 288e106779 Updating libraries 4 months ago
Konstantina Galouni c416853045 Updating openaireLibrary 4 months ago
Konstantina Galouni ec8e6b6938 Updating openaireLibrary 4 months ago
Konstantina Galouni 852c81d834 [develop | DONE | CHANGED]: home.component.html: In home page, get number of funders by numbers.mergedFundersSize (instead of numbers.fundersSize) - all funders that with research products or >1 projects. 4 months ago
Konstantina Galouni 8c9337fd0b [develop | DONE | FIXED]: funders.component.ts: Updated method called in refine queries from "getRefineFieldsResultsByEntityName()" to "getAllRefineFieldResultsByFieldName()" to be able to get more than 100 funders each time. 4 months ago
Konstantina Galouni bce47ea21e [develop | DONE | CHANGED]: data sources landing: Get and parse number of collected fulltexts from a new stats api.
1. env-properties.ts: Added property pdfStatisticsAPIURL?: string;
2. environment.ts: Added pdfStatisticsAPIURL property in all environments.
3. dataProvider.service.ts: Uncomment method "getCollectedFulltexts()".
4. dataProvider.component.ts: Call method "getCollectedFulltexts()" instead of "getDataProviderAggregationStatus()".
5 months ago
Konstantina Galouni 11f0f8befb Merge remote-tracking branch 'origin/develop' 5 months ago
Konstantina Galouni ab839498a8 Updating libraries 5 months ago
Konstantina Galouni 2bfb614008 [develop | WIP | CHANGED]: explore-assets/funders/logos: Updated logo for Tara funder. 5 months ago
Konstantina Galouni 5eb3883d6b [develop | WIP | FIXED]: funders.component.ts: Fixed typo in previous commit causing page crash. 5 months ago
Konstantina Galouni 4fd541f460 [develop | WIP | CHANGED]: explore-assets/funders/logos: Missing logos for production funders added temporarily | funders.component.ts: Added staticLogos field to get missing logos for prod funders from local folder - temporary solution, to be removed asap. 5 months ago
Konstantina Galouni cfe0cc3b7b [develop | DONE | FIXED]: environment.beta.ts: Updated piwikSiteId for beta from "109" to "6" (this shouldn't be used - it should be fetched dynamically by admin tools API). 5 months ago
Konstantina Galouni f1330358f8 [develop | DONE | FIXED]: package.json: Restored uikit version from 3.16.14 to 3.16.24. 5 months ago
argirok b5b9aa7d24 [ DONE | UPDATED] remove common properties to use the properties from library 5 months ago
Konstantina Galouni 1dbce23e13 [develop | DONE | FIXED] environment.prod.ts: In claimsAPIURL property call production API, not beta. 5 months ago
Konstantina Galouni e1e53a7bbe Updating libraries 5 months ago
Konstantina Galouni 3903c940a7 Merge pull request 'BETA & PROD Explore release October 2023 - Update to Angular-16' (#4) from angular-16 into develop
Reviewed-on: #4
5 months ago
Konstantina Galouni d83c614892 [angular-16 | DONE | UPDATED] environment.prod.ts: Updated claimsAPIURL property to call new claims API. 5 months ago
Konstantina Galouni 363e371ec1 Merge branch 'angular-16' of code-repo.d4science.org:MaDgIK/explore-services into angular-16 5 months ago
Konstantina Galouni ce034c1c8c [angular-16 | DONE | FIXED] package.json: Downgraded version of uikit from 3.16.24 to 3.16.14 (parallax not working). 5 months ago
Konstantina Galouni aa192044af Updating openaireLibrary & common-assets 5 months ago
Konstantina Galouni f24e62cad6 [angular-16 | DONE | FIXED]: In queries of results by pid, do not include pidtype restriction (some handle pids are resolved by doi regex, but no results returned for pidtype exact "doi"). 5 months ago
Konstantina Galouni 16a73b6e29 [angular-16 | DONE | CHANGED] environments/: Updated imports - import all common properties from src/app/openaireLibrary/utils/properties/environments/environment.ts 5 months ago
Konstantina Galouni ecd21315f4 [Library | angular-16]: [Bug fix] Name of bip metrics accidentally removed in branches merge. 5 months ago
Konstantina Galouni a5beb8ba76 [Explore | angular-16]: [Bug fix] funders.component.ts: Added ADDITIONAL check to the previous commit (about choosing among multiple stakeholders with the same index info). 5 months ago
Konstantina Galouni 713e6014c3 [Explore | angular-16]: [Bug fix] environment.beta.ts: Updated property "claimsAPIURL" with the new claims API | funders.component.ts: Added check to choose among multiple stakeholders with the same index info (according to the stakeholders' visibility). 5 months ago
Konstantina Galouni a5ce147fa1 Updating openaireLibrary 5 months ago
Konstantina Galouni 4aa01517f2 Merge remote-tracking branch 'origin/develop' 5 months ago
Konstantina Galouni fb2e542c4d Updating openaireLibrary (after it was merged from develop to master). 5 months ago
Konstantina Galouni c676603faa Updating libraries 5 months ago
Konstantina Galouni 65ba5ef994 Merge remote-tracking branch 'origin/develop' into angular-16 5 months ago
Konstantina Galouni d786a50074 Updating openaireLibrary 5 months ago
Konstantina Galouni 88c53b6cc3 Update openaireLibrary 5 months ago
Konstantina Galouni 7be7c08442 [Library | develop]: resultLanding.component.html: [Bug fix] Fix check isNumber for bip measures & remove check if value (show citation score also when it is 0). 5 months ago
Konstantina Galouni 20ac495013 [Explore | develop]: funders.component.html: [Bug fix] Updated height-match cases and added uk-grid-match to fix and align heights of cards and their contents | funders.component.ts: Added check to not show when there is just one project for a funder (it is the custom unidentified project added for the data). 5 months ago
Konstantina Galouni 185344d878 [Library | develop]: search-input.component.ts: [Bug fix] Added cdr.detectChanges() call on ngAfterViewInit, to solve expressionChangedAfterItHasBeenChecked error. 5 months ago
Konstantina Galouni 2d8400e9b7 [Explore | develop]: app.component.ts: Commented out MenuItem for funders page. 6 months ago
Konstantina Galouni bc05c92edc [Library | develop]: Added Full-Text in research products actions when available.
1. availableOn.component.ts: Added Full-Text before Data sources, as a separate action and as information for each instance.
2. parsingFunctions.class.ts: Added parsing for fulltext and updated method "compareHostedByCollectedFrom()" to sort by both access and existence of fulltext.
3. resultLanding.component.html: Removed classes for <availableOn> in mobile actions.
4. entity-actions.component.ts: Updated uk-text-bolder class for all actions.
5. result-preview.ts: Added "fulltext?: string;" in HostedByCollectedFrom.
6 months ago
Konstantina Galouni b1d4ac4665 [Library & Explore | develop]: Added in openaireLibrary environment files for common properties (environment.all.ts: Common properties among all portals, regardless environment, environment.-/test/beta/prod.ts: Common properties per environment among all portals) | environments/: Build and export properties by merging local properties and common properties. 6 months ago
Konstantinos Triantafyllou 642509a1f5 Merge remote-tracking branch 'origin/develop' into angular-16 6 months ago
Konstantinos Triantafyllou f948757eb2 Merge remote-tracking branch 'origin/develop' into angular-16 6 months ago
Konstantinos Triantafyllou e33812c8d8 Slider: CHangfe period to 8s and make it infinite. 6 months ago
Alex Martzios f851fbefed funders page: change width of image's hero section again 6 months ago
argirok 55150473ab remove unused imports to deleted searchZenodoCommunitiesService 6 months ago
Alex Martzios 4f9ba17092 funders page: change inputs and actions, add grid/list view for funders 6 months ago
Konstantinos Triantafyllou 8dfa776e0a Change button-link in home page with text-primary 6 months ago
Konstantinos Triantafyllou d97231ba92 Change scroll-section with slider 6 months ago
Konstantina Galouni 7835c273b4 [Library & Explore | develop]: Added software heritage as pid for research products.
1. environments/: Added in all environments, property: swhURL: "https://archive.softwareheritage.org/".
2. env-properties.ts: Added property swhURL?: string;
3. string-utils.class.ts: Added method "isValidSwhId()" and swhid in checks and definitions.
4. resultLandingInfo.ts: Added swhid in accepted types of interface Id.
5. resultLanding.component.ts: Added check for swhid in "getReferenceIdName()" and "getReferenceUrl()".
6. parsingFunctions.class.ts: Added pid[i].classid == "swhid" check in "parseIdentifiers()".
7. showIdentifiers.component.ts: Added "swhid" in display of pids.
6 months ago
Alex Martzios ca9a00e879 add new custom css class for explore, update submodules 6 months ago
Konstantinos Triantafyllou f443ca9a61 Merge remote-tracking branch 'origin/develop' into angular-16 6 months ago
Konstantinos Triantafyllou d8fadf50e6 Update libraries. Update node to version 16 and angular in readme 6 months ago
Konstantina Galouni 3cb7443a2e Updating openaireLibrary before release 7 months ago
Konstantina Galouni 8690029fd0 [Library | develop]: searchFields.ts: In RESULT_REFINE_FIELDS, query "foslabel" (instead of fos) field in all environments. 7 months ago
Konstantinos Triantafyllou 6d4f7d5645 Revert port of Upload to 8000 7 months ago
Konstantinos Triantafyllou bfd7e1bf94 Add hasStickyHeaderInMobile in home page. 7 months ago
Konstantina Galouni 14c289b719 [Explore | develop]: server.ts: Added endpoint '/health-check' with basic information. 7 months ago
Konstantina Galouni 1fef8ce8e6 [Library | develop]: resultLanding.component.html & project.component.html & organization.component.html & dataProvider.component.html: In main action bar for mobile (landing-action-bar-mobile), replaced uk-background-default with uk-tile-default uk-blur-background. 7 months ago
Konstantina Galouni 93777a8079 [Library | develop]: [Bug fix] landing-utils/fos.component.ts & fos/fos.component.ts & fos/fos.component.html: Added methods "buildFosQueryParam()" and "buildFosHrefParam()" to build and set in fos links, search param "fos" for production and "foslabel" for beta or dev environments. 7 months ago
Konstantina Galouni e56c3d82e4 [Library | develop]: alert.ts & full-screen-modal.component.ts: Updated (h6 from h4 or h5) header font size and ratio of icons (make them smaller) - in angular 16 branch, paddings have also changed. 7 months ago
Konstantinos Triantafyllou 1602407c41 Update uikit to version 3.16.24 7 months ago
Konstantina Galouni dd5ede2794 [Library & common-assets | develop]: Minor updates in mobile screens in icons/ paddings in landing pages.
1. resultLanding.component.html & project.component.html & dataProvider.component.html & organization.component.html: In mobile (small) screens, change ratio of icons in bottom action bar from 2 to 1.4.
2. showIdentifiers.component.ts: In mobile (small) screens, added in fs-modal classTitle="uk-tile-default uk-border-bottom".
3. landing.less: Added variable @landing-action-bar-mobile-border: @global-border; to use it in border-top of landing-action-bar-mobile > div | Changed padding of landing-action-bar-mobile > div to 8px in top and bottom.
7 months ago
Konstantinos Triantafyllou c8967dd92b Delete ServerTransferStateModule 8 months ago
Konstantinos Triantafyllou 95f749e9f0 Update versions in sitemaps. Need to be checked. 8 months ago
Konstantinos Triantafyllou 3a463f9bab Update dependencies and node version in cache and utils-service 8 months ago
Konstantinos Triantafyllou 15cd6a2fb6 Update library 8 months ago
Konstantinos Triantafyllou cffe2a0967 Remove BrowserStateModule 8 months ago
Konstantinos Triantafyllou 3011294f5b Update material to angular 16. 8 months ago
Konstantinos Triantafyllou eb15f07ef0 Update angular to angular 16. 8 months ago
Konstantinos Triantafyllou 89788f660d Update Zone to 0.13.1 8 months ago
Konstantinos Triantafyllou 986aecfe2a Update material to angular 15. 8 months ago
Konstantinos Triantafyllou 7ada3160f2 Migrate angular core and cli to version 15 and update dependencies to be compatible with the newer version. 8 months ago
Konstantinos Triantafyllou 12ee95b98c Update typescript to version 4.9.5 8 months ago
Konstantina Galouni f762d78226 [Library | develop]: resultLanding.component.ts: Added ContextsService and call to get public communities, and then filter out contexts (related to communities) of resultLandingInfo if they are hidden. 8 months ago
Konstantina Galouni 6ce1f32759 Updating openaire-theme before beta release.. 8 months ago
Konstantina Galouni d9549f8c93 [Library | develop]: funders.component.html: Show number of projects before number of research products in funders cards. 8 months ago
Konstantina Galouni ac797aba3c Updating openaireLibrary before beta release.. 8 months ago
Konstantina Galouni 5883af71da [Library | develop]: entity-actions.component.ts & transferData.component.html & orcid-work.component.ts & resultLanding.component.html & project.component.html & organization.component.html & dataProvider.component.html: Added "tooltips/messages" under the landing actions in mobile-small screens. 8 months ago
Konstantinos Triantafyllou ccc59c14b0 Update library and assets 8 months ago
Konstantina Galouni ca9f2bca45 [Library | develop]: In search bars, set in placeholder the portal name according to the configuration name.
1. home.component & navigationBar.component: Get portalName by config.portalAsObservable>name and set placeholder to "Search "+portalName.
2. searchAll.component.ts: Set default value of "formPlaceholderText" to "Search".
3. advancedSearchForm.component.html: Set placeholder of input (when there is also the <entities-selection>) to [placeholder]="formPlaceholderText".
8 months ago
Alex Martzios 665a6cb61b update submodules 8 months ago
Alex Martzios 96c0b16680 update submodules 8 months ago
Konstantina Galouni 48906a3e28 [Explore | develop]: funders.component.ts: [Bug fix] When there is a funder dashboard with no research products or projects, do not show this funder at all. 8 months ago
Konstantina Galouni 36108a81f1 [Explore | develop]: funders.component.ts: [Bug fix] Updated logoUrl parsing - if isUpload is true, get logo from properties.utilsService + "/download/". 8 months ago
Konstantinos Triantafyllou c7ffca77fd Update library 9 months ago
Konstantinos Triantafyllou e724914d64 Change piwik base on the new dynamic piwik. 9 months ago
Konstantina Galouni b93da0d434 [Library & common-assets | develop]: [WIP] dataProvider.component.html & project.component.html & resultLanding.component.html: Removed "uk-card uk-card-secondary" classes from metrics box and commented badge icon | metrics-badge.svg: Changed badge color to white (used to be orange - Explore specific) | landing.less: Updated class ".landing-metrics-card" to use background-blend-mode: color-dodge for svgs in landing metrics box. 9 months ago
Konstantina Galouni eda8c5c2d9 [Explore | develop]: app.component.ts: Added open access param in sub menu items of research products (publications, software, ...) | home.component.ts: Removed an unnecessary log. 9 months ago
Alex Martzios cf7664534b add funders' page content, enable route from app-routing file, update submodules 9 months ago
Alex Martzios 9556ae36b9 funders page: responsive design for sorting actions 9 months ago
Konstantina Galouni 378d7ccb83 [Explore | develop]: app-routing.module.ts: Set specific search routes for each entity before setting generic route "search/find/:entity" | Updating openaireLibrary and common-assets. 9 months ago
Konstantina Galouni a23afc29d2 [Explore | develop]: [Bug fix] Refactor code for showing help button or not.
1. home.component.ts: Removed field "showQuickContact" | In constructor set quickContactService.setDisplay(false) and in ngOnDestroy quickContactService.setDisplay(true) | Refactor intersectionObserver.
2. app.component.ts: Updated checks for <quick-contact> | Added public bottomNotIntersecting: boolean; and public displayQuickContact: boolean; (check if intersecting with specific section in home page) | Added disconnect in ngOnDestroy for IntersectionObserver subscriptions.
9 months ago
Konstantina Galouni 1d6e5deeed Updating libraries before release 9 months ago
Konstantina Galouni 3b7af8f0b0 Merge pull request 'Merging explore-redesign branch into develop for Explore July release' (#1) from explore-redesign into develop
Reviewed-on: #1
9 months ago
Konstantina Galouni beece2680b Updating openaireLibrary before merging develop branch into explore-redesign 9 months ago
Konstantina Galouni 57a4ca5420 [Library & common-assets | explore-redesign]: addThis.component.ts: Replaced addthis external library with addtoany - addthis is no longer supported | general.less: css for addtoany social icons (classes .fully_rounded .a2a_svg). 9 months ago
Konstantina Galouni a6d24784fc [Library | explore-redesign]: dataProvider.service.ts & dataProvider.component.ts: Added method "getCollectedFulltexts()" in service and component to get and parse number of collected fulltexts from a new stats api - commented/ API is still in dev. 9 months ago
Konstantinos Triantafyllou 945b37f5b2 Merge branch 'explore-redesign' of code-repo.d4science.org:MaDgIK/explore-services into explore-redesign 9 months ago
Konstantinos Triantafyllou b30eba84bb Update libraries 9 months ago
Alex Martzios 38535403c5 WIP: create new funders page - TODO: intro content and responsive degisn of filters/sorting 9 months ago
Alex Martzios 6784c8ad62 update submodules 10 months ago
Alex Martzios 9974e9e1f4 update submodules 10 months ago
Konstantina Galouni 5f445e5c08 [Library | explore-redesign]: Bug fixes in what is executed when tabs of search all are clicked - formPlaceholderText and simpleKeywordChanged().
1. searchAll.component.ts: [Bug fix] From previous commit - Set formPlaceholderText outside if condition.
2. advancedSearchForm.component.ts: [Bug fix] In method "simpleKeywordChanged()", do not check for selectedEntity when !this.entitiesSelection (selectedEntity is changed only when exists <entities-selection>.
10 months ago
Konstantina Galouni dc248e999d [Library | explore-redesign]: Bug fix in sticky tabs of search all | Updated formPlaceholderText of search form in search all - different for each entity | Search form not sticky in advanced search page.
1. searchAll.component.ts:
   a. [Bug fix] Subscribe to layoutService.isMobile and calculate there the "offset" (for sticky tabs).
   b. Updated "formPlaceholderText" - different for each entity.
2. newSearchPage.component.html: Added check, so that search form is not sticky in advanced search pages.
10 months ago
Konstantina Galouni 9611021a55 [Library | explore-redesign]: Fixes in usage counts iframes, bip iframe, orcid buttons in search results, filters button in small screens and fos/sdgs vocabulary calls.
1. dataProvider.component.html & project.component.html & resultLanding.component.html: [Bug fix] Updated checks for usage counts iframes and changed the order they appear (first views, then downloads).
2. dataProvider.component.ts & project.component.ts:
   a. [Bug fix] Added fields public hasViews: boolean = false; and public hasDownloads: boolean = false; - used in checks for displaying usage counts iframes.
   b. [Bug fix] Updated parsing of dataProviderInfo.measure.counts when querying external usage counts api.
3. resultLanding.component.ts:
   a. [Bug fix] Added fields public hasViews: boolean = false; and public hasDownloads: boolean = false; - used in checks for displaying usage counts iframes.
   b. [Bug fix] In bipFrameUrl, when environment == "beta", add "&src=beta" parameter.
4. orcid-work.component.ts:
   a. [Bug fix] Updated disabled class checks, to enable orcid buttons in search too when there are identifiers.
   b. When loading - action is in progress, show loading icon next to the label.
   c. In my orcid links page: renamed "Add to ORCID" to "Claim" and "Delete from ORCID" to "Remove".
5. newSearchPage.component.html: [Bug fix] Updated checks for "filters" floating button in mobile/ small screens.
6. Added method "detectChanges()" to be called by html.
7. navigationBar.component.html: Updated placeholder of search-input to align with the generic search form (Home page).
8. ISVocabularies.service.ts: [Bug fix] In methods getFos() and getSDGs(), removed check and call to cache - these files are always local.
10 months ago
Alex Martzios 9be9d575a3 update submodules 10 months ago
Konstantina Galouni 392cac52f2 [Library | explore-redesign]: Hide numbers of entity tabs on mobile screens | Bug fix in search filters.
1. searchFilter.component.ts: [Bug fix] In method "filterKeywords()", set hasMatch and call detectChanges(), only if !hasMatch.
2. searchAll.component.html: Hide numbers of entity tabs on mobile screens.
11 months ago
Konstantina Galouni e012c5c77c [Library | explore-redesign]: Bug fixes in range filter, advanced search link of search all page, search results "cards" in mobile screens.
1. rangeFilter.component: [Bug fix] Removed from method get disabled() check of isDisabled and added this check for class "disabled" in action/button (error on enter, because isDisabled was already true before triggering the action of yearChanged).
2. search-input.component.ts: [Bug fix] Added check for client side in ngAfterViewInit(), before calling "getComputedStyle".
3. searchAll.component:
   a. Set "advancedSearchLink" properly and pass it to each search entity page in "simpleSearchLink" parameter.
   b. In <advanced-search-form>, pass parameters [entityType]="activeEntity" and [advancedSearchLink]="advancedSearchLink" [advancedSearchLinkParameters]="parameters".
4. advancedSearchForm.component.html: Removed check this.entityType == this.selectedEntity from advanced search link.
5. searchFilter.component.ts: In filterKeywords() method, added cdr.detectChanges().
6. searchResult.component.html: [Bug fix] Reverted [isMobile] parameter to <result-preview" (removed by mistake in a previous merge).
11 months ago
Konstantina Galouni 7dbb5358d6 [Library & Explore | explore-redesign]: Renamed "OpenAIRE Research Graph" to "OpenAIRE Graph" | Fixed duplicate queries in search all | Updated paper in FoS page | Improvements in sticky tabs (search all & landing).
1. Deleted assers/explore-assets/home/graph.svg - Replaced by assets/common-assets/common/graph-nodes.svg.
2. home.component.html:
   a. Updated graph image.
   b. Added in <div search-input>: [searchInputClass]="'inner background'".
   c. Renamed "OpenAIRE Research Graph" to "OpenAIRE Graph".
3. claimResultSearchForm.component.html & searchDataprovidersToDeposit.component.ts: Added in <div search-input>: [searchInputClass]="'inner background'".
4. searchAll.component.html:
   a. Updated margins/paddings for sticky tabs.
   b. Renamed "OpenAIRE Research Graph" to "OpenAIRE Graph".
5. searchAll.component.ts:
   a. [Bug fix] In method ngOnInit(), moved loadAll() call inside check - avoid duplicate calls to search for each tab with count query.
   b. Renamed "OpenAIRE Research Graph" to "OpenAIRE Graph".
6. fos.component.html:
   a. Updated paper of SciNoBo - replaced the old one with the newest.
   b. Renamed "OpenAIRE Research Graph" to "OpenAIRE Graph".
7. fos.component.ts: Renamed "OpenAIRE Research Graph" to "OpenAIRE Graph".
8. resultLanding.component.html & project.component.html & organization.component.html & dataProvider.component.html: [Improvement] Updated check and class for <landing-header> when sticky - make it invisible, when not sticky - solved flickering and change of content position.
9. showTitle.component.ts: Added @Input() isSticky: boolean = false; and when sticky, show only 1 line of the title (class lines-1).
10. landing-header.component.ts: Show only title when sticky and pass isSticky to <showTitle>.
11 months ago
Alex Martzios f63e83258d update submodules 11 months ago
Konstantina Galouni d0a5c3b469 [Library | explore-redesign]: Moved <quick-selections> to the left as filter and re-arranged the order of the filters.
1. searchFields.ts:
   a. Added in HIDDEN_FIELDS, "instancetypename" (refine filter for research products).
   b. In DEPENDENT_FIELDS, set ["instancetypename"]: "type"
2. quick-selections.component.ts: Added again (as in the past), @Input() vertical: boolean=false and show types using <search-filter> if vertical is true.
3. searchAll.component.html: Changed medium top and bottom margins to uk-margin-top uk-margin-bottom.
4. newSearchPage.component.ts:
   a. In method "getFields()", check for HIDDEN_FIELDS, also dependencies to resultTypes.
   b. Added method "getFilterById()".
5. newSearchPage.component.html:
   a. Moved <quick-selections> to the left as filter (removed "include" line).
   b. Added <ng-template #search_filter> and re-arranged the order of the filters
11 months ago
Konstantinos Triantafyllou 58fc4f84c2 Update Uikit version to 3.13.10. Update library and theme 11 months ago
Alex Martzios dc21fd528d update submodules 11 months ago
Alex Martzios 0d9688a980 update submodules 11 months ago
Konstantina Galouni 3047236d1c [Library & openaire-theme & Explore | explore-redesign]: Added search form in menu (navbar) in landing pages.
1. search.less: Added css for modifier .small-vertical for .input-wrapper of <search-input>.
2. layout.service.ts: Added hasMenuSearchBarSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false), parsing and getter/setter methods.
3. navigationBar.module.ts: Imported SearchInputModule.
4. navigationBar.component.ts:
   a. Added searchMode: boolean = false; and hasSearchBar: boolean = false; (and other helpful fields)
   b. Subscribe to queryParams to hide search bar and reset keyword | Subscribe to layoutService.hasMenuSearchBar to check if search should be included in navbar or not.
   c. Added methods "openSearch()" to show the search form and "goTo()" to trigger the search action and navigate to the search page.
5. navigationBar.component.html: Added <div search-input> and search-icon button to show search bar | Added checks if searchMode is enabled (search form visible) or not.
6. app-routing.module.ts: In routes for landing pages added in data: hasMenuSearchBar: true.
11 months ago
Alex Martzios bdad7dc6e6 update submodules 11 months ago
Alex Martzios 7722b6f968 update submodules 11 months ago
Alex Martzios 2d859f03e5 update submodule 11 months ago
Alex Martzios fae5a4bc5b search page: remove all various search pages and keep only 'search all' - TODO: redirect old ?active=<entity> to the new path, update submodules 11 months ago
Konstantina Galouni 2da6b5f360 [Library | explore-redesign]: Added/ updated how filters appear in mobile screens | Updated search forms.
1. general.less: Added fixed position for .filters-toggle-button.
2. newSearchPage.component.html: Added floating button for filters in mobile screens.
3. advancedSearchForm.component.html: Re-introduced commented out <entities-selection> inside <advanced-search-input> | Removed iconPosition and commented button for filters inside search form.
4. home.module.ts: Imported SearchInputModule.
5. home.component.html: Replaced <advanced-search-input> with <div search-input>
6. searchDataProviders.component.ts: Set entitiesSelection to false for <new-search-page>
7. newSearchPage.component.ts & searchAll.component.html: Set entitiesSelection to false for <advanced-search-form>
11 months ago
Konstantina Galouni 0774efbb0d [Library | explore-redesign]: availableOn.component.ts & resultLanding.component & result-preview.component: [Bug fix] Added method "getAccessLabel()" to create label from accessRight. 11 months ago
Konstantina Galouni b49e000020 [Library | explore-redesign]: Updated icon for "not available" access of sources on research products.
1. icons.ts: Added custom icon "unknown_access", when access is not available (locker with questionmark inside).
2. parsingFunctions.class.ts: Set "accessRightIcon" of each source to "unknown_access" icon, when access is not available.
3. resultLandingUtils.module.ts: Added "unknown_access" icon in iconsService.registerIcons.
4. resultLanding.component.html: Mobile view: Updated tooltip of access - added "access" word in the end.
5. availableOn.component.ts: Updated tooltip of access - added "access" word in the end.
6. result-preview.component.html: In mobile view, show access on the top right, next to the title.
7. searchResearchResults.service.ts: [Bug fix] Call parsingFunctions.addPublisherToHostedBy_collectedFrom after parsing journal, publisher and identifiers.
11 months ago
Alex Martzios 6d59e508ba update submodules 11 months ago
Alex Martzios a7e56df08a update submodules 11 months ago
Alex Martzios 650ded2050 update submodules 11 months ago
Alex Martzios 1d8a48ef78 update submodules 11 months ago
Alex Martzios 411720917b update submodules 11 months ago
Alex Martzios caeb15f927 update submodules 11 months ago
Alex Martzios 58d5481166 update submodules 11 months ago
Alex Martzios 35ed4cf5be update submodules 11 months ago
Alex Martzios b3934411ca update submodules 11 months ago
Alex Martzios ebf26d66cf home page: simplify search bar - remove 2 steps, update submodules 11 months ago
Alex Martzios 0b92ad3725 update submodule 12 months ago
Alex Martzios a0fa5002c9 add advanced search option in home page 12 months ago
Alex Martzios b1aed8224a update submodule 12 months ago
Konstantina Galouni 2190234ba0 [Explore | explore-redesign]: package.json: Upgraded uikit version from 3.12.0 to 3.12.2. 12 months ago
Alex Martzios cf069d2550 update submodule 12 months ago
Konstantina Galouni 0db79b0ffd Merge remote-tracking branch 'origin/develop' into explore-redesign 12 months ago
Konstantina Galouni 40d0a2a24c Updating openaireLibrary and openaire-theme library before merging develop branch into explore-redesign 12 months ago
Konstantina Galouni e36d6d5ed3 Updating common-assets library before merge. 12 months ago
Alex Martzios 2ba2990479 update submodules 1 year ago
Alex Martzios fdc3cc76b0 update submodules 1 year ago
Alex Martzios 5f66f3cdc1 update submodule 1 year ago
Alex Martzios 21aeaf0efa update submodules 1 year ago
Konstantinos Triantafyllou 36f4bd1c60 Utils Service: Change user info property. 1 year ago
Konstantina Galouni a3194bb41a [Library | explore-redesign]: result-preview.component.html: [Bug fix] Added [relationName]="relationName" [provenanceAction]="provenanceAction" in <entity-metadata> to expose these info in Related Research in Result landing pages. 1 year ago
Alex Martzios 866d40cff1 update submodules 1 year ago
Konstantina Galouni 3490594513 [Library | explore-redesign]: Fixes in direct linking - back button link | Added back button link to the landing page for projects.
1. linkingGeneric.component.html: [Bug fix] Updated checks for back to result landing page button link | Added back to project landing page button link.
2. directLinking.component.ts: In "createClaimEntity()" method, set value of entity.project.url.
3. ClaimEntityTitle.component.ts: Added "uk-flex" class to middle align icon to the name.
4. claimHelper.class.ts: Commented a console.log.
1 year ago
Alex Martzios 4f6529b46f project landing mobile redesign, update submodule 1 year ago
Konstantina Galouni e0e319119f [Library | explore-redesign]: In small screens (mobile) open full screen modal when viewing all authors or all identifiers.
1. showAuthors.module.ts: Imported FullScreenModalModule.
2. showAuthors.component.ts & showIdentifiers.component.ts: Added @Input() isMobile: boolean = false; | Added <fs-modal> for view all authors, to trigger it when isMobile.
3. landing-header.component.ts: Added @Input() isMobile: boolean = false; | Pass input param isMobile to <showAuthors>.
4. resultLanding.component.html: Pass input param isMobile to <showSubjects>, <showIdentifiers>, <landing-header>.
1 year ago
Konstantina Galouni e93022c7dd [Library | explore-redesign]: Mobile redesign for organization landing complete and functional.
1. loadingModal.module.ts: Imported LoadingModule.
2. loading.component.ts:
   a. [Bug fix] loading icon (spinner) was not visible.
   b. Added inputs title: string, @Input() isMobile: boolean = false, @Input() classTitle: string = "uk-background-primary uk-light".
   c. Added html for small screens (mobile) when isMobile.
3. search-tab.component.ts: Added @Input() public isMobile: boolean = false and [class.uk-flex-column]="isMobile" to not show title and view all link in the same row when isMobile.
4. organization.module.ts: Imported FullScreenModalModule.
5. organization.component.ts & organization.component.html: Mobile redesign complete and functional.
1 year ago
Alex Martzios 94ddb1f017 update submodule 1 year ago
Konstantina Galouni a7e63f05ae [Library | explore-redesign]: Mobile redesign minor fixes for actions icons.
1. availableOn.component.ts: Make "arrow_right" and access right icons bigger in for mobile.
2. resultLanding.component.html: Set same ratio in all actions icons.
3. orcid-work.component.ts: Add margin small (not xsmall) when isMobile and landing.
1 year ago
Konstantina Galouni 4235621315 [Library | explore-redesign]: Mobile redesign for the 3 buttons at the bottom (main info, metrics, actions) and their contents.
1. availableOn.component.ts: Mobile redesign - open in full screen modal instead of drop | icons updated.
2. fos.component.ts: In mobile show {{title}} instead of hardcoded title.
3. resultLandingUtils.module.ts: Imported FullScreenModalModule.
4. deletedByInference.component.ts: Removed class "uk-list-divider" for <result-preview> - after redesign each result has its own bottom border.
5. orcid.module.ts: Imported FullScreenModalModule.
6. orcid-work.component.ts: Mobile redesign - Added full screen modals propagationFsModal and grantFsModal.
7. resultLanding.component.ts: Added citeFsModal, addThisFsModal, alertModalDeletedByInferenceFS and property public mobileContent: "info" | "metrics" | "actions" = "info".
8. resultLanding.component.html: Mobile redesign for the 3 buttons at the bottom (main info, metrics, actions).
1 year ago
Alex Martzios 08bc9741b8 update submodule 1 year ago
Alex Martzios 1dc6f9b1a4 update submodule 1 year ago
Konstantina Galouni b347ea300b [Library | explore-redesign]: Result landing redesign for small screens (mobile) - main info & tabs of main info.
1. fos.component.ts & sdg.component.ts: Added Beta badge and "View all" link.
2. fundedBy.component.ts: Added @Input isMobile and relative checks in html | Updated how projects appear in mobile | Added ng-template for #funder and #dropInfo.
3. relatedTo.component.ts: Added @Input isMobile and relative checks in html | Added uk-margin-small-bottom between communities in mobile.
4. showSubjects.component.ts:
   a. Added @Input isMobile and relative checks in html.
   b. Added @Input() viewAllSubjects: boolean = false, @Input() viewAllClassifiedSubjects: boolean = false, @Output() viewAllClicked  = new EventEmitter(); and methods "viewAllSubjectsClicked()", "viewAllSubjectsByVocabularyClicked()" to show subjects properly in mobile.
5. full-screen-modal.component.ts: Added method "backClicked()" and field public stayOpenInBack: boolean = false.
6. resultLanding.module.ts: Imported FullScreenModalModule.
7. resultLanding.component.ts & resultLanding.component.html: Redesign for small screens (mobile) for main info and its tabs (Summary, References, etc..).
1 year ago
Alex Martzios 35d59d4c4c update submodule 1 year ago
Konstantina Galouni 6199afde33 [Explore & Library | explore-redesign]: searchResearchResults.service.ts: [Bug fix] Fix parsing of hostedBy_collectedFrom (download from/source) - initialize, add journal and sort outside the loop. 1 year ago
Alex Martzios ed4edc1b9f update submodule 1 year ago
Alex Martzios 2c759d2f15 update submodules 1 year ago
Konstantina Galouni d4b9d4954e [Explore & Library | explore-redesign]: First update for direct linking according to redesign.
1. claimContextSearchForm.component.ts & claimProjectSearchForm.component.ts & claimResultSearchForm.component.ts: Added "@Input() public centerAlign: boolean = false".
2. claimContextSearchForm.component.html & claimProjectSearchForm.component.html & claimResultSearchForm.component.html: align search form to the center if centerAlign is true (in direct linking).
3. linkingGeneric.component.ts:
   a. Scroll to top smoothly when changing step.
   b. Added method "getEntityName()" to resolve entity name from entity type.
4. linkingGeneric.component.html: Redesign in direct linking:
   a. Hidden stepper.
   b. Title before search form
   c. Back button instead of breadcrumb.
   d. Search form aligned to the center.
   e. In basket, no tabs, but source on top of link source to.
   f. Button to Step 3 renamed to "Summarise".
5. HelperFunctions.class.ts: In methods "scroll()" and "scrollTo()" added parameter "smooth: boolean = false" for smooth scroll.
6. tsconfig.json: Commented "angularCompilerOptions": { "strictTemplates": true}.
1 year ago
Alex Martzios c1bb343097 add strictTemplates: true option in angularCompilerOptions (VS Code needs this for proper angular-language features to work), update submodules 1 year ago
Alex Martzios cbf1a5c6d6 update submodule 1 year ago
Alex Martzios 1389b9d934 add new property for BIP charts API, update submodules 1 year ago
Alex Martzios 0623defdb6 start on result landing mobile redesign, update submodules 1 year ago
Alex Martzios d2bfe2560c update submodules 1 year ago
Konstantina Galouni a1f9e47874 [Explore] Updating libraries... 1 year ago
Alex Martzios 2d8de7b5a5 update submodules 1 year ago
Alex Martzios b5bf06b7f2 tweaks for subnav styling, update submodules 1 year ago
Konstantina Galouni 0377810717 [Explore | master & Library | angular-14]: composer.ts: [Bug fix] Add parenthesis around ternary operator in method composeEmailForExplore() - empty or wrong body | contact-us.component.html: Added #captchaElem in <re-captcha> | contact-us.component.ts: Added ViewChild for captchaElem and added method "resetRecaptcha()" | contact.component.html: Added #contactUs in <contact-us> | contact.component.ts: Added ViewChild for contactUs and call contactUsComponent.resetRecaptcha() on reset method. 1 year ago
Alex Martzios a02255548d update submodules 1 year ago
Alex Martzios 3a3a503c70 update submodules 1 year ago
Konstantina Galouni d715e0a281 [Library | angular-14]: loading.component.ts: [Bug fix] In ngOnDestory changed to document.getElementById("modal-container"). 1 year ago
Konstantina Galouni 448a67b9fb [Library | angular-14 & Explore | master]: Updated request to Crossref for bulk uploaded DOIs in linking | Added link for more information to joomla article (Canada's request).
1. sdg.component.html: Added link for more information to joomla article (Canada's request).
2. timeout-interceptor.service.ts: Excluded from timeout interceptor  properties.searchCrossrefAPIURL and properties.searchDataciteAPIURL.
3. searchDatacite.service.ts: In method "getDataciteResultByDOI()", for requests coming from file uploaded in linking added timeout to 20 sec, and for other requests timeout similar to the interceptor (6 sec for production, 12 otherwise).
4. searchCrossref.service.ts: In method "searchCrossrefByDOIs()", added timeout similar to the interceptor (6 sec for production, 12 otherwise) | Added method "searchCrossrefByDOI()", called for requests coming from file uploaded in linking.
5. bulkClaim.component.ts: Call new API method for Crossref requests for DOIs | Fixed tooltip to appear.
1 year ago
Alex Martzios 4a4a251a2e Merge remote-tracking branch 'origin/master' into explore-redesign 1 year ago
Konstantina Galouni e04f0af2e2 [Explore]: home.module.ts: Removed arrow_right icon from iconsService.registerIcons and from import. 1 year ago
Alex Martzios 3b23a1c0eb publish new branch, update submodules 1 year ago
Konstantina Galouni 44ee139a1a [Library | angular-14]: resultLanding.component.ts: [SEO] Added more keywords in "title_authors_words" (method checkIfAllowed()), to not index records containing them in the title or authors. 1 year ago
Konstantina Galouni 200c84044a Updating common-assets 1 year ago
Konstantina Galouni 7bc1cb7f24 [Explore | angular-14] environment.ts: Property claimsAPIURL updated in development. 1 year ago
Konstantina Galouni 446f0df950 Updating libraries... 1 year ago
Konstantina Galouni 42d002f6ff [Explore | angular-14]: environment.ts: Updated loginUrl, userInfoUrl, logoutUrl properties (19080 port). 1 year ago
Alex Martzios a9733427e8 reintroduce numbersComponent in homepage, update submodules 1 year ago
Konstantina Galouni 4b6a383154 [Library]: #7883 - searchResearchResults.service.ts: Added parsing for C1-C5 classes | result-preview.component.less: Added css rules for C1-C5 classes in <measure> (influence/popularity) 1 year ago
Konstantina Galouni 75fdfe1491 Merged origin/master into angular-14 branch 1 year ago
Konstantina Galouni cb7de49f89 Updated libraries 1 year ago
Konstantina Galouni 93abf84ee4 Updated libraries 1 year ago
Alex Martzios b01e3f8ca8 create fos/sdg components to call library components in order to use extra parameters, update submodules 1 year ago
Alex Martzios 89ace01826 remove fos/sdg assets, vocabulary and components from explore project, update submodules 1 year ago
Alex Martzios 9d755ff1db tweak options for footer observer 1 year ago
Alex Martzios ab302e040f remove options from footer observer 1 year ago
Alex Martzios a358686a3d remove help button when reaching footer by scroll, update submodules 1 year ago
Alex Martzios b3ac3b3391 help button: release at the bottom, update submodules 1 year ago
Konstantina Galouni 732e96512d [Library]: timeout-interceptor.service.ts: #8186 - Added properties.claimsAPIURL in TIMEOUT_WHITELIST to exclude claims requests from timeout interceptor. 1 year ago
Konstantina Galouni 578b79b1c2 Merged with origin/master 1 year ago
Konstantina Galouni cbdfada293 Updated libraries 1 year ago
Alex Martzios 4d35658d05 update submodules 1 year ago
Konstantina Galouni e6cfab5646 [Explore]: fos.component.html: Updated doi link of SciNoBo. 1 year ago
Konstantina Galouni 120774c414 [Library]: claimResultSearchForm.component.html & claimProjectSearchForm.component.html & claimContextSearchForm.component.html: Set tooltip=true in search input form. 1 year ago
Alex Martzios 55bd190ec8 FOS page: add horizontal navigation tabs for mobile/tablet 1 year ago
Konstantina Galouni 25a92c827c [Explore & Library]: home.component.html & advancedSearchForm.component.html & claimContextSearchForm.component.html & claimProjectSearchForm.component.html & claimResultSearchForm.component.html: Increased width of search forms and fixed width of each step of stepper input. 1 year ago
Konstantina Galouni 2faf2202fe Merge branch 'master' of code-repo.d4science.org:MaDgIK/explore-services 1 year ago
Konstantinos Triantafyllou 4db4795a04 Change inverse text primary 1 year ago
Konstantina Galouni 285c65e3f2 [Explore]: orcid-work.component.ts: [Bug fix] Added [size]="'small'" input to <loading> | environment.ts: Updated port of orcidAPIURL (standalone service). 1 year ago
Alex Martzios 6380311b1e add fixed contact/help button 1 year ago
Konstantinos Triantafyllou dc1f947d7a Fos: Change search-modifier, make some page alignments and add observer to handle scroll 1 year ago
Alex Martzios 98effe34a0 update FOS page, change to new uoa-admin-tools duffy port 1 year ago
Konstantina Galouni 0c0ba653cc Updating openaireLibrary 1 year ago
Konstantina Galouni a3d560a984 Merge remote-tracking branch 'origin/angular-13' into angular-14 2 years ago
Konstantina Galouni 3e2e4beeca Merge remote-tracking branch 'origin/angular-12' into angular-13 2 years ago
Konstantina Galouni 92bc0cc3be Merge remote-tracking branch 'origin/master' into angular-12 2 years ago
Konstantina Galouni 0bf674b4c0 [Explore]: home.component.html: For small screens, set style="width: 70%;" for tablet and scrolling images. 2 years ago
Konstantina Galouni e3cd34e44d Merge remote-tracking branch 'origin/angular-13' into angular-14 2 years ago
Konstantina Galouni 44d2febceb Merge remote-tracking branch 'origin/angular-12' into angular-13 2 years ago
Konstantina Galouni ccdff2198e Merge remote-tracking branch 'origin/master' into angular-12 2 years ago
Konstantina Galouni fe9275a329 [Explore]: home.component.html: Added margin large left on the scrolling text of black section and gave it more space (3-4 instead of 2-3). 2 years ago
Konstantina Galouni de3adf74d5 Merge remote-tracking branch 'origin/angular-13' into angular-14 2 years ago
Konstantina Galouni 73726abeca Updating libraries 2 years ago
Konstantina Galouni d68b2f9cc8 Merge remote-tracking branch 'origin/angular-12' into angular-13 2 years ago
Konstantina Galouni 1ac1c4b727 Updating libraries 2 years ago
Konstantina Galouni c756fb2eb5 Merge remote-tracking branch 'origin/master' into angular-12 2 years ago
Konstantina Galouni 61ba030f68 Updating libraries 2 years ago
Konstantina Galouni 991e05693e [Explore | angular-14]: angular.json: Updated optimization configuration to set "inlineCritical": false. 2 years ago
Alex Martzios 6485ee8cda update submodule 2 years ago
Alex Martzios 47e4543326 homepage: change tablet images' width to 100% 2 years ago
Alex Martzios 44a34c3a7a update submodule 2 years ago
Alex Martzios caae320794 create contact page and menu item entry, add correct admin emails for all environments, update submodules 2 years ago
argirok 82afd05444 update dependencies for cache and utils services 2 years ago
Konstantinos Triantafyllou be7c535518 Disable critical inline css in server.ts 2 years ago
argirok e4586e58f2 Services: add properties files and scripts to create separate configuration per environment 2 years ago
Konstantinos Triantafyllou d03db02103 Merge from angular 13 2 years ago
Konstantinos Triantafyllou e0e7361b21 Merge from angular-12 2 years ago
Konstantinos Triantafyllou 888c788ac8 Merge from master 2 years ago
Konstantinos Triantafyllou b5fc3c8606 Update library 2 years ago
Alex Martzios 9093e0932b fix for duplicating userMenuItems when clicking "User Information" 2 years ago
Alex Martzios 91b482e51e Update recaptcha to version 10.0.0 2 years ago
Alex Martzios 85ad4b94bd add .angular folder to gitignore 2 years ago
Alex Martzios b220fe81c3 update submodules to v14, add .angular folder to gitignore and after-build-clean, add pathMatch: 'full' to routing configuration 2 years ago
Alex Martzios 907b4e9512 update angular express engine to v14 2 years ago
Alex Martzios d0f24a40fd update angular material to v14 2 years ago
Alex Martzios 94a59dc5a6 update angular core and cli to v14 2 years ago
Alex Martzios 5dfa3b41c4 update submodules to v13 and remove renderModuleFactory from main.server.ts 2 years ago
Alex Martzios d9061a3df9 update angular express engine to v13 2 years ago
Alex Martzios 03904006a9 update angular material to v13 2 years ago
Alex Martzios c7e1d8bad5 update angular core and cli to v13 2 years ago
Alex Martzios e12935d8e4 update submodules to v12 2 years ago
Alex Martzios 0d1f48a9c6 update angular express engine to v12 2 years ago
Alex Martzios 2c0b650585 update angular material to v12 2 years ago
Alex Martzios 0e1236de9d update angular core and cli to v12 2 years ago
Alex Martzios c7a49ddac2 update submodule before angular upgrade 2 years ago
Konstantina Galouni b3001a7bfe [Library | new-theme]: dataProvider.component.ts & project.component.ts & resultLanding.component.ts: Small update on previous commit - Call detectChanges() method, after content is returned and processed, right after showLoading = false command. 2 years ago
Alex Martzios 956f0deb40 update submodule 2 years ago
Konstantina Galouni 13ad5f11d9 [Library | new-theme]: [Bug fix] navigationBar.component.html: Toggle button was hidden@l, but menu was hidden@m. - removed uk-hidden@m from #canvas id="tm-mobile", to be visible in small and medium screens. 2 years ago
Konstantina Galouni 89b51d9838 [Explore | Library | new-theme]: resources.service.ts & menu.ts & navigationBar.component.ts & navigationBar.component.html & app.component.ts: Removed deprecated RootMenuItem and used MenuItem instead. 2 years ago
Konstantina Galouni a194132dfe [Library | new-theme]: parsingFunctions.class.ts: [Bug fix] Stringify each downloadName and collectedFromName. 2 years ago
Konstantina Galouni 39c1997967 [Library | new-theme]: Fixes in parsing of "eoscifguidelines" | Added EOSC Subject ("eoscifguidelines") in RESULT ADVANCED FIELDS (not in production for now).
1. resultLanding.service.ts: [Bug fix] Spelling error in parsing of "eoscifguidelines" field.
2. showSubjects.component.ts: [Bug fix] Do not show "EOSC" label in classified subjects, when no "eoscSubjects" parsed.
3. searchFields.ts: In RESULT_ADVANCED_FIELDS added "eoscifguidelines" | Added method "getResultAdvancedFields()", which does not include "eoscifguidelines" in "RESULT_ADVANCED_FIELDS" when environment == "production".
4. searchAll.component.ts & searchResearchResults.component.ts: Get searchFields.RESULT_ADVANCED_FIELDS from "getResultAdvancedFields()".
2 years ago
Konstantina Galouni f9cb73147c [Library | new-theme]: Do not show provenance value if no provenance vocabulary or if no label for this provenance value.
1. fundedBy.component.ts: Added local field "provenancesCalculated" to check for each provenance label only once and do not show provenance if no vocabulary or if not label for this value.
2. result-preview.component.ts: Do not show provenance if no vocabulary or if no label for this value.
3. HelperFunctions.class.ts: In method "getVocabularyLabel()" added parameter "returnIfNotFound: boolean = true" to return null if no vocabulary or if no label for this value, when it is false.
2 years ago
Konstantina Galouni 909a5a02eb [Library | new-theme]: orcidWork.ts: [Bug fix] When no resultLandingInfo.types, set work['type'] according to resultLandingInfo.resultType | icons.ts: [Bug fix] Remove unnecessary classes in orcid_add and orcid_bin icons - class had always the value of the first loaded icon (less problem). 2 years ago
Konstantina Galouni 1c39dfdc3a [Library | new-theme]: #7963 - Parse field "eoscifguidelines" in result landing page to get eosc subjects.
1. resultLanding.service.ts: Added in parsing field "eoscifgiudelines" (resultLandingInfo.eoscSubjects).
2. parsingFunctions.class.ts: Added method "parseEoscSubjects()" | Method "checkAndAddEoscSubject()" updated - do not add eosc subjects in classifiedSubjects.
3. resultLanding.component.html: In <showSubjects> added [eoscSubjects]="resultLandingInfo.eoscSubjects".
4. showSubjects.component.ts: Added @Input() eoscSubjects: any[]; and show them as classifiedSubjects too.
2 years ago
Alex Martzios 96e80f6e82 update submodule 2 years ago
Alex Martzios 49e89a06a7 remove SharedModule and use library's instead, update submodules 2 years ago
Konstantina Galouni ed502e6f34 [Library | new-theme]: resultLanding.component.ts: [Bug fix] Added check if "resultLandingInfo.hostedBy_collectedFrom" is initialized | dropdown-filter.component.ts: [Bug fix] In method "isOpen()" added check if in client side. 2 years ago
Konstantina Galouni aa1175151f [Library | new-theme]: timeout-interceptor.service.ts: Increased server and client timeout time when environment != production. 2 years ago
Konstantina Galouni 53f6eb465c [Explore | Library | new-theme]: Added more refine filters in Repositories, Journals, Registries pages | Search & Datasource landing: Show not compatible datasources | Result Landing: get relations names by relationsVocabulary (dnet:relation_relClass.json).
1. env-properties.ts & environments/: Removed old properties searchLinkToEntityRegistriesDataProvidersTable and searchLinkToJournalsTable.
2. fetchDataproviders.class.ts & searchDataproviders.service.ts: Removed old unused methods related to subjects/ tables/ csv.
3. searchFields.ts: Added more refine filters in Repositories, Journals, Registries pages (COMPATIBLE_DATAPROVIDER_FIELDS, ENTITY_REGISTRIES_FIELDS, JOURNAL_FIELDS).
4. result-preview.component.ts: Added field @Input() deposit: boolean = false;
5. result-preview.component.html:
   a. Added link to landing page even for not compatible datasources.
   b. Added class "uk-label-danger" when compatibility = "not available" only when deposit=true.
6. searchResultsInDeposit.component.html: In <result-preview> added parameter deposit="true".
7. dataProvider.component.html:
   a. Added class "uk-label-danger" when compatibility = "not available".
   b. Show custom "Not yet registered" compatibility label when compatibility = "not available".
8. ISVocabularies.service.ts: Added methods for getting relationsVocabulary (dnet:relation_relClass.json).
9. resultLanding.service.ts & parsingFunctions.class.ts: When parsing relations, get relationName from relationsVocabulary.
10. resultLanding.component.ts: Get relationsVocabulary and pass it to "getResultLandingInfo()".
11. orcid-work.component.ts: When calling "getResultLandingInfo()", added null parameter for relationsVocabulary.
12. configuration.service.ts: [Bug fix] Added more checks in method "isPageEnabledByStateAsync()".
2 years ago
Konstantina Galouni fb4d6cbf05 [Explore | new-theme]: package.json: In dependencies, set uikit to 3.12.0 | Updated submodules. 2 years ago
Alex Martzios 9f51ef56bd update submodule 2 years ago
Alex Martzios f8feed0513 update submodule 2 years ago
Alex Martzios a2dd7a2864 update submodule 2 years ago
Alex Martzios 49c88f95ed update submodules 2 years ago
Alex Martzios efb297202f add z-index for tablet asset in homepage slider section 2 years ago
Alex Martzios a4d79e9407 update submodules 2 years ago
Alex Martzios c2aff4902e change homepage tablet asset 2 years ago
Alex Martzios e06cb59799 change tablet images for homepage slider section, add sdg/fos pages in sitemap 2 years ago
Alex Martzios 8f12fe89c4 progress on sliders' parallax - todo changes 2 years ago
Konstantinos Triantafyllou 8545a1cd7f Home: Change links on did you know section base on mocks and uk-button-text 2 years ago
Konstantinos Triantafyllou 1d16f6f651 Rename all css files to less. Import less from library instead of css 2 years ago
Konstantina Galouni 7b29884305 [Library | new-theme]: Organizations: Use openorgs identifier when available | In social sharing button and modal (landing) use OpenaireEntities.
1. organization.service.ts & searchOrganizations.service.ts: When "objIdentifier" starts with "openorgs____", set canonicalId and id to openorgs id.
2. dataProvider.component & organization.component & project.component: In button and modal for social media sharing, use name of entity by OpenaireEntities.
2 years ago
Konstantinos Triantafyllou 15272d2390 Merge branch 'new-theme' of code-repo.d4science.org:MaDgIK/explore-services into new-theme 2 years ago
Konstantinos Triantafyllou b781a9973b Update libraries and change dev claims property to scooby 2 years ago
Alex Martzios 97612be256 update submodules 2 years ago
Konstantinos Triantafyllou 678429e740 Set up less theme 2 years ago
Konstantina Galouni eb7f4ebf55 [Library | new-theme]: Sorted Advanced filters alphabetically | Added "pid" in advanced filters for Datasource | Organization lannding: projects tab: Added number of selected values in funder filter.
1. projects-in-modal.component.ts: Added the missing number of selected values next to the filter name - on updateFilters() method, update filter.countSelectedValues.
2. searchFields.ts:
   a. Added pid in  DATASOURCE_ADVANCED_FIELDS.
   b. Added method "sortFieldsByName()" to sort fields by name and leave "q" filter (Any field) first.
3. searchAll.component.ts & searchDataProviders.component.ts & searchResearchResults.component.ts & searchProjects.component.ts & searchOrganizations.component.ts: Added "this.searchFields.sortFieldsByName(this.fieldIds, this.fieldIdsMap);" to sort advanced fields alphabetically.
2 years ago
Alex Martzios 527ed03726 remove explore-assets/deposit folder and update submodules 2 years ago
Alex Martzios 9f01855797 remove <br> from home and SDGs page, fix PiwikService error 2 years ago
Alex Martzios dc898d673d add piwik & SEO services for SDGs and FOS pages 2 years ago
Alex Martzios 429ad98246 add metadata for SDGs and FOS pages 2 years ago
Konstantina Galouni fc317468c0 [Library | new-theme]:
1. orcid.service.ts: [Bug fix] In method "getOrcidWorks()", updated response type from <any[]> to <any> --> "bulk" object with an array inside is returned.
2. orcid-work.component.ts: [Bug fix] In method "getOrcidWorks()", parsing of bulk works fixed to not have problem when null response or error object inside bulk is returned.
2 years ago
Konstantina Galouni 539a79722f [Library | new-theme]: Bug fixes in orcid (when work was deleted from ORCID ui, problem in "View orcid work" button & on grant (when not granting, but click on logout, success notification was appearing) | Deleted unused code.
1. resultLanding.component.ts & resultLanding.service.ts: Deleted code related to Open Citations (unused and deprecated).
2. myOrcidLinks.component.ts & orcid-work.component.ts: [Bug fix] On method "openGrantWindow()", condition changed to show success notification if (ev.isTrusted && ev.origin == location.origin && ev.data == 'success') - notification was appearing on logout.
3. orcid-work.component.ts:
   a. In #workModal set large="true".
   b. [Bug fix] In method "getPutCode()", called in "View orcid work" button, added check and warning notification if response is null - used to open empty modal.
   c. [Bug fix] In handleError() method, messages fixed -- used to show ...with pids: {{title}}...
4. datasourcesHelper.class.ts: In method "getQueryPrefix()" deleted commented conditional code for the environment.
2 years ago
Alex Martzios 862846c467 update openaireLibrary 2 years ago
Konstantina Galouni 73067ebc6b [Library | Explore | new-theme]: Added a container for modals | Fixes in orcid modal | for journals and registries use common query for beta & prod.
1. app.component.ts: Added <div id="modal-container"></div>.
2. alert.ts: [Bug fix] Updated target container in modal to id #modal-container (get portal specific css and have a generic z-index).
3. datasourcesHelper.class.ts: In method getQueryPrefix(), have a common setting for beta & prod environments.
4. orcid-work.component.ts: In grant modal, removed uk-text-center class and added [overflowBody]=false.
2 years ago
Konstantina Galouni 17735ee3d4 [Library & common-assets | new-theme]: Fixes in landing for offcanvas right sidebar.
1. resultLanding.component.html: Moved offcanvas right sidebar outside grid (problem with upcoming new openaire theme - .less version).
2. landing-utils.css: [Bug fix]: In  .landing .uk-offcanvas .uk-dropdown, set left and right to auto (dropdown shouldn't go out of offcanvas).
2 years ago
Konstantina Galouni bfe9b0e36d [Library | new-theme]: explore-custom.css: Added .landing { --landing-text-primary-color: var(--explore-color); } to override text-primary-color in landing pages. 2 years ago
Konstantina Galouni 0a7bc27860 [Library & common-assets | new-theme]: z-index problems in landing pages & scrolling on page change in tabs and versions modals | Bug fix in projects tab of organizatio landing.
1. landing-utils.css: [Bug fix] z-indexes of uk-dropdown set to 981 (landing only), z-index of #main-tabs-div set to 978, z-index of graph_and_feedback set to 979.
2. showAuthors.component.ts: [Bug fix] Added @Input() isSticky: boolean = false; and when isSticky is true, do not show orcid info & dropdown for authors (z-index problem).
3. resultLanding.component.ts: Added scrolling in "References" and "External Databases" (bioentiites) tabs on page change.
4. resultLanding.component.html: [Bug fix] For the right sidebar, added inner <div class="uk-overflow-auto uk-height-1-1"> inside sticky - z-index problem.
5. result/deletedByInference.component.ts & organization/deletedByInference.component.ts: Added scrolling on page change.
6. projects-in-modal.component.ts:
   a. Added scrolling in "Projects" tab on page change.
   b. Show number of projects and pages always.
   b. [Bug fix] On filterChange(), set page=1.
7. landing-header.component.ts: Added parameter isSticky in <showAuthors>.
8. Added scrolling in "Related Data Sources" tab on page change.
2 years ago
Konstantina Galouni 008d77bb0c [Library | new-theme]: cache-interceptor.service.ts: [Bug fix] Updated urls in cachingRequests to include new refine fields and new ordering. 2 years ago
Konstantina Galouni 0e7e65b0b6 [Library | new-theme]: newSearchPage.component.html: Added in <loading> [ngClass]="'uk-height-medium uk-display-block uk-margin-xlarge-top'", to increase height when only loading is visible. 2 years ago
Konstantina Galouni 27724d081a [Library | new-theme]: showSubjects.component.ts: Bug fixes in subjects.
a. Updated "view all" functionality and how subjects by vocabulary are displayed.
b. Added setTimeout in ngAfterViewInit().
c. Added check in getKeys() if map is defined.
d. Added checks in <modal-alert> for subjects and subjects by vocabulary.
e. Set large="true" in <modal-alert> for subjects by vocabulary.
2 years ago
Konstantina Galouni 63a17cbf41 [common-assets & openaire-theme & Library | new-theme]: Updated class for graph color and moved to openaire.css | z-index fixes in dropdown and in landing pages.
1. dropdown.css: [Bug fix] Added z-index: 1 in uk-dropdown to prevent dropdown from being on top of menu.
2. text.css: Removed classes "text-orcid" and "text-argos" (moved to openaire-theme/css/openaire.css.
3. openaire.css: Removed class "graph" and added "text-graph", "text-orcid", "text-argos".
4. dataProvider.component.html & organization.component.html & project.component.html & resultLanding.component.html & newSearchPage.component.html: Use class "text-graph" instead of "graph" for graph color.
5. landing-utils.css: [Bug fix] Updated z-index of #graph_and_feedback to 980 (previous 979) to be on top of tabs in landing pages | background of #main-tabs-div was set twice.
2 years ago
Konstantina Galouni 0055ba021b [common-assets & openaire-theme | new-theme]: Moved css for class "view-more-less-link" from link.css to utils.css. 2 years ago
Alex Martzios bf2e77d7b9 update openaireLibrary repo 2 years ago
Alex Martzios f15705d6b1 update openaireLibrary repo 2 years ago
Konstantina Galouni a0f081d841 [Library & common-assets | new-theme]: min-width in landing right sidebar | fix in classified subjects display | tooltip for license in download from.
1. landing-utils.css: Added class .landing-right-sidebar-min-width { min-width: 360px; }.
2. resultLanding.component.html: In right sidebar added class "landing-right-sidebar-min-width".
3. showSubjects.component.ts: [Bug fix] Removed class "uk-flex-inline" from keys for loop div - so that each tag goes to a new line.
4. availableOn.component.ts: Added uk-tooltip for accessRight tooltip | On hovering licence, show in tooltip the whole value.
2 years ago
Konstantina Galouni 53591979f7 [Explore & Library & openaire-theme | new-theme]: Updated parsing of classified subjects by using a vocabulary | Added parsing of instance.license in Download from | Added feedback functionality for fos and sdgs in landing | #7509 Parsing both citations and references fields | In "view all/less" links added chervon-right icon with class "view-more-less-link".
1. fos.component.ts & sdg.component.ts: Added method "urlEncodeAndQuote()" to encode and then quote a string.
2. fos.component.html & sdg.component.html:
   a. "Beta" badge was updated to yellow uk-text-large.
   b. Link to the simple search page instead of the advanced and urlEncodeAndQuote the parameter used in url.
3. link.css: Added class "view-more-less-link" to set on ::after "chevron_right" icon (not underlined on hover) - used in "view all/more/less" links.
4. dataProvider.component.html & project.component.html & fundedBy.component.ts & relatedTo.component.ts & showIdentifiers.component.ts & showAuthors.component.ts: In "view all/less" links added class "view-more-less-link" | Renamed "view more" to "view all".
5. feedback.component.html: Rename wording to be more positive: issues -> feedback, issue -> comment, report -> feedback.
6. feedback.component.ts: Added @Input() preSelectedField: string = ""; and set with it "field" on "addIssue()" (fos/sdg preselected for feedback).
7. availableOn.component.ts:
   a. In "view all/less" links added class "view-more-less-link".
   b. #7833 - Show instance.license information (as link when recognized as url, string otherwise).
8. landing-utils/fos.component.ts & landing-utils/sdg.component.ts:
   a. "Beta" word was updated to yellow uk-text-xsmall.
   b. In "view all/less" links added class "view-more-less-link".
   c. Added feedback functionality: link to feedback form.
9. showSubjects.component.ts:
   a. In "view all/less" links added class "view-more-less-link".
   b. Added "view all" functionality for classified subjects too.
10. resultLanding.component.html:
    a. In "view all/less" links added class "view-more-less-link" | Renamed "view more" to "view all"
    b. Added feedback functionality: link to feedback form - preselect in feedback form fos/sdg.
11. resultLanding.component.ts:
    a. Added public feedbackPreSelectedField: string = ""; field.
    b. Added method "feedbackClicked()".
    c. [Bug fix] In hasPrimaryInfo() added check for classifiedSubjects.
    d. Renamed getProvenanceVocabularyAndResultLandingInfo() to getVocabulariesAndResultLandingInfo() and call also this._vocabulariesService.getSubjectsVocabulary().
12. parsingFunctions.class.ts:
    a. #7196 - Updated parsing of subjects in method "parseAllSubjects()".
    b. #7833 - In method "parseHostedBy_collectedFrom()", added parsing for "license" field.
13. orcid-work.component.ts: On calling method "this.resultLandingService.getResultLandingInfo()", added null parameter for subject vocabulary.
14. searchFilter.module.ts: Import IconsModule.
15. searchFilter.component.html: Removed +/- form "view all/less" links and added class "view-more-less-link".
16. result-preview.ts: Added "licence?: string" in HostedByCollectedFrom.
17. ISVocabularies.service.ts:
    a. Added "private subjectsVocabulary: BehaviorSubject<any> = new BehaviorSubject<any>(null);" field and methods "getSubjectsVocabulary()", "getSubjectsVocabularyFromService()".
    b. Commented this.clearSubscriptions() from "getProvenanceActionVocabularyFromServiceAsync()".
18. resultLanding.service.ts:
    a. On subjects parsing, use subjectsVocabulary.
    b. #7509- Added if/then/else case for parsing citations (new name: references).
2 years ago
Konstantinos Triantafyllou 8e056f5f4e Merge branch 'new-theme' of code-repo.d4science.org:MaDgIK/explore-services into new-theme 2 years ago
Konstantinos Triantafyllou 58d45c9088 Home: Add searchable at search form. Fos: Create fos options for autocomplete 2 years ago
Alex Martzios 95577038b7 update openaireLibrary repo 2 years ago
argirok 7962556b8f remove old properties file, remove metricsAPIURL from properties 2 years ago
Alex Martzios 8eeea3f913 change for SDGs card details 2 years ago
Konstantina Galouni a85c7781f2 [Explore | new-theme]: sdg.component: Use OpenaireEntities.RESULTS in cards. 2 years ago
Konstantina Galouni 1cbe7fd930 [Library | new-theme]: Create common methods to get entity name and entity file name from OpenaireEntities.
1. string-utils.class.ts:
   a. Added method "public static getEntityName(entityType: string, plural: boolean = false): string" to return OpenaireEntities name by entityType.
   b. Added method "public static getEntityFileName(entityType: string): string" to return OpenaireEntities file name by entityType.
2. directLinking.component.ts & dataProvider.component.ts & project.component.ts & resultLanding.component.ts & myOrcidLinks.component.ts & searchResearchResults.component.ts & result-preview.component.ts & search-tab.component.ts: Call StringUtils.getEntityName and StringUtils.getEntityFileName methods instead of checking if/then/else locally.
2 years ago
Konstantinos Triantafyllou 313daed2c9 Make some alignments in breadcrumbs in all pages. Home: On click event in dropdown of quickselections triggers focus in next input. 2 years ago
Alex Martzios 2434ef404d update openaireLibrary repo 2 years ago
Alex Martzios 28fc094785 update openaireLibrary repo 2 years ago
Konstantinos Triantafyllou f8098533aa Home: Stop propagation in dropdown click in order to stay open on inside click 2 years ago
Konstantinos Triantafyllou 160ad45d9b Merge branch 'new-theme' of code-repo.d4science.org:MaDgIK/explore-services into new-theme 2 years ago
Konstantinos Triantafyllou 11567b2593 Add focus next in home page search and activate dropdown when search is focused 2 years ago
Konstantina Galouni 0cac453cb1 [Library | new-theme]: Fix display of errorMessages | Use <landing-header> instead of <showTitle> in all landing pages | Stop sticky header before graph & feedback line | Fix bug in eoscSubjectsFound intialization - set it as local variable.
1. resultLanding.component.html & project.component.html & organization.component.html & dataProvider.component.html:
   a. Move errorMessages and loading inside center box.
   b. In center box, after graph & feedback line, set [style]="'margin-bottom: '+graph_height+'px'", so that sticky header stop before graph & feedback.
2. resultLanding.component.html: Removed "uk-height-1-1" class from center box.
3. organization.component.html & project.component.html: In sticky header use <landing-header> instead of <showTitle> (forgotten in commit 8b94b7f98a).
4. organization.component.ts & project.component.ts & resultLanding.component.ts: In errorMessage, use OpenaireEntities in singular.
5. parsingFunctions.class.ts: [Bug fix] Removed "eoscSubjectsFound" from class fields and set it as local variable - bug fixed on back and again on landing.
2 years ago
Konstantina Galouni 9bf87f1f74 [Library | new-theme]: parsingFunctions.class.ts: Added method "checkAndAddEoscSubject()" which is called for all subjects (classified or not) and sets eosc subjects when the label is found in "eoscSubjects". 2 years ago
Konstantina Galouni 4fca82fa33 [Library | new-theme]: orcid-work.component.ts & result-preview.component.html: result-preview card, fix bottom for small screens - v2. 2 years ago
Alex Martzios 82111c1012 update submodule 2 years ago
Alex Martzios e13c30aac5 remove duplicate logo and update openaireLibrary repo 2 years ago
Alex Martzios 950c9656d2 update repos 2 years ago
Alex Martzios 46df3681f5 added new logos for homepage slider 2 years ago
Konstantina Galouni 945e2c6fc7 [Library & openaire-theme & Explore | new-theme]: Beta indication in fos & sdgs (search, landing, dedicated pages) | Fixes in offcanvas and search all page for small screens.
1. badge.css: [NEW] Css file for uk-badge added.
2. import.css: Added @import "structure/badge.css";
3. fos.component.html & sdg.component.html: Added beta badge on top left of the title.
4. landing-utils/fos.component.ts & landing-utils/sdg.component.ts: Added [Beta] in title.
5. searchFields.ts: In sdg and fos RESULT_FIELDS, added [Beta] in their names.
6. offcanvas.css: [Bug fix] In rule .offcanvas .uk-offcanvas-bar added "max-width: 100vw", so that offcanvas does not exceed the screen width.
7. searchAll.component.html: Added some classes in <advanced-search-form> and uk-slider to be better displayed in small screens (form within page with some horizontal margins and arrows in slider).
2 years ago
Konstantina Galouni 0b53cea58a [Library | new-theme]: Allow also ?pid url parameter in datasource landing | Fixes in newSearchPage for service filters.
1. dataProvider.component.ts: [Bug fix] Allow also ?pid url parameter, query accordingly and set canonicalUrl to use it in seoService and scema2jsonld.
2. dataProvider.component.html: Set canonicalUrl into URL of <schema2jsonld> | Use <landing-header> instead of <showTitle>.
3. dataProvider.service.ts: Set url for querying a datasource by pid (if ?pid in landing url param) and parse also the whole record, the objIdentifier and the relcanId.
4. landing-header.component.ts: Added @Input() isSticky: boolean = false; to set less margins when sticky.
5. resultLanding.component.html: Use <landing-header> instead of <showTitle>.
6. resultLanding.component.ts: Use renamed Identifier.getResultPIDFromIdentifiers --> Identifier.getPIDFromIdentifiers.
7. metrics.service.ts: Removed console.log.
8. searchDataproviders.service.ts: Added parsing for relcanId.
9. dataProviderInfo.ts: Added relcanId, objIdentifier, record.
10. result-preview.component.ts: Use renamed Identifier.getResultPIDFromIdentifiers --> Identifier.getPIDFromIdentifiers.
11. string-utils.class.ts: Renamed Identifier.getResultPIDFromIdentifiers --> Identifier.getPIDFromIdentifiers.
12. [SITEMAPS] extractUrlsFromSearch.ts: Use renamed Identifier.getResultPIDFromIdentifiers --> Identifier.getPIDFromIdentifiers.
13. newSearchPage.component.ts: [Bug fix]
   a. entityType for datasources is "dataprovider".
   b. Added service filter options only when entityType == "service".
2 years ago
Alex Martzios 9406ad8152 add changes for FOS/SDGs url and breadcrumb 2 years ago
Alex Martzios 0a160b4f54 add openaireEntities and update submodule repo 2 years ago
Alex Martzios 74ce69909f uncheck research products categories by default 2 years ago
Konstantina Galouni 131bec9d17 [Library | new-theme]: Improvements & Do not show "Add to ORCID" button in search datasources with pids.
1. dataProvider.component.ts: In method "searchRelatedDatasources()", size can be always 0 (refine query).
2. advancedSearchForm.component.html: [Bug fix] Make all the button line clickable and functional in advanced search form.
3. result-preview.component.ts: Added get method "isResultType()" which checks if result.resultType is result, publication, dataset, software, other.
4. result-preview.component.html: [Bug fix] Call <orcid-work> (add/remove from ORCID buttons) only for results - check for identifiers is not enough, now datasources also have pids.
2 years ago
Alex Martzios a156e359f4 update openaireLibrary 2 years ago
Alex Martzios 29a321c302 redesign tweaks 2 years ago
Konstantina Galouni 40700daf24 [Explore & Library | new-theme]: Fixes for orcid dropdown in authors and increase timeout for addThis check for warning.
1. app.component.ts: [Bug fix] First menu item under "Search", set to OpenaireEntities.RESULTS.
2. searchFields.ts: Renamed OpenaireEntities.DATASOURCE to "Data source".
3. addThis.component.ts: [Bug fix] Check for showing warning was missing a not (!).
2 years ago
Konstantina Galouni 41b3db27a6 [common-assets & Library | new-theme]: Fixes for orcid dropdown in authors and increase timeout for addThis check for warning.
1. addThis.component.ts: [Bug fix] Increased timeout to 4 sec and fix check (sometimes innerText was undefined).
2. searchMyOrcidResults.component.html: [Bug fix] Removed uk-animation-fade from results and added uk-scrollspy.
3. showAuthors.component.ts: [Bug fix] Fixed copy to clipboard - data-clipboard-target was not working because we have multiple clipboards in the same page (reverted code to old way of copying).
4. timeout-interceptor.service.ts: Reverted timeout time for client.
5. utils.css: Added custom css for .orcid-dropdown input (orcid dropdown in authors).
2 years ago
Alex Martzios e4e2c0aeba make graph-section image more responsive 2 years ago
Alex Martzios f00aa33dda lowercase last 's' of SDGs button 2 years ago
Alex Martzios 6b0fe12bca tweak for hero section's input width 2 years ago
Alex Martzios f3c18b7779 revert homepage hero section tweaks 2 years ago
Alex Martzios 1d27a50be3 homepage - hero section tweaks 2 years ago
Konstantina Galouni 3be9891320 [Explore & Library | new-theme]: Updates of paging in claims and orcid links pages | Fixes for server side rendering.
1. fos.component.ts & sdg.component.ts: [Bug fix] Added properties.domain as prefix in request for vocabulary - Network error on server.
2. displayClaims.component.html: Used <results-and-pages> before results and <paging-no-load> after results.
3. searchMyOrcidResults.component.html: After results use <paging-no-load>.
4. displayClaims.module.ts & searchMyOrcidResults.module.ts: Imported NoLoadPaging.
5. dataProvider.component.ts & organization.component.ts & project.component.ts & resultLanding.component.ts: [Bug fix] Fixed checks in ngAfterContentChecked, not to run on server.
6. dataProvider.service.ts: Added check if there are subjects.
7. orcid-work.component.ts: [Bug fix] On search view, add classes uk-button uk-button-link in orcid actions.
8. newSearchPage.component.ts: Removed console.log.
2 years ago
Alex Martzios b18a4d0229 update openaireLibrary 2 years ago
Konstantinos Triantafyllou 27a1ea7029 Add explore logo as SVG 2 years ago
Alex Martzios 5366439647 content changes based on Natalia's suggestions 2 years ago
Konstantinos Triantafyllou 6fe5f8763f Add errorLink property 2 years ago
Alex Martzios 9bd05cf1e2 update to the correct fos icon file 2 years ago
Konstantina Galouni ae11528b5c [Library | new-theme]: Updated look of message when errorCodes.NONE in <errorMessages>.
1. projects-in-modal.component.ts: Use OpenaireEntities in <errorMessages>.
2. errorMessages.component.ts: Updated look of message when errorCodes.NONE: large, meta text which is center and middle aligned instead of alert.
2 years ago
Konstantinos Triantafyllou 02de663dd2 Add condition for observer to avoid server error 2 years ago
Konstantina Galouni 4a6d39d4e9 [Library & common-assets | new-theme]:
1. landing-utils.css: Deleted .landing-background-default-color (replaced in html with uk-background-default).
2. resultLanding.component.html & project.component.html & organization.component.html & dataProvider.component.html: Updates and fixes for redesign.
   a. #graph_and_feedback outside margins and checks (invisible when no info).
   b. [Bug fix] margin-top of center column fixed (uk-sticky-placeholder was adding space).
   c. [Bug fix] Show again right sidebar when screen becomes medium+.
   d. [Bug fix] Added grid in labels.
3. resultLanding.component.ts & project.component.ts & organization.component.ts & dataProvider.component.ts: Added ResizeObserver and updated how graph_offset is calculated | Added graph_height field to set margin-top of center column.
4. project.component.ts: In getFileNameType() use OpenaireEntities.
5. organization.component.ts:
   a. In contentTypes field added type file names from OpenaireEntities
   b. Added field contentFileName.
   c. Added field shouldSticky and observer for "bottom" to stop sticky title & tabs when bottom is in viewport.
6. dataProvider.component.ts: Added field "provenanceUrls" and method "getProvenanceUrls()" to flatten all urls from dataProviderInfo.provenance.
2 years ago
Konstantina Galouni b924e564bb [Library | new-theme]: Use OpenaireEntities in search pages
1. newSearchPage.component.html: In graph and feedback, replace uk-text-muted with uk-text-meta and add uk-margin-large-top.
2. datasourcesHelper.class.ts & searchDataProviders.component.ts & searchOrganizations.component.ts & searchProjects.component.ts & searchResearchResults.component.ts: Use OpenaireEntities for result type names.
2 years ago
Konstantina Galouni ec2482e6af [Library | new-theme]:
1. searchDataproviders.service.ts & searchProjects.service.ts: Updated parsing of description (like in services for landing, use ParsingFunctions.parseDescription()).
2. searchFields.ts: Added in OpenaireEntities enum values for type names in files.
3. open-aire-jsonld-converter.service.ts:
   a. Updated parsing of description in methods convertProject() and convertDatasource() - use ParsingFunctions.parseDescription().
   b. In convertDatasource() method set "otherUrl" (not push it) in sameAs (on next commit, dataprovider landing sents all provenance urls as array).
4. jsonld-document-serializer.service.ts: [Bug fix] Added check in "serializeDescription()" method.
2 years ago
Alex Martzios 20e1e5d735 homepage tweaks and new images 2 years ago
Alex Martzios 620360fa94 tweak for homepage - scroll animation 2 years ago
Konstantinos Triantafyllou 9734b93f7a Add mutation observer to handle active text in scrolling section 2 years ago
Alex Martzios 47a96f93f4 general tweaks after Aristotelis call 2 years ago
Konstantina Galouni bbfa79c8c9 [Explore & Library & common-assets | new-theme]: No animation in sticky tabs | Tabs stop being sticky when bottom component is in viewport | Updates in powered by bottom message | Updates in statistics in datasource landing.
1. landing-utils.css: Commented transition ease-out in #main-tabs-div.
2. app.component.ts: Added id="bottom" in <bottom>.
3. newSearchPage.component.html: Updated "Powered by OpenAIRE Research Graph" to make the link underlined on hover.
4. metrics.component.ts: Add classes "uk-text-small uk-text-meta" in "Powered by".
5. resultLanding.component.html & project.component.html & dataProvider.component.html:
   a. Updated "Powered by OpenAIRE Research Graph" to make the link underlined on hover.
   b. Add uk-sticky attribute in id="main-tabs-div" only if shouldSticky is true (bottom is not in the viewport).
6. resultLanding.component.ts & project.component.ts & dataProvider.component.ts: Added fields shouldSticky and observer, check in ngAfterViewInit() if bottom is intersecting and kill the observer in ngOnDestroy().
7. statisticsTab.component.ts: Added customContainerClass="uk-background-default" customIframeClass="uk-blend-multiply" in <i-frame>.
8. showAuthors.component.ts: [Bug fix] In "View less authors" make only the link clickable, not the whole row.
2 years ago
Konstantina Galouni 9ab56f02fb [Library | new-theme]: resultLanding.component.html & project.component.html & dataProvider.component.html: Removed old unused html code. 2 years ago
Konstantina Galouni a87fc8da43 [Library | new-theme]: In result, project, dataprovider landing pages use type names from OpenaireEntities.
1. dataProvider.component.html: Use type names from OpenaireEntities | Added missing bottom <helper> and graph_and_feedback_template for small screens.
2. dataProvider.component.ts: Use type names from OpenaireEntities | stickyHeader = false when queryParams change.
3. project.component.html: Use type names from OpenaireEntities.
4. project.component.ts: stickyHeader = false when queryParams change.
5. resultLanding.component.html: Use type names from OpenaireEntities | In  #relation_in_tab, use common component for input instead of mat-select.
6. resultLanding.component.ts:
   a. Use type names from OpenaireEntities.
   b. Added relatedClassFilters: Option[] and use it in input for #relation_in_tab.
   c. stickyHeader = false when queryParams change.
7. resultLanding.module.ts: Imported InputModule.
8. orcid-work.component.ts: Use type names from OpenaireEntities.
9. result-preview.component: Use type names from OpenaireEntities.
2 years ago
Alex Martzios b5815a9bc7 update submodules 2 years ago
Konstantina Galouni acd8db71cc [Library | new-theme]: metrics.component.ts: Round large numbers in metrics | Use type names from OpenaireEntities. 2 years ago
Konstantina Galouni 341cacef2f [Explore & Library | new-theme]: Dataprovider landing page redesign.
1. environments/: Added "fairSharingURL" and "eoscMarketplaceURL".
2. env-properties.ts: Added properties:  fairSharingURL?: string, eoscMarketplaceURL?: string
3. searchFields.ts: In OpenaireEntities added type names also in singular.
4. statisticsTab.component.ts: Use type names from OpenaireEntities.
5. relatedDatasourcesTab.component.ts: Updated paging and align of columns according to mocks | Use type names from OpenaireEntities.
6. dataProvider.module.ts: Added iconsService.registerIcons([graph]).
7. dataProviderInfo.ts:
   	a. "description" type changed from string to string[]
   	b. #7718: Added field provenance: Map<string, {"url": string[]}>;
   	c. export class DataproviderProvenance with "provenance" field with info foreach provenance type.
8. dataProvider.service.ts: Updated parsing for description and originalId (provenanve) (#7718).
9. dataProvider.component: Redesign of datasource landing page.
2 years ago
Konstantina Galouni a949dd191d [Library | new-theme]: project.component.html: Small fixes in project landing redesign. 2 years ago
Konstantina Galouni 115d25e85f [common-assets | new-theme]: landing-utils.css: Removed rules related to .uk-progress (updated and moved to openaire-theme in progress.css). 2 years ago
Konstantina Galouni 1554f2f15f [Library | new-theme]: Redesign of project landing page and small upadates on result landing and common components.
1. addThis.component.ts: Updated social icons of addThis.
2. landing-header.component.ts: Added "uk-text-small" in subtitle.
3. metrics.component.ts: Added method "clickedMetrics()" to set "metricsClicked" | Added metricsClicked and metrics.infos conditions for loading table or iframes | Added customContainerClass and customIframeClass in <i-frame>.
4. project.component: Updated project landing page according to UI redesign.
5. project.module.ts: Import LoadingModule, IconsModule, InputModule.
6. project.service.ts: Use parsingFunctions.parseDescription.
7. projectService.module.ts: iconsService.registerIcons([link, graph]).
8. resultLanding.component.html: Small fixes in ui | Added right arrow on tooltips of actions that are links to other pages | Display of description updated as innerHtml (#7345).
9. orcid-work.component.ts: Added flex=true in <icon>.
10. input.component.ts: Added disabled?: boolean in Option interface and show disabled options as muted.
11. projectInfo.ts: Updated description to be string[] instead of string.
12. iframe.component.ts: Added @Input() customContainerClass: string = ""; and @Input() customIframeClass: string = "";
13. search-tab.component.ts: Updated according to redesign | Update "getEntityName()" to return values from OpenaireEntities.
14. tabs.component.ts: Added "uk-height-1-1" in custom tabs | In #mytabs::before set left:0.
2 years ago
Konstantina Galouni 846c7966f0 [openaire-theme | master]: text.css: Added .text-argos | variables.css: Added variable --argos-color: #17BEBB; 2 years ago
Alex Martzios ddb189303b finish explore homepage - need to check some things with aristotelis and remove old code frm comments 2 years ago
Konstantina Galouni 104256eefb [Explore & Library & Common Assets | new-theme]: Updates related to result landing redesign.
1. fos.component.css: Removed rule "mark.highlighted" and ".custom-bottom-border" updated with variables.
2. feedback.component.html: Updated width of email input for small screens.
3. parsingFunctions.class.ts: In "parseAllSubjects()" method, comment otherSubjects and push them in subjects.
4. showIdentifiers.component.ts: Updated classes in <modal-alert>.
5. showSubjects.component.ts: "Subjects by Vocabulary" and "Subjects" separated & view more functionality added in "Subjects".
6. resultLanding.component:
	a. Added button and modal for <addThis> (share in social media).
	b. View more functionality for related organizations.
	c. Graph and feedback section sticky.
	d. Added checks for summary tab and right sidebar.
	e. In small screens made right sidebar offcanvas.
7. resultLanding.module.ts: Updated iconsService.registerIcons to register link, graph, quotes.
8. orcid-work.component.ts: Added visually-hidden in icon buttons for landing | Updated classes in <modal-alert> and use buttons of alert instead of custom.
9. no-load-paging.component.ts: Use new component <results-and-pages> for results and pages number and set uk-flex-right in <paging-no-load> (default is center).
10. cookie-law.css: In ".cookie-law-wrapper" increased z-index from 100 to 1000.
11. showAuthors.component.ts: Removed shadow from search button | Updated classes in <modal-alert>.
12. icons.ts: Added "quotes" svg.
13. alert.ts: Updated modal to have header - body - footer (theme was updated too) | classTitle input set default to "uk-background-primary-opacity" | @Input() overflowBody: boolean = true; added to add overflow in body.
14. paging.module.ts: Added ResultsAndPagesNumComponent in declarations and exports.
15. pagingFormatter.component.ts: Add "uk-invisible" to previous and next buttons instead of hiding them.
16. pagingFormatterNoLoad.component.ts: Add "uk-invisible" to previous and next buttons instead of hiding them | Set customClasses default to "uk-flex-center".
17. tabs.component.ts: Updated margins/ paddings | Added @Input() offsetForSticky:number=0; to compare with the top distance for isSticky.
18. resultsAndPagesNum.component.ts: [NEW] Component to show number of results, number of pages and current page (used in paging).
19. landing-utils.css:
	a. Moved variables in .landing instead of :root.
	b. Added variable --landing-light-color-rgb: var(--light-color-rgb);
	c. Added glass filter in #graph_and_feedback.
	d. Set z-index of #main-tabs-div and #graph_and_feedback to 979 (default 980 caused problems with metrics box).
	e. Added padding-bottom: 80px and margin-top: 80px in .landing-sections.
	f. Added top rule for #right-sidebar-switcher.
	g. Added custom width rules for .landing-left-sidebar-width.
20. css-rules.txt: Added cookie-law-wrapper: 1000 info for z-index
21. explore-custom.css: Added variable --background-primary-rgb: var(--explore-color-rgb);
2 years ago
Alex Martzios bd7d3dccb0 progress on homepage 2 years ago
argirok 6564620ddd Update menu items with OpenaireEntities names 2 years ago
Alex Martzios d0ee809a03 progress on homepage, update submodules 2 years ago
argirok 7be057c722 stepper update css 2 years ago
Konstantinos Triantafyllou a32e7f0433 Merge branch 'new-theme' of code-repo.d4science.org:MaDgIK/explore-services into new-theme 2 years ago
Konstantinos Triantafyllou dec5268b83 Add quick selections in home page 2 years ago
Alex Martzios 3603c2ab00 changes on 'remove' label close-button 2 years ago
Alex Martzios 53eda3a026 tweaks on fos/sdg pages 2 years ago
Konstantinos Triantafyllou c24859fed3 Update libraries. Add as label secondary explore's color 2 years ago
Konstantina Galouni c887dc1c66 [Library & common-assets | new-theme]: Updates for redesign.
1. availableOn.component.ts: Updated class of title to "uk-text-light-grey" and added custom-external icon to links and updated accessright icons.
2. citation.class.ts: Added fileFormatOptions: Option[] to use it in input options.
3. citeThis.component.ts: Updated select inputs using "input" from InputComponent | Updated copy to clipboard button to link.
4. citeThis.module.ts: Import InputModule.
5. fos.component.ts: Updated class of title to "uk-text-light-grey".
6. fundedBy.component.ts: Updated class of title to "uk-text-light-grey" and updated links with uk-text-emphasis class.
7. landing-header.component.ts: Increase authorsLimit to 7 | Changed class of "under curation" to uk-text-primary (used to be custom class).
8. metrics.component.ts: Updated in clickOutside event.
parsingFunctions.class.ts: Updated open, closed and unknown with icon names instead of paths to svgs (download accessright icons).
9. relatedTo.component.ts: Updated class of title to "uk-text-light-grey" and added custom-external for links.
10. resultLandingUtils.module.ts: Inport AlertModalModule (to open modal).
11. sdg.component.ts: Updated class of titlte to "uk-text-light-grey".
12. showIdentifiers.component.ts: Added view more functionality.
13. showPublisher.component.ts: Updated custon-external class.
14. resultLanding.module.ts: registerIcon link.
15. resultLanding.component.html: Updated css for result landing and commented annotations (b2note).
16. orcid-work.component.ts: Updated orcid action button for landing page.
17. orcid.module.ts: registerIcons orcid_add and orcid_bin.
18. customOptions.class.ts: [Bug fix] [By Kostis] registryOptions() was not returning properly httpHeaders.
19. showAuthors.component.ts: Updated css
20. icons.ts: Export svgs orcid_add, orcid_bin, link.
21. alert.ts: Removed margin from title.
22. result-preview.component.html: Title of results set to <h2> and uk-h6 and when links to uk-link-heading | accessRightIcon for hostedBy_collectedFrom.
23. result-preview.module.ts: Imported IconsModule.
24. landing-utils.css: Updates in landing css & css of landing-action-button & added backdrop filter missing rules.
25. utils.css: Updated class orcid-clipboard-wrapper and renamed to clipboad-wrapper | Update class .custom-external to set in content with code instead of name and updated not to underline it on hover
26. library.css: Added class .default-dropdown with max-width: 500px;
2 years ago
Konstantinos Triantafyllou 04cd27042e Add new advanced-seach-input in home page 2 years ago
Alex Martzios caad9e3349 add links to FOS items, changes on SDG json file and page 2 years ago
Alex Martzios cb4b3334be finish fos page - search functionality 2 years ago
Alex Martzios 99bdbb72f8 update openaireLibrary repo 2 years ago
Alex Martzios de0c5e2e3f update images on sdg page, highlight search result on fos page, newsletter link fix on footer 2 years ago
Konstantina Galouni 1b88f0924f [Library & common-assets| new-theme]: Fixes in custom-external.
1. resultLanding.component.html: [Bug fix] In EGI Notebook, uk-text-uppercase should be in text (custom-external icon could not be loaded).
2. resultLanding.component.ts: Removed unnecessary log.
3. result-preview.component.html: Added properly "custom-external" class.
4. utils.css: In class "custom-external", set verical-align: super.
2 years ago
Konstantina Galouni 791dcccca6 [Library | new-theme]: resultLanding.component.html: Linking action button updated to redirect to direct linking page. 2 years ago
Konstantina Galouni 8b672939ac [Library | new-theme]: showIdentifiers.component.ts: Optimize imports and use uk-text-meta class | showPublisher.component.ts: Use uk-text-small and uk-text-meta classes. 2 years ago
Konstantina Galouni 5c3b14e9f7 [Library | new-theme]: resultLandingInfo.ts: Added export interface Context and set in ResultLandingInfo class contexts: Context[]; | parsingFunctions.class.ts: In method "parseContexts()" use interface Context. 2 years ago
Konstantina Galouni 1968c9add2 [Library | new-theme]: showAuthors.module.ts: Imported AlertModalModule | showAuthors.component.ts: When authors > 2*threshold, open them in modal & Replaces "view all ... authors" with "+ ... Authors" & updated orcid dropdown according to new theme | landing-header.component.ts: Use "uk-text-small" everywhere and removed @Input() small & change authorLimit from 30 to 3 & removed "small" input from <showAuthors>. 2 years ago
Konstantina Galouni 883cd8fac3 [Library | new-theme]: orcid.module.ts: Removed IconsService | orcid-work.component.ts: Updated icons (remove -> delete & preview -> visibility) & grouped tooltips wherever possible (background css not ready) & Removed unused css & Updated orcid buttons for landing page & [Bug fix] Update how "isLoggedIn" is calculated (userManagementService.getUserInfo() instead of Session). 2 years ago
Konstantina Galouni d13123cfc0 [Library | new-theme]: metrics.component.ts: Replaces old custom class "space" with "uk-margin-small-left" | metrics.component.css: Css updated to move mertics widget and its arrow in a new position (not ready). 2 years ago
Konstantina Galouni 6fcd822b36 [Library | new-theme]: searchSorting.component.ts & newSearchPage.component.html: Removed ":" after "Sort by" and "Results per page placeholders | result-preview.component.html: Use class uk-text-meta instead of uk-text-muted. 2 years ago
Konstantina Galouni 61550cc1c5 [openaire-theme | Trunk]: Small additions in css of theme.
variables.css: [NEW] Added variable --orcid-color: #A6CE39;
text.css: Added rules for classes "uk-text-xsmall" and "text-orcid".
2 years ago
Alex Martzios d845a618ea progress on fos search functionality 2 years ago
Konstantina Galouni 4b5d6ac98b [Library | new-theme]: rangeFilter.component: [Bug fix] In range filters, years were not updating & errors were not properly displayed | search-input.component.ts: Remove styleUrls (file is deleted). 2 years ago
Konstantina Galouni 826db1af73 [Library | new-theme]: Delete fromYearAfterToYear.directive.ts, inValidYear.directive.ts, rangeYearsRequired.directive.ts directives from rangeFilter folder (validator functions moved to string-utils.class.ts (previous commit)). 2 years ago
Konstantina Galouni 191b9c7a9a [Library | new-theme]: In range filters, use reactive form (formGroup) instead of template driven form (ngModel) & update inputs using new "input" component & move validators in string-utils.class.ts. 2 years ago
Konstantina Galouni e20e9c61e6 [Library & Common-Assets | new-theme]: 1st version of restructure of result landing page according to redesign | Bug fix in method "hasMetrics".
1. landing-header.component.ts: Remove from <showTitle>, isH1 input.
2. metrics.component.ts: On metrics error, emit also "pageViews: 0".
3. showTitle.component.ts: Remove "isH1" input property and add in title class uk-h5 always.
4. resultLanding.component.html: Redesign (currently broken) of result landing page.
5. orcid-work.component.ts: Remove label "Add to / Remove from ORCID".
6. import.css: Import "landing-utils.css".
7. landing-utils.css: Comment all existing css rules and add new.
2 years ago
Alex Martzios e4a9f8be64 finish SDGs component functionallity and styles and start on FOS component 2 years ago
Alex Martzios da544109aa create sdg component and add sdg img assets 2 years ago
Konstantinos Triantafyllou b2e9a76170 Create new branch for explore new-theme. Initialize variables, css and angular.json 2 years ago
Konstantina Galouni cc062d3938 [Library | Trunk]: ISVocabularies.service.ts: Make url to vocabularies sdg.json and fos.json absolute with domain prefix. 2 years ago
Konstantina Galouni 2fa81dd7c9 [Library | Trunk]: resultLanding.component.html: Add links to advanced search foreach FOS and SDG subject. 2 years ago
argirok d533a904ed add project sitemaps 2 years ago
argirok dbe76e472f update the values of fos/sdg vocabulary 2 years ago
argirok d6c4788fbb Merge branch 'master' of code-repo.d4science.org:MaDgIK/explore-services 2 years ago
argirok a8f3421fb8 add fos/sdg in advanced search, add autocomplete methods, add initial json files 2 years ago
Konstantina Galouni ea9d4d73c8 [Library]: searchFields.ts: In previous commit changed name of "resulthostingdatasourceid" used in advanced search (Hosting Content Provider --> Source), instead of "resulthostingdatasource" used in refine filters (Content Provider --> Source). 2 years ago
Konstantina Galouni ad1f68ca68 Rename some result refine filter names and reorder them. 2 years ago
Konstantina Galouni 5d21dde264 [Library]: Fixes (major: Parsing of organizations in result landing) & Addition of "FOS" and "SDGs" in result refine filters and result landing pages.
1. searchFields.ts: Added fos & sdg refine filters for research results.
2. resultLandingInfo.ts: Added string arrays "fos" and "sdg".
3. HelperFunctions.class.ts: Added method for sdg sorting (splits value, keeps only number before dot and compares numerically).
4. searchResearchResults.service.ts: [Bug fix] when parsing "dateofacceptance", stringify it only if it has a value.
5. searchFilter.component.ts: When sorting filters, sort differently SDGs.
6. resultLanding.service.ts:
	a. [Bug fix] Fix in parsing subtitle.
	b. [Bug fix] Parsing of "Related organizations" was accidentally deleted when parsing of relations changed.
	c. Parse "FOS" and "SDGs" in their specific fields, separately from subjects.
7. resultLanding.component.ts:
	a. [Bug fix] Do not make call for opencitations (deprecated).
	b. Updated method "hasPrimaryInfo()": Description is now array and added checks for organizations.
8. resultLanding.component.html: Display of "FOS" and "SDGs" separately from subjects.
9. showPublisher.component.ts: [Bug fix] Remove from html name of developer!
10. parsingFunctions.class.ts: Parse "FOS" and "SDGs" in their specific fields, separately from subjects.
11. metrics.component.ts: [Bug fix] Default value of "metricsClicked" should be false.
2 years ago
argirok dd862df6b2 complete previous commit for
clean up search dataproviders for doiRawValue
2 years ago
argirok 91d8ed0ccd Merge branch 'master' of code-repo.d4science.org:MaDgIK/explore-services
# Conflicts:
#	explore/src/app/openaireLibrary
2 years ago
argirok 7c87a1343e apply changes for datasource search pages #7546 2 years ago
argirok afb9e6cf0b Merge branch 'master' of code-repo.d4science.org:MaDgIK/explore-services 2 years ago
argirok ccccf03f30 Update Abstract to be an array - fix issue with B2Find missing information 2 years ago

1
.gitignore vendored

@ -1,4 +1,5 @@
.idea
**/.angular/
**/node_modules
**/package-lock.json
**/.idea

3
.gitmodules vendored

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

@ -0,0 +1,168 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
*For each release, use the following sub-sections:*
- *Added (for new features)*
- *Changed (for changes in existing functionality)*
- *Deprecated (for soon-to-be removed features)*
- *Removed (for now removed features)*
- *Fixed (for any bug fixes)*
- *Security (in case of vulnerabilities)*
## [production-release-march-2024] - 2024/03/04
### Changed
* Performance improvements
* Search pages: Access Routes, impact-based indicators, usage counts: Open drops on click, instead of hover
* Linking: change Datacite api from /works to /dois
* Updated funding text in footer
* Removed tooltips from search results
* UI updates on search pages
* Paging only at the bottom under the search results
* Removed number of results
* Removed results per page option
### Fixed
* z-index issue in dropdowns inside modals
* Change search tab from menu
* Requests in bulk DOIs upload in linkinh
* View all for search filters
* Research products detailed page: Provenance label in funded by
### Added
* Full-Text link in Research products
## [production-release-february-2024] - 2024/02/12
### Changed
* Remove "open access" as preselected filter
* Rounded numbers in search tabs
* Home page: Performance improvements on images loading
* Home page, Search page, Funders page: Performance improvements on services requests
### Fixed
* Filtering out in funding levels according to selected funder when querying 100 values
* Filters in claims & in organization landing > projects tab were always loading
* Research products landing page: Added providers in versions
* SEO fixes in landing pages
## [production-release-january-2024] - 2024/02/01
### Changed
* Updated FoS search filter - do not display code
* Removed "BETA" indication from FoS
* Access search filter: Display always all the predefined values
* Filters: remove number of values
* Filters: Get 7 value (display 6) and 100 on "view more" click
* My claims: remove urls for pending claims
* Improve queries for search organizations & data sources
### Fixed
* Search query with input full ORCID url or just ORCID id
* In search, added also in count query for data sources the datasource pid check
* Landing: min-height needed in metrics box
### Added
* Linking: responsive in mobile
## [production-release-november-2023-v2] - 2023/11/28
### Added
* Add sorting options with impact factors in search results page
### Changed
* Data source landing: get collected full texts from new stats API
* Updated parsing of measures - in results: views/downloads per data source
### Fixed
* Updated query for funders number in Funders page
* Updated query for funders number is first page
* Advanced Search Results: funder field to return all funders
* Advanced Search Projects: funder field to return all funders
## [production-release-november-2023] - 2023/11/09
### Added
* Missing funders' logos locally in Explore assets
### Changed
* Deposit search page: UI improvement in “Go to repository” button
### Fixed
* Reverted version of UIkit back to version 3.16.24 - previous version caused bug with dropdowns
## [production-release-october-2023] - 2023/10/18
### Added
* Search page: Add view more option on overflow (e.g authors, partners, subjects, projects)
### Changed
* Upgrade to Angular 16
* New Claims API
* New Funders Page
### Fixed
* Reverted version of UIkit to version 3.16.14 because of parallax
* A persistent identifier can resolve in more than one pid types
## [production-release-september-2023] - 2023/09/25
### FIXED
* Error on grant access in ORCID Search & Link Wizard
* Added missing id in linking from the project landing
* Added check in search data sources parsing
## [production-release-august-2023] - 2023/08/25
### Added
* Search mobile: Added actions
* Detailed pages - mobile: Added search-bar
* Mobile: new drops and dropdowns
### Changed
* Linking: Redesign of results view
* Advanced search form: Add autocomplete input for eosc subject field
* Detailed pages - mobile: UI updates & improvements
### Fixed
* Advanced search and detailed page
* Added a necessary check in html of detailed pages
## [production-release-may-2023] - 2023/05/19
### Added
* Detailed research products page: Added suggest modals for Sustainable Development Goals and Fields of Science
* Get research products, projects & data sources usage counts from index
### Changed
* Redesign of detailed pages and mobile version
### Fixed
* Fix path for fos/sdg vocabularies in advanced search
* Search page improvements
* UI updates & improvements in search results and detailed pages (minor)
## [production-release-january-2023] - 2023/01/18
### FIXED
* Contact us form: Email body was either empty or incomplete
* Contact us page: After sending an email, clear recaptcha
## [production-release-december-2022] - 2022/12/21
### Added
* Link to blog in Sustainable Development Goals page
### Changed
* SEO updates and mobile menu
### Fixed
* Linking: Changed Crossref requests for bulk uploaded DOIs
* Medium screens: not sticky navbar causing error
## [production-release-november-2022] - 2022/11/30
### Added
* EOSC subjects from eoscifguidelines field & Advanced field "EOSC Subject"
* New Contact us page
### Changed
* Upgrade to Angular 14
* Refinement of filters
* Advanced search form: UI updates and smooth scrolling
* FoS and deposit pages updates
* Bip Finder: Updated parsing and labels for Bip Finder scores & updated link to BiP Finder

@ -1,6 +1,6 @@
# Explore
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.1.7.
## Install packages

@ -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/explore/browser",
"index": "src/index.html",
"main": "src/main.ts",
@ -53,23 +51,36 @@
}
],
"styles": [
"src/styles.css",
"src/material.scss"
"src/styles.less",
{"input": "src/assets/deposit.less", "inject": false },
{"input": "src/assets/funders.less", "inject": false },
"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,
@ -92,11 +103,17 @@
"with": "src/environments/environment.test.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,
@ -138,11 +155,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,
@ -184,11 +207,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,
@ -204,7 +233,8 @@
}
]
}
}
},
"defaultConfiguration": ""
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
@ -239,30 +269,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/explore/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
},
"test": {
"outputHashing": "media",
@ -273,7 +296,8 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
},
"beta": {
"outputHashing": "media",
@ -284,7 +308,8 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
},
"production": {
"outputHashing": "media",
@ -295,9 +320,11 @@
}
],
"sourceMap": false,
"optimization": true
"optimization": true,
"buildOptimizer": true
}
}
},
"defaultConfiguration": ""
},
"serve-ssr": {
"builder": "@nguniversal/builders:ssr-dev-server",
@ -343,18 +370,11 @@
"devServerTarget": "explore:serve:production"
}
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": "e2e/tsconfig.e2e.json",
"exclude": [
"**/node_modules/**"
]
}
}
}
}
},
"defaultProject": "explore"
"cli": {
"analytics": false
}
}

@ -8,7 +8,7 @@
"build-dev": "ng build --configuration=development",
"build-test": "ng build --configuration=test",
"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/explore/browser/stats.json --host 0.0.0.0",
"test": "ng test",
"e2e": "ng e2e",
@ -19,45 +19,46 @@
"build:ssr-beta": "npm run build-beta && ng run explore:server:beta",
"build:ssr-prod": "npm run build-prod && ng run explore:server:production",
"prerender": "ng run explore:prerender",
"after-build-clean": "rm -rf dist/explore/browser/assets/common-assets/.git/ src/app/openaireLibrary/.git node_modules src/assets/common-assets/.git/ .git .idea"
"after-build-clean": "rm -rf dist/explore/browser/assets/common-assets/.git/ src/app/openaireLibrary/.git node_modules .angular src/assets/common-assets/.git/ .git .idea"
},
"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.7",
"@angular/cdk": "^16.1.6",
"@angular/common": "^16.1.7",
"@angular/compiler": "^16.1.7",
"@angular/core": "^16.1.7",
"@angular/forms": "^16.1.7",
"@angular/localize": "^16.1.7",
"@angular/material": "^16.1.6",
"@angular/platform-browser": "^16.1.7",
"@angular/platform-browser-dynamic": "^16.1.7",
"@angular/platform-server": "^16.1.7",
"@angular/router": "^16.1.7",
"@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",
"prom-client": "^11.3.0",
"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.13",
"@angular/cli": "~11.2.13",
"@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.6",
"@angular/cli": "^16.1.6",
"@angular/compiler-cli": "^16.1.7",
"@angular/language-service": "^16.1.7",
"@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",
@ -68,6 +69,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"
}
}

@ -13,6 +13,8 @@ export const routes = [
'/participate/deposit-subject-result',
'/participate/deposit-publications',
'/participate/deposit-publications-result',
'/participate/deposit/learn-how',
'/participate/deposit/search',
'/search/find/research-outcomes',
'/search/find',
'/search/find/publications',
@ -40,4 +42,9 @@ export const routes = [
'/claims',
'/participate/claim',
'/participate/direct-claim',
'/my-orcid-links',
'/sdgs',
'/fields-of-science',
'/funders',
'/contact-us',
];

@ -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';
@ -39,6 +39,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');
@ -55,7 +56,30 @@ export function app() {
res.set('Content-Type', register.contentType);
res.end(register.metrics());
});
server.get('/health-check', async (_req, res, _next) => {
var uptime = process.uptime();
const date = new Date(uptime*1000);
const days = date.getUTCDate() - 1,
hours = date.getUTCHours(),
minutes = date.getUTCMinutes(),
seconds = date.getUTCSeconds(),
milliseconds = date.getUTCMilliseconds();
const healthcheck = {
uptime: days + " days, " + hours + " hours, " + minutes + " minutes, " + seconds + " seconds, " + milliseconds + " milliseconds",
message: 'OK',
timestamp: new Date()
};
try {
res.send(healthcheck);
} catch (error) {
healthcheck.message = error;
res.status(503).send();
}
});
// All regular routes use the Universal engine
server.get('*', (req, res) => {
if (routes.indexOf(req.path) !== -1) {

@ -1,55 +1,50 @@
import {NgModule} from '@angular/core';
import {PreloadAllModules, RouterModule, Routes} from '@angular/router';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
import {RouterModule, Routes} from '@angular/router';
import {PageURLResolverComponent} from "./openaireLibrary/utils/pageURLResolver.component";
import {SdgModule} from "./openaireLibrary/sdg/sdg.module";
import {ErrorPageComponent} from "./openaireLibrary/error/errorPage.component";
const routes: Routes = [
// Other Pages
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)},
//{ path: 'home', loadChildren: './home/home.module#HomeModule'},
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule), data: {hasStickyHeaderOnMobile: true}},
{path: 'home', redirectTo: '', pathMatch: 'full'},
{path: 'mail-preferences', loadChildren: () => import('./userEmailPreferences/mailPrefs.module').then(m => m.LibMailPrefsModule)},
{path: 'sdgs', loadChildren: () => import('./openaireLibrary/sdg/sdg.module').then(m => m.SdgModule)},
{path: 'fields-of-science', loadChildren: () => import('./openaireLibrary/fos/fos.module').then(m => m.FosModule), data: {extraOffset: 100}},
{path: 'funders', loadChildren: () => import('./funders/funders.module').then(m => m.FundersModule)},
{path: 'contact-us', loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule), data: {hasQuickContact: false}},
// ORCID Pages
{path: 'orcid', loadChildren: () => import('./orcid/orcid.module').then(m => m.LibOrcidModule)},
{path: 'my-orcid-links', loadChildren: () => import('./orcid/my-orcid-links/myOrcidLinks.module').then(m => m.LibMyOrcidLinksModule)},
{path: 'orcid', loadChildren: () => import('./openaireLibrary/orcid/orcid.module').then(m => m.OrcidModule)},
{path: 'my-orcid-links', loadChildren: () => import('./openaireLibrary/orcid/my-orcid-links/myOrcidLinks.module').then(m => m.MyOrcidLinksModule)},
// Landing Pages
{path: 'search/result', loadChildren: () => import('./landingPages/result/libResult.module').then(m => m.LibResultModule)},
{path: 'search/publication', loadChildren: () => import('./landingPages/publication/libPublication.module').then(m => m.LibPublicationModule)},
{path: 'search/dataset', loadChildren: () => import('./landingPages/dataset/libDataset.module').then(m => m.LibDatasetModule)},
{path: 'search/software', loadChildren: () => import('./landingPages/software/libSoftware.module').then(m => m.LibSoftwareModule)},
{path: 'search/other', loadChildren: () => import('./landingPages/orp/libOrp.module').then(m => m.LibOrpModule)},
{path: 'search/project', loadChildren: () => import('./landingPages/project/libProject.module').then(m => m.LibProjectModule)},
{path: 'search/result', loadChildren: () => import('./openaireLibrary/landingPages/result/resultLanding.module').then(m => m.ResultLandingModule), data: {hasQuickContact: false, hasMenuSearchBar: true, type: 'result', community: 'openaire'}},
{path: 'search/publication', loadChildren: () => import('./openaireLibrary/landingPages/result/resultLanding.module').then(m => m.ResultLandingModule), data: {hasQuickContact: false, hasMenuSearchBar: true, type: 'publication', community: 'openaire'}},
{path: 'search/dataset', loadChildren: () => import('./openaireLibrary/landingPages/result/resultLanding.module').then(m => m.ResultLandingModule), data: {hasQuickContact: false, hasMenuSearchBar: true, type: 'dataset', community: 'openaire'}},
{path: 'search/software', loadChildren: () => import('./openaireLibrary/landingPages/result/resultLanding.module').then(m => m.ResultLandingModule), data: {hasQuickContact: false, hasMenuSearchBar: true, type: 'software', community: 'openaire'}},
{path: 'search/other', loadChildren: () => import('./openaireLibrary/landingPages/result/resultLanding.module').then(m => m.ResultLandingModule), data: {hasQuickContact: false, hasMenuSearchBar: true, type: 'orp', community: 'openaire'}},
{path: 'search/project', loadChildren: () => import('./openaireLibrary/landingPages/project/project.module').then(m => m.ProjectModule), data: {hasQuickContact: false, hasMenuSearchBar: true, community: 'openaire'}},
{
path: 'search/dataprovider',
loadChildren: () => import('././landingPages/dataProvider/libDataProvider.module').then(m => m.LibDataProviderModule)
loadChildren: () => import('./openaireLibrary/landingPages/dataProvider/dataProvider.module').then(m => m.DataProviderModule),
data: {hasQuickContact: false, hasMenuSearchBar: true, community: 'openaire'}
},
{
path: 'search/organization',
loadChildren: () => import('./landingPages/organization/libOrganization.module').then(m => m.LibOrganizationModule)
},
{
path: 'project-report',
loadChildren: () => import('./landingPages/htmlProjectReport/libHtmlProjectReport.module').then(m => m.LibHtmlProjectReportModule)
loadChildren: () => import('./openaireLibrary/landingPages/organization/organization.module').then(m => m.OrganizationModule),
data: {hasQuickContact: false, hasMenuSearchBar: true, community: 'openaire'}
},
// Search Pages
{path: 'search/find', loadChildren: () => import('./searchPages/find/libSearch.module').then(m => m.LibMainSearchModule)},
{
path: 'search/find/research-outcomes',
loadChildren: () => import('./searchPages/simple/searchResearchResults.module').then(m => m.OpenaireSearchResearchResultsModule)
path: 'search/find', loadChildren: () => import('./searchPages/find/libSearch.module').then(m => m.LibMainSearchModule)
},
{path: 'search/find/publications', component: PageURLResolverComponent},
{path: 'search/find/datasets', component: PageURLResolverComponent},
{path: 'search/find/software', component: PageURLResolverComponent},
{path: 'search/find/other', component: PageURLResolverComponent},
{path: 'search/find/projects', loadChildren: () => import('./searchPages/simple/searchProjects.module').then(m => m.LibSearchProjectsModule)},
{
path: 'search/find/dataproviders',
loadChildren: () => import('./searchPages/simple/searchDataProviders.module').then(m => m.LibSearchDataProvidersModule)
},
{
path: 'search/find/organizations',
loadChildren: () => import('./searchPages/simple/searchOrganizations.module').then(m => m.LibSearchOrganizationsModule)
path: 'search/find/:entity', loadChildren: () => import('./searchPages/find/libSearch.module').then(m => m.LibMainSearchModule)
},
// Advanced Search Pages
{
path: 'search/advanced/research-outcomes',
@ -76,14 +71,14 @@ const routes: Routes = [
path: 'search/content-providers',
loadChildren: () => import('./searchPages/dataProviders/compatibleDataProviders.module').then(m => m.LibCompatibleDataProvidersModule)
},
{path: 'search/content-providers-table', redirectTo: 'search/content-providers'},
{path: 'search/content-providers-table', redirectTo: 'search/content-providers', pathMatch: 'full'},
{
path: 'search/entity-registries',
loadChildren: () => import('./searchPages/dataProviders/entityRegistries.module').then(m => m.LibEntityRegistriesModule)
},
{path: 'search/entity-registries-table', redirectTo: 'search/entity-registries'},
{path: 'search/entity-registries-table', redirectTo: 'search/entity-registries', pathMatch: 'full'},
{path: 'search/journals', loadChildren: () => import('./searchPages/dataProviders/journals.module').then(m => m.LibJournalsModule)},
{path: 'search/journals-table', redirectTo: 'search/journals'},
{path: 'search/journals-table', redirectTo: 'search/journals', pathMatch: 'full'},
// Deposit Pages
{path: 'participate/deposit-datasets', redirectTo: 'participate/deposit/learn-how', pathMatch: 'full'},
{path: 'participate/deposit-datasets-result', redirectTo: 'participate/deposit/learn-how', pathMatch: 'full'},
@ -105,10 +100,10 @@ const routes: Routes = [
},
// { path: 'claims-project-manager', loadChildren: './claims/claimsByToken/claimsByToken.module#LibClaimsByTokenModule'},
// help pages - do not exist in Admin portal/api/db
{path: 'reload', loadChildren: () => import('./reload/libReload.module').then(m => m.LibReloadModule)},
{path: 'user-info', loadChildren: () => import('./login/libUser.module').then(m => m.LibUserModule)},
{path: 'error', component: OpenaireErrorPageComponent},
{path: '**', pathMatch: 'full', component: OpenaireErrorPageComponent}
{path: 'reload', loadChildren: () => import('./openaireLibrary/reload/reload.module').then(m => m.ReloadModule)},
{path: 'user-info', loadChildren: () => import('./openaireLibrary/login/user.module').then(m => m.UserModule)},
{path: 'error', component: ErrorPageComponent},
{path: '**', pathMatch: 'full', component: ErrorPageComponent}
];
@NgModule({

@ -1,12 +1,9 @@
import {Component} from '@angular/core';
import {ActivatedRoute, NavigationStart, Router} from '@angular/router';
import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
import {ActivatedRoute, 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 {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component";
@ -15,21 +12,32 @@ import {Meta} from "@angular/platform-browser";
import {properties} from "../environments/environment";
import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
import {SEOService} from "./openaireLibrary/sharedComponents/SEO/SEO.service";
import {OpenaireEntities} from "./openaireLibrary/utils/properties/searchFields";
import {FormBuilder, FormGroup, Validators} from '@angular/forms';
import {QuickContactComponent} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.component';
import {EmailService} from './openaireLibrary/utils/email/email.service';
import {Composer} from "./openaireLibrary/utils/email/composer";
import {AlertModal} from './openaireLibrary/utils/modal/alert';
import {NotificationHandler} from "./openaireLibrary/utils/notification-handler";
import {QuickContactService} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
import {LayoutService} from './openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
@Component({
//changeDetection: ChangeDetectionStrategy.Default,
//encapsulation: ViewEncapsulation.Emulated,
selector: 'app-root',
template: `
<navbar *ngIf="properties && header" [header]="header" [portal]="properties.dashboard" [properties]=properties
[onlyTop]=false [user]="user"
[communityId]="properties.adminToolsCommunity" [userMenuItems]=userMenuItems [menuItems]=menuItems></navbar>
<div *ngIf="loading">
<loading [full]="true"></loading>
</div>
<schema2jsonld *ngIf="properties" [URL]="properties.domain+properties.baseLink"
[logoURL]="properties.domain+properties.baseLink+'/assets/common-assets/logo-small-explore.png'"
[logoURL]="properties.domain+properties.baseLink+'/assets/common-assets/logo-services/explore/main.svg'"
type="home"
name="OpenAIRE | Find and Share research"
description="OpenAIRE Explore: Over 100M of research deduplicated, 170K research software, 11M research data. One of the largest open scholarly records collection worldwide."></schema2jsonld>
<div class="custom-main-content">
<div [class.uk-hidden]="loading" [ngClass]="rootClass">
<div id="modal-container"></div>
<main>
<router-outlet></router-outlet>
</main>
@ -44,39 +52,46 @@ import {SEOService} from "./openaireLibrary/sharedComponents/SEO/SEO.service";
ratio="1"><polyline fill="none" stroke="#000" stroke-width="1.03" points="7 4 13 10 7 16"></polyline></svg>
</span></a>
</cookie-law>
<bottom *ngIf="isClient && properties" [properties]="properties"></bottom>
<bottom id="bottom" #bottom *ngIf="isClient && properties" [properties]="properties"></bottom>
<quick-contact #quickContact *ngIf="bottomNotIntersecting && displayQuickContact && showQuickContact && contactForm" (sendEmitter)="send($event)"
[contactForm]="contactForm" [sending]="sending" [contact]="'Help'" class="uk-visible@m"></quick-contact>
<modal-alert #modal [overflowBody]="false"></modal-alert>
`
})
export class AppComponent {
export class AppComponent implements AfterViewInit {
loading: boolean = false;
rootClass: string;
isClient: boolean = false;
userMenuItems: MenuItem[] = [];
menuItems: RootMenuItem [] = [];
menuItems: MenuItem [] = [];
feedbackmail: string;
properties: EnvProperties = properties;
user: User;
header: Header;
logoPath: string = 'assets/common-assets/';
/* Contact */
public showQuickContact: boolean;
public bottomNotIntersecting: boolean;
public displayQuickContact: boolean; // intersecting with specific section in home page
public contactForm: FormGroup;
public sending: boolean = false;
@ViewChild('quickContact') quickContact: QuickContactComponent;
@ViewChild('modal') modal: AlertModal;
@ViewChild('bottom', {read: ElementRef}) bottom: ElementRef;
subscriptions = [];
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
private router: Router, private userManagementService: UserManagementService, private smoothScroll: SmoothScroll,
private configurationService: ConfigurationService, private _meta: Meta, private seoService: SEOService,) {
this.userMenuItems.push(new MenuItem("", "My profile", "", "", false, [], [], {}));
this.userMenuItems.push(new MenuItem("", "My ORCID links", "", "/my-orcid-links", false, [], [""], {}));
this.userMenuItems.push(new MenuItem("", "My links", "", "/myclaims", false, [], ["/myclaims"], {}));
this.subscriptions.push(router.events.forEach((event) => {
if (event instanceof NavigationStart) {
HelperFunctions.scroll();
}
}));
private configurationService: ConfigurationService, private _meta: Meta, private seoService: SEOService,
private emailService: EmailService, private fb: FormBuilder, private quickContactService: QuickContactService,
private layoutService: LayoutService, private cdr: ChangeDetectorRef) {
}
ngOnInit() {
if (typeof document !== 'undefined') {
this.isClient = true;
}
this.configurationService.initCommunityInformation(this.properties, this.properties.adminToolsCommunity);
this.configurationService.initPortal(this.properties, this.properties.adminToolsCommunity);
this.feedbackmail = this.properties.feedbackmail;
if (this.properties.environment == "production" || this.properties.environment == "development") {
this.subscriptions.push(this.route.queryParams.subscribe(data => {
@ -92,64 +107,128 @@ export class AppComponent {
route: "/",
url: null,
title: 'explore',
logoUrl: this.logoPath + 'logo-large-explore.png',
logoSmallUrl: this.logoPath + 'logo-small-explore.png',
logoUrl: 'assets/common-assets/logo-services/explore/main.svg',
logoSmallUrl: 'assets/common-assets/logo-services/explore/small.svg',
position: 'left',
badge: true
};
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();
}
}));
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
} else if (typeof IntersectionObserver !== "undefined" && subscription instanceof IntersectionObserver) {
subscription.disconnect();
}
});
this.configurationService.clearSubscriptions();
this.userManagementService.clearSubscriptions();
this.smoothScroll.clearSubscriptions();
}
ngAfterViewInit() {
if (typeof window !== "undefined") {
this.createObservers();
this.subscriptions.push(this.layoutService.rootClass.subscribe(rootClass => {
this.loading = true;
this.cdr.detectChanges();
if (rootClass && this.isClient) {
let link = <HTMLLinkElement>document.getElementById('theme');
let append = false;
if (!link) {
link = document.createElement('link');
link.rel = 'stylesheet';
link.id = 'theme';
append = true;
}
link.href = rootClass + '.css';
link.onerror = (error) => console.log(error);
if (append) {
document.head.appendChild(link);
}
}
this.rootClass = rootClass;
this.cdr.detectChanges();
setTimeout(() => {
this.loading = false;
this.cdr.detectChanges();
}, 500)
}));
}
}
createObservers() {
let options = {
root: null,
rootMargin: '0px',
threshold: 0.1
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
if(this.bottomNotIntersecting !== (!entry.isIntersecting)) {
this.bottomNotIntersecting = !entry.isIntersecting;
this.cdr.detectChanges();
}
});
}, options);
intersectionObserver.observe(this.bottom.nativeElement);
this.subscriptions.push(intersectionObserver);
}
buildMenu() {
let researchOutcomesMenu = new MenuItem("", "Research Outcomes", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {resultbestaccessright: '"' + encodeURIComponent("Open Access") + '"'});
this.userMenuItems = [];
this.userMenuItems.push(new MenuItem("", "My profile", "", "", false, [], [], {}));
if(this.properties.environment != "beta") {
this.userMenuItems.push(new MenuItem("", "My ORCID links", "", "/my-orcid-links", false, [], [""], {}));
}
this.userMenuItems.push(new MenuItem("", "My links", "", "/myclaims", false, [], ["/myclaims"], {}));
let researchOutcomesMenu = new MenuItem("", OpenaireEntities.RESULTS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {});
researchOutcomesMenu.items = [
new MenuItem("", "Publications", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("publications") + '"'}),
new MenuItem("", "Research data", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("datasets") + '"'}),
new MenuItem("", "Software", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("software") + '"'}),
new MenuItem("", "Other research products", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("other") + '"'})];
new MenuItem("", OpenaireEntities.PUBLICATIONS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("publications") + '"'}),
new MenuItem("", OpenaireEntities.DATASETS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("datasets") + '"'}),
new MenuItem("", OpenaireEntities.SOFTWARE, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("software") + '"'}),
new MenuItem("", OpenaireEntities.OTHER, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {type: '"' + encodeURIComponent("other") + '"'})];
//TODO add check for research results route
this.menuItems = [
{
rootItem: new MenuItem("search", "Search", "", "/search/find", false, [], ["/search/find"], {qf: true}),
items: [
new MenuItem("search", "Search", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {},
null, null, null, null, "_blank", "internal", false,
[
researchOutcomesMenu,
new MenuItem("", "Projects", "", "/search/find/projects/", false, ["project"], ["/search/find/projects"], {}),
new MenuItem("", "Content Providers", "", "/search/find/dataproviders", false, ["datasource"], ["/search/find/dataproviders"], {}),
new MenuItem("", "Organizations", "", "/search/find/organizations/", false, ["organization"], ["/search/find/organizations"], {})
new MenuItem("", OpenaireEntities.PROJECTS, "", "/search/find/projects/", false, ["project"], ["/search/find/projects"], {}),
new MenuItem("", OpenaireEntities.DATASOURCES, "", "/search/find/dataproviders", false, ["datasource"], ["/search/find/dataproviders"], {}),
new MenuItem("", OpenaireEntities.ORGANIZATIONS, "", "/search/find/organizations/", false, ["organization"], ["/search/find/organizations"], {})
]
},
{
rootItem: new MenuItem("deposit", "Deposit", "", "/participate/deposit/learn-how", false, [], ["/participate/deposit/learn-how"], {}),
//rootItem: new MenuItem("deposit", "Deposit", "", "/participate/deposit/learn-how", false, [], ["/participate/deposit/learn-how"], {}),
items: []
//rootItem: new MenuItem("share", "Share", "", "", false, [], ["/participate/deposit-publications", "/participate/deposit-datasets"], {}),
//items: [new MenuItem("", "Publications", "", "/participate/deposit-publications", false, ["publication"], ["/participate/deposit-publications"], {}),
// new MenuItem("", "Research Data", "", "/participate/deposit-datasets", false, ["dataset"], ["/participate/deposit-datasets"], {})]
},
{
rootItem: new MenuItem("link", "Link", "", "/participate/claim", false, [], ["/participate/claim"], {}),
items: [new MenuItem("", "Start linking", "", "/participate/claim", false, [], ["/participate/claim"], {}),
),
new MenuItem("deposit", "Deposit", "", "/participate/deposit/learn-how", false, [], ["/participate/deposit/learn-how"], {}),
new MenuItem("link", "Link", "", "/participate/claim", false, [], ["/participate/claim"], {},
null, null, null, null, "_blank", "internal", false,
[new MenuItem("", "Start linking", "", "/participate/claim", false, [], ["/participate/claim"], {}),
new MenuItem("", "Learn more", this.properties.claimsInformationLink, "", false, [], [], {})]
},
{
rootItem: new MenuItem("datasources", "Content Providers", "", "", false, ["datasource"], [], {}),
items: [new MenuItem("", "Data Policies", "https://beta.openaire.eu/oa-policies-mandates", "", false, ["datasource"], [""], {}),
),
new MenuItem("datasources", OpenaireEntities.DATASOURCES, "", "", false, ["datasource"], [], {},
null, null, null, null, "_blank", "internal", false,
[new MenuItem("", "Data Policies", "https://beta.openaire.eu/oa-policies-mandates", "", false, ["datasource"], [""], {}),
new MenuItem("", "Repositories", "", "/search/content-providers", false, ["datasource"], ["/search/content-providers"], {}),
new MenuItem("", "Journals", "", "/search/journals", false, ["datasource"], ["/search/journals"], {}),
new MenuItem("", "Registries", "", "/search/entity-registries", false, ["datasource"], ["/search/entity-registries"], {}),
new MenuItem("", "Browse all", "", "/search/find/dataproviders", false, ["datasource"], ["/search/find/dataproviders"], {})]
}
),
new MenuItem("funders", "Funders", "", "/funders", false, [], ["/funders"], {}),
];
if (Session.isPortalAdministrator(this.user)) {
this.userMenuItems.push(new MenuItem("", "Manage all links", "", "/claims", false, [], ["/claims"], {}));
@ -161,6 +240,66 @@ export class AppComponent {
if (this.user) {
this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
}
}
public send(event) {
if (event.valid === true) {
this.sendMail(this.properties.admins);
}
}
private sendMail(admins: string[]) {
this.sending = true;
this.subscriptions.push(this.emailService.contact(this.properties,
Composer.composeEmailForExplore(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 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]),
affiliation: this.fb.control(''),
message: this.fb.control('', Validators.required),
recaptcha: this.fb.control('', Validators.required),
});
}
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('');
}
}

@ -1,6 +1,6 @@
import {NgModule} from '@angular/core';
import {SharedModule} from './shared/shared.module';
import {BrowserModule, BrowserTransferStateModule} from '@angular/platform-browser';
import {APP_ID, NgModule} from '@angular/core';
import {SharedModule} from './openaireLibrary/shared/shared.module';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {CommonModule} from '@angular/common';
import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';
@ -9,7 +9,6 @@ import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigation
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 {OpenaireErrorPageComponent} from './error/errorPage.component';
import {AppRoutingModule} from './app-routing.module';
import {HttpInterceptorService} from "./openaireLibrary/http-interceptor.service";
import {PageURLResolverModule} from "./openaireLibrary/utils/pageURLResolver.module";
@ -17,6 +16,9 @@ import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jso
import {CacheInterceptorService} from "./openaireLibrary/cache-interceptor.service";
import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service";
import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service";
import {QuickContactModule} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.module';
import {AlertModalModule} from './openaireLibrary/utils/modal/alertModal.module';
import {LoadingModule} from "./openaireLibrary/utils/loading/loading.module";
@NgModule({
imports: [
@ -26,19 +28,22 @@ import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.servi
ErrorModule,
NavigationBarModule, BottomModule,
CookieLawModule,
BrowserModule.withServerTransition({ appId: 'explore' }),
BrowserModule,
AppRoutingModule,
BrowserTransferStateModule,
BrowserAnimationsModule, PageURLResolverModule, Schema2jsonldModule
BrowserAnimationsModule, PageURLResolverModule,
Schema2jsonldModule,
QuickContactModule,
AlertModalModule, LoadingModule
],
declarations: [AppComponent, OpenaireErrorPageComponent],
declarations: [AppComponent],
exports: [AppComponent],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: CacheInterceptorService,
multi: true
},
{provide: APP_ID, useValue: 'explore'},
// {
// provide: HTTP_INTERCEPTORS,
// useClass: CacheInterceptorService,
// multi: true
// },
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,

@ -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],
})

@ -4,13 +4,14 @@ import { OpenaireClaimsAdminComponent } from './claimsAdmin.component';
import{ ClaimsCuratorGuard} from '../../openaireLibrary/login/claimsCuratorGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireClaimsAdminComponent, canActivate: [IsRouteEnabled, ClaimsCuratorGuard],
data: {redirect: '/error', community : 'openaire'}, canDeactivate: [PreviousRouteRecorder]}])
data: {redirect: properties.errorLink, community : 'openaire'}, canDeactivate: [PreviousRouteRecorder]}])
]
})
export class ClaimsAdminRoutingModule { }

@ -4,19 +4,17 @@ import {properties} from "../../../environments/environment";
@Component({
selector: 'openaire-claims-admin',
template: `
<claims-admin *ngIf="claimsInfoURL && userInfoURL" [claimsInfoURL]=claimsInfoURL [userInfoURL]="userInfoURL">
<claims-admin *ngIf="claimsInfoURL" [claimsInfoURL]="claimsInfoURL">
</claims-admin>
`,
})
export class OpenaireClaimsAdminComponent implements OnInit {
claimsInfoURL: string;
userInfoURL: string;
constructor() {
}
public ngOnInit() {
this.claimsInfoURL = properties.claimsInformationLink;
this.userInfoURL = properties.userInfoUrl;
}
}

@ -1,13 +1,10 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../../shared/shared.module';
import { SharedModule } from '../../openaireLibrary/shared/shared.module';
import { OpenaireClaimsAdminComponent } from './claimsAdmin.component';
import { ClaimsAdminRoutingModule } from './claimsAdmin-routing.module';
import{ClaimsAdminModule } from '../../openaireLibrary/claims/claimsAdmin/claimsAdmin.module';
import{ ClaimsCuratorGuard} from '../../openaireLibrary/login/claimsCuratorGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
@NgModule({
imports: [
@ -15,7 +12,7 @@ import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
ClaimsAdminRoutingModule,
ClaimsAdminModule
],
providers:[ClaimsCuratorGuard, PreviousRouteRecorder,IsRouteEnabled],
providers:[ClaimsCuratorGuard],
declarations: [
OpenaireClaimsAdminComponent
]

@ -5,13 +5,14 @@ import { OpenaireDirectLinkingComponent } from './directLinking.component';
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireDirectLinkingComponent, canActivate: [IsRouteEnabled, LoginGuard], data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder]},
])

@ -1,18 +1,15 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../../shared/shared.module';
import { SharedModule } from '../../openaireLibrary/shared/shared.module';
import { OpenaireDirectLinkingComponent } from './directLinking.component';
import{ DirectLinkingModule} from '../../openaireLibrary/claims/directLinking/directLinking.module';
import {DirectLinkingRoutingModule} from './directLinking-routing.module';
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
@NgModule({
imports: [
SharedModule, DirectLinkingModule, DirectLinkingRoutingModule
],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
providers:[],
declarations: [
OpenaireDirectLinkingComponent
], exports:[OpenaireDirectLinkingComponent]

@ -4,13 +4,14 @@ import { OpenaireLinkingComponent } from './linkingGeneric.component';
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireLinkingComponent, canActivate: [IsRouteEnabled, LoginGuard], data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder]},
])

@ -1,18 +1,15 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../../shared/shared.module';
import { SharedModule } from '../../openaireLibrary/shared/shared.module';
import {OpenaireLinkingComponent} from './linkingGeneric.component';
import {LinkingRoutingModule} from './linking-routing.module';
import{ LinkingGenericModule} from '../../openaireLibrary/claims/linking/linkingGeneric.module';
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
@NgModule({
imports: [
SharedModule, LinkingRoutingModule, LinkingGenericModule
],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
providers:[],
declarations: [
OpenaireLinkingComponent
], exports:[

@ -5,13 +5,14 @@ import {OpenaireMyClaimsComponent } from './myClaims.component';
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireMyClaimsComponent, canActivate: [IsRouteEnabled, LoginGuard],
data: {redirect: '/error', community : 'openaire'}, canDeactivate: [PreviousRouteRecorder]}])
data: {redirect: properties.errorLink, community : 'openaire'}, canDeactivate: [PreviousRouteRecorder]}])
]
})
export class MyClaimsRoutingModule { }

@ -5,20 +5,18 @@ import {properties} from "../../../environments/environment";
@Component({
selector: 'openaire-my-claims',
template: `
<my-claims *ngIf="userInfoURL && claimsInfoURL" [claimsInfoURL]=claimsInfoURL [userInfoURL]="userInfoURL">
<my-claims *ngIf="claimsInfoURL" [claimsInfoURL]="claimsInfoURL">
</my-claims>
`
})
export class OpenaireMyClaimsComponent implements OnInit {
claimsInfoURL: string;
userInfoURL: string;
constructor() {
}
public ngOnInit() {
this.claimsInfoURL = properties.claimsInformationLink;
this.userInfoURL = properties.userInfoUrl;
}
}

@ -1,13 +1,9 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../../shared/shared.module';
import { SharedModule } from '../../openaireLibrary/shared/shared.module';
import { OpenaireMyClaimsComponent } from './myClaims.component';
import { MyClaimsRoutingModule } from './myClaims-routing.module';
import{ MyClaimsModule} from '../../openaireLibrary/claims/myClaims/myClaims.module';
import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
@NgModule({
imports: [
@ -16,7 +12,7 @@ import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard';
MyClaimsModule
],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
providers:[],
declarations: [
OpenaireMyClaimsComponent
]

@ -0,0 +1,14 @@
import { NgModule } from '@angular/core';
import {RouterModule} from '@angular/router';
import {ContactComponent} from './contact.component';
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: ContactComponent, canActivate: [IsRouteEnabled], canDeactivate: [PreviousRouteRecorder]}
])
]
})
export class ContactRoutingModule { }

@ -0,0 +1,22 @@
<div>
<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-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 #contactUs [sending]="sending" [scrollspy]="true"
[contactForm]="contactForm" (sendEmitter)="send($event)">
<h1 page-title class="uk-margin-auto uk-text-center" uk-scrollspy-class>
Contact us to <br> learn more<span class="uk-text-primary">.</span>
</h1>
</contact-us>
</div>
</div>
</div>
<modal-alert #modal (alertOutput)="goToHome()">
Our team will respond to your submission soon.<br>
Press OK to redirect to OpenAIRE Explore home page.
</modal-alert>

@ -0,0 +1,158 @@
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 {FormBuilder, FormGroup, Validators} from "@angular/forms";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {Subscriber} from "rxjs";
import {properties} from "../../environments/environment";
import {NotificationHandler} from "../openaireLibrary/utils/notification-handler";
import {ContactUsComponent} from "../openaireLibrary/contact-us/contact-us.component";
@Component({
selector: 'contact',
templateUrl: './contact.component.html',
})
export class ContactComponent implements OnInit {
public url: string = null;
public pageTitle: string = "OpenAIRE - Explore | Contact Us";
public description: string = "Contact us to learn more about OpenAIRE Explore";
public sending = true;
public email: Email;
public properties: EnvProperties = properties;
public pageContents = null;
public divContents = null;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Contact us'}];
public contactForm: FormGroup;
@ViewChild('modal') modal;
private subscriptions = [];
@ViewChild('contactUs') contactUsComponent : ContactUsComponent;
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
}
constructor(private route: ActivatedRoute,
private _router: Router,
private _emailService: EmailService,
private _meta: Meta,
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private fb: FormBuilder,
private helper: HelperService) {
}
ngOnInit() {
this._title.setTitle('OpenAIRE - Explore | Contact Us');
this.properties = properties;
this.email = {body: '', subject: '', recipients: []};
this.subscriptions.push( this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription(this.description);
this.reset();
// this.getPageContents();
this.sending = false;
}
private getPageContents() {
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'explore', this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
public send(event) {
HelperFunctions.scroll();
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]),
affiliation: this.fb.control(''),
message: this.fb.control('', Validators.required),
recaptcha: this.fb.control('', Validators.required),
});
if(this.contactUsComponent) {
this.contactUsComponent.resetRecaptcha();
}
}
private sendMail(admins: any) {
this.sending = true;
this.subscriptions.push(this._emailService.contact(this.properties,
Composer.composeEmailForExplore(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 sent failed! 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'");
}
}

@ -0,0 +1,31 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule} from '@angular/router';
import {ContactComponent} from './contact.component';
import {ContactRoutingModule} from "./contact-routing.module";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.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 {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
@NgModule({
imports: [
ContactRoutingModule, CommonModule, RouterModule,
AlertModalModule, HelperModule,
Schema2jsonldModule, SEOServiceModule, ContactUsModule, BreadcrumbsModule, LoadingModule
],
declarations: [
ContactComponent
],
providers: [],
exports: [
ContactComponent
]
})
export class ContactModule { }

@ -3,12 +3,13 @@ import { RouterModule } from '@angular/router';
import { OpenaireDepositComponent } from './deposit.component';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard'
import {properties} from "../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireDepositComponent, canActivate: [IsRouteEnabled], data: {
redirect: '/error'
redirect: properties.errorLink
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -1,4 +1,5 @@
import {Component} from '@angular/core';
import {Component, OnDestroy, OnInit} from '@angular/core';
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
@Component({
selector: 'openaire-deposit',
@ -7,11 +8,17 @@ import {Component} from '@angular/core';
`
})
export class OpenaireDepositComponent {
export class OpenaireDepositComponent implements OnInit, OnDestroy {
constructor() {
constructor(private layoutService: LayoutService) {
}
public ngOnInit() {}
public ngOnInit() {
this.layoutService.setRootClass('deposit');
}
ngOnDestroy() {
this.layoutService.setRootClass(null);
}
}

@ -2,17 +2,12 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard';
import {OpenaireDepositComponent} from "./deposit.component";
import {DepositRoutingModule} from "./deposit-routing.module";
import {DepositFirstPageModule} from "../openaireLibrary/deposit/depositFirstPage.module";
import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service";
import {CommunityService} from "../openaireLibrary/connect/community/community.service";
import {SearchZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service";
@NgModule({
imports: [
@ -25,7 +20,8 @@ import {SearchZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoC
exports: [
OpenaireDepositComponent,
],
providers: [PreviousRouteRecorder, IsRouteEnabled,
ZenodoCommunitiesService, CommunityService, SearchZenodoCommunitiesService]
providers: [
ZenodoCommunitiesService, CommunityService
]
})
export class LibDepositModule { }

@ -3,12 +3,13 @@ import { RouterModule } from '@angular/router';
import { OpenaireSearchDataprovidersToDepositComponent } from './searchDataprovidersToDeposit.component';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard'
import {properties} from "../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchDataprovidersToDepositComponent, canActivate: [IsRouteEnabled], data: {
redirect: '/error'
redirect: properties.errorLink
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -6,19 +6,15 @@ import { OpenaireSearchDataprovidersToDepositComponent } from './searchDataprovi
import {SearchDataprovidersToDepositRoutingModule} from './searchDataprovidersToDeposit-routing.module';
import {SearchDataprovidersToDepositModule} from '../openaireLibrary/deposit/searchDataprovidersToDeposit.module';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard';
import {ZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoCommunities/zenodo-communitiesService.module';
import {SearchZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunitiesService.module';
import {CommunityService} from '../openaireLibrary/connect/community/community.service';
@NgModule({
imports: [
CommonModule, FormsModule,
SearchDataprovidersToDepositModule,
SearchDataprovidersToDepositRoutingModule,
ZenodoCommunitiesServiceModule, SearchZenodoCommunitiesServiceModule
SearchDataprovidersToDepositModule,
ZenodoCommunitiesServiceModule
],
declarations: [
OpenaireSearchDataprovidersToDepositComponent
@ -26,6 +22,6 @@ import {CommunityService} from '../openaireLibrary/connect/community/community.s
exports: [
OpenaireSearchDataprovidersToDepositComponent,
],
providers: [PreviousRouteRecorder, IsRouteEnabled, CommunityService]
providers: [CommunityService]
})
export class LibSearchDataprovidersToDepositModule { }

@ -1,12 +0,0 @@
import { Component } from '@angular/core';
@Component({
selector: 'openaire-error',
template: `
<error></error>
`
})
export class OpenaireErrorPageComponent {
}

@ -0,0 +1,19 @@
import {NgModule} from '@angular/core';
import {RouterModule} from '@angular/router';
import {FundersComponent} from './funders.component';
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
@NgModule({
imports: [
RouterModule.forChild([
{
path: '', component: FundersComponent,
canActivate: [IsRouteEnabled],
canDeactivate: [PreviousRouteRecorder]
}
])
]
})
export class FundersRoutingModule { }

@ -0,0 +1,295 @@
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="pageDescription"></schema2jsonld>
<div class="funders">
<div class="uk-background-muted">
<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-grid uk-grid-large uk-grid-stack uk-flex-middle uk-padding-small" uk-grid>
<div class="uk-width-1-2@m uk-width-1-1 uk-flex uk-flex-column uk-flex-center">
<span class="uk-align-left uk-margin-remove-bottom uk-flex uk-flex-middle">
<span class="custom-coins-dot"></span>
<span uk-scrollspy-class class="uk-text-large funders-title">Funders</span>
</span>
<div style="max-width: 600px;">
<h1 uk-scrollspy-class class="uk-h1 uk-margin-remove-top">
<span>Be an integral part of the open R&I ecosystem<span class="custom-handshake-dot"></span></span>
</h1>
<div uk-scrollspy-class>
Welcome to the Funders page on OpenAIRE Explore. Discover key details about each funder, their commitment to open access, and the impactful research they enable. Our aim? To foster transparency, inspire collaboration.
<!-- Welcome to the Funders' page on OpenAIRE Explore. This dedicated hub spotlights our ever-growing extensive network of funding partners:
{{formatNumber(projectsNumber)}} grants from
{{formatNumber(fundersNumber)}} funders currently linked to
{{formatNumber(researchProductsNumber)}} funded research outputs.
Discover key details about each funder, their commitment to open access, and the impactful research they enable.
Our aim? To foster transparency, inspire collaboration. -->
</div>
<div class="uk-margin-medium-top" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" target="_blank" href="https://www.openaire.eu/funders-how-to-join-guide">
Join Us
</a>
</div>
<div *ngIf="showContentWithNumbers" class="uk-margin-medium-top" uk-scrollspy-class>
<div class="uk-grid uk-grid-divider" uk-grid>
<div class="uk-flex uk-flex-column uk-flex-center">
<span class="uk-h4 uk-text-primary uk-margin-xsmall-bottom">
{{formatNumber(projectsNumber)}}+
</span>
<span class="uk-text-uppercase">
grants
</span>
</div>
<div class="uk-flex uk-flex-column uk-flex-center">
<span class="uk-h4 uk-text-primary uk-margin-xsmall-bottom">
{{formatNumber(fundersNumber)}}
</span>
<span class="uk-text-uppercase">
funders
</span>
</div>
<div class="uk-flex uk-flex-column uk-flex-center">
<span class="uk-h4 uk-text-primary uk-margin-xsmall-bottom">
{{formatNumber(researchProductsNumber)}}+
</span>
<span class="uk-text-uppercase">
funded research outputs
</span>
</div>
</div>
</div>
</div>
</div>
<div class="uk-width-1-2@m uk-width-1-1 uk-text-center" uk-scrollspy-class>
<img src="assets/explore-assets/funders/funders.png" loading="lazy">
</div>
</div>
</div>
</div>
<ng-container *ngIf="showLoading">
<div class="uk-container uk-container-large uk-section">
<loading></loading>
</div>
</ng-container>
<ng-container *ngIf="!showLoading && funders?.length">
<div class="uk-container uk-container-large">
<div id="target" class="uk-section uk-padding-remove-top uk-margin-top" uk-height-match="target: .alias;">
<div>
<div *ngIf="funders" class="uk-padding-small uk-padding-remove-vertical uk-margin-medium-bottom uk-flex uk-flex-wrap uk-flex-middle uk-flex-between">
<div class="uk-flex uk-flex-wrap uk-flex-middle uk-flex-between uk-width-auto@m uk-width-1-1 uk-margin-top">
<div class="uk-width-small uk-margin-medium-right">
<div input
type="select" placeholder="Show" inputClass="border-bottom"
[options]="showOptions" [(value)]="show" (valueChange)="filtering()">
</div>
</div>
<div class="uk-width-small uk-margin-medium-right">
<div input
type="select" placeholder="Sort by" inputClass="border-bottom"
[options]="sortOptions" [(value)]="sortBy" (valueChange)="sortByChanged()">
</div>
</div>
<div class="uk-width-xsmall">
<div input
type="select" placeholder="Results per page" inputClass="border-bottom"
[options]="pageOptions" [(value)]="pageSize" (valueChange)="sizeChanged($event)">
</div>
</div>
</div>
<div class="uk-flex uk-flex-middle uk-width-auto@m uk-width-1-1 uk-margin-top">
<div search-input [searchControl]="keywordControl" searchInputClass="border-bottom" iconPosition="right"
placeholder="Search funder" [disabled]="showLoading" class="uk-width-auto@m uk-width-medium@s uk-width-1-1">
</div>
<div class="uk-visible@m uk-flex uk-flex-middle uk-margin-medium-left">
<a (click)="gridView = true"
class="uk-link-reset custom-view-button" [ngClass]="gridView ? 'active' : ''">
<icon [name]="'apps'" [ratio]="1.5" [type]="'round'" [flex]="true"></icon>
</a>
<a (click)="gridView = false"
class="uk-link-reset custom-view-button uk-margin-xsmall-left" [ngClass]="gridView ? '' : 'active'">
<icon [name]="'view_list'" [ratio]="1.5" [type]="'round'" [flex]="true"></icon>
</a>
</div>
</div>
</div>
</div>
<div class="uk-margin-large-bottom" uk-height-match="target: .name;">
<div *ngIf="!displayedFunders || displayedFunders?.length == 0" class="uk-text-center uk-margin-large-top">
No funders available
</div>
<div class="uk-grid uk-grid-match uk-padding-small" [ngClass]="gridView ? 'uk-child-width-1-2@m uk-child-width-1-3@l' : 'uk-child-width-1-1'"
uk-grid uk-height-match="target: .info;">
<div *ngFor="let funder of displayedFunders.slice((currentPage-1)*pageSize, currentPage*pageSize)">
<!-- funder's card for GRID view -->
<ng-container *ngIf="gridView || isMobile; else elseBlock">
<div class="uk-card uk-card-default uk-card-hover funder-grid">
<!-- OA % -->
<!-- <div class="percentage uk-flex uk-flex-right uk-margin-bottom">-->
<div class="uk-position-top-right uk-padding-small">
<div *ngIf="funder.openAccessResearchProducts && funder.researchProducts" class="uk-text-center">
<div class="uk-flex uk-flex-middle uk-flex-center">
<span class="uk-margin-xsmall-right open-access">
<icon name="open_access" [flex]="true" [ratio]="1"></icon>
</span>
<h6 class="uk-margin-remove">{{funder.openAccessPercentage}}%</h6>
</div>
<span class="uk-h6 uk-text-small">Open Access</span>
</div>
</div>
<div class="uk-card-body">
<!-- funder logo -->
<div class="uk-card-media-top uk-margin-medium-top uk-padding-large uk-padding-remove-vertical uk-flex uk-flex-center uk-flex-middle uk-height-xsmall">
<img *ngIf="funder.logoUrl; else elseBlock" [src]="funder | logoUrl" [alt]="funder.name + ' logo'" class="uk-height-max-xsmall uk-blend-multiply" loading="lazy">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall uk-blend-multiply" loading="lazy">
</ng-template>
</div>
<!-- funder alias -->
<div class="alias uk-text-uppercase uk-text-small uk-margin-top type">
<ng-container *ngIf="funder.alias">
{{funder.alias}}
</ng-container>
</div>
<!-- funder name -->
<div class="name uk-h6 uk-margin-remove multi-line-ellipsis lines-2">
<ng-container *ngIf="funder.name" >
{{funder.name}}
</ng-container>
</div>
<div class="info uk-margin-medium-top">
<!-- Monitor dashboard -->
<div class="monitor-dashboard">
<!-- PUBLIC status -->
<a *ngIf="funder.monitorDashboard && funder.monitorDashboardStatus != 'PRIVATE' && funder.monitorDashboardStatus != 'RESTRICTED'"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
target="_blank" [href]="'https://'+(properties.environment =='beta' || properties.environment =='development'?'beta.':'')+'monitor.openaire.eu/dashboard/'+funder.alias">
<span class="uk-flex uk-flex-middle">
<img src="assets/common-assets/common/Symbol.png" alt="OpenAIRE logo"
class="uk-margin-xsmall-right" style="width: 17px; height: 17px;" loading="lazy">
<span class="monitor-dashboard-link uk-text-uppercase">Monitor Dashboard</span>
</span>
</a>
<!-- RESTRICTED status -->
<span *ngIf="funder.monitorDashboard && funder.monitorDashboardStatus == 'RESTRICTED'"
class="uk-flex uk-flex-middle">
<img src="assets/common-assets/common/Symbol.png" alt="OpenAIRE logo"
class="uk-margin-xsmall-right" style="width: 17px; height: 17px;" loading="lazy">
<span class="monitor-dashboard-link uk-text-uppercase uk-text-bold uk-text-small">Monitor Dashboard</span>
<icon class="uk-margin-xsmall-left" name="closed_access" [flex]="true" [ratio]="1"></icon>
</span>
</div>
<!-- Projects -->
<div>
<a *ngIf="funder.projects"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
[routerLink]="properties.searchLinkToProjects" [queryParams]="{'funder': urlEncodeAndQuote(funder.id)}">
<span class="uk-flex uk-flex-middle">
<span>Projects ({{funder.projects | number}})</span>
</span>
</a>
</div>
<!-- Research products -->
<div>
<a *ngIf="funder.researchProducts"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
[routerLink]="properties.searchLinkToResults" [queryParams]="{'relfunder': urlEncodeAndQuote(funder.id)}">
<span class="uk-flex uk-flex-middle">
<span>Research Products ({{funder.researchProducts | number}})</span>
</span>
</a>
</div>
</div>
</div>
</div>
</ng-container>
<!-- funder's card for LIST view -->
<ng-template #elseBlock>
<div class="uk-card uk-card-default uk-card-hover uk-padding-small funder-list">
<div class="uk-grid uk-grid-divider uk-grid-small" uk-grid>
<div class="uk-width-expand uk-flex uk-flex-middle">
<div class="uk-width-1-6 uk-flex uk-flex-middle uk-flex-center">
<img *ngIf="funder.logoUrl; else elseBlock" [src]="funder | logoUrl" [alt]="funder.name + ' logo'" class="uk-height-max-xsmall uk-blend-multiply" loading="lazy">
<ng-template #elseBlock>
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall uk-blend-multiply" loading="lazy">
</ng-template>
</div>
<div class="uk-width-expand uk-margin-medium-left">
<div class="name uk-h6 uk-text-truncate">
<ng-container *ngIf="funder.name">
{{funder.name}}
</ng-container>
<ng-container *ngIf="funder.alias" >
<span class="uk-text-uppercase">
({{funder.alias}})
</span>
</ng-container>
</div>
<div class="uk-grid uk-grid-divider uk-flex-nowrap" uk-grid>
<div *ngIf="funder.monitorDashboard">
<a *ngIf="funder.monitorDashboard && funder.monitorDashboardStatus != 'PRIVATE' && funder.monitorDashboardStatus != 'RESTRICTED'"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
target="_blank" [href]="'https://'+(properties.environment =='beta' || properties.environment =='development'?'beta.':'')+'monitor.openaire.eu/dashboard/'+funder.alias">
<span class="uk-flex uk-flex-middle">
<img src="assets/common-assets/common/Symbol.png" alt="OpenAIRE logo"
class="uk-margin-xsmall-right" style="width: 17px; height: 17px;" loading="lazy">
<span class="monitor-dashboard-link uk-text-uppercase">Monitor Dashboard</span>
</span>
</a>
<span *ngIf="funder.monitorDashboard && funder.monitorDashboardStatus == 'RESTRICTED'"
class="uk-flex uk-flex-middle">
<img src="assets/common-assets/common/Symbol.png" alt="OpenAIRE logo"
class="uk-margin-xsmall-right" style="width: 17px; height: 17px;" loading="lazy">
<span class="monitor-dashboard-link uk-text-uppercase uk-text-bold uk-text-small">Monitor Dashboard</span>
<icon class="uk-margin-xsmall-left" name="closed_access" [flex]="true" [ratio]="1"></icon>
</span>
</div>
<div>
<a *ngIf="funder.projects"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
[routerLink]="properties.searchLinkToProjects" [queryParams]="{'funder': urlEncodeAndQuote(funder.id)}">
<span class="uk-flex uk-flex-middle">
<span>Projects ({{funder.projects | number}})</span>
</span>
</a>
</div>
<div>
<a *ngIf="funder.researchProducts"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
[routerLink]="properties.searchLinkToResults" [queryParams]="{'relfunder': urlEncodeAndQuote(funder.id)}">
<span class="uk-flex uk-flex-middle">
<span>Research Products ({{funder.researchProducts | number}})</span>
</span>
</a>
</div>
</div>
</div>
</div>
<div class="uk-width-auto uk-flex uk-flex-middle uk-flex-center">
<div *ngIf="funder.openAccessResearchProducts && funder.researchProducts" class="uk-text-center">
<div class="uk-flex uk-flex-middle uk-flex-center">
<span class="uk-margin-xsmall-right open-access">
<icon name="open_access" [flex]="true" [ratio]="1"></icon>
</span>
<h6 class="uk-margin-remove">{{funder.openAccessPercentage}}%</h6>
</div>
<span class="uk-h6 uk-text-small">Open Access</span>
</div>
</div>
</div>
</div>
</ng-template>
</div>
</div>
</div>
<paging-no-load *ngIf="displayedFunders.length > pageSize"
(pageChange)="updateCurrentPage($event)"
[currentPage]="currentPage" [size]="pageSize"
[totalResults]="displayedFunders.length">
</paging-no-load>
</div>
</div>
</ng-container>
</div>

@ -0,0 +1,48 @@
@import (reference) "~src/assets/openaire-theme/less/color.less";
.custom-coins-dot:after {
content: "";
background-image: url("~src/assets/explore-assets/funders/coins.svg");
display: inline-block;
background-size: 100% 100%;
height: 35px;
width: 35px;
margin-right: 10px;
}
.custom-handshake-dot:after {
content: "";
background-image: url("~src/assets/explore-assets/funders/handshake.svg");
display: inline-block;
background-size: 100% 100%;
height: 30px;
width: 30px;
margin-left: 10px;
}
.custom-view-button {
padding: 4px;
background: @light-color;
border: 1px solid @disable-color;
border-radius: 4px;
icon {
color: @disable-color;
}
&.active {
background: transparent linear-gradient(315deg, @primary-light-color 0%, @primary-dark-color 100%) 0% 0% no-repeat padding-box;
icon {
color: @light-color;
}
}
}
.uk-card {
&.funder-grid {
border-bottom: 4px solid fade(@funder-color, 30%);
}
&.funder-list {
border-left: 4px solid fade(@funder-color, 30%);
}
}

@ -0,0 +1,375 @@
import {ChangeDetectorRef, Component, OnInit} from '@angular/core';
import {Router} from '@angular/router';
import {Subscriber, Subscription, zip} from "rxjs";
import {Meta, Title} from "@angular/platform-browser";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {properties} from "../../environments/environment";
import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service';
import {StakeholderService} from '../openaireLibrary/monitor/services/stakeholder.service';
import {Option} from '../openaireLibrary/sharedComponents/input/input.component';
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
import {HelperFunctions} from '../openaireLibrary/utils/HelperFunctions.class';
import {NumberUtils} from '../openaireLibrary/utils/number-utils.class';
import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
import {FormBuilder, FormControl} from '@angular/forms';
import {debounceTime, distinctUntilChanged} from 'rxjs/operators';
import {GroupedRequestsService} from "../openaireLibrary/services/groupedRequests.service";
@Component({
selector: 'funders',
templateUrl: './funders.component.html',
styleUrls: ['funders.component.less']
})
export class FundersComponent implements OnInit {
private subscriptions: Subscription[] = [];
url: string = null;
pageTitle: string = "OpenAIRE - Explore | Funders";
pageDescription: string = "Funders | Be an integral part of the open R&I ecosystem";
properties: EnvProperties = properties;
breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'funders'}];
showLoading: boolean = true;
isMobile: boolean = false;
funders: any[] = [];
displayedFunders: any[] = [];
showOptions: Option[];
sortOptions: Option[];
pageOptions: number[] = [10, 20, 30, 40];
show: string = 'all';
sortBy: string = 'alphAsc';
gridView: boolean = true;
currentPage: number = 1;
pageSize: number = 10;
keywordControl: FormControl;
keyword: string;
fundersNumber: number = 0;
researchProductsNumber: number = 0;
projectsNumber: number = 0;
fundersMap = new Map<string, {
"id": string,
"name": string,
"alias": string,
"researchProducts": number,
"openAccessResearchProducts": number,
"openAccessPercentage": number,
"projects": number,
"monitorDashboard": string,
"monitorDashboardStatus": string,
"logoUrl": string
}>();
staticLogos: Set<string> = new Set<string>([
"arc_________::ARC||Australian Research Council (ARC)||ARC",
"asap________::ASAP||Aligning Science Across Parkinson's||ASAP",
"cihr________::CIHR||Canadian Institutes of Health Research||CIHR",
"euenvagency_::EEA||European Environment Agency||EEA",
"inca________::INCA||Institut National du Cancer||INCa",
"nhmrc_______::NHMRC||National Health and Medical Research Council (NHMRC)||NHMRC",
"nih_________::NIH||National Institutes of Health||NIH",
"nserc_______::NSERC||Natural Sciences and Engineering Research Council of Canada||NSERC",
"nsf_________::NSF||National Science Foundation||NSF",
"sshrc_______::SSHRC||Social Sciences and Humanities Research Council||SSHRC",
"taraexp_____::tara||Tara Expeditions Foundation||TARA",
"ukri________::UKRI||UK Research and Innovation||UKRI",
"wt__________::WT||Wellcome Trust||WT"
]);
constructor(private router: Router,
private meta: Meta,
private title: Title,
private seoService: SEOService,
private piwikService: PiwikService,
private refineFieldResultsService: RefineFieldResultsService,
private stakeholderService: StakeholderService,
private layoutService: LayoutService,
private cdr: ChangeDetectorRef,
private fb: FormBuilder,
private groupedRequestsService: GroupedRequestsService) {
}
ngOnInit() {
this.layoutService.setRootClass('funders');
this.title.setTitle('OpenAIRE - Explore | Funders');
this.properties = properties;
this.subscriptions.push( this.piwikService.trackView(this.properties, this.pageTitle).subscribe());
this.url = this.properties.domain + this.router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
this.updateTitle(this.pageTitle);
this.updateDescription(this.pageDescription);
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
this.isMobile = isMobile;
this.cdr.detectChanges();
}));
this.showOptions = [
{value: 'all', label: 'All funders'},
{value: 'dashboard', label: 'Funders with dashboard'}
];
this.sortOptions = [
{value: 'alphAsc', label: 'Alphabetically Asc. (A-Z)'},
{value: 'alphDsc', label: 'Alphabetically Dsc. (Z-A)'},
{value: 'oaDsc', label: '"Open Access %" Dsc.'}
];
this.getFunders();
this.keywordControl = this.fb.control('');
this.subscriptions.push(this.keywordControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(value => {
this.keyword = value;
this.filtering();
}));
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
}
});
this.layoutService.setRootClass(null);
}
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'");
}
private getFunders() {
this.subscriptions.push(this.groupedRequestsService.funders().subscribe(data => {
let funders = data["funders"];
funders.forEach(queriedFunder => {
let id = queriedFunder.id;
let funder = {
"id": id,
"name": this.removePartAfterCharacters(queriedFunder.name, "||"),
"alias": '',
"researchProducts": +queriedFunder.results,
"openAccessResearchProducts": +queriedFunder.openResults,
"openAccessPercentage": 0,
"projects": +queriedFunder.projects,
"monitorDashboard": '',
"monitorDashboardStatus": '',
"logoUrl": ''
};
if((!funder.researchProducts || funder.researchProducts == 0) && (!funder.projects || funder.projects == 0)) {
return;
}
if(queriedFunder.stakeholder) {
let stakeholder = queriedFunder.stakeholder;
funder.alias = stakeholder.alias;
funder.monitorDashboard = stakeholder.alias;
funder.monitorDashboardStatus = stakeholder.visibility;
funder.logoUrl = (stakeholder.isUpload ? properties.utilsService + "/download/" : "")+ (stakeholder.logoUrl);
}
if(funder.openAccessResearchProducts && funder.researchProducts) {
funder.openAccessPercentage = Math.round((funder.openAccessResearchProducts / funder.researchProducts) * 100);
}
if(!funder.logoUrl && this.staticLogos.has(funder.id)) {
let split = funder.id.split("||");
let shortname = (split && split.length==3) ? funder.id.split("||")[2] : funder.id;
funder.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png";
}
this.fundersMap.set(queriedFunder.id, funder);
});
// convert funders map into an array
this.funders = Array.from(this.fundersMap.values());
// calculate total numbers for intro content
this.fundersNumber = data.count;
this.researchProductsNumber = data.results;
this.projectsNumber = data.projects;
// sort funders
this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
// initialize displayedFunders
this.displayedFunders = this.funders;
this.showLoading = false;
}))
// let refineParams = '&fq=resultbestaccessright%20exact%20%22Open%20Access%22';
// this.subscriptions.push(
// zip(
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties),
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties, refineParams),
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('funder', 'project', this.properties),
// this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL, 'funder')
// ).subscribe((data: any[]) => {
// // storing all needed data to a map
// // 1st call
// let queriedFunders1 = data[0][1][0].values;
// queriedFunders1.forEach(queriedFunder => {
// this.fundersMap.set(queriedFunder.id, {
// "id": queriedFunder.id,
// "name": queriedFunder.name,
// "alias": '',
// "researchProducts": +queriedFunder.number,
// "openAccessResearchProducts": 0,
// "openAccessPercentage": 0,
// "projects": 0,
// "monitorDashboard": '',
// "monitorDashboardStatus": '',
// "logoUrl": ''
// });
// });
//
// // 2nd call
// let queriedFunders2 = data[1][1][0].values;
// queriedFunders2.forEach(queriedFunder => {
// if(this.fundersMap.has(queriedFunder.id)) {
// this.fundersMap.get(queriedFunder.id).openAccessResearchProducts = +queriedFunder.number;
// }
// });
//
// // 3rd call
// let queriedFunders3 = data[2][1][0].values;
// queriedFunders3.forEach(queriedFunder => {
// if(+queriedFunder.number > 1) {
// if (this.fundersMap.has(queriedFunder.id)) {
// this.fundersMap.get(queriedFunder.id).projects = +queriedFunder.number;
// } else {
// this.fundersMap.set(queriedFunder.id, {
// "id": queriedFunder.id,
// "name": queriedFunder.name,
// "alias": '',
// "researchProducts": 0,
// "openAccessResearchProducts": 0,
// "openAccessPercentage": 0,
// "projects": +queriedFunder.number,
// "monitorDashboard": '',
// "monitorDashboardStatus": '',
// "logoUrl": ''
// });
// }
// }
// });
//
// // 4th call
// let queriedFunders4 = data[3];
// queriedFunders4.forEach(queriedFunder => {
// let id = queriedFunder.index_id + '||' + queriedFunder.index_name + '||' + queriedFunder.index_shortName;
// if(this.fundersMap.has(id) && (
// !this.fundersMap.get(id).monitorDashboardStatus
// ||
// (this.fundersMap.get(id).monitorDashboardStatus == "RESTRICTED" && queriedFunder.visibility == "PUBLIC")
// ||
// (this.fundersMap.get(id).monitorDashboardStatus == "PRIVATE" && (queriedFunder.visibility == "RESTRICTED" || queriedFunder.visibility == "PUBLIC")))) {
// this.fundersMap.get(id).alias = queriedFunder.alias;
// this.fundersMap.get(id).monitorDashboard = queriedFunder.alias;
// this.fundersMap.get(id).monitorDashboardStatus = queriedFunder.visibility;
// this.fundersMap.get(id).logoUrl = (queriedFunder.isUpload ? properties.utilsService + "/download/" : "")+ (queriedFunder.logoUrl);
// }
// });
// this.fundersMap.forEach((value) => {
// if(value.openAccessResearchProducts > 0) {
// value.openAccessPercentage = Math.round((value.openAccessResearchProducts / value.researchProducts) * 100);
// }
// if(!value.logoUrl && this.staticLogos.has(value.id)) {
// let split = value.id.split("||");
// let shortname = (split && split.length==3) ? value.id.split("||")[2] : value.id;
// value.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png";
// }
// });
// // convert funders map into an array
// this.funders = Array.from(this.fundersMap.values());
// // calculate total numbers for intro content
// this.calculateNumbers();
// // sort funders
// this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
// // initialize displayedFunders
// this.displayedFunders = this.funders;
// console.log(this.funders);
// this.showLoading = false;
// })
// );
}
private calculateSum(array, property) {
let sum = 0;
array.forEach(element => {
sum += element[property];
});
return sum;
}
private calculateNumbers() {
this.fundersNumber = this.funders.length;
this.researchProductsNumber = this.calculateSum(this.funders, 'researchProducts');
this.projectsNumber = this.calculateSum(this.funders, 'projects');
}
get showContentWithNumbers() {
return this.fundersNumber && this.researchProductsNumber && this.projectsNumber;
}
formatNumber(num: number | string) {
let formatted = NumberUtils.roundNumber(+num);
return formatted.number + formatted.size;
}
urlEncodeAndQuote(str: string): string {
return StringUtils.quote(StringUtils.URIEncode(str));
}
sortByChanged() {
switch(this.sortBy) {
case 'alphAsc':
this.funders = this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
break;
case 'alphDsc':
this.funders = this.funders.sort((a, b) => b['name'].localeCompare(a['name']));
break;
case 'oaDsc':
this.funders = this.funders.sort((a, b) => b['openAccessPercentage'] - a['openAccessPercentage']);
break;
}
this.filtering();
}
sizeChanged($event) {
this.pageSize = $event;
this.currentPage = 1;
}
filtering() {
let displayedFunders = this.funders;
if(!this.keyword){
this.keyword = '';
}
if(this.funders.length) {
displayedFunders = displayedFunders.filter(item => (item['name'] && item['name'].toLowerCase().includes(this.keyword.toLowerCase())) || (item['alias'] && item['alias'].toLowerCase().includes(this.keyword.toLowerCase())));
}
if(this.show == 'dashboard') {
displayedFunders = displayedFunders.filter(funder => funder.monitorDashboard && funder.monitorDashboard?.length > 0 && funder.monitorDashboardStatus != 'PRIVATE');
}
this.displayedFunders = displayedFunders;
this.currentPage = 1;
}
public updateCurrentPage($event) {
this.currentPage = $event.value;
HelperFunctions.scrollToId('target');
}
private removePartAfterCharacters(field, characters):string {
if(field && field.indexOf(characters) !=-1){
return field.split(characters)[0];
}
return field;
}
}

@ -0,0 +1,44 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {RouterModule} from '@angular/router';
import {FundersComponent} from './funders.component';
import {FundersRoutingModule} from "./funders-routing.module";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
import {RefineFieldResultsServiceModule} from '../openaireLibrary/services/refineFieldResultsService.module';
import {LogoUrlPipeModule} from '../openaireLibrary/utils/pipes/logoUrlPipe.module';
import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
import {IconsService} from '../openaireLibrary/utils/icons/icons.service';
import {open_access} from '../openaireLibrary/utils/icons/icons';
import {closed_access} from '../openaireLibrary/utils/icons/icons';
import {InputModule} from '../openaireLibrary/sharedComponents/input/input.module';
import {PagingModule} from '../openaireLibrary/utils/paging.module';
import {SearchInputModule} from '../openaireLibrary/sharedComponents/search-input/search-input.module';
import {GroupedRequestsServiceModule} from "../openaireLibrary/services/groupedRequestsService.module";
@NgModule({
imports: [
FundersRoutingModule, CommonModule, RouterModule, AlertModalModule,
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, LoadingModule,
RefineFieldResultsServiceModule, LogoUrlPipeModule, IconsModule, InputModule,
PagingModule, SearchInputModule, GroupedRequestsServiceModule
],
declarations: [
FundersComponent
],
providers: [],
exports: [
FundersComponent
]
})
export class FundersModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([open_access, closed_access]);
}
}

@ -1,226 +1,318 @@
<ng-template #_logos let-logo="logo" let-class="class">
<div *ngIf="logo" [class]="'uk-flex uk-flex-middle uk-flex-center uk-padding-remove-horizontal '+class">
<div class="">
<img src="assets/ExploreLogos/{{logo}}" alt="{{logo}} logo" loading="lazy" width="112px" height="44px">
<div *ngIf="logo" [class]="'uk-margin-top uk-flex uk-flex-middle uk-flex-center uk-padding-remove-horizontal '+class">
<div class="">
<!-- <img src="assets/ExploreLogos/grouped/{{logo}}" alt="{{logo}} logo" loading="lazy" width="112px" height="44px">-->
<img src="assets/ExploreLogos/{{logo}}" alt="{{logo}} logo" loading="lazy" width="100%" height="auto">
</div>
</div>
</div>
</ng-template>
<div class="image-front-topbar mainPageSearchForm">
<div class="uk-section">
<div class="uk-container">
<div class="search_box_bg uk-flex uk-flex-center">
<div>
<form class="uk-margin">
<div class="uk-grid uk-margin-small-left">
<div class="uk-margin-small-top uk-padding-remove-left">
<entities-selection [simpleView]="true" currentEntity="all" [selectedEntity]="selectedEntity"
[properties]="properties" [onChangeNavigate]="false"
(selectionChange)="entityChanged($event)"
></entities-selection>
</div>
<div class=" uk-padding-remove-left uk-margin-small-top">
<div class="uk-inline">
<a *ngIf="keyword.length > 0" class="uk-form-icon uk-form-icon-flip" (click)="keyword = ''"
uk-icon="icon: close"></a>
<input type="text" class="uk-input uk-width-xlarge@l uk-width-large@m uk-width-medium"
placeholder="Search in OpenAIRE for scholarly works"
[(ngModel)]="keyword"
name="keyword">
</div>
<div class=" quickSelectionsBox uk-width-xlarge@l uk-width-large@m uk-width-medium">
<quick-selections *ngIf="selectedEntity == 'result'" [resultTypes]="resultTypes"
[quickFilter]="resultsQuickFilter"
[properties]="properties">
</quick-selections>
</div>
</div>
<div class="uk-padding-remove-left uk-margin-small-top">
<button (click)="goTo(true)" type="submit"
class="uk-button portal-button uk-text-bold uk-padding uk-padding-remove-vertical uk-margin-small-left">
Search
</button>
<div class="uk-margin-small-top uk-margin-left">
<!-- (click)="goTo(false)"-->
<a *ngIf="selectedEntity!='all'" (click)="goTo(false)" class="portal-link">Advanced Search</a>
<a *ngIf="selectedEntity=='all'" class="portal-link ">Advanced Search</a></div>
<div *ngIf="selectedEntity=='all'" uk-dropdown class="uk-dropdown default-dropdown">
<ul class="uk-list uk-margin-remove-bottom">
<li *ngIf="showSoftware || showPublications || showOrp || showDatasets"><a
[routerLink]="properties.searchLinkToAdvancedResults"
[queryParams]="{qf:true, q: keyword, op: 'and'}"
>Research
outcomes</a></li>
<li *ngIf="showProjects"><a
[routerLink]="properties.searchLinkToAdvancedProjects"
[queryParams]="{q: keyword, op: 'and'}">
Projects</a></li>
<li *ngIf="showDataProviders"><a
[routerLink]="properties.searchLinkToAdvancedDataProviders"
[queryParams]="{q: keyword, op: 'and'}">
Content providers</a></li>
<li *ngIf="showOrganizations"><a
[routerLink]="properties.searchLinkToAdvancedOrganizations"
[queryParams]="{q: keyword, op: 'and'}">
Organizations</a></li>
</ul>
<div>
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden">
<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@m uk-margin-large-bottom">
<h1 class="uk-h2 uk-width-1-2@m" uk-scrollspy-class>
Discover open linked research<span class="uk-text-primary">.</span>
</h1>
<numbers #numbersComponent [defaultInit]="false" (results)="numbers = $event"></numbers>
<!-- [class.uk-invisible]="disableSelect" -->
<div class="uk-margin-medium-top" style="max-width: 600px;" uk-scrollspy-class>
<div class="uk-flex uk-flex-right uk-text-small">
<a [routerLink]="properties.searchLinkToAdvancedResults" class="uk-margin-small-bottom">
Advanced search
</a>
</div>
<!-- <advanced-search-input #advanced (searchEmitter)="goTo()">-->
<!-- <entities-selection [simpleView]="true" currentEntity="all" [selectedEntity]="selectedEntity"
(selectionChange)="entityChanged($event);advanced.focusNext(input, $event)" (disableSelectEmitter)="disableSelectChange($event)"
[onChangeNavigate]="false" class="uk-width-2-5"></entities-selection> -->
<!-- <div class="uk-width-expand" input #input placeholder="Search in Explore" [searchable]="true" [hint]="'What are you looking for?'" [(value)]="keyword"></div>-->
<!-- </advanced-search-input>-->
<div search-input [(value)]="keyword"
[placeholder]="'Search'+(portalName ? (' in '+portalName) : '')" (searchEmitter)="goTo()"
[searchInputClass]="'inner background'"></div>
<!-- <div *ngIf="selectedEntity === 'result' && input.focused" (click)="$event.stopPropagation();advanced.focusNext(input, $event)" class="uk-dropdown uk-display-block uk-margin-small-top uk-width-auto">
<div class="uk-padding-small">
<quick-selections [resultTypes]="resultTypes" [quickFilter]="resultsQuickFilter"></quick-selections>
</div>
</div> -->
</div>
<div class="uk-padding-small uk-margin-small-top">
<div class="uk-text-meta">
Try browsing by:
</div>
<div class="link-actions uk-flex uk-flex-column uk-flex-top uk-margin-small-top">
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text uk-margin-small-bottom"
routerLinkActive="router-link-active" routerLink="/sdgs">
<span class="uk-flex uk-flex-middle">
<img src="assets/common-assets/sdg/sdg-dot-img.svg" alt="SDGs logo" loading="lazy" width="17px" height="17px">
<span class="uk-margin-small-left">Sustainable Development Goals (SDG<span
class="uk-text-lowercase">s</span>)</span>
</span>
</a>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/fields-of-science">
<span class="uk-flex uk-flex-middle">
<img src="assets/common-assets/fos/fos-icon.svg" alt="FOS logo" loading="lazy" width="17px" height="8px">
<span class="uk-margin-small-left">Fields of Science (FoS)</span>
</span>
</a>
</div>
</div>
</div>
<div class="uk-visible@m uk-width-expand" uk-scrollspy-class>
<div class="uk-position-relative">
<img src="assets/explore-assets/home/explore.jpg" alt="researchers" uk-parallax="y: 500" loading="lazy">
<img class="uk-position-bottom-left" src="assets/explore-assets/home/mask.svg" alt="search" loading="lazy">
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="uk-margin-medium">
<div class="uk-container uk-container-large explore-numbers uk-margin-medium-bottom">
<div class="search_box_bg uk-grid uk-grid-stack" uk-grid="">
<div class="uk-width-1-1@m uk-first-column">
<div class="uk-grid uk-margin uk-margin-bottom uk-width-xxlarge uk-margin-auto">
<div class="uk-width-expand uk-padding-remove">
<div uk-slider="autoplay: true; autoplay-interval: 2500" class="uk-margin-top">
<div class="uk-position-relative">
<div class="uk-section uk-section-large uk-padding-remove-top">
<div class="uk-container uk-container-large uk-width-2-3">
<div uk-slider="autoplay: false; autoplay-interval: 2500" class="">
<div class="uk-position-relative">
<div class="uk-slider-container">
<ul class="uk-slider-items" uk-height-match="target: > li > div > div > .logo1; row: false;">
<ng-container *ngFor="let type of getKeys(logos)">
<li *ngFor="let range of createRange(logos[type].length) let j=index"
class="uk-width-1-1 home-logo">
<h1 class="uk-text-center uk-margin-bottom portal-color uk-h3">
<span *ngIf="type=='publication' && showPublications && numbers?.publicationsSize">
<span
class="uk-text-bold">{{numbers.publicationsSize.number|number}}{{numbers.publicationsSize.size}}
publications</span><span> deduplicated</span>
</span>
<span
*ngIf="type=='dataset' && showDatasets && (numbers?.datasetsLinkedSize || numbers?.datasetsSize)">
<span *ngIf="numbers?.datasetsLinkedSize">
<span
class="uk-text-bold">{{numbers.datasetsLinkedSize.number|number}}{{numbers.datasetsLinkedSize.size}}
datasets</span> interlinked with publications</span>
<span *ngIf="numbers?.datasetsSize && !numbers?.datasetsLinkedSize"
class="uk-text-bold">{{numbers.datasetsSize.number|number}}{{numbers.datasetsSize.size}}
research data</span>
</span>
<span
*ngIf="type=='software' && showSoftware && (numbers?.softwareSize || numbers?.softwareLinkedSize)">
<span *ngIf="numbers?.softwareLinkedSize">
<span
class="uk-text-bol ">{{numbers.softwareLinkedSize.number|number}}{{numbers.softwareLinkedSize.size}}
research
software</span> interlinked with publications</span>
<span *ngIf="numbers?.softwareSize && !numbers?.softwareLinkedSize"
class="uk-text-bold">{{numbers.softwareSize.number|number}}{{numbers.softwareSize.size}}
research software</span>
</span>
<span *ngIf="type=='persistent'">
<span>Persistent identifiers and registries</span>
</span>
<span *ngIf="type=='funder' && showProjects && numbers?.fundersSize && numbers?.projectsSize">
<span
class="uk-text-bold">{{numbers.fundersSize.number|number}}{{numbers.fundersSize.size}}
funders</span><span> and</span>
<span
class="uk-text-bold"> {{numbers.projectsSize.number|number}}{{numbers.projectsSize.size}}
funded grants</span>
</span>
<ul class="uk-slider-items" uk-height-match="target: > li > div > div > .logo1; row: false;">
<ng-container *ngFor="let type of getKeys(logos)">
<li *ngFor="let range of createRange(logos[type].length) let j=index"
class="uk-width-1-1 home-logo">
<h1 class="uk-text-center uk-margin-bottom uk-text-primary uk-h4">
<span *ngIf="type=='publication' && numbersComponent.showPublications && numbers?.publicationsSize">
<span
class="uk-text-bold">{{numbers.publicationsSize.number|number}}{{numbers.publicationsSize.size}}
{{openaireEntities.PUBLICATIONS}}</span><span> deduplicated</span>
</span>
<span
*ngIf="type=='dataset' && numbersComponent.showDatasets && (numbers?.datasetsLinkedSize || numbers?.datasetsSize)">
<span *ngIf="numbers?.datasetsLinkedSize">
<span
class="uk-text-bold">{{numbers.datasetsLinkedSize.number|number}}{{numbers.datasetsLinkedSize.size}}
datasets</span> interlinked with publications</span>
<span *ngIf="numbers?.datasetsSize && !numbers?.datasetsLinkedSize"
class="uk-text-bold">{{numbers.datasetsSize.number|number}}{{numbers.datasetsSize.size}}
{{openaireEntities.DATASETS}}</span>
</span>
<span
*ngIf="type=='software' && numbersComponent.showSoftware && (numbers?.softwareSize || numbers?.softwareLinkedSize)">
<span *ngIf="numbers?.softwareLinkedSize">
<span
class="uk-text-bol ">{{numbers.softwareLinkedSize.number|number}}{{numbers.softwareLinkedSize.size}}
{{openaireEntities.SOFTWARE}}</span> interlinked with publications</span>
<span *ngIf="numbers?.softwareSize && !numbers?.softwareLinkedSize"
class="uk-text-bold">{{numbers.softwareSize.number|number}}{{numbers.softwareSize.size}}
{{openaireEntities.SOFTWARE}}</span>
</span>
<span *ngIf="type=='persistent'">
<span>Persistent identifiers and registries</span>
</span>
<span *ngIf="type=='funder' && numbersComponent.showProjects && numbers?.mergedFundersSize && numbers?.projectsSize">
<span
class="uk-text-bold">{{numbers.mergedFundersSize.number|number}}{{numbers.mergedFundersSize.size}}
funders</span><span> and</span>
<span
class="uk-text-bold"> {{numbers.projectsSize.number|number}}{{numbers.projectsSize.size}}
funded grants</span>
</span>
</h1>
<div
class="uk-grid-small uk-child-width-1-6 uk-text-center grid uk-flex uk-flex-center"
uk-grid uk-height-match="target: > div > .logo2; row: false;">
<div
*ngFor="let logo of logos[type][j].slice(0,ceil(logos[type][j].length/2)); let i=index">
<ng-container
*ngTemplateOutlet="_logos; context: { logo: logo, class: 'logo1 '}"></ng-container>
<ng-container
*ngTemplateOutlet="_logos; context: { logo: logos[type][j][ceil(logos[type][j].length/2)+i], class: 'uk-margin-top logo2 '}"></ng-container>
</div>
</div>
</li>
</ng-container>
</ul>
</h1>
<div class="uk-text-center uk-flex uk-flex-center uk-margin-medium-left uk-margin-medium-right">
<ng-container *ngTemplateOutlet="_logos; context: { logo: logos[type][j], class: ' '}"></ng-container>
<!-- <div-->
<!-- class="uk-grid-small uk-child-width-1-6 uk-text-center grid uk-flex uk-flex-center"-->
<!-- uk-grid uk-height-match="target: > div > .logo2; row: false;">-->
<!-- <div-->
<!-- *ngFor="let logo of logos[type][j].slice(0,ceil(logos[type][j].length/2)); let i=index">-->
<!-- <ng-container-->
<!-- *ngTemplateOutlet="_logos; context: { logo: logo, class: 'logo1 '}"></ng-container>-->
<!-- <ng-container-->
<!-- *ngTemplateOutlet="_logos; context: { logo: logos[type][j][ceil(logos[type][j].length/2)+i], class: 'uk-margin-top logo2 '}"></ng-container>-->
<!-- </div>-->
</div>
</li>
</ng-container>
</ul>
</div>
<div class="uk-hidden@s">
<a class="uk-position-center-left uk-position-small" href="#" uk-slidenav-previous
uk-slider-item="previous"><span class="visually-hidden">prev</span></a>
<a class="uk-position-center-right uk-position-small" href="#" uk-slidenav-next
uk-slider-item="next"><span class="visually-hidden">next</span></a>
</div>
<a class="uk-position-center-left-out" uk-slider-item="previous"><span
uk-icon="icon: chevron-left; ratio: 2"></span></a>
<a class="uk-position-center-right-out" uk-slider-item="next"><span
uk-icon="icon: chevron-right; ratio: 2"></span></a>
<div class="uk-visible@s">
<a class="uk-position-center-left-out uk-position-small" href="#" uk-slidenav-previous
uk-slider-item="previous"><span class="visually-hidden">prev</span></a>
<a class="uk-position-center-right-out uk-position-small" href="#" uk-slidenav-next
uk-slider-item="next"><span class="visually-hidden">next</span></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
[texts]="pageContents['top']"></helper>
</div>
</div>
</div>
<div *ngIf="pageContents && pageContents['right'] && pageContents['right'].length > 0"
class="uk-section graph-background">
<div class="uk-container">
<div class="uk-flex uk-flex-top uk-child-width-1-1 uk-child-width-1-2@m" uk-grid>
<div class="uk-flex-last@m">
<div [class.lines-10]="!readMore" class="uk-margin-bottom multi-line-ellipsis">
<helper [texts]="pageContents['right']"></helper>
</div>
<div *ngIf="!readMore" class="uk-text-center clickable" (click)="readMore = true">
<span>Read more<span class="space" uk-icon="chevron-down"></span></span>
<div class="uk-section uk-section-secondary explore-dark-logo-background">
<div class="uk-container uk-container-large uk-margin-large-bottom">
<div class="uk-width-1-1 uk-margin-medium-bottom">
<h2 class="uk-h1 uk-margin-large-top">Share your research<span class="uk-text-primary">.</span></h2>
</div>
<slider-container [total]="2" [period]="8000" [infinite]="true" [navigation]="'progress'">
<slider-column type="slider">
<slider-item type="static">
<img class="uk-position-center uk-position-z-index" src="assets/explore-assets/home/tablet.png"
alt="ipad" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="0">
<img src="assets/explore-assets/home/1.png" alt="Deposit search" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="0.5">
<img src="assets/explore-assets/home/2.png" alt="Deposit in OpenAIRE or Zenodo" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="1">
<img src="assets/explore-assets/home/3.png" alt="Search links" loading="lazy">
</slider-item>
<slider-item type="slide" [start]="1.5">
<img src="assets/explore-assets/home/4.png" alt="link" loading="lazy">
</slider-item>
</slider-column>
<slider-column type="nav" class="slider-nav">
<slider-nav-item [start]="0">
<h6>
<i class="uk-text-primary">Deposit</i> your research<span class="uk-text-primary">.</span>
</h6>
<div class="uk-margin-bottom">
Whether its publications, data or software,
select an OpenAIRE compatible repository and
share using community standards. Alternatively
use Zenodo, a catch-all repository hosted by CERN.
All results will be indexed, discoverable and accessible
via EXPLORE.
</div>
<div class="uk-margin-top">
<a class="uk-button uk-button-text uk-text-primary" routerLink="/participate/deposit/learn-how">Start
Deposit</a>
</div>
</slider-nav-item>
<slider-nav-item [start]="1">
<h6>
<i class="uk-text-primary">Link</i> your work<span class="uk-text-primary">.</span>
</h6>
<div class="uk-margin-bottom">
Connect all your research. If you can't find your research
results in OpenAIRE, don't worry! Use our Link service,
that reaches out to many external sources via APIs, and
claim them to your Grant or ORCID. Use the service to provide
meaningful links between publications-datasets-software.
</div>
<div class="uk-margin-top">
<a class="uk-button uk-button-text uk-text-primary" routerLink="/participate/claim">Start Linking</a>
</div>
</slider-nav-item>
</slider-column>
</slider-container>
</div>
<div *ngIf="readMore" class="uk-text-center clickable" (click)="readMore = false">
<span>Read less<span class="space" uk-icon="chevron-up"></span></span>
</div>
<!-- Not yet! -->
<!-- <div class="uk-section">
<div class="uk-container uk-container-large">
<h2 class="uk-h1 uk-text-center">
New sources in OpenAIRE<span class="uk-text-primary">.</span>
</h2>
<div class="cards-on-slider">
TODO: Repositories content
</div>
</div>
</div>
<div class="uk-flex uk-flex-bottom">
<div class="uk-width-1-3 uk-width-1-2@m">
<img src="assets/explore-assets/graph.png" alt="graph image" loading="lazy">
</div> -->
<div class="uk-background-muted">
<div class="uk-position-relative">
<div class="uk-section uk-section-large">
<div class="uk-container">
<div class="uk-grid uk-child-width-1-2@m" uk-grid>
<div>
<div style="max-width: 550px;">
<h2>Linked Open Research.</h2>
<div class="">
EXPLORE is built on the <a href="https://graph.openaire.eu/" target="_blank"
class="graph">OpenAIRE Graph</a>, one of the largest
open scholarly record collections worldwide. Conceived as a public and
transparent good, populated out of data sources trusted by scientists, the
OpenAIRE Graph brings discovery, monitoring, and assessment of science
back in the hands of the scientific community.
</div>
</div>
</div>
<div></div>
<img class="uk-visible@m uk-height-1-1 uk-position-top-right"
src="assets/common-assets/common/graph-nodes.svg" alt="Graph nodes" loading="lazy">
</div>
</div>
</div>
</div>
<div class="uk-padding uk-width-1-2">
<img src="assets/common-assets/logo-large-graph.png" alt="graph image" loading="lazy">
<div class="uk-section uk-padding-remove-top">
<div class="uk-container">
<div class="uk-width-1-2@m uk-margin-auto uk-margin-small-top uk-text-center" style="max-width: 600px;">
<div>
Within a constantly emerging scholarly communication environment, the OpenAIRE Graph is a moving
target, continuously integrating new sources, new types or research objects, and embedding
access measures. We therefore welcome the community to work with us to improve all its aspects:
its <span class="uk-text-bold">coverage</span> (geographic and thematic), <span
class="uk-text-bold">quality</span> (disambiguation and semantics) and <span
class="uk-text-bold">access</span> (APIs).
</div>
<div class="uk-margin-top">
Find information about the OpenAIRE Graph, how to test it and contribute to improving it.
</div>
<div class="uk-margin-top">
<a href="https://www.openaire.eu/blogs/the-openaire-research-graph" target="_blank"
class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text">
Learn more. Contribute
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div *ngIf="pageContents && pageContents['right'] && pageContents['right'].length > 0"
class="graph-background-bottom uk-section uk-padding-remove-vertical uk-background-cover"></div>
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
[texts]="pageContents['bottom']"></helper>
<div class="uk-section uk-padding-remove-bottom">
<h3 class="uk-text-center uk-margin-medium-bottom">Our growing <span class="uk-text-bold">Community</span></h3>
<numbers #numbersComponent [defaultInit]="false" backgroundClass="numbers-background"
(results)="numbers = $event"></numbers>
</div>
<div class="uk-section uk-padding-large uk-grid uk-child-width-1-2@m uk-child-width-1-1@s uk-margin-large-top uk-margin-large-bottom">
<div class="uk-flex uk-flex-middle uk-flex-center">
<h3 class="uk-text-center uk-margin-medium-bottom">Start browsing by subject</h3>
</div>
<div>
<div class="uk-text-center uk-padding-large uk-padding-remove-vertical ">
<span *ngFor="let subject of specialSubjects " class=" uk-text-capitalize uk-link-reset uk-button uk-button-default uk-button-secondary uk-margin-small-right uk-margin-small-bottom">
<a [routerLink]=" properties.searchLinkToAdvancedResults"
[queryParams]="getSubjectParameter(subject.value) ">{{subject.label}}</a></span>
<div class="uk-section uk-section-large">
<div class="uk-container uk-container-large">
<h2 class="uk-h5 uk-margin-remove uk-text-primary">
Did you know that
</h2>
<h2 class="uk-heading-large uk-margin-large-bottom uk-margin-remove-top">
you may
</h2>
<div class="uk-container">
<div class="uk-grid uk-child-width-1-2@l uk-child-width-1-1 uk-grid-large" uk-grid
uk-height-match=".link-title">
<div>
<div class="uk-padding-small uk-padding-remove-horizontal custom-link">
<a href="https://provide.openaire.eu/home" target="_blank"
class="uk-button uk-button-text uk-text-left uk-text-large">
<span class="link-title">have your repository, Journal or CRIS system indexed in EXPLORE and take advantage of services for enriching metadata and counting usage?</span>
</a>
</div>
</div>
<div>
<div class="uk-padding-small uk-padding-remove-horizontal custom-link">
<a href="https://canada.explore.openaire.eu/" target="_blank"
class="uk-button uk-button-text uk-text-left uk-text-large">
<span class="link-title">use EXPLORE as an application platform as a service (aPaaS) and set up a national portal for Open Science, such as Canada.EXPLORE?</span>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<helper *ngIf="pageContents && pageContents['left'] && pageContents['left'].length > 0"
[texts]="pageContents['left']"></helper>
<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 portal="explore" [properties]="properties"></other-portals>
</div>
<div #contact class="uk-section">
<div class="uk-container uk-container-large uk-margin-large-bottom uk-text-center">
<h3 class="uk-h2 uk-margin-remove">
Need more information?
</h3>
<h4 class="uk-h4 uk-margin-small-top uk-margin-medium-bottom">
Get in touch and let us help you<span class="uk-text-primary">.</span>
</h4>
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-top uk-margin-medium-bottom"
routerLink="/contact-us">Contact us</a>
</div>
</div>
</div>

@ -0,0 +1,58 @@
@import (reference) "~src/assets/openaire-theme/less/_import-variables";
@trello-color: #0076BA;
.home-background {
background-color: @global-inverse-color;
}
.link-actions img {
width: 17px;
}
.home-logo {
img {
-webkit-filter: grayscale(1);
filter: grayscale(1);
transition-duration: 0.3s;
}
&:hover img {
-webkit-filter: grayscale(0);
filter: grayscale(0);
transition-duration: 0.3s;
}
}
.custom-link {
border-bottom: @global-border-width solid @global-border;
a {
text-transform: none;
.link-title {
color: @global-emphasis-color;
}
&:hover .link-title {
color: @global-secondary-background;
}
}
}
.slider-image {
min-width: 550px;
}
@media only screen and (min-width: @breakpoint-large) {
.explore-dark-logo-background {
background-image: url("~src/assets/explore-assets/home/explore-dark-logo.svg");
background-repeat: no-repeat;
background-position: -5% 102%;
background-size: 35%;
}
.slider-nav {
max-width: 650px;
}
}

@ -1,137 +1,87 @@
import {Component, ViewChild} from '@angular/core';
import {Subscription} from 'rxjs';
import {ActivatedRoute, Router} from '@angular/router';
import {Location} from '@angular/common';
import {
AfterViewInit,
ChangeDetectorRef,
Component,
ElementRef,
OnDestroy,
OnInit,
QueryList,
ViewChild,
ViewChildren
} from '@angular/core';
import {Subscriber} from 'rxjs';
import {Router} from '@angular/router';
import {Meta, Title} from '@angular/platform-browser';
import {ConfigurationService} from '../openaireLibrary/utils/configuration/configuration.service';
import {SearchDataprovidersService} from '../openaireLibrary/services/searchDataproviders.service';
import {SearchProjectsService} from '../openaireLibrary/services/searchProjects.service';
import {SearchOrganizationsService} from '../openaireLibrary/services/searchOrganizations.service';
import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service';
import {SearchFields} from '../openaireLibrary/utils/properties/searchFields';
import {OpenaireEntities, SearchFields} from '../openaireLibrary/utils/properties/searchFields';
import {RouterHelper} from '../openaireLibrary/utils/routerHelper.class';
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
import {SEOService} from '../openaireLibrary/sharedComponents/SEO/SEO.service';
import {SearchResearchResultsService} from "../openaireLibrary/services/searchResearchResults.service";
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {Filter} from "../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class";
import {properties} from "../../environments/environment";
import {Numbers, NumbersComponent} from "../openaireLibrary/sharedComponents/numbers/numbers.component";
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
@Component({
selector: 'home',
templateUrl: 'home.component.html',
styleUrls: ['home.component.less']
})
export class HomeComponent {
export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
// MAX 12 logos in every slide
public logos = {
"publication": [
[
"logo-pubmed.png",
"logo-arxiv.png",
"logo-base.png",
"logo-scielo.png",
"logo-la-referencia.png",
"logo-soar.png",
"logo-repec.png",
"logo-core.png",
"logo-zenodo.png",
"logo-narcis.png"
"publications.png"
],
[
"logo-crossref.png",
"logo-unpaywall.png",
"logo-elsevier.png",
"logo-spring-nature.png",
"logo-frontiers.png",
"logo-opencitations.png",
"logo-doaj.png",
"logo-microsoft.png",
"logo-plos.png",
"logo-f1000.png",
"logo-copernicus.png"
"publications2.png"
]
],
"software": [
[
"logo-software-heritage.png",
"logo-github.png",
"logo-doecode.png",
"logo-bitbucket.png",
"logo-elixir-bio-tools.png",
"logo-google-code.png",
"logo-sourceforge.png",
"logo-zenodo.png"
"software.png"
]
],
"dataset": [
[
"logo-scholexplorer.png",
"logo-zenodo.png",
"logo-datacite.png",
"logo-pangea.png",
"logo-figshare.png",
"logo-protocols.png",
"logo-opentrials.png",
"logo-kaggle.png",
"logo-reactome.png",
"logo-easy.png",
"logo-dryad.png"
"datasets.png"
]
],
//"other": [],
"persistent": [
[
"logo-re3data.png",
"logo-orcid.png",
"logo-opendoar.png",
"logo-grid.png"
"pids.png"
]
],
"funder": [
[
"logo-european-commision.png",
"logo-nsf.png",
"logo-nhmrc.png",
"logo-sfi.png",
"logo-nwo.png",
"logo-welcome-trust.png",
"logo-fct.png",
"logo-gsrt.png",
"logo-fnsnf.png"
"funders.png"
]
]
};
public portalName: string = "";
public pageTitle = "OpenAIRE";
public keyword: string = "";
public searchFields: SearchFields = new SearchFields();
public errorCodes: ErrorCodes = new ErrorCodes();
public routerHelper: RouterHelper = new RouterHelper();
public numbers: Numbers;
showPublications: boolean = false;
showDatasets: boolean = false;
showSoftware: boolean = false;
showOrp: boolean = false;
showProjects: boolean = false;
showDataProviders: boolean = false;
showOrganizations: boolean = false;
properties: EnvProperties = properties;
public numbers: Numbers = {};
public properties: EnvProperties = properties;
public openaireEntities = OpenaireEntities;
public readMore: boolean = false;
subs: Subscription[] = [];
resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = {
filter: null,
selected: true,
filterId: "resultbestaccessright",
value: "Open Access"
};
@ViewChild('contact') contact: ElementRef;
subscriptions: any[] = [];
@ViewChildren('scrolling_element') elements: QueryList<ElementRef>;
resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = null;//{
// filter: null,
// selected: true,
// filterId: "resultbestaccessright",
// value: "Open Access"
// };
selectedEntity = "all";
selectedEntitySimpleUrl;
selectedEntityAdvancedUrl;
@ -142,11 +92,11 @@ export class HomeComponent {
filterType: 'checkbox',
originalFilterId: "",
valueIsExact: true,
title: "Result Types",
title: "Type",
filterOperator: "or"
};
public pageContents = null;
@ViewChild("numbersComponent", { static: true }) numbersComponent: NumbersComponent;
@ViewChild("numbersComponent", {static: true}) numbersComponent: NumbersComponent;
specialSubjects = [
{value: "Physics::Atomic Physics", label: "Atomic Physics"},
{value: "Mathematics::Combinatorics", label: "Mathematics Combinatorics"},
@ -156,26 +106,17 @@ export class HomeComponent {
{value: "lcsh:Chemistry", label: "Chemistry"},
{value: "lcsh:Engineering (General). Civil engineering (General)", label: "Civil engineering"},
{value: "lcsh:Technology", label: "Technology"},
/* "Mathematics::Combinatorics",
"lcsh:Medicine",
"lcsh:Science",
"lcsh:Biology (General)",
"lcsh:Chemistry",
"lcsh:Engineering (General). Civil engineering (General)",
"lcsh:Technology"*/
];
stringUtils = new StringUtils();
// disableSelect: boolean = true;
constructor(
private route: ActivatedRoute,
private _router: Router,
private _searchResearchResultsService: SearchResearchResultsService,
private _searchDataprovidersService: SearchDataprovidersService,
private _searchProjectsService: SearchProjectsService,
private _searchOrganizationsService: SearchOrganizationsService,
private _refineFieldResultsService: RefineFieldResultsService,
private location: Location, private _piwikService: PiwikService,
private _piwikService: PiwikService,
private config: ConfigurationService, private _meta: Meta, private _title: Title, private seoService: SEOService,
private helper: HelperService
private helper: HelperService,
private cdr: ChangeDetectorRef,
private quickContactService: QuickContactService
) {
let description = "OpenAIRE Explore: Over 100M of research deduplicated, 170K research software, 11M research data. One of the largest open scholarly records collection worldwide.";
let title = "OpenAIRE | Find and Share research";
@ -183,10 +124,11 @@ export class HomeComponent {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");
this._meta.updateTag({content: title}, "property='og:title'");
this.quickContactService.setDisplay(false);
}
private getPageContents() {
this.subs.push(this.helper.getPageHelpContents(this.properties, 'openaire', this._router.url).subscribe(contents => {
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'openaire', this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
@ -207,42 +149,80 @@ export class HomeComponent {
return Math.ceil(num);
}
clear() {
this.subscriptions.forEach(value => {
if (value instanceof Subscriber) {
value.unsubscribe();
} else if (value instanceof IntersectionObserver || value instanceof MutationObserver) {
value.disconnect();
}
});
}
public ngOnInit() {
this.seoService.createLinkForCanonicalURL(this.properties.domain + this.properties.baseLink + this._router.url, false);
this.getPageContents();
if (this.properties != null) {
var url = this.properties.domain + this.properties.baseLink + this._router.url;
this._meta.updateTag({content: url}, "property='og:url'");
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subs.push(this._piwikService.trackView(this.properties, "OpenAIRE").subscribe());
}
//this.config.getCommunityInformation(this.properties, this.properties.adminToolsCommunity ).subscribe(data => {
this.subs.push(this.config.communityInformationState.subscribe(data => {
if (data) {
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE").subscribe());
if(this.numbersComponent) {
this.numbersComponent.showPublications = false;
this.numbersComponent.showDatasets = false;
this.numbersComponent.showSoftware = false;
this.numbersComponent.showOrp = false;
this.numbersComponent.showProjects = false;
this.numbersComponent.showDataProviders = false;
this.numbersComponent.showOrganizations = false;
}
this.subscriptions.push(this.config.portalAsObservable.subscribe(data => {
if(data) {
if(data.name) {
this.portalName = data.name;
}
var showEntity = {};
for (var i = 0; i < data['entities'].length; i++) {
showEntity["" + data['entities'][i]["pid"] + ""] = data['entities'][i]["isEnabled"];
}
this.showPublications = !!showEntity["publication"];
this.showDatasets = !!showEntity["dataset"];
this.showSoftware = !!showEntity["software"];
this.showOrp = !!showEntity["orp"];
this.showProjects = !!showEntity["project"];
this.showDataProviders = !!showEntity["datasource"];
this.showOrganizations = !!showEntity["organization"];
if (this.showPublications) {
this.resultTypes.values.push({name: "Publications", id: "publications", selected: true, number: 0});
if(this.numbersComponent) {
this.numbersComponent.showPublications = !!showEntity["publication"];
this.numbersComponent.showDatasets = !!showEntity["dataset"];
this.numbersComponent.showSoftware = !!showEntity["software"];
this.numbersComponent.showOrp = !!showEntity["orp"];
this.numbersComponent.showProjects = !!showEntity["project"];
this.numbersComponent.showDataProviders = !!showEntity["datasource"];
this.numbersComponent.showOrganizations = !!showEntity["organization"];
}
if(this.numbersComponent && this.numbersComponent.showPublications) {
this.resultTypes.values.push({
name: this.openaireEntities.PUBLICATIONS,
id: "publications",
selected: false,
number: 0
});
}
if (this.showDatasets) {
this.resultTypes.values.push({name: "Research data", id: "datasets", selected: true, number: 0});
if(this.numbersComponent && this.numbersComponent.showDatasets) {
this.resultTypes.values.push({
name: this.openaireEntities.DATASETS,
id: "datasets",
selected: false,
number: 0
});
}
if (this.showSoftware) {
this.resultTypes.values.push({name: "Software", id: "software", selected: true, number: 0});
if(this.numbersComponent && this.numbersComponent.showSoftware) {
this.resultTypes.values.push({
name: this.openaireEntities.SOFTWARE,
id: "software",
selected: false,
number: 0
});
}
if (this.showOrp) {
this.resultTypes.values.push({name: "Other research products", id: "other", selected: true, number: 0});
if(this.numbersComponent && this.numbersComponent.showOrp) {
this.resultTypes.values.push({name: this.openaireEntities.OTHER, id: "other", selected: false, number: 0});
}
this.numbersComponent.init(this.showDatasets, this.showSoftware, this.showPublications, this.showDatasets, this.showSoftware, this.showOrp, this.showProjects, this.showDataProviders);
if(this.numbersComponent) {
this.numbersComponent.init(this.numbersComponent.showDatasets, this.numbersComponent.showSoftware, this.numbersComponent.showPublications, this.numbersComponent.showDatasets, this.numbersComponent.showSoftware, this.numbersComponent.showOrp, this.numbersComponent.showProjects, this.numbersComponent.showDataProviders, this.numbersComponent.showOrganizations);
}
}
},
error => {
@ -252,12 +232,52 @@ export class HomeComponent {
}
}
public ngOnDestroy() {
for (let sub of this.subs) {
sub.unsubscribe();
this.quickContactService.setDisplay(true);
this.clear();
}
ngAfterViewInit() {
if (typeof window !== "undefined") {
this.createObservers();
}
}
createObservers() {
let options = {
root: null,
rootMargin: '200px',
threshold: 1.0
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
this.quickContactService.setDisplay(!entry.isIntersecting);
});
}, options);
intersectionObserver.observe(this.contact.nativeElement);
let mutationObserver = new MutationObserver(entries => {
entries.forEach(entry => {
if (entry.attributeName === 'style') {
let opacities: number[] = this.elements.map(element => +element.nativeElement.style.opacity);
let active: number = opacities.indexOf(Math.max(...opacities));
this.elements.forEach((element, index) => {
if (index === active) {
element.nativeElement.classList.remove('uk-disabled');
} else {
element.nativeElement.classList.add('uk-disabled');
}
})
}
})
});
this.elements.forEach(element => {
mutationObserver.observe(element.nativeElement, {attributes: true});
});
this.subscriptions.push(intersectionObserver);
this.subscriptions.push(mutationObserver);
}
private handleError(message: string, error) {
console.error("Home Page: " + message, error);
}
@ -268,42 +288,47 @@ export class HomeComponent {
this.selectedEntityAdvancedUrl = $event.advancedUrl;
}
goTo(simple: boolean) {
let url = (simple) ? this.selectedEntitySimpleUrl : this.selectedEntityAdvancedUrl;
goTo() {
let parameterNames = [];
let parameterValues = [];
if (this.selectedEntity == "result") {
if (this.resultTypes) {
let values = [];
for (let value of this.resultTypes.values) {
if (value.selected) {
values.push(value.id);
}
}
if (values.length > 0 && values.length != 4) {
parameterNames.push("type");
parameterValues.push(values.join(","));
}
if (this.resultsQuickFilter && this.resultsQuickFilter.selected) {
parameterNames.push(this.resultsQuickFilter.filterId);
parameterValues.push('"'+ encodeURIComponent(this.resultsQuickFilter.value)+'"');
}
}
} else if (this.selectedEntity == "all") {
if (this.resultsQuickFilter && this.resultsQuickFilter.selected) {
parameterNames.push(this.resultsQuickFilter.filterId);
parameterValues.push('"'+ encodeURIComponent(this.resultsQuickFilter.value)+'"');
}
// if (this.selectedEntity == "result") {
// if (this.resultTypes) {
// let values = [];
// for (let value of this.resultTypes.values) {
// if (value.selected) {
// values.push(value.id);
// }
// }
// if (values.length > 0 && values.length != 4) {
// parameterNames.push("type");
// parameterValues.push(values.join(","));
// }
// if (this.resultsQuickFilter && this.resultsQuickFilter.selected) {
// parameterNames.push(this.resultsQuickFilter.filterId);
// parameterValues.push('"' + encodeURIComponent(this.resultsQuickFilter.value) + '"');
// }
// }
// } else if (this.selectedEntity == "all") {
if (this.resultsQuickFilter && this.resultsQuickFilter.selected) {
parameterNames.push(this.resultsQuickFilter.filterId);
parameterValues.push('"' + encodeURIComponent(this.resultsQuickFilter.value) + '"');
}
// }
if (this.keyword.length > 0) {
parameterNames.push("fv0");
parameterValues.push(this.keyword);
parameterNames.push("f0");
parameterValues.push("q");
}
this._router.navigate([url], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)});
this._router.navigate([this.properties.searchLinkToAll], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)});
}
getSubjectParameter(param){
return {'f0':'resultsubject','fv0':'"' +(param)+'"', size:50};
getSubjectParameter(param) {
return {'f0': 'resultsubject', 'fv0': '"' + (param) + '"', size: 50};
}
// disableSelectChange(event: boolean) {
// this.disableSelect = event;
// this.cdr.detectChanges();
// }
}

@ -10,12 +10,10 @@ import { DataProvidersServiceModule} from '../openaireLibrary/services/dataProvi
import { SearchResearchResultsServiceModule} from '../openaireLibrary/services/searchResearchResultsService.module';
import { ProjectsServiceModule} from '../openaireLibrary/services/projectsService.module';
import { OrganizationsServiceModule} from '../openaireLibrary/services/organizationsService.module';
import { PiwikServiceModule} from '../openaireLibrary/utils/piwik/piwikService.module';
import {HelperModule} from '../openaireLibrary/utils/helper/helper.module';
import {RefineFieldResultsServiceModule} from '../openaireLibrary/services/refineFieldResultsService.module';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { SEOServiceModule } from '../openaireLibrary/sharedComponents/SEO/SEOService.module';
import {OtherPortalsModule} from "../openaireLibrary/sharedComponents/other-portals/other-portals.module";
@ -23,32 +21,33 @@ import {EntitiesSelectionModule} from "../openaireLibrary/searchPages/searchUtil
import {QuickSelectionsModule} from "../openaireLibrary/searchPages/searchUtils/quick-selections.module";
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
import {arrow_right, book, cog, database, earth} from "../openaireLibrary/utils/icons/icons";
import {book, cog, database, earth} from "../openaireLibrary/utils/icons/icons";
import {NumbersModule} from "../openaireLibrary/sharedComponents/numbers/numbers.module";
import {AdvancedSearchInputModule} from "../openaireLibrary/sharedComponents/advanced-search-input/advanced-search-input.module";
import {InputModule} from "../openaireLibrary/sharedComponents/input/input.module";
import {SearchInputModule} from "../openaireLibrary/sharedComponents/search-input/search-input.module";
import {SliderUtilsModule} from "../openaireLibrary/sharedComponents/slider-utils/slider-utils.module";
@NgModule({
imports: [
HomeRoutingModule,
CommonModule, FormsModule, RouterModule,
RefineFieldResultsServiceModule,
DataProvidersServiceModule, SearchResearchResultsServiceModule,
ProjectsServiceModule, OrganizationsServiceModule,
PiwikServiceModule,
HomeRoutingModule,
HelperModule,
SEOServiceModule, OtherPortalsModule, EntitiesSelectionModule, QuickSelectionsModule, IconsModule, NumbersModule
SEOServiceModule, OtherPortalsModule, EntitiesSelectionModule, QuickSelectionsModule, IconsModule, NumbersModule, AdvancedSearchInputModule, InputModule, SearchInputModule, SliderUtilsModule
],
declarations: [
HomeComponent
],
providers:[
PreviousRouteRecorder
],
providers:[],
exports: [
HomeComponent
]
})
export class HomeModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([arrow_right, book, cog, database, earth]);
this.iconsService.registerIcons([book, cog, database, earth]);
}
}

@ -1,17 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { OpenaireDataProviderComponent } from './dataProvider.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireDataProviderComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class DataProviderRoutingModule { }

@ -1,17 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-dataprovider',
template: `<dataprovider></dataprovider>`,
})
export class OpenaireDataProviderComponent{
constructor ( ) {
}
ngOnInit() {
}
}

@ -1,13 +0,0 @@
import { NgModule} from '@angular/core';
import { DataProviderModule } from '../../openaireLibrary/landingPages/dataProvider/dataProvider.module';
import { OpenaireDataProviderComponent } from './dataProvider.component';
import {DataProviderRoutingModule} from './dataProvider-routing.module';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [DataProviderModule, DataProviderRoutingModule],
declarations:[OpenaireDataProviderComponent],
providers:[ PreviousRouteRecorder],
exports:[OpenaireDataProviderComponent]
})
export class LibDataProviderModule { }

@ -1,16 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { OpenaireDatasetComponent } from './dataset.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireDatasetComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class DatasetRoutingModule { }

@ -1,7 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-dataset',
template: `<result-landing type="dataset"></result-landing>`,
})
export class OpenaireDatasetComponent{}

@ -1,12 +0,0 @@
import { NgModule} from '@angular/core';
import { OpenaireDatasetComponent } from './dataset.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {DatasetRoutingModule} from './dataset-routing.module';
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
@NgModule({
imports: [DatasetRoutingModule, ResultLandingModule],
declarations:[OpenaireDatasetComponent],
providers:[PreviousRouteRecorder],
exports:[OpenaireDatasetComponent]
})
export class LibDatasetModule { }

@ -1,12 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { OpenaireHtmlProjectReportComponent } from './htmlProjectReport.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireHtmlProjectReportComponent ,canDeactivate: [PreviousRouteRecorder]}
])
]
})
export class HtmlProjectReportRoutingModule { }

@ -1,17 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-htmlProjectReport',
template: `<htmlProjectReport></htmlProjectReport>`,
})
export class OpenaireHtmlProjectReportComponent{
constructor ( ) {
}
ngOnInit() {
}
}

@ -1,13 +0,0 @@
import { NgModule} from '@angular/core';
import { HtmlProjectReportModule } from '../../openaireLibrary/landingPages/htmlProjectReport/htmlProjectReport.module';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { OpenaireHtmlProjectReportComponent } from './htmlProjectReport.component';
import {HtmlProjectReportRoutingModule} from './htmlProjectReport-routing.module';
@NgModule({
imports: [HtmlProjectReportModule, HtmlProjectReportRoutingModule],
declarations:[OpenaireHtmlProjectReportComponent],
providers:[ PreviousRouteRecorder],
exports:[OpenaireHtmlProjectReportComponent]
})
export class LibHtmlProjectReportModule { }

@ -1,13 +0,0 @@
import { NgModule} from '@angular/core';
import { OrganizationModule } from '../../openaireLibrary/landingPages/organization/organization.module';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { OpenaireOrganizationComponent } from './organization.component';
import {OrganizationRoutingModule} from './organization-routing.module';
@NgModule({
imports: [OrganizationModule, OrganizationRoutingModule],
declarations:[OpenaireOrganizationComponent],
providers:[ PreviousRouteRecorder],
exports:[OpenaireOrganizationComponent]
})
export class LibOrganizationModule { }

@ -1,18 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { OpenaireOrganizationComponent } from './organization.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireOrganizationComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class OrganizationRoutingModule { }

@ -1,17 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-organization',
template: `<organization></organization>`,
})
export class OpenaireOrganizationComponent{
constructor ( ) {
}
ngOnInit() {
}
}

@ -1,12 +0,0 @@
import { NgModule} from '@angular/core';
import { OpenaireOrpComponent } from './orp.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {OrpRoutingModule} from './orp-routing.module';
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
@NgModule({
imports: [OrpRoutingModule, ResultLandingModule],
declarations:[OpenaireOrpComponent],
providers:[ PreviousRouteRecorder],
exports:[OpenaireOrpComponent]
})
export class LibOrpModule { }

@ -1,17 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { OpenaireOrpComponent } from './orp.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireOrpComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class OrpRoutingModule { }

@ -1,7 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-orp',
template: `<result-landing type="orp"></result-landing>`,
})
export class OpenaireOrpComponent{}

@ -1,13 +0,0 @@
import { NgModule} from '@angular/core';
import { ProjectModule } from '../../openaireLibrary/landingPages/project/project.module';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { OpenaireProjectComponent } from './project.component';
import {ProjectRoutingModule} from './project-routing.module';
@NgModule({
imports: [ProjectModule, ProjectRoutingModule],
declarations:[OpenaireProjectComponent],
providers:[ PreviousRouteRecorder],
exports:[OpenaireProjectComponent]
})
export class LibProjectModule { }

@ -1,16 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { OpenaireProjectComponent } from './project.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireProjectComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class ProjectRoutingModule { }

@ -1,17 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-project',
template: `<project></project>`,
})
export class OpenaireProjectComponent{
constructor ( ) {
}
ngOnInit() {
}
}

@ -1,13 +0,0 @@
import { NgModule} from '@angular/core';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { OpenairePublicationComponent } from './publication.component';
import {PublicationRoutingModule} from './publication-routing.module';
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
@NgModule({
imports: [PublicationRoutingModule, ResultLandingModule],
declarations:[OpenairePublicationComponent],
providers:[ PreviousRouteRecorder],
exports:[OpenairePublicationComponent]
})
export class LibPublicationModule { }

@ -1,16 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {OpenairePublicationComponent } from './publication.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenairePublicationComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class PublicationRoutingModule { }

@ -1,8 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-publication',
template: `
<result-landing type="publication"></result-landing>`,
})
export class OpenairePublicationComponent {}

@ -1,13 +0,0 @@
import {NgModule} from '@angular/core';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {OpenaireResultComponent} from './result.component';
import {ResultRoutingModule} from './result-routing.module';
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
@NgModule({
imports: [ResultRoutingModule, ResultLandingModule],
declarations:[OpenaireResultComponent],
providers:[PreviousRouteRecorder],
exports:[OpenaireResultComponent]
})
export class LibResultModule { }

@ -1,17 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {OpenaireResultComponent } from './result.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireResultComponent, data: {
redirect: '/error', community : 'openaire'
},canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class ResultRoutingModule { }

@ -1,7 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-publication',
template: `<result-landing type="result"></result-landing>`,
})
export class OpenaireResultComponent{}

@ -1,13 +0,0 @@
import { NgModule} from '@angular/core';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { OpenaireSoftwareComponent } from './software.component';
import {SoftwareRoutingModule} from './software-routing.module';
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
@NgModule({
imports: [SoftwareRoutingModule, ResultLandingModule],
declarations:[OpenaireSoftwareComponent],
providers:[PreviousRouteRecorder],
exports:[OpenaireSoftwareComponent]
})
export class LibSoftwareModule { }

@ -1,14 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {OpenaireSoftwareComponent } from './software.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSoftwareComponent, canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class SoftwareRoutingModule { }

@ -1,7 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-software',
template: `<result-landing type="software"></result-landing>`,
})
export class OpenaireSoftwareComponent{}

@ -1,23 +0,0 @@
import { NgModule} from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {OpenaireUserComponent } from './user.component';
import { UserRoutingModule } from './user-routing.module';
import { UserModule} from '../openaireLibrary/login/user.module';
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
@NgModule({
imports: [
CommonModule, FormsModule,
UserRoutingModule, UserModule
],
providers:[PreviousRouteRecorder],
declarations: [
OpenaireUserComponent
]
})
export class LibUserModule { }

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

@ -1,10 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-user',
template: `<user></user>`
})
export class OpenaireUserComponent {
}

@ -1 +1 @@
Subproject commit 014dc9e5562890b61fbafa7705d2f31d0cbcdb74
Subproject commit 6ab50b04cc8abbd617e6636cc86414241589d444

@ -1,20 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {OpenaireMyOrcidLinksComponent} from "./myOrcidLinks.component";
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireMyOrcidLinksComponent,
canActivate: [LoginGuard], data: {
redirect: '/error', community : 'openaire'
},
canDeactivate: [PreviousRouteRecorder]
}
])
]
})
export class MyOrcidLinksRoutingModule { }

@ -1,16 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-my-orcid-links',
template: `
<my-orcid-links></my-orcid-links>
`
})
export class OpenaireMyOrcidLinksComponent {
constructor() {}
public ngOnInit() {}
}

@ -1,24 +0,0 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {OpenaireMyOrcidLinksComponent} from './myOrcidLinks.component';
import {MyOrcidLinksModule} from "../../openaireLibrary/orcid/my-orcid-links/myOrcidLinks.module";
import {MyOrcidLinksRoutingModule} from "./myOrcidLinks-routing.module";
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
CommonModule, FormsModule,
MyOrcidLinksModule,
MyOrcidLinksRoutingModule
],
declarations: [
OpenaireMyOrcidLinksComponent
],
exports: [
OpenaireMyOrcidLinksComponent
],
providers: [PreviousRouteRecorder, LoginGuard]
})
export class LibMyOrcidLinksModule { }

@ -1,20 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {OpenaireOrcidComponent} from './orcid.component';
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireOrcidComponent,
canActivate: [LoginGuard], data: {
redirect: '/error', community : 'openaire'
},
canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class OrcidRoutingModule { }

@ -1,10 +0,0 @@
import { Component } from '@angular/core';
@Component({
selector: 'openaire-orcid',
template: `
<orcid></orcid>
`
})
export class OpenaireOrcidComponent {}

@ -1,24 +0,0 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import {OpenaireOrcidComponent} from './orcid.component';
import {OrcidRoutingModule} from './orcid-routing.module';
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {FormsModule} from "@angular/forms";
import {OrcidModule} from "../openaireLibrary/orcid/orcid.module";
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
CommonModule, FormsModule,
OrcidModule, OrcidRoutingModule
],
declarations: [
OpenaireOrcidComponent
],
providers: [PreviousRouteRecorder, LoginGuard],
exports: [
OpenaireOrcidComponent
]
})
export class LibOrcidModule { }

@ -1,23 +0,0 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {OpenaireSearchRecommendedResultsForOrcidComponent} from "./searchRecommendedResultsForOrcid.component";
import {FreeGuard} from "../../openaireLibrary/login/freeGuard.guard";
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
RouterModule.forChild([
// { path: '', component: OpenaireSearchMyResultsInOrcidComponent, canActivate: [IsRouteEnabled], data: {
{ path: '', component: OpenaireSearchRecommendedResultsForOrcidComponent,
canActivate: [LoginGuard], data: {
redirect: '/error', community : 'openaire'
},
canDeactivate: [PreviousRouteRecorder]
}
])
]
})
export class SearchRecommendedResultsForOrcidRoutingModule { }

@ -1,16 +0,0 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-search-recommended-results-for-orcid',
template: `
<search-recommended-results-for-orcid></search-recommended-results-for-orcid>
`
})
export class OpenaireSearchRecommendedResultsForOrcidComponent {
constructor() {}
public ngOnInit() {}
}

@ -1,27 +0,0 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {OpenaireSearchRecommendedResultsForOrcidComponent} from "./searchRecommendedResultsForOrcid.component";
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
import {SearchRecommendedResultsForOrcidModule} from "../../openaireLibrary/orcid/recommend-orcid-links/searchRecommendedResultsForOrcid.module";
import {SearchRecommendedResultsForOrcidRoutingModule} from "./searchRecommendedResultsForOrcid-routing.module";
import {FreeGuard} from "../../openaireLibrary/login/freeGuard.guard";
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
@NgModule({
imports: [
CommonModule, FormsModule,
SearchRecommendedResultsForOrcidModule,
SearchRecommendedResultsForOrcidRoutingModule
],
declarations: [
OpenaireSearchRecommendedResultsForOrcidComponent
],
exports: [
OpenaireSearchRecommendedResultsForOrcidComponent
],
// providers: [PreviousRouteRecorder, IsRouteEnabled]
providers: [PreviousRouteRecorder, LoginGuard]
})
export class LibSearchRecommendedResultsForOrcidModule { }

@ -1,18 +0,0 @@
import {NgModule} from '@angular/core';
import {CommonModule} from '@angular/common';
import {FormsModule} from '@angular/forms';
import {RouterModule} from '@angular/router';
import {ReloadModule} from '../openaireLibrary/reload/reload.module';
@NgModule({
imports: [
CommonModule, FormsModule, RouterModule, ReloadModule
],
declarations: [],
providers: [],
exports: []
})
export class LibReloadModule {
}

@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import{OpenaireAdvancedSearchDataProvidersComponent} from './advancedSearchDataProviders.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@ -9,7 +10,7 @@ import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousR
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireAdvancedSearchDataProvidersComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireAdvancedSearchOrganizationsComponent} from './advancedSearchOrganizations.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireAdvancedSearchOrganizationsComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
},canDeactivate: [PreviousRouteRecorder]}
])

@ -9,10 +9,9 @@ import {SearchOrganizationsModule} from "../../openaireLibrary/searchPages/searc
@NgModule({
imports: [
AdvancedSearchOrganizationsRoutingModule,
CommonModule, FormsModule,
SearchOrganizationsModule,
AdvancedSearchOrganizationsRoutingModule
SearchOrganizationsModule
],
declarations: [
OpenaireAdvancedSearchOrganizationsComponent

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireAdvancedSearchProjectsComponent} from './advancedSearchProjects.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireAdvancedSearchProjectsComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -8,10 +8,9 @@ import {SearchProjectsModule} from "../../openaireLibrary/searchPages/searchProj
@NgModule({
imports: [
AdvancedSearchProjectsRoutingModule,
CommonModule, FormsModule,
SearchProjectsModule,
AdvancedSearchProjectsRoutingModule
SearchProjectsModule
],
declarations: [
OpenaireAdvancedSearchProjectsComponent

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchResearchResultsComponent} from './searchResearchResults.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchResearchResultsComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -5,7 +5,6 @@ import { FormsModule } from '@angular/forms';
import{ SearchResearchResultsRoutingModule} from './searchResearchResults-routing.module';
import{OpenaireSearchResearchResultsComponent} from './searchResearchResults.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {SearchResearchResultsModule} from "../../openaireLibrary/searchPages/searchResearchResults.module";
@NgModule({
@ -17,7 +16,7 @@ import {SearchResearchResultsModule} from "../../openaireLibrary/searchPages/sea
declarations: [
OpenaireSearchResearchResultsComponent
],
providers:[PreviousRouteRecorder],
providers:[],
exports: [
OpenaireSearchResearchResultsComponent
]

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchCompatibleDataprovidersComponent} from './compatibleDataProviders.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchCompatibleDataprovidersComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -5,8 +5,6 @@ import { FormsModule } from '@angular/forms';
import{ CompatibleDataProvidersRoutingModule} from './compatibleDataProviders-routing.module';
import{OpenaireSearchCompatibleDataprovidersComponent} from './compatibleDataProviders.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module";
@NgModule({
@ -18,7 +16,7 @@ import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchCompatibleDataprovidersComponent
],
providers:[PreviousRouteRecorder],
providers:[],
exports: [
OpenaireSearchCompatibleDataprovidersComponent
]

@ -3,12 +3,13 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchEntityRegistriesComponent} from './entityRegistries.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchEntityRegistriesComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -4,7 +4,6 @@ import { FormsModule } from '@angular/forms';
import{ EntityRegistriesRoutingModule} from './entityRegistries-routing.module';
import{OpenaireSearchEntityRegistriesComponent} from './entityRegistries.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module";
@ -17,7 +16,7 @@ import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchEntityRegistriesComponent
],
providers:[PreviousRouteRecorder],
providers:[],
exports: [
OpenaireSearchEntityRegistriesComponent
]

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchJournalsComponent} from './journals.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchJournalsComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -4,7 +4,6 @@ import { FormsModule } from '@angular/forms';
import{ JournalsRoutingModule} from './journals-routing.module';
import{OpenaireSearchJournalsComponent} from './journals.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module";
@NgModule({
imports: [
@ -14,7 +13,7 @@ import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchJournalsComponent
],
providers:[PreviousRouteRecorder],
providers:[],
exports: [
OpenaireSearchJournalsComponent
]

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchDataprovidersComponent} from './searchDataproviders.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchDataprovidersComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -3,7 +3,6 @@ import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import {OpenaireSearchDataprovidersComponent} from './searchDataproviders.component';
import{ SearchDataProvidersRoutingModule} from './searchDataProviders-routing.module';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {SearchDataProvidersModule} from '../../openaireLibrary/searchPages/searchDataProviders.module';
@NgModule({
imports: [
@ -14,7 +13,7 @@ SearchDataProvidersModule, SearchDataProvidersRoutingModule
declarations: [
OpenaireSearchDataprovidersComponent
],
providers:[PreviousRouteRecorder],
providers:[],
exports: [
OpenaireSearchDataprovidersComponent
]

@ -4,6 +4,7 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchOrganizationsComponent} from './searchOrganizations.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@ -11,7 +12,7 @@ import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousR
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchOrganizationsComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

@ -5,7 +5,6 @@ import { FormsModule } from '@angular/forms';
import{ SearchOrganizationsRoutingModule} from './searchOrganizations-routing.module';
import{OpenaireSearchOrganizationsComponent} from './searchOrganizations.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {SearchOrganizationsModule} from "../../openaireLibrary/searchPages/searchOrganizations.module";
@ -18,7 +17,7 @@ import {SearchOrganizationsModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchOrganizationsComponent
],
providers:[PreviousRouteRecorder],
providers:[],
exports: [
OpenaireSearchOrganizationsComponent
]

@ -3,13 +3,14 @@ import { RouterModule } from '@angular/router';
import{OpenaireSearchProjectsComponent} from './searchProjects.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireSearchProjectsComponent, data: {
redirect: '/error', community : 'openaire'
redirect: properties.errorLink, community : 'openaire'
}, canDeactivate: [PreviousRouteRecorder] }
])

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save