Compare commits
466 Commits
production
...
master
@ -0,0 +1,168 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
||||
|
||||
*For each release, use the following sub-sections:*
|
||||
|
||||
- *Added (for new features)*
|
||||
- *Changed (for changes in existing functionality)*
|
||||
- *Deprecated (for soon-to-be removed features)*
|
||||
- *Removed (for now removed features)*
|
||||
- *Fixed (for any bug fixes)*
|
||||
- *Security (in case of vulnerabilities)*
|
||||
|
||||
## [production-release-march-2024] - 2024/03/04
|
||||
### Changed
|
||||
* Performance improvements
|
||||
* Search pages: Access Routes, impact-based indicators, usage counts: Open drops on click, instead of hover
|
||||
* Linking: change Datacite api from /works to /dois
|
||||
* Updated funding text in footer
|
||||
* Removed tooltips from search results
|
||||
* UI updates on search pages
|
||||
* Paging only at the bottom under the search results
|
||||
* Removed number of results
|
||||
* Removed results per page option
|
||||
|
||||
### Fixed
|
||||
* z-index issue in dropdowns inside modals
|
||||
* Change search tab from menu
|
||||
* Requests in bulk DOIs upload in linkinh
|
||||
* View all for search filters
|
||||
* Research products detailed page: Provenance label in funded by
|
||||
|
||||
### Added
|
||||
* Full-Text link in Research products
|
||||
|
||||
## [production-release-february-2024] - 2024/02/12
|
||||
### Changed
|
||||
* Remove "open access" as preselected filter
|
||||
* Rounded numbers in search tabs
|
||||
* Home page: Performance improvements on images loading
|
||||
* Home page, Search page, Funders page: Performance improvements on services requests
|
||||
|
||||
### Fixed
|
||||
* Filtering out in funding levels according to selected funder when querying 100 values
|
||||
* Filters in claims & in organization landing > projects tab were always loading
|
||||
* Research products landing page: Added providers in versions
|
||||
* SEO fixes in landing pages
|
||||
|
||||
## [production-release-january-2024] - 2024/02/01
|
||||
### Changed
|
||||
* Updated FoS search filter - do not display code
|
||||
* Removed "BETA" indication from FoS
|
||||
* Access search filter: Display always all the predefined values
|
||||
* Filters: remove number of values
|
||||
* Filters: Get 7 value (display 6) and 100 on "view more" click
|
||||
* My claims: remove urls for pending claims
|
||||
* Improve queries for search organizations & data sources
|
||||
|
||||
### Fixed
|
||||
* Search query with input full ORCID url or just ORCID id
|
||||
* In search, added also in count query for data sources the datasource pid check
|
||||
* Landing: min-height needed in metrics box
|
||||
|
||||
### Added
|
||||
* Linking: responsive in mobile
|
||||
|
||||
## [production-release-november-2023-v2] - 2023/11/28
|
||||
### Added
|
||||
* Add sorting options with impact factors in search results page
|
||||
|
||||
### Changed
|
||||
* Data source landing: get collected full texts from new stats API
|
||||
* Updated parsing of measures - in results: views/downloads per data source
|
||||
|
||||
### Fixed
|
||||
* Updated query for funders number in Funders page
|
||||
* Updated query for funders number is first page
|
||||
* Advanced Search Results: funder field to return all funders
|
||||
* Advanced Search Projects: funder field to return all funders
|
||||
|
||||
## [production-release-november-2023] - 2023/11/09
|
||||
### Added
|
||||
* Missing funders' logos locally in Explore assets
|
||||
|
||||
### Changed
|
||||
* Deposit search page: UI improvement in “Go to repository” button
|
||||
|
||||
### Fixed
|
||||
* Reverted version of UIkit back to version 3.16.24 - previous version caused bug with dropdowns
|
||||
|
||||
## [production-release-october-2023] - 2023/10/18
|
||||
### Added
|
||||
* Search page: Add view more option on overflow (e.g authors, partners, subjects, projects)
|
||||
|
||||
### Changed
|
||||
* Upgrade to Angular 16
|
||||
* New Claims API
|
||||
* New Funders Page
|
||||
|
||||
### Fixed
|
||||
* Reverted version of UIkit to version 3.16.14 because of parallax
|
||||
* A persistent identifier can resolve in more than one pid types
|
||||
|
||||
## [production-release-september-2023] - 2023/09/25
|
||||
### FIXED
|
||||
* Error on grant access in ORCID Search & Link Wizard
|
||||
* Added missing id in linking from the project landing
|
||||
* Added check in search data sources parsing
|
||||
|
||||
## [production-release-august-2023] - 2023/08/25
|
||||
### Added
|
||||
* Search mobile: Added actions
|
||||
* Detailed pages - mobile: Added search-bar
|
||||
* Mobile: new drops and dropdowns
|
||||
|
||||
### Changed
|
||||
* Linking: Redesign of results view
|
||||
* Advanced search form: Add autocomplete input for eosc subject field
|
||||
* Detailed pages - mobile: UI updates & improvements
|
||||
|
||||
### Fixed
|
||||
* Advanced search and detailed page
|
||||
* Added a necessary check in html of detailed pages
|
||||
|
||||
## [production-release-may-2023] - 2023/05/19
|
||||
### Added
|
||||
* Detailed research products page: Added suggest modals for Sustainable Development Goals and Fields of Science
|
||||
* Get research products, projects & data sources usage counts from index
|
||||
|
||||
### Changed
|
||||
* Redesign of detailed pages and mobile version
|
||||
|
||||
### Fixed
|
||||
* Fix path for fos/sdg vocabularies in advanced search
|
||||
* Search page improvements
|
||||
* UI updates & improvements in search results and detailed pages (minor)
|
||||
|
||||
## [production-release-january-2023] - 2023/01/18
|
||||
### FIXED
|
||||
* Contact us form: Email body was either empty or incomplete
|
||||
* Contact us page: After sending an email, clear recaptcha
|
||||
|
||||
|
||||
## [production-release-december-2022] - 2022/12/21
|
||||
### Added
|
||||
* Link to blog in Sustainable Development Goals page
|
||||
|
||||
### Changed
|
||||
* SEO updates and mobile menu
|
||||
|
||||
### Fixed
|
||||
* Linking: Changed Crossref requests for bulk uploaded DOIs
|
||||
* Medium screens: not sticky navbar causing error
|
||||
|
||||
## [production-release-november-2022] - 2022/11/30
|
||||
### Added
|
||||
* EOSC subjects from eoscifguidelines field & Advanced field "EOSC Subject"
|
||||
* New Contact us page
|
||||
|
||||
### Changed
|
||||
* Upgrade to Angular 14
|
||||
* Refinement of filters
|
||||
* Advanced search form: UI updates and smooth scrolling
|
||||
* FoS and deposit pages updates
|
||||
* Bip Finder: Updated parsing and labels for Bip Finder scores & updated link to BiP Finder
|
@ -0,0 +1,14 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {ContactComponent} from './contact.component';
|
||||
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: ContactComponent, canActivate: [IsRouteEnabled], canDeactivate: [PreviousRouteRecorder]}
|
||||
])
|
||||
]
|
||||
})
|
||||
export class ContactRoutingModule { }
|
@ -0,0 +1,22 @@
|
||||
<div>
|
||||
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-padding-remove-top uk-container uk-container-large uk-flex uk-flex-center"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-padding-small uk-width-1-2@l uk-width-2-3@m uk-width-1-1">
|
||||
<contact-us #contactUs [sending]="sending" [scrollspy]="true"
|
||||
[contactForm]="contactForm" (sendEmitter)="send($event)">
|
||||
<h1 page-title class="uk-margin-auto uk-text-center" uk-scrollspy-class>
|
||||
Contact us to <br> learn more<span class="uk-text-primary">.</span>
|
||||
</h1>
|
||||
</contact-us>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #modal (alertOutput)="goToHome()">
|
||||
Our team will respond to your submission soon.<br>
|
||||
Press OK to redirect to OpenAIRE Explore home page.
|
||||
</modal-alert>
|
@ -0,0 +1,158 @@
|
||||
import {Component, OnInit, ViewChild} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {EmailService} from "../openaireLibrary/utils/email/email.service";
|
||||
import {Email} from "../openaireLibrary/utils/email/email";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {Composer} from "../openaireLibrary/utils/email/composer";
|
||||
import {Meta, Title} from "@angular/platform-browser";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
|
||||
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {FormBuilder, FormGroup, Validators} from "@angular/forms";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {NotificationHandler} from "../openaireLibrary/utils/notification-handler";
|
||||
import {ContactUsComponent} from "../openaireLibrary/contact-us/contact-us.component";
|
||||
|
||||
@Component({
|
||||
selector: 'contact',
|
||||
templateUrl: './contact.component.html',
|
||||
})
|
||||
|
||||
export class ContactComponent implements OnInit {
|
||||
public url: string = null;
|
||||
public pageTitle: string = "OpenAIRE - Explore | Contact Us";
|
||||
public description: string = "Contact us to learn more about OpenAIRE Explore";
|
||||
public sending = true;
|
||||
public email: Email;
|
||||
public properties: EnvProperties = properties;
|
||||
public pageContents = null;
|
||||
public divContents = null;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Contact us'}];
|
||||
public contactForm: FormGroup;
|
||||
@ViewChild('modal') modal;
|
||||
private subscriptions = [];
|
||||
@ViewChild('contactUs') contactUsComponent : ContactUsComponent;
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private _router: Router,
|
||||
private _emailService: EmailService,
|
||||
private _meta: Meta,
|
||||
private _title: Title,
|
||||
private seoService: SEOService,
|
||||
private _piwikService: PiwikService,
|
||||
private fb: FormBuilder,
|
||||
private helper: HelperService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this._title.setTitle('OpenAIRE - Explore | Contact Us');
|
||||
|
||||
this.properties = properties;
|
||||
this.email = {body: '', subject: '', recipients: []};
|
||||
this.subscriptions.push( this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
this.updateTitle(this.pageTitle);
|
||||
this.updateDescription(this.description);
|
||||
this.reset();
|
||||
// this.getPageContents();
|
||||
this.sending = false;
|
||||
}
|
||||
|
||||
private getPageContents() {
|
||||
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'explore', this._router.url).subscribe(contents => {
|
||||
this.pageContents = contents;
|
||||
}));
|
||||
}
|
||||
|
||||
public send(event) {
|
||||
HelperFunctions.scroll();
|
||||
if(event.valid === true) {
|
||||
this.sendMail(this.properties.admins);
|
||||
}
|
||||
}
|
||||
|
||||
public reset() {
|
||||
this.contactForm = this.fb.group( {
|
||||
name: this.fb.control('', Validators.required),
|
||||
surname: this.fb.control('', Validators.required),
|
||||
email: this.fb.control('', [Validators.required, Validators.email]),
|
||||
affiliation: this.fb.control(''),
|
||||
message: this.fb.control('', Validators.required),
|
||||
recaptcha: this.fb.control('', Validators.required),
|
||||
});
|
||||
if(this.contactUsComponent) {
|
||||
this.contactUsComponent.resetRecaptcha();
|
||||
}
|
||||
}
|
||||
|
||||
private sendMail(admins: any) {
|
||||
this.sending = true;
|
||||
this.subscriptions.push(this._emailService.contact(this.properties,
|
||||
Composer.composeEmailForExplore(this.contactForm.value, admins),
|
||||
this.contactForm.value.recaptcha).subscribe(
|
||||
res => {
|
||||
if (res) {
|
||||
this.sending = false;
|
||||
this.reset();
|
||||
this.modalOpen();
|
||||
} else {
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.');
|
||||
}
|
||||
},
|
||||
error => {
|
||||
this.handleError('Email sent failed! Please try again.', error);
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
public modalOpen() {
|
||||
this.modal.okButton = true;
|
||||
this.modal.alertTitle = 'Your request has been successfully submitted';
|
||||
this.modal.alertMessage = false;
|
||||
this.modal.cancelButton = false;
|
||||
this.modal.okButtonLeft = false;
|
||||
this.modal.okButtonText = 'OK';
|
||||
this.modal.open();
|
||||
}
|
||||
|
||||
handleError(message: string, error = null) {
|
||||
if(error) {
|
||||
console.error(error);
|
||||
}
|
||||
NotificationHandler.rise(message, 'danger');
|
||||
this.sending = false;
|
||||
this.contactForm.get('recaptcha').setValue('');
|
||||
}
|
||||
|
||||
public goToHome() {
|
||||
this._router.navigate(['/']);
|
||||
}
|
||||
|
||||
private updateDescription(description: string) {
|
||||
this._meta.updateTag({content: description}, "name='description'");
|
||||
this._meta.updateTag({content: description}, "property='og:description'");
|
||||
}
|
||||
|
||||
private updateTitle(title: string) {
|
||||
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
|
||||
this._title.setTitle(_title);
|
||||
this._meta.updateTag({content: _title}, "property='og:title'");
|
||||
}
|
||||
|
||||
private updateUrl(url: string) {
|
||||
this._meta.updateTag({content: url}, "property='og:url'");
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {ContactComponent} from './contact.component';
|
||||
import {ContactRoutingModule} from "./contact-routing.module";
|
||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
ContactRoutingModule, CommonModule, RouterModule,
|
||||
AlertModalModule, HelperModule,
|
||||
Schema2jsonldModule, SEOServiceModule, ContactUsModule, BreadcrumbsModule, LoadingModule
|
||||
],
|
||||
declarations: [
|
||||
ContactComponent
|
||||
],
|
||||
providers: [],
|
||||
exports: [
|
||||
ContactComponent
|
||||
]
|
||||
})
|
||||
|
||||
export class ContactModule { }
|
@ -1,12 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-error',
|
||||
template: `
|
||||
<error></error>
|
||||
`
|
||||
})
|
||||
|
||||
export class OpenaireErrorPageComponent {
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {FosComponent} from './fos.component';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: FosComponent, canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class FosRoutingModule { }
|
@ -1,60 +0,0 @@
|
||||
<!-- <schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld> -->
|
||||
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
||||
<div class="uk-padding-small">
|
||||
<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-padding-small" uk-grid>
|
||||
<div class="uk-width-3-5@m uk-width-1-1@s uk-flex uk-flex-column uk-flex-center">
|
||||
<h1 uk-scrollspy-class>Fields of Science and Technology<span class="uk-text-primary">.</span></h1>
|
||||
<div uk-scrollspy-class>
|
||||
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
|
||||
</div>
|
||||
<div>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button-text uk-margin-top" uk-scrollspy-class
|
||||
routerLinkActive="router-link-active" routerLink="/">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Learn More</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-2-5@m uk-width-1-1@s uk-text-center">
|
||||
<img src="" loading="lazy">
|
||||
</div>
|
||||
</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-flex uk-flex-middle uk-flex-center uk-padding-small" uk-grid>
|
||||
<div>
|
||||
<input type="text" class="uk-input" style="width: 500px;">
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top uk-padding-small">
|
||||
<div class="uk-grid uk-grid-large" uk-grid>
|
||||
<div class="uk-width-1-4">
|
||||
<div *ngFor="let item of fos; index as i" class="uk-margin-bottom">
|
||||
<a class="uk-text-capitalize" (click)="changeDisplayedFos(i)">
|
||||
{{item.id}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="fos[index]" class="uk-width-3-4">
|
||||
<div class="uk-text-capitalize">
|
||||
<h2 class="uk-margin-remove-top">{{fos[index].id}}</h2>
|
||||
</div>
|
||||
<div class="uk-grid uk-child-width-1-3 uk-margin-large-top uk-margin-large-bottom" uk-grid="masonry: true">
|
||||
<div *ngFor="let child of fos[index].children">
|
||||
<div class="whole-child uk-text-capitalize">
|
||||
<h3 class="uk-h6">{{child.id}}</h3>
|
||||
<div *ngFor="let subChild of child.children" class="uk-margin-small-bottom">
|
||||
{{subChild.id}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,44 +0,0 @@
|
||||
import {HttpClient} from "@angular/common/http";
|
||||
import {Component, OnDestroy, OnInit} from "@angular/core";
|
||||
import {Subscription} from "rxjs";
|
||||
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {properties} from "src/environments/environment";
|
||||
|
||||
@Component({
|
||||
selector: 'fos',
|
||||
templateUrl: 'fos.component.html',
|
||||
styleUrls: ['fos.component.css']
|
||||
})
|
||||
export class FosComponent implements OnInit, OnDestroy {
|
||||
|
||||
public fos: any = [];
|
||||
public index: number = 0;
|
||||
|
||||
properties: EnvProperties = properties;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'FOS'}];
|
||||
|
||||
subscriptions: Subscription[] = [];
|
||||
|
||||
constructor(
|
||||
private httpClient: HttpClient
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
this.httpClient.get('/assets/vocabulary/fos.json').subscribe(data => {
|
||||
this.fos = data['fos'];
|
||||
});
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
for (let sub of this.subscriptions) {
|
||||
sub.unsubscribe();
|
||||
}
|
||||
}
|
||||
|
||||
changeDisplayedFos(i) {
|
||||
this.index = i;
|
||||
// console.log(this.fos[this.index]);
|
||||
}
|
||||
}
|
@ -1,28 +0,0 @@
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {NgModule} from "@angular/core";
|
||||
import {FormsModule} from "@angular/forms";
|
||||
import {RouterModule} from "@angular/router";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
|
||||
import {FosRoutingModule} from './fos-routing.module';
|
||||
import {FosComponent} from './fos.component';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule, RouterModule,
|
||||
FosRoutingModule, BreadcrumbsModule
|
||||
],
|
||||
declarations: [
|
||||
FosComponent
|
||||
],
|
||||
providers: [
|
||||
PreviousRouteRecorder
|
||||
],
|
||||
exports: [
|
||||
FosComponent
|
||||
]
|
||||
})
|
||||
export class FosModule {
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {FundersComponent} from './funders.component';
|
||||
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{
|
||||
path: '', component: FundersComponent,
|
||||
canActivate: [IsRouteEnabled],
|
||||
canDeactivate: [PreviousRouteRecorder]
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
export class FundersRoutingModule { }
|
@ -0,0 +1,48 @@
|
||||
@import (reference) "~src/assets/openaire-theme/less/color.less";
|
||||
|
||||
|
||||
.custom-coins-dot:after {
|
||||
content: "";
|
||||
background-image: url("~src/assets/explore-assets/funders/coins.svg");
|
||||
display: inline-block;
|
||||
background-size: 100% 100%;
|
||||
height: 35px;
|
||||
width: 35px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.custom-handshake-dot:after {
|
||||
content: "";
|
||||
background-image: url("~src/assets/explore-assets/funders/handshake.svg");
|
||||
display: inline-block;
|
||||
background-size: 100% 100%;
|
||||
height: 30px;
|
||||
width: 30px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.custom-view-button {
|
||||
padding: 4px;
|
||||
background: @light-color;
|
||||
border: 1px solid @disable-color;
|
||||
border-radius: 4px;
|
||||
icon {
|
||||
color: @disable-color;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background: transparent linear-gradient(315deg, @primary-light-color 0%, @primary-dark-color 100%) 0% 0% no-repeat padding-box;
|
||||
icon {
|
||||
color: @light-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.uk-card {
|
||||
&.funder-grid {
|
||||
border-bottom: 4px solid fade(@funder-color, 30%);
|
||||
}
|
||||
&.funder-list {
|
||||
border-left: 4px solid fade(@funder-color, 30%);
|
||||
}
|
||||
}
|
@ -0,0 +1,375 @@
|
||||
import {ChangeDetectorRef, Component, OnInit} from '@angular/core';
|
||||
import {Router} from '@angular/router';
|
||||
import {Subscriber, Subscription, zip} from "rxjs";
|
||||
import {Meta, Title} from "@angular/platform-browser";
|
||||
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service';
|
||||
import {StakeholderService} from '../openaireLibrary/monitor/services/stakeholder.service';
|
||||
import {Option} from '../openaireLibrary/sharedComponents/input/input.component';
|
||||
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
|
||||
import {HelperFunctions} from '../openaireLibrary/utils/HelperFunctions.class';
|
||||
import {NumberUtils} from '../openaireLibrary/utils/number-utils.class';
|
||||
import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
|
||||
import {FormBuilder, FormControl} from '@angular/forms';
|
||||
import {debounceTime, distinctUntilChanged} from 'rxjs/operators';
|
||||
import {GroupedRequestsService} from "../openaireLibrary/services/groupedRequests.service";
|
||||
|
||||
@Component({
|
||||
selector: 'funders',
|
||||
templateUrl: './funders.component.html',
|
||||
styleUrls: ['funders.component.less']
|
||||
})
|
||||
|
||||
export class FundersComponent implements OnInit {
|
||||
private subscriptions: Subscription[] = [];
|
||||
url: string = null;
|
||||
pageTitle: string = "OpenAIRE - Explore | Funders";
|
||||
pageDescription: string = "Funders | Be an integral part of the open R&I ecosystem";
|
||||
properties: EnvProperties = properties;
|
||||
breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'funders'}];
|
||||
showLoading: boolean = true;
|
||||
isMobile: boolean = false;
|
||||
funders: any[] = [];
|
||||
displayedFunders: any[] = [];
|
||||
showOptions: Option[];
|
||||
sortOptions: Option[];
|
||||
pageOptions: number[] = [10, 20, 30, 40];
|
||||
show: string = 'all';
|
||||
sortBy: string = 'alphAsc';
|
||||
gridView: boolean = true;
|
||||
currentPage: number = 1;
|
||||
pageSize: number = 10;
|
||||
keywordControl: FormControl;
|
||||
keyword: string;
|
||||
fundersNumber: number = 0;
|
||||
researchProductsNumber: number = 0;
|
||||
projectsNumber: number = 0;
|
||||
fundersMap = new Map<string, {
|
||||
"id": string,
|
||||
"name": string,
|
||||
"alias": string,
|
||||
"researchProducts": number,
|
||||
"openAccessResearchProducts": number,
|
||||
"openAccessPercentage": number,
|
||||
"projects": number,
|
||||
"monitorDashboard": string,
|
||||
"monitorDashboardStatus": string,
|
||||
"logoUrl": string
|
||||
}>();
|
||||
staticLogos: Set<string> = new Set<string>([
|
||||
"arc_________::ARC||Australian Research Council (ARC)||ARC",
|
||||
"asap________::ASAP||Aligning Science Across Parkinson's||ASAP",
|
||||
"cihr________::CIHR||Canadian Institutes of Health Research||CIHR",
|
||||
"euenvagency_::EEA||European Environment Agency||EEA",
|
||||
"inca________::INCA||Institut National du Cancer||INCa",
|
||||
"nhmrc_______::NHMRC||National Health and Medical Research Council (NHMRC)||NHMRC",
|
||||
"nih_________::NIH||National Institutes of Health||NIH",
|
||||
"nserc_______::NSERC||Natural Sciences and Engineering Research Council of Canada||NSERC",
|
||||
"nsf_________::NSF||National Science Foundation||NSF",
|
||||
"sshrc_______::SSHRC||Social Sciences and Humanities Research Council||SSHRC",
|
||||
"taraexp_____::tara||Tara Expeditions Foundation||TARA",
|
||||
"ukri________::UKRI||UK Research and Innovation||UKRI",
|
||||
"wt__________::WT||Wellcome Trust||WT"
|
||||
]);
|
||||
|
||||
constructor(private router: Router,
|
||||
private meta: Meta,
|
||||
private title: Title,
|
||||
private seoService: SEOService,
|
||||
private piwikService: PiwikService,
|
||||
private refineFieldResultsService: RefineFieldResultsService,
|
||||
private stakeholderService: StakeholderService,
|
||||
private layoutService: LayoutService,
|
||||
private cdr: ChangeDetectorRef,
|
||||
private fb: FormBuilder,
|
||||
private groupedRequestsService: GroupedRequestsService) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.layoutService.setRootClass('funders');
|
||||
this.title.setTitle('OpenAIRE - Explore | Funders');
|
||||
this.properties = properties;
|
||||
this.subscriptions.push( this.piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this.router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
this.updateTitle(this.pageTitle);
|
||||
this.updateDescription(this.pageDescription);
|
||||
this.subscriptions.push(this.layoutService.isMobile.subscribe(isMobile => {
|
||||
this.isMobile = isMobile;
|
||||
this.cdr.detectChanges();
|
||||
}));
|
||||
this.showOptions = [
|
||||
{value: 'all', label: 'All funders'},
|
||||
{value: 'dashboard', label: 'Funders with dashboard'}
|
||||
];
|
||||
this.sortOptions = [
|
||||
{value: 'alphAsc', label: 'Alphabetically Asc. (A-Z)'},
|
||||
{value: 'alphDsc', label: 'Alphabetically Dsc. (Z-A)'},
|
||||
{value: 'oaDsc', label: '"Open Access %" Dsc.'}
|
||||
];
|
||||
this.getFunders();
|
||||
this.keywordControl = this.fb.control('');
|
||||
this.subscriptions.push(this.keywordControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(value => {
|
||||
this.keyword = value;
|
||||
this.filtering();
|
||||
}));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
this.layoutService.setRootClass(null);
|
||||
}
|
||||
|
||||
private updateDescription(description: string) {
|
||||
this.meta.updateTag({content: description}, "name='description'");
|
||||
this.meta.updateTag({content: description}, "property='og:description'");
|
||||
}
|
||||
|
||||
private updateTitle(title: string) {
|
||||
var title = ((title.length > 50) ? title.substring(0, 50) : title);
|
||||
this.title.setTitle(title);
|
||||
this.meta.updateTag({content: title}, "property='og:title'");
|
||||
}
|
||||
|
||||
private updateUrl(url: string) {
|
||||
this.meta.updateTag({content: url}, "property='og:url'");
|
||||
}
|
||||
|
||||
private getFunders() {
|
||||
this.subscriptions.push(this.groupedRequestsService.funders().subscribe(data => {
|
||||
let funders = data["funders"];
|
||||
funders.forEach(queriedFunder => {
|
||||
let id = queriedFunder.id;
|
||||
let funder = {
|
||||
"id": id,
|
||||
"name": this.removePartAfterCharacters(queriedFunder.name, "||"),
|
||||
"alias": '',
|
||||
"researchProducts": +queriedFunder.results,
|
||||
"openAccessResearchProducts": +queriedFunder.openResults,
|
||||
"openAccessPercentage": 0,
|
||||
"projects": +queriedFunder.projects,
|
||||
"monitorDashboard": '',
|
||||
"monitorDashboardStatus": '',
|
||||
"logoUrl": ''
|
||||
};
|
||||
|
||||
if((!funder.researchProducts || funder.researchProducts == 0) && (!funder.projects || funder.projects == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(queriedFunder.stakeholder) {
|
||||
let stakeholder = queriedFunder.stakeholder;
|
||||
funder.alias = stakeholder.alias;
|
||||
funder.monitorDashboard = stakeholder.alias;
|
||||
funder.monitorDashboardStatus = stakeholder.visibility;
|
||||
funder.logoUrl = (stakeholder.isUpload ? properties.utilsService + "/download/" : "")+ (stakeholder.logoUrl);
|
||||
}
|
||||
|
||||
if(funder.openAccessResearchProducts && funder.researchProducts) {
|
||||
funder.openAccessPercentage = Math.round((funder.openAccessResearchProducts / funder.researchProducts) * 100);
|
||||
}
|
||||
|
||||
if(!funder.logoUrl && this.staticLogos.has(funder.id)) {
|
||||
let split = funder.id.split("||");
|
||||
let shortname = (split && split.length==3) ? funder.id.split("||")[2] : funder.id;
|
||||
funder.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png";
|
||||
}
|
||||
|
||||
this.fundersMap.set(queriedFunder.id, funder);
|
||||
});
|
||||
// convert funders map into an array
|
||||
this.funders = Array.from(this.fundersMap.values());
|
||||
// calculate total numbers for intro content
|
||||
this.fundersNumber = data.count;
|
||||
this.researchProductsNumber = data.results;
|
||||
this.projectsNumber = data.projects;
|
||||
// sort funders
|
||||
this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
|
||||
// initialize displayedFunders
|
||||
this.displayedFunders = this.funders;
|
||||
this.showLoading = false;
|
||||
}))
|
||||
|
||||
// let refineParams = '&fq=resultbestaccessright%20exact%20%22Open%20Access%22';
|
||||
// this.subscriptions.push(
|
||||
// zip(
|
||||
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties),
|
||||
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties, refineParams),
|
||||
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('funder', 'project', this.properties),
|
||||
// this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL, 'funder')
|
||||
// ).subscribe((data: any[]) => {
|
||||
// // storing all needed data to a map
|
||||
// // 1st call
|
||||
// let queriedFunders1 = data[0][1][0].values;
|
||||
// queriedFunders1.forEach(queriedFunder => {
|
||||
// this.fundersMap.set(queriedFunder.id, {
|
||||
// "id": queriedFunder.id,
|
||||
// "name": queriedFunder.name,
|
||||
// "alias": '',
|
||||
// "researchProducts": +queriedFunder.number,
|
||||
// "openAccessResearchProducts": 0,
|
||||
// "openAccessPercentage": 0,
|
||||
// "projects": 0,
|
||||
// "monitorDashboard": '',
|
||||
// "monitorDashboardStatus": '',
|
||||
// "logoUrl": ''
|
||||
// });
|
||||
// });
|
||||
//
|
||||
// // 2nd call
|
||||
// let queriedFunders2 = data[1][1][0].values;
|
||||
// queriedFunders2.forEach(queriedFunder => {
|
||||
// if(this.fundersMap.has(queriedFunder.id)) {
|
||||
// this.fundersMap.get(queriedFunder.id).openAccessResearchProducts = +queriedFunder.number;
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// // 3rd call
|
||||
// let queriedFunders3 = data[2][1][0].values;
|
||||
// queriedFunders3.forEach(queriedFunder => {
|
||||
// if(+queriedFunder.number > 1) {
|
||||
// if (this.fundersMap.has(queriedFunder.id)) {
|
||||
// this.fundersMap.get(queriedFunder.id).projects = +queriedFunder.number;
|
||||
// } else {
|
||||
// this.fundersMap.set(queriedFunder.id, {
|
||||
// "id": queriedFunder.id,
|
||||
// "name": queriedFunder.name,
|
||||
// "alias": '',
|
||||
// "researchProducts": 0,
|
||||
// "openAccessResearchProducts": 0,
|
||||
// "openAccessPercentage": 0,
|
||||
// "projects": +queriedFunder.number,
|
||||
// "monitorDashboard": '',
|
||||
// "monitorDashboardStatus": '',
|
||||
// "logoUrl": ''
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// // 4th call
|
||||
// let queriedFunders4 = data[3];
|
||||
// queriedFunders4.forEach(queriedFunder => {
|
||||
// let id = queriedFunder.index_id + '||' + queriedFunder.index_name + '||' + queriedFunder.index_shortName;
|
||||
// if(this.fundersMap.has(id) && (
|
||||
// !this.fundersMap.get(id).monitorDashboardStatus
|
||||
// ||
|
||||
// (this.fundersMap.get(id).monitorDashboardStatus == "RESTRICTED" && queriedFunder.visibility == "PUBLIC")
|
||||
// ||
|
||||
// (this.fundersMap.get(id).monitorDashboardStatus == "PRIVATE" && (queriedFunder.visibility == "RESTRICTED" || queriedFunder.visibility == "PUBLIC")))) {
|
||||
// this.fundersMap.get(id).alias = queriedFunder.alias;
|
||||
// this.fundersMap.get(id).monitorDashboard = queriedFunder.alias;
|
||||
// this.fundersMap.get(id).monitorDashboardStatus = queriedFunder.visibility;
|
||||
// this.fundersMap.get(id).logoUrl = (queriedFunder.isUpload ? properties.utilsService + "/download/" : "")+ (queriedFunder.logoUrl);
|
||||
// }
|
||||
// });
|
||||
// this.fundersMap.forEach((value) => {
|
||||
// if(value.openAccessResearchProducts > 0) {
|
||||
// value.openAccessPercentage = Math.round((value.openAccessResearchProducts / value.researchProducts) * 100);
|
||||
// }
|
||||
// if(!value.logoUrl && this.staticLogos.has(value.id)) {
|
||||
// let split = value.id.split("||");
|
||||
// let shortname = (split && split.length==3) ? value.id.split("||")[2] : value.id;
|
||||
// value.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png";
|
||||
// }
|
||||
// });
|
||||
// // convert funders map into an array
|
||||
// this.funders = Array.from(this.fundersMap.values());
|
||||
// // calculate total numbers for intro content
|
||||
// this.calculateNumbers();
|
||||
// // sort funders
|
||||
// this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
|
||||
// // initialize displayedFunders
|
||||
// this.displayedFunders = this.funders;
|
||||
// console.log(this.funders);
|
||||
// this.showLoading = false;
|
||||
// })
|
||||
// );
|
||||
}
|
||||
|
||||
private calculateSum(array, property) {
|
||||
let sum = 0;
|
||||
array.forEach(element => {
|
||||
sum += element[property];
|
||||
});
|
||||
return sum;
|
||||
}
|
||||
|
||||
private calculateNumbers() {
|
||||
this.fundersNumber = this.funders.length;
|
||||
this.researchProductsNumber = this.calculateSum(this.funders, 'researchProducts');
|
||||
this.projectsNumber = this.calculateSum(this.funders, 'projects');
|
||||
}
|
||||
|
||||
get showContentWithNumbers() {
|
||||
return this.fundersNumber && this.researchProductsNumber && this.projectsNumber;
|
||||
}
|
||||
|
||||
formatNumber(num: number | string) {
|
||||
let formatted = NumberUtils.roundNumber(+num);
|
||||
return formatted.number + formatted.size;
|
||||
}
|
||||
|
||||
urlEncodeAndQuote(str: string): string {
|
||||
return StringUtils.quote(StringUtils.URIEncode(str));
|
||||
}
|
||||
|
||||
sortByChanged() {
|
||||
switch(this.sortBy) {
|
||||
case 'alphAsc':
|
||||
this.funders = this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
|
||||
break;
|
||||
case 'alphDsc':
|
||||
this.funders = this.funders.sort((a, b) => b['name'].localeCompare(a['name']));
|
||||
break;
|
||||
case 'oaDsc':
|
||||
this.funders = this.funders.sort((a, b) => b['openAccessPercentage'] - a['openAccessPercentage']);
|
||||
break;
|
||||
}
|
||||
this.filtering();
|
||||
}
|
||||
|
||||
sizeChanged($event) {
|
||||
this.pageSize = $event;
|
||||
this.currentPage = 1;
|
||||
}
|
||||
|
||||
filtering() {
|
||||
let displayedFunders = this.funders;
|
||||
if(!this.keyword){
|
||||
this.keyword = '';
|
||||
}
|
||||
if(this.funders.length) {
|
||||
displayedFunders = displayedFunders.filter(item => (item['name'] && item['name'].toLowerCase().includes(this.keyword.toLowerCase())) || (item['alias'] && item['alias'].toLowerCase().includes(this.keyword.toLowerCase())));
|
||||
}
|
||||
if(this.show == 'dashboard') {
|
||||
displayedFunders = displayedFunders.filter(funder => funder.monitorDashboard && funder.monitorDashboard?.length > 0 && funder.monitorDashboardStatus != 'PRIVATE');
|
||||
}
|
||||
|
||||
this.displayedFunders = displayedFunders;
|
||||
this.currentPage = 1;
|
||||
}
|
||||
|
||||
public updateCurrentPage($event) {
|
||||
this.currentPage = $event.value;
|
||||
HelperFunctions.scrollToId('target');
|
||||
}
|
||||
|
||||
private removePartAfterCharacters(field, characters):string {
|
||||
if(field && field.indexOf(characters) !=-1){
|
||||
return field.split(characters)[0];
|
||||
|
||||
}
|
||||
return field;
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {FundersComponent} from './funders.component';
|
||||
import {FundersRoutingModule} from "./funders-routing.module";
|
||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
import {RefineFieldResultsServiceModule} from '../openaireLibrary/services/refineFieldResultsService.module';
|
||||
import {LogoUrlPipeModule} from '../openaireLibrary/utils/pipes/logoUrlPipe.module';
|
||||
import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
|
||||
import {IconsService} from '../openaireLibrary/utils/icons/icons.service';
|
||||
import {open_access} from '../openaireLibrary/utils/icons/icons';
|
||||
import {closed_access} from '../openaireLibrary/utils/icons/icons';
|
||||
import {InputModule} from '../openaireLibrary/sharedComponents/input/input.module';
|
||||
import {PagingModule} from '../openaireLibrary/utils/paging.module';
|
||||
import {SearchInputModule} from '../openaireLibrary/sharedComponents/search-input/search-input.module';
|
||||
import {GroupedRequestsServiceModule} from "../openaireLibrary/services/groupedRequestsService.module";
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
FundersRoutingModule, CommonModule, RouterModule, AlertModalModule,
|
||||
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, LoadingModule,
|
||||
RefineFieldResultsServiceModule, LogoUrlPipeModule, IconsModule, InputModule,
|
||||
PagingModule, SearchInputModule, GroupedRequestsServiceModule
|
||||
],
|
||||
declarations: [
|
||||
FundersComponent
|
||||
],
|
||||
providers: [],
|
||||
exports: [
|
||||
FundersComponent
|
||||
]
|
||||
})
|
||||
|
||||
export class FundersModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([open_access, closed_access]);
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
@import (reference) "~src/assets/openaire-theme/less/_import-variables";
|
||||
|
||||
@trello-color: #0076BA;
|
||||
|
||||
.home-background {
|
||||
background-color: @global-inverse-color;
|
||||
}
|
||||
|
||||
.link-actions img {
|
||||
width: 17px;
|
||||
}
|
||||
|
||||
.home-logo {
|
||||
img {
|
||||
-webkit-filter: grayscale(1);
|
||||
filter: grayscale(1);
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
|
||||
&:hover img {
|
||||
-webkit-filter: grayscale(0);
|
||||
filter: grayscale(0);
|
||||
transition-duration: 0.3s;
|
||||
}
|
||||
}
|
||||
|
||||
.custom-link {
|
||||
border-bottom: @global-border-width solid @global-border;
|
||||
|
||||
a {
|
||||
text-transform: none;
|
||||
|
||||
.link-title {
|
||||
color: @global-emphasis-color;
|
||||
}
|
||||
|
||||
&:hover .link-title {
|
||||
color: @global-secondary-background;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.slider-image {
|
||||
min-width: 550px;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: @breakpoint-large) {
|
||||
.explore-dark-logo-background {
|
||||
background-image: url("~src/assets/explore-assets/home/explore-dark-logo.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-position: -5% 102%;
|
||||
background-size: 35%;
|
||||
}
|
||||
|
||||
.slider-nav {
|
||||
max-width: 650px;
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { OpenaireDataProviderComponent } from './dataProvider.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireDataProviderComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class DataProviderRoutingModule { }
|
@ -1,17 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-dataprovider',
|
||||
template: `<dataprovider></dataprovider>`,
|
||||
})
|
||||
export class OpenaireDataProviderComponent{
|
||||
constructor ( ) {
|
||||
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { DataProviderModule } from '../../openaireLibrary/landingPages/dataProvider/dataProvider.module';
|
||||
import { OpenaireDataProviderComponent } from './dataProvider.component';
|
||||
import {DataProviderRoutingModule} from './dataProvider-routing.module';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [DataProviderModule, DataProviderRoutingModule],
|
||||
declarations:[OpenaireDataProviderComponent],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
exports:[OpenaireDataProviderComponent]
|
||||
})
|
||||
export class LibDataProviderModule { }
|
@ -1,16 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { OpenaireDatasetComponent } from './dataset.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireDatasetComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class DatasetRoutingModule { }
|
@ -1,7 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-dataset',
|
||||
template: `<result-landing type="dataset"></result-landing>`,
|
||||
})
|
||||
export class OpenaireDatasetComponent{}
|
@ -1,12 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { OpenaireDatasetComponent } from './dataset.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {DatasetRoutingModule} from './dataset-routing.module';
|
||||
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
|
||||
@NgModule({
|
||||
imports: [DatasetRoutingModule, ResultLandingModule],
|
||||
declarations:[OpenaireDatasetComponent],
|
||||
providers:[PreviousRouteRecorder],
|
||||
exports:[OpenaireDatasetComponent]
|
||||
})
|
||||
export class LibDatasetModule { }
|
@ -1,12 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { OpenaireHtmlProjectReportComponent } from './htmlProjectReport.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireHtmlProjectReportComponent ,canDeactivate: [PreviousRouteRecorder]}
|
||||
])
|
||||
]
|
||||
})
|
||||
export class HtmlProjectReportRoutingModule { }
|
@ -1,17 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-htmlProjectReport',
|
||||
template: `<htmlProjectReport></htmlProjectReport>`,
|
||||
})
|
||||
export class OpenaireHtmlProjectReportComponent{
|
||||
constructor ( ) {
|
||||
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { HtmlProjectReportModule } from '../../openaireLibrary/landingPages/htmlProjectReport/htmlProjectReport.module';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import { OpenaireHtmlProjectReportComponent } from './htmlProjectReport.component';
|
||||
import {HtmlProjectReportRoutingModule} from './htmlProjectReport-routing.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [HtmlProjectReportModule, HtmlProjectReportRoutingModule],
|
||||
declarations:[OpenaireHtmlProjectReportComponent],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
exports:[OpenaireHtmlProjectReportComponent]
|
||||
})
|
||||
export class LibHtmlProjectReportModule { }
|
@ -1,13 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { OrganizationModule } from '../../openaireLibrary/landingPages/organization/organization.module';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import { OpenaireOrganizationComponent } from './organization.component';
|
||||
import {OrganizationRoutingModule} from './organization-routing.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [OrganizationModule, OrganizationRoutingModule],
|
||||
declarations:[OpenaireOrganizationComponent],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
exports:[OpenaireOrganizationComponent]
|
||||
})
|
||||
export class LibOrganizationModule { }
|
@ -1,18 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { OpenaireOrganizationComponent } from './organization.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireOrganizationComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class OrganizationRoutingModule { }
|
@ -1,17 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-organization',
|
||||
template: `<organization></organization>`,
|
||||
})
|
||||
export class OpenaireOrganizationComponent{
|
||||
constructor ( ) {
|
||||
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { OpenaireOrpComponent } from './orp.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {OrpRoutingModule} from './orp-routing.module';
|
||||
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
|
||||
@NgModule({
|
||||
imports: [OrpRoutingModule, ResultLandingModule],
|
||||
declarations:[OpenaireOrpComponent],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
exports:[OpenaireOrpComponent]
|
||||
})
|
||||
export class LibOrpModule { }
|
@ -1,17 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { OpenaireOrpComponent } from './orp.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireOrpComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class OrpRoutingModule { }
|
@ -1,7 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-orp',
|
||||
template: `<result-landing type="orp"></result-landing>`,
|
||||
})
|
||||
export class OpenaireOrpComponent{}
|
@ -1,13 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { ProjectModule } from '../../openaireLibrary/landingPages/project/project.module';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import { OpenaireProjectComponent } from './project.component';
|
||||
import {ProjectRoutingModule} from './project-routing.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [ProjectModule, ProjectRoutingModule],
|
||||
declarations:[OpenaireProjectComponent],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
exports:[OpenaireProjectComponent]
|
||||
})
|
||||
export class LibProjectModule { }
|
@ -1,16 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import { OpenaireProjectComponent } from './project.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireProjectComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class ProjectRoutingModule { }
|
@ -1,17 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-project',
|
||||
template: `<project></project>`,
|
||||
})
|
||||
export class OpenaireProjectComponent{
|
||||
constructor ( ) {
|
||||
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import { OpenairePublicationComponent } from './publication.component';
|
||||
import {PublicationRoutingModule} from './publication-routing.module';
|
||||
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [PublicationRoutingModule, ResultLandingModule],
|
||||
declarations:[OpenairePublicationComponent],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
exports:[OpenairePublicationComponent]
|
||||
})
|
||||
export class LibPublicationModule { }
|
@ -1,16 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import {OpenairePublicationComponent } from './publication.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenairePublicationComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class PublicationRoutingModule { }
|
@ -1,8 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-publication',
|
||||
template: `
|
||||
<result-landing type="publication"></result-landing>`,
|
||||
})
|
||||
export class OpenairePublicationComponent {}
|
@ -1,13 +0,0 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {OpenaireResultComponent} from './result.component';
|
||||
import {ResultRoutingModule} from './result-routing.module';
|
||||
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [ResultRoutingModule, ResultLandingModule],
|
||||
declarations:[OpenaireResultComponent],
|
||||
providers:[PreviousRouteRecorder],
|
||||
exports:[OpenaireResultComponent]
|
||||
})
|
||||
export class LibResultModule { }
|
@ -1,17 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import {OpenaireResultComponent } from './result.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireResultComponent, data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class ResultRoutingModule { }
|
@ -1,7 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-publication',
|
||||
template: `<result-landing type="result"></result-landing>`,
|
||||
})
|
||||
export class OpenaireResultComponent{}
|
@ -1,13 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import { OpenaireSoftwareComponent } from './software.component';
|
||||
import {SoftwareRoutingModule} from './software-routing.module';
|
||||
import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module";
|
||||
@NgModule({
|
||||
imports: [SoftwareRoutingModule, ResultLandingModule],
|
||||
declarations:[OpenaireSoftwareComponent],
|
||||
providers:[PreviousRouteRecorder],
|
||||
exports:[OpenaireSoftwareComponent]
|
||||
})
|
||||
export class LibSoftwareModule { }
|
@ -1,14 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import {OpenaireSoftwareComponent } from './software.component';
|
||||
import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireSoftwareComponent, canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class SoftwareRoutingModule { }
|
@ -1,7 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-software',
|
||||
template: `<result-landing type="software"></result-landing>`,
|
||||
})
|
||||
export class OpenaireSoftwareComponent{}
|
@ -1,23 +0,0 @@
|
||||
import { NgModule} from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
|
||||
import {OpenaireUserComponent } from './user.component';
|
||||
import { UserRoutingModule } from './user-routing.module';
|
||||
import { UserModule} from '../openaireLibrary/login/user.module';
|
||||
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule,
|
||||
UserRoutingModule, UserModule
|
||||
|
||||
],
|
||||
providers:[PreviousRouteRecorder],
|
||||
declarations: [
|
||||
OpenaireUserComponent
|
||||
|
||||
]
|
||||
})
|
||||
export class LibUserModule { }
|
@ -1,15 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import {OpenaireUserComponent } from './user.component';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireUserComponent, canDeactivate: [PreviousRouteRecorder]},
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class UserRoutingModule { }
|
@ -1,10 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-user',
|
||||
template: `<user></user>`
|
||||
})
|
||||
|
||||
export class OpenaireUserComponent {
|
||||
|
||||
}
|
@ -1 +1 @@
|
||||
Subproject commit 0c5483ac9b0c0f7d1902ab4dbec51d14495e956a
|
||||
Subproject commit 6ab50b04cc8abbd617e6636cc86414241589d444
|
@ -1,20 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {OpenaireMyOrcidLinksComponent} from "./myOrcidLinks.component";
|
||||
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireMyOrcidLinksComponent,
|
||||
canActivate: [LoginGuard], data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},
|
||||
canDeactivate: [PreviousRouteRecorder]
|
||||
}
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class MyOrcidLinksRoutingModule { }
|
@ -1,16 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-my-orcid-links',
|
||||
template: `
|
||||
<my-orcid-links></my-orcid-links>
|
||||
`
|
||||
})
|
||||
|
||||
export class OpenaireMyOrcidLinksComponent {
|
||||
|
||||
constructor() {}
|
||||
|
||||
public ngOnInit() {}
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {OpenaireMyOrcidLinksComponent} from './myOrcidLinks.component';
|
||||
import {MyOrcidLinksModule} from "../../openaireLibrary/orcid/my-orcid-links/myOrcidLinks.module";
|
||||
import {MyOrcidLinksRoutingModule} from "./myOrcidLinks-routing.module";
|
||||
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule,
|
||||
MyOrcidLinksModule,
|
||||
MyOrcidLinksRoutingModule
|
||||
],
|
||||
declarations: [
|
||||
OpenaireMyOrcidLinksComponent
|
||||
],
|
||||
exports: [
|
||||
OpenaireMyOrcidLinksComponent
|
||||
],
|
||||
providers: [PreviousRouteRecorder, LoginGuard]
|
||||
})
|
||||
export class LibMyOrcidLinksModule { }
|
@ -1,20 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
|
||||
import {OpenaireOrcidComponent} from './orcid.component';
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: OpenaireOrcidComponent,
|
||||
canActivate: [LoginGuard], data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},
|
||||
canDeactivate: [PreviousRouteRecorder] }
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class OrcidRoutingModule { }
|
@ -1,10 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-orcid',
|
||||
template: `
|
||||
<orcid></orcid>
|
||||
`
|
||||
})
|
||||
|
||||
export class OpenaireOrcidComponent {}
|
@ -1,24 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
import {OpenaireOrcidComponent} from './orcid.component';
|
||||
import {OrcidRoutingModule} from './orcid-routing.module';
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {FormsModule} from "@angular/forms";
|
||||
import {OrcidModule} from "../openaireLibrary/orcid/orcid.module";
|
||||
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule,
|
||||
OrcidModule, OrcidRoutingModule
|
||||
],
|
||||
declarations: [
|
||||
OpenaireOrcidComponent
|
||||
],
|
||||
providers: [PreviousRouteRecorder, LoginGuard],
|
||||
exports: [
|
||||
OpenaireOrcidComponent
|
||||
]
|
||||
})
|
||||
export class LibOrcidModule { }
|
@ -1,23 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {OpenaireSearchRecommendedResultsForOrcidComponent} from "./searchRecommendedResultsForOrcid.component";
|
||||
import {FreeGuard} from "../../openaireLibrary/login/freeGuard.guard";
|
||||
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
// { path: '', component: OpenaireSearchMyResultsInOrcidComponent, canActivate: [IsRouteEnabled], data: {
|
||||
{ path: '', component: OpenaireSearchRecommendedResultsForOrcidComponent,
|
||||
canActivate: [LoginGuard], data: {
|
||||
redirect: '/error', community : 'openaire'
|
||||
},
|
||||
canDeactivate: [PreviousRouteRecorder]
|
||||
}
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class SearchRecommendedResultsForOrcidRoutingModule { }
|
@ -1,16 +0,0 @@
|
||||
import {Component} from '@angular/core';
|
||||
|
||||
@Component({
|
||||
selector: 'openaire-search-recommended-results-for-orcid',
|
||||
template: `
|
||||
<search-recommended-results-for-orcid></search-recommended-results-for-orcid>
|
||||
`
|
||||
})
|
||||
|
||||
export class OpenaireSearchRecommendedResultsForOrcidComponent {
|
||||
|
||||
constructor() {}
|
||||
|
||||
public ngOnInit() {}
|
||||
}
|
||||
|
@ -1,27 +0,0 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import {OpenaireSearchRecommendedResultsForOrcidComponent} from "./searchRecommendedResultsForOrcid.component";
|
||||
import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {SearchRecommendedResultsForOrcidModule} from "../../openaireLibrary/orcid/recommend-orcid-links/searchRecommendedResultsForOrcid.module";
|
||||
import {SearchRecommendedResultsForOrcidRoutingModule} from "./searchRecommendedResultsForOrcid-routing.module";
|
||||
import {FreeGuard} from "../../openaireLibrary/login/freeGuard.guard";
|
||||
import {LoginGuard} from "../../openaireLibrary/login/loginGuard.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule,
|
||||
SearchRecommendedResultsForOrcidModule,
|
||||
SearchRecommendedResultsForOrcidRoutingModule
|
||||
],
|
||||
declarations: [
|
||||
OpenaireSearchRecommendedResultsForOrcidComponent
|
||||
],
|
||||
exports: [
|
||||
OpenaireSearchRecommendedResultsForOrcidComponent
|
||||
],
|
||||
// providers: [PreviousRouteRecorder, IsRouteEnabled]
|
||||
providers: [PreviousRouteRecorder, LoginGuard]
|
||||
})
|
||||
export class LibSearchRecommendedResultsForOrcidModule { }
|
@ -1,18 +0,0 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {FormsModule} from '@angular/forms';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {ReloadModule} from '../openaireLibrary/reload/reload.module';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule, RouterModule, ReloadModule
|
||||
],
|
||||
declarations: [],
|
||||
providers: [],
|
||||
exports: []
|
||||
})
|
||||
export class LibReloadModule {
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {SdgComponent} from './sdg.component';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: SdgComponent, canDeactivate: [PreviousRouteRecorder] }
|
||||
])
|
||||
]
|
||||
})
|
||||
export class SdgRoutingModule { }
|
@ -1,54 +0,0 @@
|
||||
.sdg-card {
|
||||
color: #F9F9F9 !important;
|
||||
}
|
||||
.sdg-1 {
|
||||
background-color: #E6233D;
|
||||
}
|
||||
.sdg-2 {
|
||||
background-color: #DF9F00;
|
||||
}
|
||||
.sdg-3 {
|
||||
background-color: #19A220;
|
||||
}
|
||||
.sdg-4 {
|
||||
background-color: #D70023;
|
||||
}
|
||||
.sdg-5 {
|
||||
background-color: #FF0B00;
|
||||
}
|
||||
.sdg-6 {
|
||||
background-color: #00BFE8;
|
||||
}
|
||||
.sdg-7 {
|
||||
background-color: #FFC300;
|
||||
}
|
||||
.sdg-8 {
|
||||
background-color: #B10240;
|
||||
}
|
||||
.sdg-9 {
|
||||
background-color: #FF5D00;
|
||||
}
|
||||
.sdg-10 {
|
||||
background-color: #F50D86;
|
||||
}
|
||||
.sdg-11 {
|
||||
background-color: #FF8A00;
|
||||
}
|
||||
.sdg-12 {
|
||||
background-color: #CA8A03;
|
||||
}
|
||||
.sdg-13 {
|
||||
background-color: #2B772B;
|
||||
}
|
||||
.sdg-14 {
|
||||
background-color: #0098DF;
|
||||
}
|
||||
.sdg-15 {
|
||||
background-color: #00B91C;
|
||||
}
|
||||
.sdg-16 {
|
||||
background-color: #0069A2;
|
||||
}
|
||||
.sdg-17 {
|
||||
background-color: #1C336A;
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
<!-- <schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld> -->
|
||||
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
||||
<div class="uk-padding-small">
|
||||
<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-padding-small" uk-grid>
|
||||
<div class="uk-width-3-5@m uk-width-1-1@s uk-flex uk-flex-column uk-flex-center">
|
||||
<h1 uk-scrollspy-class>Lorem ipsum dolor sit amet, consetetur<span class="">.</span></h1>
|
||||
<div uk-scrollspy-class>
|
||||
We have implemented the UN Sustainable Development Goals ( SDGs) as a <br> classification scheme covering areas of research associated with one or more SDGs <br> (the majority of the SDGs are interrelated). The scheme uses automated allocation <br> of the 17 SDGs and their associated targets and indicators to all fitting documents in <br> Dimensions thereby addressing research areas aligned to the goals.
|
||||
</div>
|
||||
<div>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button-text uk-margin-top" uk-scrollspy-class
|
||||
routerLinkActive="router-link-active" routerLink="/">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Learn More</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-2-5@m uk-width-1-1@s uk-text-center">
|
||||
<img src="../../assets/explore-assets/sdgs-badge.png" loading="lazy">
|
||||
</div>
|
||||
</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 *ngIf="loading">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<div *ngIf="!loading">
|
||||
<div *ngIf="displayedSdgs && displayedSdgs.length" class="uk-padding-small uk-grid uk-child-width-1-4@l uk-child-width-1-2@m" uk-grid>
|
||||
<div *ngFor="let sdg of displayedSdgs">
|
||||
<a [routerLink]="properties.searchLinkToAdvancedResults" [queryParams]="{f0: 'sdg', fv0: sdg.id}" target="_blank">
|
||||
<div class="uk-card uk-card-default uk-card-body" [class]="'sdg-card sdg-' + sdg.code">
|
||||
<div class="uk-text-center uk-margin-bottom">
|
||||
<div>
|
||||
<span class="uk-text-large uk-text-bold">{{sdg.number == null ? '0' : sdg.number | number}}</span>
|
||||
<p class="uk-text-small" style="margin-top: 5px; margin-bottom: 10px;">Research Outcomes</p>
|
||||
</div>
|
||||
<div>
|
||||
<img [src]="'../../assets/explore-assets/sdgs/g' + sdg.code + '.png'" alt="">
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-text-small">
|
||||
Goal {{sdg.code}}
|
||||
</div>
|
||||
<div class="uk-text-small uk-text-bold uk-text-uppercase">
|
||||
{{sdg.label}}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -1,55 +0,0 @@
|
||||
import {HttpClient} from "@angular/common/http";
|
||||
import {Component, OnDestroy, OnInit} from "@angular/core";
|
||||
import {Subscription} from "rxjs";
|
||||
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {properties} from "src/environments/environment";
|
||||
import {RefineFieldResultsService} from "../openaireLibrary/services/refineFieldResults.service";
|
||||
|
||||
@Component({
|
||||
selector: 'sdg',
|
||||
templateUrl: 'sdg.component.html',
|
||||
styleUrls: ['sdg.component.css']
|
||||
})
|
||||
export class SdgComponent implements OnInit, OnDestroy {
|
||||
|
||||
private sdgs: any = [];
|
||||
private sdgsResearchOutcomes: any = [];
|
||||
public displayedSdgs: any = [];
|
||||
|
||||
public loading: boolean;
|
||||
properties: EnvProperties = properties;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'SDG'}];
|
||||
|
||||
subscriptions: Subscription[] = [];
|
||||
|
||||
constructor(
|
||||
private httpClient: HttpClient, private refineFieldResultsService: RefineFieldResultsService
|
||||
) {}
|
||||
|
||||
ngOnInit() {
|
||||
this.loading = true;
|
||||
this.httpClient.get('/assets/vocabulary/sdg.json').subscribe(data => {
|
||||
this.sdgs = data['sdg'];
|
||||
});
|
||||
this.refineFieldResultsService.getRefineFieldsResultsByEntityName(['sdg'], 'result', this.properties, null).subscribe(data => {
|
||||
this.sdgsResearchOutcomes = data[1][0].values;
|
||||
let merged =[];
|
||||
for(let i=0; i<this.sdgs.length; i++){
|
||||
merged.push({
|
||||
...this.sdgs[i],
|
||||
...(this.sdgsResearchOutcomes.find((innerItem) => innerItem.id === this.sdgs[i].id))
|
||||
});
|
||||
}
|
||||
this.displayedSdgs = merged;
|
||||
this.loading = false;
|
||||
});
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
for (let sub of this.subscriptions) {
|
||||
sub.unsubscribe();
|
||||
}
|
||||
}
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {NgModule} from "@angular/core";
|
||||
import {FormsModule} from "@angular/forms";
|
||||
import {RouterModule} from "@angular/router";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {RefineFieldResultsServiceModule} from "../openaireLibrary/services/refineFieldResultsService.module";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
|
||||
import {SdgRoutingModule} from './sdg-routing.module';
|
||||
import {SdgComponent} from './sdg.component';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule, RouterModule,
|
||||
SdgRoutingModule, BreadcrumbsModule, RefineFieldResultsServiceModule,
|
||||
LoadingModule
|
||||
],
|
||||
declarations: [
|
||||
SdgComponent
|
||||
],
|
||||
providers: [
|
||||
PreviousRouteRecorder
|
||||
],
|
||||
exports: [
|
||||
SdgComponent
|
||||
]
|
||||
})
|
||||
export class SdgModule {
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue