Compare commits

..

No commits in common. "master" and "production-release-november-2022" have entirely different histories.

227 changed files with 1970 additions and 1960 deletions

View File

@ -1,168 +0,0 @@
# 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

View File

@ -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 16.1.7.
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.
## Install packages

View File

@ -52,8 +52,6 @@
],
"styles": [
"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": [
@ -276,16 +274,13 @@
"main": "server.ts",
"tsConfig": "src/tsconfig.server.json",
"sourceMap": true,
"optimization": false,
"buildOptimizer": false
"optimization": false
},
"configurations": {
"development": {
"outputHashing": "media",
"sourceMap": false,
"optimization": true,
"vendorChunk": true,
"buildOptimizer": true
"optimization": true
},
"test": {
"outputHashing": "media",
@ -296,8 +291,7 @@
}
],
"sourceMap": false,
"optimization": true,
"buildOptimizer": true
"optimization": true
},
"beta": {
"outputHashing": "media",
@ -308,8 +302,7 @@
}
],
"sourceMap": false,
"optimization": true,
"buildOptimizer": true
"optimization": true
},
"production": {
"outputHashing": "media",
@ -320,8 +313,7 @@
}
],
"sourceMap": false,
"optimization": true,
"buildOptimizer": true
"optimization": true
}
},
"defaultConfiguration": ""

View File

@ -23,42 +23,42 @@
},
"private": true,
"dependencies": {
"@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",
"@angular/animations": "^14.2.3",
"@angular/cdk": "^14.2.2",
"@angular/common": "^14.2.3",
"@angular/compiler": "^14.2.3",
"@angular/core": "^14.2.3",
"@angular/forms": "^14.2.3",
"@angular/localize": "^14.2.3",
"@angular/material": "^14.2.2",
"@angular/platform-browser": "^14.2.3",
"@angular/platform-browser-dynamic": "^14.2.3",
"@angular/platform-server": "^14.2.3",
"@angular/router": "^14.2.3",
"@nguniversal/express-engine": "^14.2.0",
"clipboard": "^1.5.16",
"core-js": "^2.5.4",
"express": "^4.15.2",
"jquery": "^3.4.1",
"ng-recaptcha": "^12.0.2",
"ng-recaptcha": "^10.0.0",
"prom-client": "^11.3.0",
"rxjs": "^6.5.1",
"ts-md5": "^1.2.0",
"tslib": "^2.0.0",
"uikit": "3.16.24",
"zone.js": "~0.13.1"
"uikit": "3.12.0",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@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",
"@angular-devkit/build-angular": "^14.2.3",
"@angular/cli": "^14.2.3",
"@angular/compiler-cli": "^14.2.3",
"@angular/language-service": "^14.2.3",
"@nguniversal/builders": "^14.2.0",
"@types/compression": "^1.7.0",
"@types/express": "^4.17.0",
"@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.3",
"@types/node": "^16.18.50",
"@types/node": "^12.11.1",
"codelyzer": "^6.0.0",
"jasmine-core": "~3.8.0",
"jasmine-spec-reporter": "~5.0.0",
@ -69,6 +69,6 @@
"karma-jasmine-html-reporter": "^1.6.0",
"protractor": "~7.0.0",
"ts-node": "~7.0.0",
"typescript": "~4.9.5"
"typescript": "~4.6.4"
}
}
}

View File

@ -13,8 +13,6 @@ 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',
@ -42,9 +40,4 @@ export const routes = [
'/claims',
'/participate/claim',
'/participate/direct-claim',
'/my-orcid-links',
'/sdgs',
'/fields-of-science',
'/funders',
'/contact-us',
];

View File

@ -56,30 +56,7 @@ 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) {

View File

@ -1,50 +1,59 @@
import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
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), data: {hasStickyHeaderOnMobile: true}},
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)},
{path: 'home', redirectTo: '', pathMatch: 'full'},
{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: 'mail-preferences', loadChildren: () => import('./userEmailPreferences/mailPrefs.module').then(m => m.LibMailPrefsModule)},
{path: 'sdgs', loadChildren: () => import('./sdg/sdg.module').then(m => m.LibSdgModule)},
{path: 'fields-of-science', loadChildren: () => import('./fos/fos.module').then(m => m.LibFosModule), data: {extraOffset: 100}},
{path: 'contact-us', loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule), data: {hasQuickContact: false}},
// ORCID Pages
{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)},
{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)},
// Landing Pages
{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/result', loadChildren: () => import('./landingPages/result/libResult.module').then(m => m.LibResultModule), data: {hasQuickContact: false}},
{path: 'search/publication', loadChildren: () => import('./landingPages/publication/libPublication.module').then(m => m.LibPublicationModule), data: {hasQuickContact: false}},
{path: 'search/dataset', loadChildren: () => import('./landingPages/dataset/libDataset.module').then(m => m.LibDatasetModule), data: {hasQuickContact: false}},
{path: 'search/software', loadChildren: () => import('./landingPages/software/libSoftware.module').then(m => m.LibSoftwareModule), data: {hasQuickContact: false}},
{path: 'search/other', loadChildren: () => import('./landingPages/orp/libOrp.module').then(m => m.LibOrpModule), data: {hasQuickContact: false}},
{path: 'search/project', loadChildren: () => import('./landingPages/project/libProject.module').then(m => m.LibProjectModule), data: {hasQuickContact: false}},
{
path: 'search/dataprovider',
loadChildren: () => import('./openaireLibrary/landingPages/dataProvider/dataProvider.module').then(m => m.DataProviderModule),
data: {hasQuickContact: false, hasMenuSearchBar: true, community: 'openaire'}
loadChildren: () => import('././landingPages/dataProvider/libDataProvider.module').then(m => m.LibDataProviderModule),
data: {hasQuickContact: false}
},
{
path: 'search/organization',
loadChildren: () => import('./openaireLibrary/landingPages/organization/organization.module').then(m => m.OrganizationModule),
data: {hasQuickContact: false, hasMenuSearchBar: true, community: 'openaire'}
loadChildren: () => import('./landingPages/organization/libOrganization.module').then(m => m.LibOrganizationModule),
data: {hasQuickContact: false}
},
// Search Pages
{
path: 'search/find', loadChildren: () => import('./searchPages/find/libSearch.module').then(m => m.LibMainSearchModule)
path: 'project-report',
loadChildren: () => import('./landingPages/htmlProjectReport/libHtmlProjectReport.module').then(m => m.LibHtmlProjectReportModule)
},
// 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/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/:entity', loadChildren: () => import('./searchPages/find/libSearch.module').then(m => m.LibMainSearchModule)
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)
},
// Advanced Search Pages
{
path: 'search/advanced/research-outcomes',
@ -100,10 +109,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('./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}
{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}
];
@NgModule({

View File

@ -1,4 +1,4 @@
import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
import {ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
import {ActivatedRoute, Router} from '@angular/router';
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
import {MenuItem} from './openaireLibrary/sharedComponents/menu';
@ -23,21 +23,20 @@ import {QuickContactService} from './openaireLibrary/sharedComponents/quick-cont
import {LayoutService} from './openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
@Component({
//changeDetection: ChangeDetectionStrategy.Default,
//encapsulation: ViewEncapsulation.Emulated,
selector: 'app-root',
template: `
<div id="modal-container"></div>
<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-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.uk-hidden]="loading" [ngClass]="rootClass">
<div id="modal-container"></div>
<div class="custom-main-content">
<main>
<router-outlet></router-outlet>
</main>
@ -53,14 +52,12 @@ import {LayoutService} from './openaireLibrary/dashboard/sharedComponents/sideba
</span></a>
</cookie-law>
<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>
<quick-contact #quickContact *ngIf="showQuickContact && contactForm" (sendEmitter)="send($event)"
[contactForm]="contactForm" [sending]="sending" [contact]="'Help'"></quick-contact>
<modal-alert #modal [overflowBody]="false"></modal-alert>
`
})
export class AppComponent implements AfterViewInit {
loading: boolean = false;
rootClass: string;
export class AppComponent {
isClient: boolean = false;
userMenuItems: MenuItem[] = [];
menuItems: MenuItem [] = [];
@ -68,10 +65,7 @@ export class AppComponent implements AfterViewInit {
properties: EnvProperties = properties;
user: User;
header: Header;
/* Contact */
public showQuickContact: boolean;
public bottomNotIntersecting: boolean;
public displayQuickContact: boolean; // intersecting with specific section in home page
public showQuickContact: boolean;
public contactForm: FormGroup;
public sending: boolean = false;
@ViewChild('quickContact') quickContact: QuickContactComponent;
@ -91,7 +85,11 @@ export class AppComponent implements AfterViewInit {
if (typeof document !== 'undefined') {
this.isClient = true;
}
this.configurationService.initPortal(this.properties, this.properties.adminToolsCommunity);
this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => {
this.showQuickContact = hasQuickContact;
this.cdr.detectChanges();
}));
this.configurationService.initCommunityInformation(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 => {
@ -113,27 +111,16 @@ export class AppComponent implements AfterViewInit {
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();
}
this.showQuickContact = display;
}));
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
subscription.unsubscribe();
} else if (typeof IntersectionObserver !== "undefined" && subscription instanceof IntersectionObserver) {
subscription.disconnect();
}
});
this.configurationService.clearSubscriptions();
@ -144,31 +131,6 @@ export class AppComponent implements AfterViewInit {
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)
}));
}
}
@ -180,9 +142,12 @@ export class AppComponent implements AfterViewInit {
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
if(this.bottomNotIntersecting !== (!entry.isIntersecting)) {
this.bottomNotIntersecting = !entry.isIntersecting;
this.cdr.detectChanges();
if (entry.isIntersecting && this.showQuickContact) {
this.showQuickContact = false;
this.quickContactService.setDisplay(this.showQuickContact);
} else if (!entry.isIntersecting && !this.showQuickContact) {
this.showQuickContact = true;
this.quickContactService.setDisplay(this.showQuickContact);
}
});
}, options);
@ -193,11 +158,9 @@ export class AppComponent implements AfterViewInit {
buildMenu() {
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 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"], {});
let researchOutcomesMenu = new MenuItem("", OpenaireEntities.RESULTS, "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {resultbestaccessright: '"' + encodeURIComponent("Open Access") + '"'});
researchOutcomesMenu.items = [
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") + '"'}),
@ -205,7 +168,7 @@ export class AppComponent implements AfterViewInit {
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 = [
new MenuItem("search", "Search", "", "/search/find/research-outcomes", false, [], ["/search/find/research-outcomes"], {},
new MenuItem("search", "Search", "", "/search/find", false, [], ["/search/find"], {qf: true},
null, null, null, null, "_blank", "internal", false,
[
researchOutcomesMenu,
@ -228,7 +191,6 @@ export class AppComponent implements AfterViewInit {
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"], {}));

View File

@ -1,6 +1,6 @@
import {APP_ID, NgModule} from '@angular/core';
import {NgModule} from '@angular/core';
import {SharedModule} from './openaireLibrary/shared/shared.module';
import {BrowserModule} from '@angular/platform-browser';
import {BrowserModule, BrowserTransferStateModule} 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,6 +9,7 @@ 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";
@ -18,7 +19,6 @@ import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-int
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: [
@ -28,22 +28,22 @@ import {LoadingModule} from "./openaireLibrary/utils/loading/loading.module";
ErrorModule,
NavigationBarModule, BottomModule,
CookieLawModule,
BrowserModule,
BrowserModule.withServerTransition({ appId: 'explore' }),
AppRoutingModule,
BrowserAnimationsModule, PageURLResolverModule,
Schema2jsonldModule,
QuickContactModule,
AlertModalModule, LoadingModule
BrowserTransferStateModule,
BrowserAnimationsModule, PageURLResolverModule,
Schema2jsonldModule,
QuickContactModule,
AlertModalModule
],
declarations: [AppComponent],
declarations: [AppComponent, OpenaireErrorPageComponent],
exports: [AppComponent],
providers: [
{provide: APP_ID, useValue: 'explore'},
// {
// provide: HTTP_INTERCEPTORS,
// useClass: CacheInterceptorService,
// multi: true
// },
{
provide: HTTP_INTERCEPTORS,
useClass: CacheInterceptorService,
multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,

View File

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

View File

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

View File

@ -5,6 +5,9 @@ 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: [
@ -12,7 +15,7 @@ import{ ClaimsCuratorGuard} from '../../openaireLibrary/login/claimsCuratorGuar
ClaimsAdminRoutingModule,
ClaimsAdminModule
],
providers:[ClaimsCuratorGuard],
providers:[ClaimsCuratorGuard, PreviousRouteRecorder,IsRouteEnabled],
declarations: [
OpenaireClaimsAdminComponent
]

View File

@ -4,12 +4,15 @@ 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:[],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
declarations: [
OpenaireDirectLinkingComponent
], exports:[OpenaireDirectLinkingComponent]

View File

@ -4,12 +4,15 @@ 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:[],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
declarations: [
OpenaireLinkingComponent
], exports:[

View File

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

View File

@ -4,6 +4,10 @@ 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: [
@ -12,7 +16,7 @@ import{ MyClaimsModule} from '../../openaireLibrary/claims/myClaims/myClaims.mo
MyClaimsModule
],
providers:[],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
declarations: [
OpenaireMyClaimsComponent
]

View File

@ -7,7 +7,7 @@
<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"
<contact-us [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>

View File

@ -14,7 +14,6 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo
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',
@ -34,8 +33,7 @@ export class ContactComponent implements OnInit {
public contactForm: FormGroup;
@ViewChild('modal') modal;
private subscriptions = [];
@ViewChild('contactUs') contactUsComponent : ContactUsComponent;
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
if (subscription instanceof Subscriber) {
@ -60,14 +58,17 @@ export class ContactComponent implements OnInit {
this.properties = properties;
this.email = {body: '', subject: '', recipients: []};
this.subscriptions.push( this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push( this._piwikService.trackView(this.properties, this.pageTitle, this.properties.piwikSiteId).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.getPageContents();
this.sending = false;
}
@ -93,9 +94,6 @@ export class ContactComponent implements OnInit {
message: this.fb.control('', Validators.required),
recaptcha: this.fb.control('', Validators.required),
});
if(this.contactUsComponent) {
this.contactUsComponent.resetRecaptcha();
}
}
private sendMail(admins: any) {

View File

@ -4,8 +4,11 @@ import {RouterModule} from '@angular/router';
import {ContactComponent} from './contact.component';
import {ContactRoutingModule} from "./contact-routing.module";
import {EmailService} from "../openaireLibrary/utils/email/email.service";
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
import {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
@ -22,7 +25,9 @@ import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
declarations: [
ContactComponent
],
providers: [],
providers: [
EmailService, PiwikService, IsRouteEnabled
],
exports: [
ContactComponent
]

View File

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

View File

@ -2,12 +2,17 @@ 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: [
@ -20,8 +25,7 @@ import {CommunityService} from "../openaireLibrary/connect/community/community.s
exports: [
OpenaireDepositComponent,
],
providers: [
ZenodoCommunitiesService, CommunityService
]
providers: [PreviousRouteRecorder, IsRouteEnabled,
ZenodoCommunitiesService, CommunityService, SearchZenodoCommunitiesService]
})
export class LibDepositModule { }

View File

@ -6,15 +6,19 @@ 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,
SearchDataprovidersToDepositRoutingModule,
SearchDataprovidersToDepositModule,
ZenodoCommunitiesServiceModule
SearchDataprovidersToDepositRoutingModule,
ZenodoCommunitiesServiceModule, SearchZenodoCommunitiesServiceModule
],
declarations: [
OpenaireSearchDataprovidersToDepositComponent
@ -22,6 +26,6 @@ import {CommunityService} from '../openaireLibrary/connect/community/community.s
exports: [
OpenaireSearchDataprovidersToDepositComponent,
],
providers: [CommunityService]
providers: [PreviousRouteRecorder, IsRouteEnabled, CommunityService]
})
export class LibSearchDataprovidersToDepositModule { }

View File

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

View File

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

View File

@ -0,0 +1,15 @@
import {Component} from "@angular/core";
import {properties} from "../../environments/environment";
@Component({
selector: 'explore-fos',
template: `
<fos [piwikSiteId]="piwikSiteId"></fos>
`
})
export class ExploreFosComponent {
piwikSiteId = properties.piwikSiteId;
constructor() {}
}

View File

@ -0,0 +1,26 @@
import {CommonModule} from "@angular/common";
import {NgModule} from "@angular/core";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {LibFosRoutingModule} from "./fos-routing.module";
import {FosRoutingModule} from "../openaireLibrary/fos/fos-routing.module";
import {FosModule} from "../openaireLibrary/fos/fos.module";
import {ExploreFosComponent} from "./fos.component";
@NgModule({
imports: [
CommonModule,
LibFosRoutingModule,
FosRoutingModule,
FosModule
],
declarations: [
ExploreFosComponent
],
exports: [
ExploreFosComponent
],
providers: [
PreviousRouteRecorder
]
})
export class LibFosModule { }

View File

@ -1,19 +0,0 @@
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 { }

View File

@ -1,295 +0,0 @@
<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>

View File

@ -1,48 +0,0 @@
@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%);
}
}

View File

@ -1,375 +0,0 @@
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;
}
}

View File

@ -1,44 +0,0 @@
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]);
}
}

View File

@ -1,318 +1,328 @@
<ng-template #_logos let-logo="logo" let-class="class">
<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 *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>
</div>
</ng-template>
<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">
<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>
<div [class.uk-invisible]="disableSelect" class="uk-margin-medium-top uk-width-3-4@xl">
<advanced-search-input #advanced (searchEmitter)="goTo(true)">
<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="Scholary works" [searchable]="true" [hint]="'Search in OpenAIRE'" [(value)]="keyword"></div>
</advanced-search-input>
<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>
<img src="assets/common-assets/sdg/sdg-dot-img.svg" alt="SDGs logo" loading="lazy">
<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">
</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">
<img src="assets/common-assets/fos/fos-icon.svg" alt="FOS logo" loading="lazy">
<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>
</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" uk-parallax="y: 500">
<img class="uk-position-bottom-left" src="assets/explore-assets/home/mask.svg">
</div>
</div>
</div>
</div>
<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 uk-text-primary uk-h4">
</div>
<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-large-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>
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="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>
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>
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="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>
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>
class="uk-text-bold">{{numbers.softwareSize.number|number}}{{numbers.softwareSize.size}}
{{openaireEntities.SOFTWARE}}</span>
</span>
<span *ngIf="type=='persistent'">
<span *ngIf="type=='persistent'">
<span>Persistent identifiers and registries</span>
</span>
<span *ngIf="type=='funder' && numbersComponent.showProjects && numbers?.mergedFundersSize && numbers?.projectsSize">
<span *ngIf="type=='funder' && numbersComponent.showProjects && numbers?.fundersSize && numbers?.projectsSize">
<span
class="uk-text-bold">{{numbers.mergedFundersSize.number|number}}{{numbers.mergedFundersSize.size}}
funders</span><span> and</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>
class="uk-text-bold"> {{numbers.projectsSize.number|number}}{{numbers.projectsSize.size}}
funded grants</span>
</span>
</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>
</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>
</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>
<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>
</div>
</div>
</div>
<ng-template #scrolling_text let-position_class="position_class">
<div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 15%; end: 100% + 100vh - 200vh; opacity: 0,1 20%,1 99%,0">
<h3 class="uk-h2">
<span class="uk-text-primary">Deposit</span> your research<span class="uk-text-primary">.</span>
</h3>
<p class="uk-text-large uk-width-3-4@m">
Whether its publications, data or software,
select an <a href="" target="_blank">OpenAIRE compatible repository</a> 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.
</p>
<div class="uk-margin-medium-top">
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/participate/deposit/learn-how">Start Deposit</a>
</div>
</div>
<div #scrolling_element [class]="position_class" uk-parallax="target: #js-sticky-parallax-images-all; start: 200vh; end: 100% + 100vh - 300vh; opacity: 0,1 20%" style="padding-top: 4vh;">
<h3 class="uk-h2">
<span class="uk-text-primary">Link</span> your work<span class="uk-text-primary">.</span>
</h3>
<p class="uk-text-large uk-width-3-4@m">
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.
</p>
<div class="uk-margin-medium-top">
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/participate/claim">Start Linking</a>
</div>
</div>
</ng-template>
<div class="uk-section uk-section-secondary">
<div class="uk-container uk-container-large">
<div class="uk-width-1-1">
<h2 class="uk-h1 uk-margin-large-top">Share your research<span class="uk-text-primary">.</span></h2>
</div>
<div id="js-sticky-parallax-images-all" style="min-height: 400vh">
<div class="uk-visible@m uk-height-viewport explore-dark-logo-background uk-sticky" uk-sticky="bottom: #js-sticky-parallax-images-all; target-offset: true">
<div class="uk-grid" uk-grid style="height: 100vh;">
<div class="uk-width-expand uk-first-column uk-position-relative uk-height-1-1">
<div class="explore-dark-logo-background">
<div uk-parallax="target: #js-sticky-parallax-images-all;">
<img class="uk-position-center uk-position-z-index" src="assets/explore-assets/home/tablet.png" alt="ipad" loading="lazy"
style="width: 100%;">
<img class="uk-position-center" src="assets/explore-assets/home/1.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 100vh; end: 100% + 100vh - 160vh; opacity: 1,1 99%,0; easing:0"
style="width: 100%;">
<img class="uk-position-center" src="assets/explore-assets/home/2.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 150vh; end: 100% + 100vh - 210vh; opacity: 0,1 20%,1 99%,0; easing:0"
style="width: 100%;">
<img class="uk-position-center" src="assets/explore-assets/home/3.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 200vh; end: 100% + 100vh - 260vh; opacity: 0,1 20%,1 99%,0; easing:0"
style="width: 100%;">
<img class="uk-position-center" src="assets/explore-assets/home/4.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 250vh; end: 100% + 100vh - 310vh; opacity: 0,1 20%,1; easing:0"
style="width: 100%;">
</div>
</div>
</div>
</div>
</div>
<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>
<!-- 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-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 class="uk-inline uk-width-expand uk-height-1-1 uk-margin-large-left">
<div>
<div uk-parallax="target: #js-sticky-parallax-images-all; y: 55vh, 40vh;">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-center-left'}"></ng-container>
</div>
</div>
</div>
</div>
</div>
<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 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 class="uk-hidden@m uk-height-viewport explore-dark-logo-background" uk-sticky="bottom: #js-sticky-parallax-images-all">
<div class="uk-flex uk-flex-column">
<div class="explore-dark-logo-background uk-inline uk-width-1-1" style="height: 40vh;">
<img class="uk-position-center uk-position-z-index" src="assets/explore-assets/home/tablet.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all;" style="width: 70%;">
<img class="uk-position-center" src="assets/explore-assets/home/1.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 100vh; end: 100% + 100vh - 160vh; opacity: 1,1 99%,0; easing:0"
style="width: 70%;">
<img class="uk-position-center" src="assets/explore-assets/home/2.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 150vh; end: 100% + 100vh - 210vh; opacity: 0,1 20%,1 99%,0; easing:0"
style="width: 70%;">
<img class="uk-position-center" src="assets/explore-assets/home/3.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 200vh; end: 100% + 100vh - 260vh; opacity: 0,1 20%,1 99%,0; easing:0"
style="width: 70%;">
<img class="uk-position-center" src="assets/explore-assets/home/4.png" alt="ipad" loading="lazy"
uk-parallax="target: #js-sticky-parallax-images-all; start: 250vh; end: 100% + 100vh - 310vh; opacity: 0,1 20%,1; easing:0"
style="width: 70%;">
</div>
<div class="uk-inline uk-width-expand">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-top-center'}"></ng-container>
</div>
</div>
</div>
</div>
</div>
</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>
<!-- 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-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 Research 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 Research 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/explore-assets/home/graph.svg" alt="ipad" loading="lazy">
</div>
</div>
</div>
</div>
<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 Research 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 Research 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 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 #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>

View File

@ -38,21 +38,14 @@
color: @global-secondary-background;
}
}
}
.slider-image {
min-width: 550px;
}
@media only screen and (min-width: @breakpoint-large) {
@media only screen and (min-width: @breakpoint-medium) {
.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;
background-position: left 95%;
background-size: 65%;
}
}

View File

@ -36,34 +36,82 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
public logos = {
"publication": [
[
"publications.png"
"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"
],
[
"publications2.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"
]
],
"software": [
[
"software.png"
"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"
]
],
"dataset": [
[
"datasets.png"
"logo-scholexplorer.png",
"logo-zenodo.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"
]
],
"persistent": [
[
"pids.png"
"logo-re3data.png",
"logo-orcid.png",
"logo-opendoar.png",
"logo-grid.png",
"logo-fairsharing.png",
"logo-ror.png",
"logo-datacite.png",
"logo-crossref.png"
]
],
"funder": [
[
"funders.png"
"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"
]
]
};
public portalName: string = "";
public pageTitle = "OpenAIRE";
public keyword: string = "";
public searchFields: SearchFields = new SearchFields();
@ -73,15 +121,16 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
public properties: EnvProperties = properties;
public openaireEntities = OpenaireEntities;
public readMore: boolean = false;
public showQuickContact: boolean;
@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"
// };
resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = {
filter: null,
selected: true,
filterId: "resultbestaccessright",
value: "Open Access"
};
selectedEntity = "all";
selectedEntitySimpleUrl;
selectedEntityAdvancedUrl;
@ -108,7 +157,7 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
{value: "lcsh:Technology", label: "Technology"},
];
stringUtils = new StringUtils();
// disableSelect: boolean = true;
disableSelect: boolean = true;
constructor(
private _router: Router,
@ -124,7 +173,6 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
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() {
@ -165,7 +213,9 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
if (this.properties != null) {
var url = this.properties.domain + this.properties.baseLink + this._router.url;
this._meta.updateTag({content: url}, "property='og:url'");
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE").subscribe());
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE").subscribe());
}
if(this.numbersComponent) {
this.numbersComponent.showPublications = false;
this.numbersComponent.showDatasets = false;
@ -175,11 +225,8 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
this.numbersComponent.showDataProviders = false;
this.numbersComponent.showOrganizations = false;
}
this.subscriptions.push(this.config.portalAsObservable.subscribe(data => {
this.subscriptions.push(this.config.communityInformationState.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"];
@ -234,7 +281,6 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
public ngOnDestroy() {
this.quickContactService.setDisplay(true);
this.clear();
}
@ -252,7 +298,13 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
this.quickContactService.setDisplay(!entry.isIntersecting);
if (entry.isIntersecting && this.showQuickContact) {
this.showQuickContact = false;
this.quickContactService.setDisplay(this.showQuickContact);
} else if (!entry.isIntersecting && !this.showQuickContact) {
this.showQuickContact = true;
this.quickContactService.setDisplay(this.showQuickContact);
}
});
}, options);
intersectionObserver.observe(this.contact.nativeElement);
@ -288,47 +340,48 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
this.selectedEntityAdvancedUrl = $event.advancedUrl;
}
goTo() {
goTo(simple: boolean) {
let url = (simple) ? this.selectedEntitySimpleUrl : this.selectedEntityAdvancedUrl;
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([this.properties.searchLinkToAll], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)});
this._router.navigate([url], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)});
}
getSubjectParameter(param) {
return {'f0': 'resultsubject', 'fv0': '"' + (param) + '"', size: 50};
}
// disableSelectChange(event: boolean) {
// this.disableSelect = event;
// this.cdr.detectChanges();
// }
disableSelectChange(event: boolean) {
this.disableSelect = event;
this.cdr.detectChanges();
}
}

View File

@ -10,10 +10,12 @@ 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";
@ -21,33 +23,34 @@ 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 {book, cog, database, earth} from "../openaireLibrary/utils/icons/icons";
import {arrow_right, 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, AdvancedSearchInputModule, InputModule, SearchInputModule, SliderUtilsModule
SEOServiceModule, OtherPortalsModule, EntitiesSelectionModule, QuickSelectionsModule, IconsModule, NumbersModule, AdvancedSearchInputModule, InputModule
],
declarations: [
HomeComponent
],
providers:[],
providers:[
PreviousRouteRecorder
],
exports: [
HomeComponent
]
})
export class HomeModule {
constructor(private iconsService: IconsService) {
this.iconsService.registerIcons([book, cog, database, earth]);
this.iconsService.registerIcons([arrow_right, book, cog, database, earth]);
}
}

View File

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

View File

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

View File

@ -0,0 +1,13 @@
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 { }

View File

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

View File

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

View File

@ -0,0 +1,12 @@
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 { }

View File

@ -0,0 +1,12 @@
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 { }

View File

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

View File

@ -0,0 +1,13 @@
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 { }

View File

@ -0,0 +1,13 @@
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 { }

View File

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

View File

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

View File

@ -0,0 +1,12 @@
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 { }

View File

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

View File

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

View File

@ -0,0 +1,13 @@
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 { }

View File

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

View File

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

View File

@ -0,0 +1,13 @@
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 { }

View File

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

View File

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

View File

@ -0,0 +1,13 @@
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 { }

View File

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

View File

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

View File

@ -0,0 +1,13 @@
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 { }

View File

@ -0,0 +1,14 @@
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 { }

View File

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

View File

@ -0,0 +1,23 @@
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 { }

View File

@ -0,0 +1,15 @@
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 { }

View File

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

@ -1 +1 @@
Subproject commit 6ab50b04cc8abbd617e6636cc86414241589d444
Subproject commit ac83453f7e3c261864d87f73533d785aae97f0fd

View File

@ -0,0 +1,21 @@
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";
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireMyOrcidLinksComponent,
canActivate: [LoginGuard], data: {
redirect: properties.errorLink, community : 'openaire'
},
canDeactivate: [PreviousRouteRecorder]
}
])
]
})
export class MyOrcidLinksRoutingModule { }

View File

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

View File

@ -0,0 +1,24 @@
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 { }

View File

@ -0,0 +1,21 @@
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";
import {properties} from "../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
{ path: '', component: OpenaireOrcidComponent,
canActivate: [LoginGuard], data: {
redirect: properties.errorLink, community : 'openaire'
},
canDeactivate: [PreviousRouteRecorder] }
])
]
})
export class OrcidRoutingModule { }

View File

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

View File

@ -0,0 +1,24 @@
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 { }

View File

@ -0,0 +1,24 @@
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";
import {properties} from "../../../environments/environment";
@NgModule({
imports: [
RouterModule.forChild([
// { path: '', component: OpenaireSearchMyResultsInOrcidComponent, canActivate: [IsRouteEnabled], data: {
{ path: '', component: OpenaireSearchRecommendedResultsForOrcidComponent,
canActivate: [LoginGuard], data: {
redirect: properties.errorLink, community : 'openaire'
},
canDeactivate: [PreviousRouteRecorder]
}
])
]
})
export class SearchRecommendedResultsForOrcidRoutingModule { }

View File

@ -0,0 +1,16 @@
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() {}
}

View File

@ -0,0 +1,27 @@
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 { }

View File

@ -0,0 +1,18 @@
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 {
}

View File

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

View File

@ -0,0 +1,15 @@
import {Component} from "@angular/core";
import {properties} from "../../environments/environment";
@Component({
selector: 'explore-sdg',
template: `
<sdg [piwikSiteId]="piwikSiteId"></sdg>
`
})
export class ExploreSdgComponent {
piwikSiteId = properties.piwikSiteId;
constructor() {
}
}

View File

@ -0,0 +1,26 @@
import {CommonModule} from "@angular/common";
import {NgModule} from "@angular/core";
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
import {LibSdgRoutingModule} from "./sdg-routing.module";
import {SdgRoutingModule} from "../openaireLibrary/sdg/sdg-routing.module";
import {SdgModule} from "../openaireLibrary/sdg/sdg.module";
import {ExploreSdgComponent} from "./sdg.component";
@NgModule({
imports: [
CommonModule,
LibSdgRoutingModule,
SdgRoutingModule,
SdgModule
],
declarations: [
ExploreSdgComponent
],
exports: [
ExploreSdgComponent
],
providers: [
PreviousRouteRecorder
]
})
export class LibSdgModule { }

View File

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

View File

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

View File

@ -5,6 +5,7 @@ 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({
@ -16,7 +17,7 @@ import {SearchResearchResultsModule} from "../../openaireLibrary/searchPages/sea
declarations: [
OpenaireSearchResearchResultsComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchResearchResultsComponent
]

View File

@ -5,6 +5,8 @@ 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({
@ -16,7 +18,7 @@ import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchCompatibleDataprovidersComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchCompatibleDataprovidersComponent
]

View File

@ -4,6 +4,7 @@ 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";
@ -16,7 +17,7 @@ import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchEntityRegistriesComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchEntityRegistriesComponent
]

View File

@ -4,6 +4,7 @@ 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: [
@ -13,7 +14,7 @@ import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchJournalsComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchJournalsComponent
]

View File

@ -3,6 +3,7 @@ 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: [
@ -13,7 +14,7 @@ SearchDataProvidersModule, SearchDataProvidersRoutingModule
declarations: [
OpenaireSearchDataprovidersComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchDataprovidersComponent
]

View File

@ -5,6 +5,7 @@ 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";
@ -17,7 +18,7 @@ import {SearchOrganizationsModule} from "../../openaireLibrary/searchPages/searc
declarations: [
OpenaireSearchOrganizationsComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchOrganizationsComponent
]

View File

@ -5,6 +5,7 @@ import { FormsModule } from '@angular/forms';
import{ SearchProjectsRoutingModule} from './searchProjects-routing.module';
import{OpenaireSearchProjectsComponent} from './searchProjects.component';
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
import { SearchProjectsModule} from '../../openaireLibrary/searchPages/searchProjects.module';
@NgModule({
imports: [
@ -14,7 +15,7 @@ import { SearchProjectsModule} from '../../openaireLibrary/searchPages/searchPro
declarations: [
OpenaireSearchProjectsComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchProjectsComponent
]

View File

@ -5,6 +5,7 @@ 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({
@ -16,7 +17,7 @@ import {SearchResearchResultsModule} from "../../openaireLibrary/searchPages/sea
declarations: [
OpenaireSearchResearchResultsComponent
],
providers:[],
providers:[PreviousRouteRecorder],
exports: [
OpenaireSearchResearchResultsComponent
]

View File

@ -0,0 +1,18 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import {OpenaireMailPrefsComponent } from './mailPrefs.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: OpenaireMailPrefsComponent, canActivate: [IsRouteEnabled, LoginGuard],
data: {redirect: properties.errorLink, community : 'openaire'}, canDeactivate: [PreviousRouteRecorder]}])
]
})
export class MailPrefsRoutingModule { }

View File

@ -0,0 +1,25 @@
import {Component} from '@angular/core';
@Component({
selector: 'openaire-mailPrefs',
template: `
<div id="tm-main" class=" uk-section uk-margin-small-top tm-middle">
<div uk-grid uk-grid>
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first">
<mailPrefs [showSaveResetButtons]="true"></mailPrefs>
</div>
</div>
</div>
`
})
export class OpenaireMailPrefsComponent {
constructor () {
}
ngOnInit() {
}
}

View File

@ -0,0 +1,22 @@
import { NgModule } from '@angular/core';
import { SharedModule } from '../openaireLibrary/shared/shared.module';
import { OpenaireMailPrefsComponent } from './mailPrefs.component';
import { MailPrefsRoutingModule } from './mailPrefs-routing.module';
import { MailPrefsModule } from '../openaireLibrary/connect/userEmailPreferences/mailsPrefs.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,
MailPrefsRoutingModule,
MailPrefsModule
],
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
declarations: [
OpenaireMailPrefsComponent
]
})
export class LibMailPrefsModule { }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

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