Compare commits

..

No commits in common. "master" and "production-release-april-2023" have entirely different histories.

35 changed files with 1068 additions and 1001 deletions

View File

@ -1,6 +1,6 @@
# Monitor
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.3.10 and has been updated to 16.2.4.
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

@ -210,16 +210,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
},
"beta": {
"outputHashing": "media",
@ -230,8 +227,7 @@
}
],
"sourceMap": false,
"optimization": true,
"buildOptimizer": true
"optimization": true
},
"production": {
"outputHashing": "media",
@ -242,8 +238,7 @@
}
],
"sourceMap": false,
"optimization": true,
"buildOptimizer": true
"optimization": true
}
},
"defaultConfiguration": ""

View File

@ -1,6 +1,6 @@
{
"name": "monitor",
"version": "1.0.2",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": " ng serve --port 4500 --disable-host-check --host 0.0.0.0",
@ -21,41 +21,41 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^16.1.8",
"@angular/cdk": "^16.1.7",
"@angular/common": "^16.1.8",
"@angular/compiler": "^16.1.8",
"@angular/core": "^16.1.8",
"@angular/forms": "^16.1.8",
"@angular/localize": "^16.1.8",
"@angular/material": "^16.1.7",
"@angular/platform-browser": "^16.1.8",
"@angular/platform-browser-dynamic": "^16.1.8",
"@angular/platform-server": "^16.1.8",
"@angular/router": "^16.1.8",
"@nguniversal/express-engine": "^16.1.1",
"@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",
"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.2",
"zone.js": "~0.11.4"
},
"devDependencies": {
"@angular-devkit/build-angular": "^16.1.7",
"@angular/cli": "^16.1.7",
"@angular/compiler-cli": "^16.1.8",
"@angular/language-service": "^16.1.8",
"@nguniversal/builders": "^16.1.1",
"@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",
@ -66,6 +66,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

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

View File

@ -0,0 +1,25 @@
<div class="uk-visible@m">
<div class="uk-background-muted">
<div class="uk-container uk-container-large uk-section uk-section-small">
<div class="uk-padding-small uk-padding-remove-horizontal">
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
</div>
<div class="uk-text-center" uk-scrollspy-class>
<h1 class="uk-margin-medium-top uk-margin-medium-bottom">Frequently Asked <br> Questions<span
class="uk-text-primary">.</span></h1>
</div>
</div>
</div>
<helper *ngIf="pageContents" [texts]="pageContents.top"></helper>
</div>
<div class="uk-hidden@m">
<div class="uk-background-muted">
<div class="uk-container uk-container-large">
<div class="uk-text-center" uk-scrollspy-class>
<h1 class="uk-margin-medium-top uk-margin-medium-bottom">Frequently Asked <br> Questions<span
class="uk-text-primary">.</span></h1>
</div>
</div>
</div>
<helper *ngIf="pageContents" [texts]="pageContents.top"></helper>
</div>

View File

@ -10,18 +10,17 @@ import {Subscriber} from "rxjs";
import {Breadcrumb} from '../openaireLibrary/utils/breadcrumbs/breadcrumbs.component';
@Component({
selector: 'support',
templateUrl: 'support.component.html',
styleUrls: ['support.component.less']
selector: 'faqs',
templateUrl: 'faqs.component.html'
})
export class SupportComponent {
export class FaqsComponent {
public pageContents = null;
public divContents = null;
public url: string = null;
public pageTitle: string = "OpenAIRE - Monitor | Support";
public description: string = "OpenAIRE - Monitor | Support";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Support'}];
public pageTitle: string = "OpenAIRE - Monitor | FAQs";
public description: string = "OpenAIRE - Monitor | FAQs";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'FAQs'}];
public properties: EnvProperties = properties;
subscriptions = [];
@ -36,7 +35,9 @@ export class SupportComponent {
}
public ngOnInit() {
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.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);

View File

@ -9,10 +9,9 @@ import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.compo
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
import {properties} from "../../environments/environment";
import {StakeholderEntities} from "../openaireLibrary/monitor/entities/stakeholder";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
@Component({
selector: 'about',
selector: 'how-it-works',
template: `
<div class="uk-visible@m">
<div class="uk-position-relative">
@ -102,7 +101,7 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1b</span>
<p class="uk-text-large uk-margin-xsmall-top">We ingest your project metadata and mine the <a
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a>.
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Research Graph</a>.
</p>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
@ -187,7 +186,7 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
<span class="uk-text-primary">Step 1b</span>
<p class="uk-text-large uk-margin-xsmall-top">We set up an administration dashboard that you can use
to specify which research products of the <a href="https://graph.openaire.eu" target="_blank"
class="text-graph">OpenAIRE Graph</a> are
class="text-graph">OpenAIRE Research Graph</a> are
relevant for you.</p>
<p>If needed, we develop a customized full-text mining algorithm to identify your publications.</p>
</div>
@ -269,8 +268,9 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
<div class="uk-card-body uk-margin-large-bottom">
<span class="uk-text-primary">Step 1b</span>
<p class="uk-text-large uk-margin-xsmall-top">Starting from the
<a href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a> we check for existing data for your institution.</p>
<p class="uk-text-large uk-margin-xsmall-top">Starting from the <a href="https://graph.openaire.eu"
target="_blank" class="text-graph">OpenAIRE
Research Graph</a> we check for existing data for your institution.</p>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
@ -351,7 +351,7 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
<div class="uk-margin-large-top">
<span class="uk-text-primary">Step 1b</span>
<h5 class="uk-margin-xsmall-top">We ingest your project metadata and mine the <a
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a>.
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Research Graph</a>.
</h5>
<p>We infer links to research results: publications, datasets, software, etc.</p>
</div>
@ -433,7 +433,7 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
<span class="uk-text-primary">Step 1b</span>
<h5 class="uk-margin-xsmall-top">We set up an administration dashboard that you can use
to specify which research products of the <a href="https://graph.openaire.eu" target="_blank"
class="text-graph">OpenAIRE Graph</a> are
class="text-graph">OpenAIRE Research Graph</a> are
relevant for you.</h5>
<p>If needed, we develop a customized full-text mining algorithm to identify your publications.</p>
</div>
@ -584,15 +584,21 @@ import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sideb
</div>
</div>
`,
styleUrls: ['about.component.less']
styles: [`
.custom-translate-bottom-left {
transform: translate(-20%, 20%);
}
`]
})
export class AboutComponent {
export class HowItWorksComponent {
public url: string = null;
public pageTitle: string = "OpenAIRE - Monitor | About";
public description: string = "OpenAIRE - Monitor | About - How it works";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'About'}];
public pageTitle: string = "OpenAIRE - Monitor | How it works";
public description: string = "OpenAIRE - Monitor | How it works";
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'About - How it works'}];
public properties: EnvProperties = properties;
public sections: string[] = [StakeholderEntities.FUNDERS, StakeholderEntities.RIS, StakeholderEntities.ORGANIZATIONS];
public activeSection: string = StakeholderEntities.FUNDERS;
public offset: number;
public stakeholderEntities = StakeholderEntities;
public shouldSticky: boolean = true;
@ -604,13 +610,14 @@ export class AboutComponent {
private _title: Title,
private seoService: SEOService,
private _piwikService: PiwikService,
private layoutService: LayoutService,
private helper: HelperService,
private cdr: ChangeDetectorRef) {
}
ngOnInit() {
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.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);
@ -619,14 +626,10 @@ export class AboutComponent {
}
ngAfterViewInit() {
this.subscriptions.push(this.layoutService.isBottomIntersecting.subscribe(isBottomIntersecting => {
this.shouldSticky = !isBottomIntersecting;
this.cdr.detectChanges();
}));
if (typeof document !== 'undefined') {
this.offset = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-height'));
this.cdr.detectChanges();
this.observeBottom();
}
}
@ -638,6 +641,20 @@ export class AboutComponent {
});
}
private observeBottom() {
let bottom = document.getElementById('bottom');
if (bottom) {
let bottomObs = new IntersectionObserver(entries => {
entries.forEach(entry => {
this.shouldSticky = !entry.isIntersecting;
this.cdr.detectChanges();
})
});
this.subscriptions.push(bottomObs);
bottomObs.observe(bottom);
}
}
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");
this._meta.updateTag({content: description}, "property='og:description'");

View File

@ -17,11 +17,11 @@ declare var UIkit;
<div>
<div class="uk-container">
<h2 class="uk-text-center uk-margin-large-top uk-margin-large-bottom">Are you a <span
[ngClass]="titleClass">{{type}}?</span></h2>
class="uk-text-primary">{{type}}?</span></h2>
</div>
<div [id]="'sticky-' + id" #sticky class="uk-sticky uk-visible@l" [ngClass]="isSticky?backgroundClass:null"
uk-sticky="animation: uk-animation-slide-bottom" [attr.end]="'#' + id"
[attr.start]="'100vh -' + height + 'px'" [attr.offset]="offset">
<div [id]="'sticky-' + id" #sticky class="uk-background-default uk-blur-background uk-sticky uk-visible@l"
uk-sticky="animation: uk-animation-slide-bottom" [attr.bottom]="'#' + id"
[attr.top]="'100vh -' + height + 'px'" [attr.offset]="offset">
<div class="uk-container">
<div class="uk-grid uk-grid-large uk-child-width-1-2@l" [class.uk-grid-divider]="!isSticky">
<div class="uk-text-center uk-first-column">
@ -60,10 +60,6 @@ export class YouWeComponent implements AfterViewInit, AfterContentChecked, OnDes
public type: StakeholderEntities.FUNDER | StakeholderEntities.RI | StakeholderEntities.ORGANIZATION = StakeholderEntities.FUNDER;
@Input()
public id;
@Input()
titleClass: string = "uk-text-primary";
@Input()
backgroundClass: string = "uk-background-default uk-blur-background";
@ViewChild('sticky') sticky: ElementRef;
public isSticky: boolean = false;
public offset: number

View File

@ -3,17 +3,12 @@ import {RouterModule, Routes} from '@angular/router';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
const routes: Routes = [
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule), data: {hasStickyHeaderOnMobile: true}},
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)},
{path: 'about/learn-how', redirectTo: 'about', pathMatch: 'full'},
{
path: 'about',
loadChildren: () => import('./about/about.module').then(m => m.AboutModule)
},
{
path: 'support',
loadChildren: () => import('./support/support.module').then(m => m.SupportModule),
data: {hasStickyHeaderOnMobile: true}
},
{
path: 'methodology',
loadChildren: () => import('./openaireLibrary/monitor/methodology/methodology.module').then(m => m.MethodologyModule)
@ -28,8 +23,7 @@ const routes: Routes = [
},
{
path: 'contact-us',
loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule),
data: {hasQuickContact: false}
loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule)
},
{
path: 'get-started',

View File

@ -1,4 +1,4 @@
import {ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
import {Component, ElementRef, ViewChild} from '@angular/core';
import {ActivatedRoute, NavigationEnd, Router} from '@angular/router';
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
@ -21,19 +21,17 @@ import {QuickContactComponent} from "./openaireLibrary/sharedComponents/quick-co
import {AlertModal} from "./openaireLibrary/utils/modal/alert";
import {StakeholderEntities} from './openaireLibrary/monitor/entities/stakeholder';
import {ResourcesService} from "./openaireLibrary/monitor/services/resources.service";
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
@Component({
selector: 'app-root',
template: `
<div>
<div id="modal-container"></div>
<navbar *ngIf="properties && showMenu && header" #navbar portal="monitor" [header]="header" [onlyTop]="false"
<navbar *ngIf="properties && showMenu && header" portal="monitor" [header]="header" [onlyTop]="false"
[userMenuItems]=userMenuItems [menuItems]=menuItems [user]="user"
[showMenu]=showMenu [properties]="properties">
<div *ngIf="showGetStarted" extra-s class="uk-margin-large-top uk-margin-left">
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started" (click)="navbar.closeCanvas()">Get Started</a>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get Started</a>
</div>
<a *ngIf="showGetStarted" extra-m class="uk-button uk-button-small uk-button-primary uk-text-uppercase uk-margin-left" routerLink="/get-started">Get Started</a>
</navbar>
@ -62,8 +60,7 @@ import {ConfigurationService} from "./openaireLibrary/utils/configuration/config
</cookie-law>
<bottom #bottom *ngIf="properties && showMenu" id="bottom" [grantAdvance]="false"
[properties]="properties"></bottom>
<quick-contact #quickContact *ngIf="bottomNotIntersecting && displayQuickContact && showQuickContact && contactForm"
(sendEmitter)="send($event)"
<quick-contact #quickContact *ngIf="showQuickContact && contactForm" (sendEmitter)="send($event)"
[contactForm]="contactForm" [sending]="sending" [images]="images" [contact]="'Help'"
[organizationTypes]="organizationTypes"
class="uk-visible@m"></quick-contact>
@ -83,8 +80,6 @@ export class AppComponent {
logoPath: string = 'assets/common-assets/logo-services/monitor/';
/* Contact */
public showQuickContact: boolean;
public bottomNotIntersecting: boolean;
public displayQuickContact: boolean; // intersecting with specific section in home page
public showGetStarted: boolean = true;
public contactForm: UntypedFormGroup;
public organizationTypes: string[] = [
@ -102,17 +97,19 @@ export class AppComponent {
public stakeholderEntities = StakeholderEntities;
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
private configurationService: ConfigurationService,
private router: Router, private stakeholderService: StakeholderService, private smoothScroll: SmoothScroll,
private userManagementService: UserManagementService,
private quickContactService: QuickContactService,
private layoutService: LayoutService,
private fb: UntypedFormBuilder,
private emailService: EmailService,
private resourcesService: ResourcesService,
private cdr: ChangeDetectorRef) {
private resourcesService: ResourcesService) {
this.subscriptions.push(router.events.forEach((event) => {
if (event instanceof NavigationEnd) {
if (event.url === '/contact-us') {
this.quickContactService.setDisplay(false);
} else if (event.url !== '/contact-us' && !this.showQuickContact) {
this.quickContactService.setDisplay(true);
}
this.showGetStarted = event.url !== '/get-started';
}
@ -120,7 +117,6 @@ export class AppComponent {
}
ngOnInit() {
this.configurationService.initPortal(this.properties, "monitor");
this.userManagementService.fixRedirectURL = properties.afterLoginRedirectLink;
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
@ -138,17 +134,8 @@ export class AppComponent {
this.buildMenu();
this.reset();
}));
this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => {
if(this.showQuickContact !== hasQuickContact) {
this.showQuickContact = hasQuickContact;
this.cdr.detectChanges();
}
}));
this.subscriptions.push(this.quickContactService.isDisplayed.subscribe(display => {
if(this.displayQuickContact !== display) {
this.displayQuickContact = display;
this.cdr.detectChanges();
}
this.showQuickContact = display;
}));
}
@ -158,13 +145,14 @@ export class AppComponent {
rootMargin: '0px',
threshold: 0.1
};
let intersectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
// if (entry.isIntersecting && this.showQuickContact) {
if(this.bottomNotIntersecting !== (!entry.isIntersecting)) {
this.bottomNotIntersecting = !entry.isIntersecting;
this.cdr.detectChanges();
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);
@ -176,8 +164,6 @@ export class AppComponent {
this.subscriptions.forEach(value => {
if (value instanceof Subscriber) {
value.unsubscribe();
} else if (typeof IntersectionObserver !== "undefined" && value instanceof IntersectionObserver) {
value.disconnect();
}
});
this.userManagementService.clearSubscriptions();
@ -194,8 +180,12 @@ export class AppComponent {
new MenuItem("stakeholders", "Browse " + this.stakeholderEntities.STAKEHOLDERS, "", "/browse", false, [], null, {})
);
this.resourcesService.setResources(this.menuItems);
this.menuItems.push(new MenuItem("support", "Support", "", "/support", false, [], null, {}));
this.menuItems.push(new MenuItem("about", "About", "", "/about", false, [], null, {}));
let about = new MenuItem("about", "About", "", "", false, [], null, {});
about.items = [
new MenuItem("how-it-works", "How it works", "", "/about/how-it-works", false, [], null, {}),
new MenuItem("faqs", "FAQs", "", "/about/faqs", false, [], null, {})
]
this.menuItems.push(about);
this.bottomMenuItems = [
new MenuItem("", "About", "https://beta.openaire.eu/project-factsheets", "", false, [], [], {}),
new MenuItem("", "News - Events", "https://beta.openaire.eu/news-events", "", false, [], [], {}),

View File

@ -1,8 +1,8 @@
import {APP_ID, NgModule} from '@angular/core';
import {NgModule} from '@angular/core';
import {FormsModule} from '@angular/forms';
import {CommonModule} from '@angular/common';
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
import {BrowserModule} from '@angular/platform-browser';
import {BrowserModule, BrowserTransferStateModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {AppComponent} from './app.component';
import {OpenaireErrorPageComponent} from './error/errorPage.component';
@ -34,7 +34,8 @@ import {isDevelopmentGuard} from './openaireLibrary/error/isDevelopmentGuard.gua
QuickContactModule,
BottomModule,
CookieLawModule,
BrowserModule,
BrowserTransferStateModule,
BrowserModule.withServerTransition({appId: 'monitor'}),
AppRoutingModule,
Schema2jsonldModule,
AlertModalModule
@ -43,7 +44,6 @@ import {isDevelopmentGuard} from './openaireLibrary/error/isDevelopmentGuard.gua
exports: [AppComponent],
providers: [
isDevelopmentGuard,
{provide: APP_ID, useValue: 'monitor'},
{
provide: HTTP_INTERCEPTORS,
useClass: HttpInterceptorService,

View File

@ -1,5 +1,5 @@
import { NgModule } from '@angular/core';
import {ServerModule} 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

@ -57,7 +57,9 @@ export class ContactComponent implements OnInit {
}
ngOnInit() {
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.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);

View File

@ -62,7 +62,7 @@
</div>
</div>
<div class="uk-width-expand uk-flex uk-flex-center">
<img src="assets/monitor-assets/get-started/steps.svg" loading="lazy">
<img src="assets/common-assets/monitor-assets/how/steps.svg" loading="lazy">
</div>
</div>
</div>
@ -114,7 +114,7 @@
<span>Learn More</span>
</span>
</a>
<img src="assets/monitor-assets/get-started/steps.svg" loading="lazy">
<img src="assets/common-assets/monitor-assets/how/steps.svg" loading="lazy">
</div>
</div>
</div>

View File

@ -60,7 +60,9 @@ export class GetStartedComponent implements OnInit {
}
ngOnInit() {
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.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(this.url);
this.updateUrl(this.url);

View File

@ -1,35 +1,30 @@
<ng-template #tablet_text>
<div>
<h6 class="uk-margin-xsmall-bottom">
<ng-template #scrolling_text let-position_class="position_class" let-id="id">
<div #scrolling_element [class]="position_class" [attr.uk-parallax]="'target: #' + id + '; start: 0vh; end: 100% + 100vh - 150vh; opacity: 0,1 20%,1 99%,0'">
<h3 class="uk-h2 uk-text-primary">
Monitor, discover and understand.
</h6>
<div>Track your organizations research output in a comprehensive manner. Identify research pathways across key
dimensions with granular and timely indicators.</div>
</h3>
<p class="uk-text-large">Track your organizations research output in a comprehensive manner. Identify research pathways across key dimensions with granular and timely indicators.</p>
</div>
<div>
<h6 class="uk-margin-xsmall-bottom">
<div #scrolling_element [class]="position_class" [attr.uk-parallax]="'target: #' + id + '; start: 150vh; end: 100% + 100vh - 200vh; opacity: 0,1 20%,1 99%,0'">
<h3 class="uk-h2">
<span class="uk-text-primary">Enhance</span> open science uptake<span class="uk-text-primary">.</span>
</h6>
<div>Work with the Open Science expert community for open and transparent metrics. Discover Open Science costs and
trends for your organization. See how you fare in the European Open Science Cloud.</div>
</h3>
<p class="uk-text-large">Work with the Open Science expert community for open and transparent metrics. Discover Open Science costs and trends for your organization. See how you fare in the European Open Science Cloud.</p>
</div>
<div>
<h6 class="uk-margin-xsmall-bottom">
<div #scrolling_element [class]="position_class" [attr.uk-parallax]="'target: #' + id + '; start: 200vh; end: 100% + 100vh - 250vh; opacity: 0,1 20%,1'">
<h3 class="uk-h2">
Turn data into <span class="uk-text-primary">actionable insights.</span>
</h6>
<div>See what works and what not, reveal hidden potential. Measure research impact, discover trends, connections
and collaborations to improve and optimize your future actions.</div>
</h3>
<p class="uk-text-large">See what works and what not, reveal hidden potential. Measure research impact, discover trends, connections and collaborations to improve and optimize your future actions.</p>
</div>
</ng-template>
<div *ngIf="!isMobile" class="uk-visible@m">
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden home-background">
<div class="uk-container uk-container-large"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-container uk-container-large" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-grid uk-flex-middle" uk-grid>
<div class="uk-width-3-5@l uk-margin-large-bottom">
<h1 class="uk-heading-large" uk-scrollspy-class>
A new era of <span class="uk-text-primary">monitoring</span> research<span
class="uk-text-primary">.</span>
A new era of <span class="uk-text-primary">monitoring</span> research<span class="uk-text-primary">.</span>
</h1>
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
<div>Discover, track and understand trends and impact</div>
@ -37,8 +32,7 @@
<div>Make informed decisions.</div>
</div>
<div class="uk-margin-medium-top" uk-scrollspy-class>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get
Started</a>
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get Started</a>
</div>
</div>
<div class="uk-width-expand" uk-scrollspy-class>
@ -50,20 +44,31 @@
</div>
</div>
</div>
<div class="uk-section tablet-section">
<div class="uk-container">
<div class="uk-text-center">
<div class="uk-section uk-section-secondary">
<div class="uk-container uk-container-large">
<div class="uk-width-1-1">
<span class="uk-h6 uk-text-primary">Funders. Research Institutions. Research Initiatives.</span>
<h2 class="uk-h1 uk-margin-remove-top">Simplify research<br> monitoring & evaluation<span
class="uk-text-primary">.</span></h2>
<h2 class="uk-h1 uk-margin-remove-top uk-width-3-5@l">Simplify research monitoring & evaluation<span class="uk-text-primary">.</span></h2>
</div>
<div class="uk-grid uk-child-width-1-2 uk-flex uk-flex-middle uk-margin-medium-top" uk-grid>
<div id="scrolling-section" style="min-height: 300vh">
<div class="uk-height-viewport monitor-dark-logo-background uk-sticky" uk-sticky="bottom: #scrolling-section; target-offset: true">
<div class="uk-grid" style="height: 100vh;" uk-grid>
<div class="uk-width-expand uk-first-column uk-position-relative uk-height-1-1">
<div class="monitor-dark-logo-background">
<div uk-parallax="target: #scrolling-section;">
<img class="uk-position-center" src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy"
uk-parallax="target: #scrolling-section; start: 100vh; opacity: 1; easing:0"
style="height: 75vh;">
</div>
</div>
</div>
<div class="uk-inline uk-width-expand uk-height-1-1">
<div>
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
<div uk-parallax="target: #scrolling-section; y: 55vh, 45vh;">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-center-left', id: 'scrolling-section'}"></ng-container>
</div>
</div>
</div>
<div class="uk-margin-medium-bottom">
<div class="uk-grid uk-child-width-1-1" uk-grid>
<ng-container *ngTemplateOutlet="tablet_text"></ng-container>
</div>
</div>
</div>
@ -72,20 +77,19 @@
<div class="uk-background-norepeat graph-background">
<div class="uk-section uk-section-large uk-container uk-container-large uk-margin-large-top uk-margin-large-bottom uk-overflow-hidden">
<div class="uk-flex uk-flex-column uk-flex-middle">
<h2 class="uk-h1 uk-width-1-2@m uk-text-center">
Tap into the OpenAIRE Graph<span class="uk-text-primary">.</span>
<h2 class="uk-h1 uk-width-1-2@m uk-text-center" uk-parallax="scale: 1.7, 1.3, 1,1">
Tap into the OpenAIRE Research Graph<span class="uk-text-primary">.</span>
</h2>
<div class="uk-width-1-2@m uk-text-center uk-margin-top">
The OpenAIRE Graph is one of the largest open scholarly record collections
<div class="uk-width-1-2@m uk-text-center uk-margin-top" uk-parallax="y: 80, 40, 0, 0">
The OpenAIRE Research Graph is one of the largest open scholarly record collections
worldwide, key in fostering Open Science and establishing its practices in the daily
research activities. Conceived as a public and transparent good, populated out of data
sources trusted by scientists, the Graph aims at bringing discovery, monitoring, and
assessment of science back in the hands of the scientific community.
</div>
</div>
<div class="uk-flex uk-flex-center uk-margin-top uk-margin-medium-bottom">
<div class="uk-width-1-1 uk-flex-center uk-grid" uk-grid uk-height-match="target: .targetName;"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div class="uk-flex uk-flex-center uk-margin-top uk-margin-medium-bottom" uk-parallax="y: 80, 40, 0, 0">
<div class="uk-width-1-1 uk-flex-center uk-grid" uk-grid uk-height-match="target: .targetName;" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<ng-template #numberCard let-numberSize="numberSize" let-name="name" let-url="url">
<a class="uk-card uk-card-default uk-card-hover uk-position-relative uk-padding-small uk-display-block uk-link-reset"
[href]="url" target="_blank" uk-scrollspy-class>
@ -118,7 +122,7 @@
</ng-container>
</div>
<div *ngIf="fundersSize">
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: fundersSize, name: stakeholderUtils.entities.funders,
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: fundersSize, name: stakeholderEntities.FUNDERS,
url: 'https://explore.openaire.eu/search/find/projects'}">
</ng-container>
</div>
@ -129,8 +133,7 @@
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom">
<div class="uk-grid uk-grid-xlarge" uk-grid>
<div class="uk-width-1-3@m uk-width-1-1 uk-text-left@m uk-text-center">
<h3 class="uk-margin-small-top">Openness. Usability. Replicability. <span
class="uk-text-primary">Trust</span><span class="uk-margin-right">.</span></h3>
<h3 class="uk-margin-small-top">Openness. Usability. Replicability. <span class="uk-text-primary">Trust</span><span class="uk-margin-right">.</span></h3>
<div class="uk-text-large uk-margin-bottom">Learn and work with a thriving community behind you.</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/about/learn-how">
@ -139,8 +142,7 @@
</span>
</a>
</div>
<div class="uk-width-expand uk-margin-large-left"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
<div class="uk-width-expand uk-margin-large-left" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
<div class="uk-grid uk-child-width-1-2@s uk-child-width-1-1 uk-grid-large" uk-grid>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
@ -149,10 +151,8 @@
</div>
<h5 class="uk-margin-remove-top">Comprehensive outlook</h5>
<div>
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph"
target="_blank">OpenAIRE Graph</a>. A global linked research
graph, a shared data resource from open initiatives around the world. Our indicators cover a
wide range of themes from input to impact.
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph" target="_blank">OpenAIRE Research
Graph</a>. A global linked research graph, a shared data resource from open initiatives around the world. Our indicators cover a wide range of themes from input to impact.
</div>
</div>
<div uk-scrollspy-class>
@ -162,10 +162,7 @@
</div>
<h5 class="uk-margin-remove-top">Showcasing, monitoring, analysis</h5>
<div>
Customize your dashboard by choosing from a variety of pre-defined metrics and select which
ones to show publicly, which to invited team members, and which are still work in progress
(private).
</div>
Customize your dashboard by choosing from a variety of pre-defined metrics and select which ones to show publicly, which to invited team members, and which are still work in progress (private).</div>
</div>
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-bottom">
@ -174,8 +171,7 @@
</div>
<h5 class="uk-margin-remove-top">Transparent methodology</h5>
<div>
We base our service on Open Science principles. We rely on open data sources, and document
our algorithms for every metric and indicator we publish.
We base our service on Open Science principles. We rely on open data sources, and document our algorithms for every metric and indicator we publish.
</div>
</div>
<div uk-scrollspy-class>
@ -185,8 +181,7 @@
</div>
<h5 class="uk-margin-remove-top">Minimum effort to join</h5>
<div>
You only share some information with us to include in our backend aggregating and data
mining, and we deliver a view of your world.
You only share some information with us to include in our backend aggregating and data mining, and we deliver a view of your world.
</div>
</div>
<div uk-scrollspy-class>
@ -196,9 +191,7 @@
</div>
<h5 class="uk-margin-remove-top">Tailor-made monitoring, responsive to your needs</h5>
<div>
Our experts work with you on demand in one-on-one sessions to provide additional indicators
and curate your data.
</div>
Our experts work with you on demand in one-on-one sessions to provide additional indicators and curate your data.</div>
</div>
</div>
</div>
@ -206,10 +199,9 @@
</div>
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom">
<div class="uk-width-1-2@m uk-margin-bottom">
<h2 class="uk-heading-xlarge">{{stakeholderUtils.entities.stakeholders}} in action<span class="uk-text-primary">.</span></h2>
<h2 class="uk-heading-xlarge">{{stakeholderEntities.STAKEHOLDERS}} in action<span class="uk-text-primary">.</span></h2>
<div class="uk-text-large">
View existing {{stakeholderUtils.entities.stakeholders | lowercase}} from collaborating organizations. Get a
preview on how they work and how our service can be customized to serve you.
View existing {{stakeholderEntities.STAKEHOLDERS | lowercase}} from collaborating organizations. Get a preview on how they work and how our service can be customized to serve you.
</div>
</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
@ -226,17 +218,23 @@
<div>
<slider-tabs position="horizontal">
<slider-tab [tabId]="'all'" tabTitle="All"></slider-tab>
<slider-tab *ngFor="let type of types" [tabId]="type" tabTitle="{{getTitle(type) | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.FUNDERS" tabTitle="{{stakeholderEntities.FUNDERS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.RIS" tabTitle="{{stakeholderEntities.RIS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.ORGANIZATIONS" tabTitle="{{stakeholderEntities.ORGANIZATIONS | titlecase}}"></slider-tab>
</slider-tabs>
</div>
<ul *ngIf="stakeholdersSlider" class="uk-switcher">
<ul class="uk-switcher">
<li>
<ng-container
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider['all']}"></ng-container>
<ng-container *ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.stakeholders}"></ng-container>
</li>
<li *ngFor="let type of types">
<ng-container
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider[type]}"></ng-container>
<li>
<ng-container *ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.funders}"></ng-container>
</li>
<li>
<ng-container *ngTemplateOutlet="sliderTemplate; context: {slides:stakeholdersSlider.ris}"></ng-container>
</li>
<li>
<ng-container *ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.organizations}"></ng-container>
</li>
</ul>
</ng-container>
@ -247,8 +245,7 @@
<!-- Margin right -->
<li *ngFor="let slide of slides; let i=index" class="uk-width-1-1">
<div class="uk-padding-small">
<div uk-grid class="uk-grid uk-child-width-1-3@l uk-child-width-1-2@m"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div uk-grid class="uk-grid uk-child-width-1-3@l uk-child-width-1-2@m" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<ng-container *ngIf="i === 0">
<div *ngFor="let stakeholder of slide" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
@ -268,16 +265,14 @@
</ng-template>
</div>
</div>
<div #contact
class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-center uk-position-relative contact-us">
<div #contact class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-center uk-position-relative contact-us">
<img class="uk-box-shadow-large one" src="assets/monitor-assets/curators/1.jpg">
<img class="uk-box-shadow-large two" src="assets/monitor-assets/curators/2.jpg">
<img class="uk-box-shadow-large three" src="assets/monitor-assets/curators/3.jpg">
<img class="uk-box-shadow-large four" src="assets/monitor-assets/curators/4.jpg">
<div class="uk-text-center uk-width-2-3@l uk-width-1-2">
<h3>
Need more information or a demo? Get in touch and let us show you in practice how you can apply OpenAIRE
Monitor to your needs<span class="uk-text-primary">.</span>
Need more information or a demo? Get in touch and let us show you in practice how you can apply OpenAIRE Monitor to your needs<span class="uk-text-primary">.</span>
</h3>
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom"
routerLink="/contact-us">Contact us</a>
@ -286,12 +281,10 @@
</div>
<div *ngIf="isMobile || isServer" class="uk-hidden@m">
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden home-background">
<div class="uk-container uk-container-large"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-container uk-container-large" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
<div class="uk-margin-large-bottom" style="max-width: 500px;">
<h1 class="uk-heading-small" uk-scrollspy-class>
A new era of <span class="uk-text-primary">monitoring</span> research<span
class="uk-text-primary">.</span>
A new era of <span class="uk-text-primary">monitoring</span> research<span class="uk-text-primary">.</span>
</h1>
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
<div>Discover, track and understand trends and impact pathways for your organization.</div>
@ -300,33 +293,52 @@
</div>
</div>
<div class="uk-container uk-padding-remove-right uk-height-medium uk-position-relative">
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%; padding: 1px;"
src="assets/monitor-assets/home/monitor.jpg">
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%;"
src="assets/monitor-assets/home/mask.svg">
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%; padding: 1px;" src="assets/monitor-assets/home/monitor.jpg" uk-parallax="y: 200">
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%;" src="assets/monitor-assets/home/mask.svg">
<div>
<a class="uk-button uk-button-primary uk-text-uppercase uk-position-relative" routerLink="/get-started">Get
Started</a>
<a class="uk-button uk-button-primary uk-text-uppercase uk-position-relative" routerLink="/get-started">Get Started</a>
</div>
</div>
</div>
<div class="uk-section uk-section-small tablet-section">
<div class="uk-container">
<div class="uk-section uk-section-large uk-section-secondary">
<div class="uk-container uk-container-large">
<div>
<span class="uk-text-large uk-text-primary">Funders. Research Institutions. Research Initiatives.</span>
<h2 class="uk-h1 uk-margin-remove-top">Simplify research<br> monitoring & evaluation<span
class="uk-text-primary">.</span></h2>
<h2 class="uk-h1 uk-margin-remove-top">Simplify research monitoring & evaluation<span class="uk-text-primary">.</span></h2>
</div>
<div class="uk-grid uk-child-width-1-1 uk-child-width-1-2@s uk-flex uk-flex-middle uk-margin-medium-top" uk-grid>
<div class="uk-visible@s">
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
<div id="scrolling-section-tablet" class="uk-visible@s" style="min-height: 300vh">
<div class="uk-sticky uk-height-viewport" uk-sticky="bottom: #scrolling-section-tablet; target-offset: true">
<div class="uk-grid uk-grid-small" style="height: 100vh;" uk-grid>
<div class="uk-width-expand uk-first-column uk-position-relative uk-height-1-1">
<div>
<div uk-parallax="target: #scrolling-section-tablet;">
<img class="uk-position-center" src="assets/monitor-assets/home/ipad-tablet.png" alt="ipad" loading="lazy"
uk-parallax="target: #scrolling-section-tablet; start: 100vh; opacity: 1; easing:0"
style="height: 45vh;">
</div>
</div>
</div>
<div class="uk-inline uk-width-expand uk-height-1-1">
<div>
<div uk-parallax="target: #scrolling-section-tablet; y: 55vh, 45vh;">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-center-left', id: 'scrolling-section-tablet'}"></ng-container>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="scrolling-section-mobile" class="uk-hidden@s" style="min-height: 300vh">
<div class="uk-sticky" uk-sticky="bottom: #scrolling-section-mobile">
<div>
<div style="height: 100vh;">
<div class="uk-text-center uk-padding" style="height: 45vh;" uk-parallax="target: #scrolling-section-mobile; start: 100vh; opacity: 1; easing:0">
<img class="uk-height-1-1" src="assets/monitor-assets/home/ipad-mobile.png" alt="ipad" loading="lazy">
</div>
<div class="uk-position-relative" style="height: 55vh;">
<ng-container *ngTemplateOutlet="scrolling_text; context: {position_class: 'uk-position-center', id: 'scrolling-section-mobile'}"></ng-container>
</div>
<div class="uk-hidden@s uk-margin-medium-left">
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
</div>
<div class="uk-margin-medium-bottom">
<div class="uk-grid uk-child-width-1-1" uk-grid>
<ng-container *ngTemplateOutlet="tablet_text"></ng-container>
</div>
</div>
</div>
@ -343,7 +355,7 @@
Tap into the OpenAIRE Research Graph<span class="uk-text-primary">.</span>
</h2>
<div class="uk-text-center">
The OpenAIRE Graph is one of the largest open scholarly record collections
The OpenAIRE Research Graph is one of the largest open scholarly record collections
worldwide, key in fostering Open Science and establishing its practices in the daily
research activities. Conceived as a public and transparent good, populated out of data
sources trusted by scientists, the Graph aims at bringing discovery, monitoring, and
@ -352,13 +364,10 @@
</div>
</div>
<div class="uk-container uk-container-large uk-position-relative uk-overflow-hidden">
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph"
loading="lazy"
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph" loading="lazy"
style="width: 200px; top: 35%; right: -170px; transform: rotate(-100deg);">
<div class="uk-flex uk-flex-center uk-margin-medium-top uk-margin-medium-bottom">
<div class="uk-width-1-1 uk-flex-center uk-grid uk-child-width-1-2" uk-grid
uk-height-match="target: .targetName;"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div class="uk-width-1-1 uk-flex-center uk-grid uk-child-width-1-2" uk-grid uk-height-match="target: .targetName;" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<ng-template #numberCardMobile let-numberSize="numberSize" let-name="name" let-url="url">
<a class="uk-position-relative uk-display-block uk-link-reset"
[href]="url" target="_blank" uk-scrollspy-class>
@ -391,7 +400,7 @@
</ng-container>
</div>
<div *ngIf="fundersSize">
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: fundersSize, name: stakeholderUtils.entities.funders,
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: fundersSize, name: stakeholderEntities.FUNDERS,
url: 'https://explore.openaire.eu/search/find/projects'}">
</ng-container>
</div>
@ -406,9 +415,7 @@
<h3 class="uk-heading-small uk-margin-remove">Usability.</h3>
<h3 class="uk-heading-small uk-margin-remove">Replicability.</h3>
<h3 class="uk-heading-small uk-text-primary uk-margin-remove">Trust.</h3>
<div class="uk-text-large uk-margin-medium-top uk-margin-medium-bottom">Learn and work with a thriving
community behind you.
</div>
<div class="uk-text-large uk-margin-medium-top uk-margin-medium-bottom">Learn and work with a thriving community behind you.</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
routerLinkActive="router-link-active" routerLink="/about/learn-how">
<span class="uk-flex uk-flex-middle">
@ -416,8 +423,7 @@
</span>
</a>
</div>
<div class="uk-margin-xlarge-top"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
<div class="uk-margin-xlarge-top" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
<div class="">
<div uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
@ -426,10 +432,8 @@
</div>
<h5 class="uk-margin-top">Comprehensive outlook</h5>
<div>
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph"
target="_blank">OpenAIRE Graph</a>. A global linked research
graph, a shared data resource from open initiatives around the world. Our indicators cover a
wide range of themes from input to impact.
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph" target="_blank">OpenAIRE Research
Graph</a>. A global linked research graph, a shared data resource from open initiatives around the world. Our indicators cover a wide range of themes from input to impact.
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
@ -439,10 +443,7 @@
</div>
<h5 class="uk-margin-top">Showcasing, monitoring, analysis</h5>
<div>
Customize your dashboard by choosing from a variety of pre-defined metrics and select which
ones to show publicly, which to invited team members, and which are still work in progress
(private).
</div>
Customize your dashboard by choosing from a variety of pre-defined metrics and select which ones to show publicly, which to invited team members, and which are still work in progress (private).</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
<div class="uk-icon-bg-shadow uk-margin-auto">
@ -451,8 +452,7 @@
</div>
<h5 class="uk-margin-top">Transparent methodology</h5>
<div>
We base our service on Open Science principles. We rely on open data sources, and document
our algorithms for every metric and indicator we publish.
We base our service on Open Science principles. We rely on open data sources, and document our algorithms for every metric and indicator we publish.
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
@ -462,8 +462,7 @@
</div>
<h5 class="uk-margin-top">Minimum effort to join</h5>
<div>
You only share some information with us to include in our backend aggregating and data
mining, and we deliver a view of your world.
You only share some information with us to include in our backend aggregating and data mining, and we deliver a view of your world.
</div>
</div>
<div class="uk-margin-large-top" uk-scrollspy-class>
@ -473,9 +472,7 @@
</div>
<h5 class="uk-margin-top">Tailor-made monitoring, responsive to your needs</h5>
<div>
Our experts work with you on demand in one-on-one sessions to provide additional indicators
and curate your data.
</div>
Our experts work with you on demand in one-on-one sessions to provide additional indicators and curate your data.</div>
</div>
</div>
</div>
@ -483,11 +480,9 @@
</div>
<div class="uk-section uk-section-large uk-padding-remove-bottom uk-container uk-container-large">
<div class="uk-margin-bottom">
<h2 class="uk-heading-xlarge">{{stakeholderUtils.entities.stakeholders}} in action<span
class="uk-text-primary">.</span></h2>
<h2 class="uk-heading-xlarge">{{stakeholderEntities.STAKEHOLDERS}} in action<span class="uk-text-primary">.</span></h2>
<div class="uk-text-large">
View existing {{stakeholderUtils.entities.stakeholders | lowercase}} from collaborating organizations. Get a
preview on how they work and how our service can be customized to serve you.
View existing {{stakeholderEntities.STAKEHOLDERS | lowercase}} from collaborating organizations. Get a preview on how they work and how our service can be customized to serve you.
</div>
</div>
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
@ -505,31 +500,44 @@
<div class="uk-padding-small uk-padding-remove-right">
<slider-tabs position="horizontal">
<slider-tab [tabId]="'all'" tabTitle="All"></slider-tab>
<slider-tab *ngFor="let type of types" [tabId]="type"
tabTitle="{{getTitle(type) | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.FUNDERS" tabTitle="{{stakeholderEntities.FUNDERS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.RIS" tabTitle="{{stakeholderEntities.RIS | titlecase}}"></slider-tab>
<slider-tab [tabId]="stakeholderEntities.ORGANIZATIONS" tabTitle="{{stakeholderEntities.ORGANIZATIONS | titlecase}}"></slider-tab>
</slider-tabs>
</div>
<ul class="uk-switcher uk-margin-top uk-overflow-hidden">
<li [id]="'all'" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right"
uk-height-match="target: .uk-card; row: false">
<div class="uk-grid uk-grid-small uk-flex-nowrap"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let stakeholder of stakeholders"
class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<div class="uk-padding-small uk-padding-remove-right" uk-height-match="target: .uk-card; row: false">
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let stakeholder of stakeholders" class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
</div>
</div>
</div>
</li>
<li *ngFor="let type of types" [id]="type" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right"
uk-height-match="target: .uk-card; row: false">
<div class="uk-grid uk-grid-small uk-flex-nowrap"
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let stakeholder of getStakeholdersByType(type)"
class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
<li [id]="stakeholderEntities.FUNDERS" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right" uk-height-match="target: .uk-card; row: false">
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let funder of funders" class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="funder"></browse-stakeholder>
</div>
</div>
</div>
</li>
<li [id]="stakeholderEntities.RIS" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right" uk-height-match="target: .uk-card; row: false">
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let ri of ris" class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="ri"></browse-stakeholder>
</div>
</div>
</div>
</li>
<li [id]="stakeholderEntities.ORGANIZATIONS" class="uk-overflow-auto">
<div class="uk-padding-small uk-padding-remove-right" uk-height-match="target: .uk-card; row: false">
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
<div *ngFor="let organization of organizations" class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
<browse-stakeholder [stakeholder]="organization"></browse-stakeholder>
</div>
</div>
</div>
@ -543,8 +551,7 @@
Need more information or a demo?
</h2>
<div class="uk-text-large">
Get in touch and let us show you in practice how you can apply OpenAIRE Monitor to your needs<span
class="uk-text-primary">.</span>
Get in touch and let us show you in practice how you can apply OpenAIRE Monitor to your needs<span class="uk-text-primary">.</span>
</div>
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom"
routerLink="/contact-us">Contact us</a>

View File

@ -6,19 +6,12 @@
background-color: @global-inverse-color;
}
.tablet-section {
background-image:linear-gradient(180deg, @global-inverse-color 0%, @global-muted-background 100%);
background-repeat: no-repeat;
background-position: top;
background-size: cover;
}
@media only screen and (min-width: @breakpoint-medium) {
.tablet-section {
background-image:url("~src/assets/monitor-assets/home/monitor-dark-logo.svg"), linear-gradient(180deg, @global-inverse-color 0%, @global-muted-background 100%);
.monitor-dark-logo-background {
background-image: url("~src/assets/monitor-assets/home/monitor-dark-logo.svg");
background-repeat: no-repeat;
background-position: -5% 95%, top;
background-size: 60%, cover;
background-position: left 95%;
background-size: 65%;
}
}

View File

@ -24,12 +24,7 @@ import {NumberUtils} from "../openaireLibrary/utils/number-utils.class";
import {SearchResearchResultsService} from "../openaireLibrary/services/searchResearchResults.service";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {LocalStorageService} from "../openaireLibrary/services/localStorage.service";
import {
Stakeholder,
StakeholderEntities,
StakeholderInfo,
StakeholderType
} from "../openaireLibrary/monitor/entities/stakeholder";
import {Stakeholder, StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
import {User} from "../openaireLibrary/login/utils/helper.class";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {properties} from "../../environments/environment";
@ -39,7 +34,6 @@ import {IDeactivateComponent} from "../openaireLibrary/utils/can-exit.guard";
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
import {isPlatformServer} from '@angular/common';
import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
import {StakeholderUtils} from "../openaireLibrary/monitor-admin/utils/indicator-utils";
@Component({
selector: 'home',
@ -50,7 +44,12 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
public pageTitle = "OpenAIRE | Monitor";
public description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators.";
public stakeholders: StakeholderInfo[] = [];
public stakeholdersSlider: any;
public stakeholdersSlider: {
stakeholders: StakeholderInfo[][];
funders: StakeholderInfo[][];
ris: StakeholderInfo[][];
organizations: StakeholderInfo[][];
};
public selected: Stakeholder = null;
public pageContents = null;
public divContents = null;
@ -60,22 +59,26 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
public errorCodes: ErrorCodes;
public properties: EnvProperties = properties;
public openaireEntities = OpenaireEntities;
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
public stakeholderEntities = StakeholderEntities;
public directLink: boolean = true;
public publicationsSize: any = null;
public datasetsSize: any = null;
public softwareSize: any = null;
public otherSize: any = null;
public fundersSize: any = null;
public showQuickContact: boolean = true;
@ViewChild('AlertModal') modal;
private errorMessages: ErrorMessagesComponent;
private subscriptions = [];
private mutationObserver: MutationObserver;
private user: User;
@ViewChildren('scrolling_element') elements: QueryList<ElementRef>;
@ViewChild('contact') contact: ElementRef;
isMobile: boolean = false;
isServer: boolean;
constructor(
private route: ActivatedRoute,
private _router: Router,
private _meta: Meta,
private _title: Title,
@ -99,14 +102,15 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
this.errorMessages = new ErrorMessagesComponent();
this.status = this.errorCodes.LOADING;
this.isServer = isPlatformServer(this.platform);
this.quickContactService.setDisplay(false);
}
public ngOnInit() {
let url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Monitor").subscribe());
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Monitor", this.properties.piwikSiteId).subscribe());
}
this.getNumbers();
this.subscriptions.push(this.localStorageService.get().subscribe(value => {
this.directLink = value;
@ -127,7 +131,6 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
}
ngOnDestroy() {
this.quickContactService.setDisplay(true);
this.clear();
}
@ -158,12 +161,38 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
};
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);
if(this.contact) {
intersectionObserver.observe(this.contact.nativeElement);
}
this.mutationObserver = new MutationObserver(entries => {
entries.forEach(entry => {
if (entry.attributeName === 'style') {
let opacities: number[] = this.elements.map(element => +element.nativeElement.style.opacity);
let active: number = opacities.indexOf(Math.max(...opacities));
this.elements.forEach((element, index) => {
if (index === active) {
element.nativeElement.classList.remove('uk-disabled');
} else {
element.nativeElement.classList.add('uk-disabled');
}
})
}
})
});
this.elements.changes.subscribe(() => {
this.elements.forEach(element => {
this.mutationObserver.observe(element.nativeElement, {attributes: true});
});
});
this.subscriptions.push(intersectionObserver);
}
@ -180,7 +209,7 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
}
getNumbers() {
this.subscriptions.push(this._refineFieldResultsService.getAllRefineFieldResultsByFieldName("funder", "project", this.properties).subscribe(
this.subscriptions.push(this._refineFieldResultsService.getRefineFieldsResultsByEntityName(["funder"], "project", this.properties).subscribe(
data => {
if (data[1].length > 0 && data[1][0].filterId == "funder" && data[1][0].values) {
this.fundersSize = NumberUtils.roundNumber(data[1][0].values.length);
@ -236,14 +265,8 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
this.handleError("Error getting number of software data", err);
}
));
}
get types(): StakeholderType[] {
return this.stakeholderUtils.types.map(option => option.value).filter(type => this.stakeholders.findIndex(stakeholder => stakeholder.type === type) > -1);
}
getTitle(type: string) {
return this.stakeholderUtils.entities[type + 's'] ? this.stakeholderUtils.entities[type + 's'] : type;
}
public getStakeholders() {
@ -258,11 +281,11 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
this.sort(this.stakeholders);
this.stakeholders = this.publicStakeholders.concat(this.privateStakeholders);
this.stakeholdersSlider = {
all: this.stakeholderSlider(this.stakeholders)
}
this.types.forEach(type => {
this.stakeholdersSlider[type] = this.stakeholderSlider(this.getStakeholdersByType(type));
});
stakeholders: this.stakeholderSlider(this.stakeholders),
funders: this.stakeholderSlider(this.funders),
ris: this.stakeholderSlider(this.ris),
organizations: this.stakeholderSlider(this.organizations)
};
}
this.loading = false;
},
@ -301,8 +324,28 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactiv
return this.stakeholders.filter(stakeholder => stakeholder.visibility !== "PUBLIC");
}
getStakeholdersByType(type: StakeholderType = null) {
return this.stakeholders.filter(stakeholder => !type || stakeholder.type === type)
get funders(): StakeholderInfo[] {
if (this.stakeholders) {
return this.stakeholders.filter(stakeholder => stakeholder.type === "funder");
} else {
return [];
}
}
get ris(): StakeholderInfo[] {
if (this.stakeholders) {
return this.stakeholders.filter(stakeholder => stakeholder.type === "ri");
} else {
return [];
}
}
get organizations(): StakeholderInfo[] {
if (this.stakeholders) {
return this.stakeholders.filter(stakeholder => stakeholder.type === "organization");
} else {
return [];
}
}
private handleError(message: string, error): number {

View File

@ -64,7 +64,9 @@ export class MyStakeholdersComponent {
var url = this.properties.domain + this.properties.baseLink + this._router.url;
this.seoService.createLinkForCanonicalURL(url, false);
this._meta.updateTag({content: url}, "property='og:url'");
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Connect").subscribe());
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Connect", this.properties.piwikSiteId).subscribe());
}
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
if (this.user) {
@ -103,7 +105,7 @@ export class MyStakeholdersComponent {
this.stakeholders = [];
this.subscriptions.push(this.stakeholderService.getMyStakeholders(properties.monitorServiceAPIURL).subscribe(
stakeholders => {
this.stakeholders = StakeholderInfo.toStakeholderInfo(stakeholders.standalone.concat(stakeholders.umbrella), this.user);
this.stakeholders = StakeholderInfo.toStakeholderInfo(stakeholders, this.user);
this.sort(this.stakeholders);
this.loading = false;
},

@ -1 +1 @@
Subproject commit 4396999ce03bb96543f258f64e64459546b86e19
Subproject commit 1d5bfc498c81214fcc9fb208d407a1e950e23f7d

View File

@ -11,21 +11,20 @@ import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
import {NewSearchPageComponent, SearchForm} from "../openaireLibrary/searchPages/searchUtils/newSearchPage.component";
import {StakeholderInfo, StakeholderType} from "../openaireLibrary/monitor/entities/stakeholder";
import {StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
import {properties} from "../../environments/environment";
import {Subscriber} from "rxjs";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {TitleCasePipe} from "@angular/common";
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
import {StakeholderUtils} from "../openaireLibrary/monitor-admin/utils/indicator-utils";
@Component({
selector: 'search-stakeholders',
template: `
<new-search-page pageTitle="OpenAIRE-Monitor | Browse {{stakeholderUtils.entities.stakeholders}}"
[hasPrefix]=false
[formPlaceholderText]="'Search ' + (!isMobile?'OpenAIRE Monitor ':'') +stakeholderUtils.entities.stakeholders"
[type]="(results.length > 1) ? stakeholderUtils.entities.stakeholders:stakeholderUtils.entities.stakeholders"
<new-search-page pageTitle="OpenAIRE-Monitor | Browse {{this.stakeholderEntities.STAKEHOLDERS}}"
[hasPrefix]=false [piwikSiteId]="piwikSiteId"
[formPlaceholderText]="'Search ' + (!isMobile?'OpenAIRE Monitor ':'') + this.stakeholderEntities.STAKEHOLDERS"
[type]="(results.length > 1) ? this.stakeholderEntities.STAKEHOLDERS:this.stakeholderEntities.STAKEHOLDER"
entityType="stakeholder"
[results]="results" [searchUtils]="searchUtils"
[showResultCount]=true
@ -40,11 +39,11 @@ import {StakeholderUtils} from "../openaireLibrary/monitor-admin/utils/indicator
`
})
export class SearchStakeholdersComponent {
public piwikSiteId = null;
private errorCodes: ErrorCodes;
private errorMessages: ErrorMessagesComponent;
public results: StakeholderInfo[] = [];
public totalResults: StakeholderInfo[];
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
public subscriptions = [];
public filters = [];
public searchFields: SearchFields = new SearchFields();
@ -66,7 +65,8 @@ export class SearchStakeholdersComponent {
};
public keyword = "";
public searchLink;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Browse ' + this.stakeholderUtils.entities.stakeholders}];
public stakeholderEntities = StakeholderEntities;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Browse ' + this.stakeholderEntities.STAKEHOLDERS}];
public searchForm: SearchForm = {class: 'uk-background-muted', dark: false};
public isMobile: boolean = false;
properties: EnvProperties = properties;
@ -85,6 +85,7 @@ export class SearchStakeholdersComponent {
}
public ngOnInit() {
this.piwikSiteId = this.properties.piwikSiteId;
this.baseUrl = this.properties.searchLinkToStakeholders;
this.subscriptions.push(this.route.queryParams.subscribe(params => {
this.searchPage.resultsPerPage = 10;
@ -101,15 +102,15 @@ export class SearchStakeholdersComponent {
this.searchPage.refineFields = this.refineFields;
this.searchLink = this.properties.searchLinkToStakeholders;
this.selectedFields = [];
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], [], this.fieldIdsMap, null, params, "stakeholder", null);
this.searchPage.prepareSearchPage(this.fieldIds, this.selectedFields, this.refineFields, [], this.fieldIdsMap, null, params, "stakeholder", null);
let queryParams = params;
if (typeof document !== 'undefined') {
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
this.user = user;
this.initResults(queryParams);
this.initFunders(queryParams);
}));
} else {
this.initResults(queryParams);
this.initFunders(queryParams);
}
}));
this.layoutService.isMobile.subscribe(isMobile => {
@ -126,19 +127,28 @@ export class SearchStakeholdersComponent {
});
}
private parseResults(data: any) {
for (let i = 0; i < data.length; i++) {
this.totalResults[i] = data[i];
this.totalResults[i].isManager = this.isManager(data[i]);
this.totalResults[i].isMember = this.isMember(data[i]);
}
}
/**
* Initialize stakeholders from Communities APIs
*
* @param params
*/
private initResults(params) {
private initFunders(params) {
if (this.totalResults) {
this.totalResults = StakeholderInfo.toStakeholderInfo(this.totalResults, this.user);
this.parseResults(this.totalResults);
this._getResults(params);
} else {
this.subscriptions.push(this._stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL).subscribe(
data => {
this.totalResults = StakeholderInfo.toStakeholderInfo(data, this.user);
this.totalResults = [];
this.parseResults(data);
this._getResults(params);
},
err => {
@ -422,8 +432,13 @@ export class SearchStakeholdersComponent {
}
}
get types(): StakeholderType[] {
return this.stakeholderUtils.types.map(option => option.value).filter(type => this.totalResults.findIndex(stakeholder => stakeholder.type === type) > -1);
private isManager(stakeholder) {
return Session.isPortalAdministrator(this.user) || Session.isMonitorCurator(this.user)
|| Session.isCommunityCurator(this.user) || Session.isManager(stakeholder.type, stakeholder.alias, this.user);
}
private isMember(stakeholder) {
return this.isManager(stakeholder) || Session.isSubscribedTo(stakeholder.type, stakeholder.alias, this.user);
}
/**
@ -437,8 +452,8 @@ export class SearchStakeholdersComponent {
let value_original_ids = [];
filter_names.push("Type");
filter_ids.push("type");
value_names.push(this.types.map(type => this.stakeholderUtils.entities[type + 's']));
value_original_ids.push(this.types);
value_names.push([this.stakeholderEntities.FUNDERS, this.titleCasePipe.transform(this.stakeholderEntities.RIS), this.titleCasePipe.transform(this.stakeholderEntities.ORGANIZATIONS)]);
value_original_ids.push(["funder", "ri", "organization"]);
filter_names.push("Accessibility");
filter_ids.push("access");
if (!this.user) {

View File

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

View File

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

View File

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

@ -1 +1 @@
Subproject commit 5026b8b38fcae493ec7bcdc272bf167798c18fa3
Subproject commit ca209a54baaa2d9e0004613a68088fdcf4bee43a

View File

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

Before

Width:  |  Height:  |  Size: 11 KiB

@ -1 +1 @@
Subproject commit 6524ee362c8fc8fa6e482144920e305198e54fc8
Subproject commit aa1e6c9df390a4ba0919b5f8591374f7eec75089

View File

@ -1,16 +1,97 @@
import {EnvProperties} from "../app/openaireLibrary/utils/properties/env-properties";
import {common, commonBeta} from "../app/openaireLibrary/utils/properties/environments/environment";
let props: EnvProperties = {
environment: "beta",
enablePiwikTrack: true,
adminToolsAPIURL: "https://beta.services.openaire.eu/uoa-monitor-service/",
adminToolsPortalType: "monitor",
adminToolsCommunity: "monitor",
domain : "https://beta.monitor.openaire.eu",
afterLoginRedirectLink: '/my-dashboards',
};
export let properties: EnvProperties = {
...common, ...commonBeta, ...props
}
environment: "beta",
enablePiwikTrack: true,
useCache: true,
showContent: true,
framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "https://stats.madgik.di.uoa.gr/stats-api/",
useNewStatistisTool: true,
claimsAPIURL: "https://beta.services.openaire.eu/claims/rest/claimsService/",
searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/",
searchResourcesAPIURL: "https://beta.services.openaire.eu/search/v2/api/resources",
openCitationsAPIURL: "https://services.openaire.eu/opencitations/getCitations?id=",
csvAPIURL: "https://beta.services.openaire.eu/search/v2/api/reports",
searchCrossrefAPIURL: "https://api.crossref.org/works",
searchDataciteAPIURL: "https://api.datacite.org/works",
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
doiURL: "https://dx.doi.org/",
pmcURL: "http://europepmc.org/articles/",
pmidURL: "https://www.ncbi.nlm.nih.gov/pubmed/",
handleURL: "http://hdl.handle.net/",
cordisURL: "http://cordis.europa.eu/projects/",
openDoarURL: "http://v2.sherpa.ac.uk/id/repository/",
r3DataURL: "http://service.re3data.org/repository/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
utilsService: "https://demo.openaire.eu/utils-service",
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
piwikSiteId: "298",
registryUrl: 'https://beta.services.openaire.eu/uoa-user-management/api/registry/',
loginUrl: "https://beta.services.openaire.eu/login-service/openid_connect_login",
userInfoUrl: "https://beta.services.openaire.eu/login-service/userInfo",
logoutUrl: "https://beta.services.openaire.eu/login-service/openid_logout",
cookieDomain: ".openaire.eu",
feedbackmail: "feedback@openaire.eu",
cacheUrl: "https://demo.openaire.eu/cache/get?url=",
monitorServiceAPIURL: "https://beta.services.openaire.eu/uoa-monitor-service/",
adminToolsAPIURL: "https://beta.services.openaire.eu/uoa-monitor-service/",
adminToolsCommunity: "monitor",
adminToolsPortalType: "monitor",
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/search/",
contextsAPI: "https://beta.services.openaire.eu/openaire/context",
communityAPI: "https://beta.services.openaire.eu/openaire/community/",
communitiesAPI: "https://beta.services.openaire.eu/openaire/community/communities",
csvLimit: 2000,
pagingLimit: 20,
resultsPerPage: 10,
baseLink : "",
domain : "https://beta.monitor.openaire.eu",
afterLoginRedirectLink: '/my-dashboards',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
searchLinkToDataProvider: "/search/dataprovider?datasourceId=",
searchLinkToDataset: "/search/dataset?datasetId=",
searchLinkToSoftwareLanding: "/search/software?softwareId=",
searchLinkToOrganization: "/search/organization?organizationId=",
searchLinkToOrp: "/search/other?orpId=",
searchLinkToStakeholders: "/browse",
searchLinkToResults: "/search/find/research-outcomes",
searchLinkToDataProviders: "/search/find/dataproviders",
searchLinkToProjects: "/search/find/projects",
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToJournals: "/search/journals",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
errorLink: '/error',
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
claimsInformationLink: "https://beta.openaire.eu/linking",
depositLearnHowPage: "/participate/deposit/learn-how",
depositSearchPage: "/participate/deposit/search",
shareInZenodoPage: "/participate/deposit/zenodo",
reCaptchaSiteKey: "6LezhVIUAAAAAOb4nHDd87sckLhMXFDcHuKyS76P",
admins: ["feedback@openaire.eu"],
lastIndexUpdate: "2019-08-07",
indexInfoAPI: "https://beta.services.openaire.eu/openaire/info/",
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",
b2noteAPIURL: "http://b2note-dev.bsc.es/",
footerGrantText: "OpenAIRE has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452"
};

View File

@ -1,16 +1,97 @@
import {EnvProperties} from "../app/openaireLibrary/utils/properties/env-properties";
import {common, commonProd} from "../app/openaireLibrary/utils/properties/environments/environment";
let props: EnvProperties = {
export let properties: EnvProperties = {
environment: "production",
enablePiwikTrack: true,
useCache: true,
showContent: true,
framesAPIURL: "https://www.openaire.eu/stats3/",
statisticsAPIURL: "https://services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://www.openaire.eu/stats/",
statisticsFrameNewAPIURL: "",
useNewStatistisTool: false,
claimsAPIURL: "https://services.openaire.eu/claims/rest/claimsService/",
searchAPIURLLAst: "https://services.openaire.eu/search/v2/api/",
searchResourcesAPIURL: "https://services.openaire.eu/search/v2/api/resources",
openCitationsAPIURL: "https://services.openaire.eu/opencitations/getCitations?id=",
csvAPIURL: "https://services.openaire.eu/search/v2/api/reports",
searchCrossrefAPIURL: "https://api.crossref.org/works",
searchDataciteAPIURL: "https://api.datacite.org/works",
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
doiURL: "https://dx.doi.org/",
pmcURL: "http://europepmc.org/articles/",
pmidURL: "https://www.ncbi.nlm.nih.gov/pubmed/",
handleURL: "http://hdl.handle.net/",
cordisURL: "http://cordis.europa.eu/projects/",
openDoarURL: "http://v2.sherpa.ac.uk/id/repository/",
r3DataURL: "http://service.re3data.org/repository/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
utilsService: "https://explore.openaire.eu/utils-service",
vocabulariesAPI: "https://services.openaire.eu/provision/mvc/vocabularies/",
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
piwikSiteId: "104",
registryUrl: 'https://services.openaire.eu/uoa-user-management/api/registry/',
loginUrl: "https://services.openaire.eu/login-service/openid_connect_login",
userInfoUrl: "https://services.openaire.eu/login-service/userInfo",
logoutUrl: "https://services.openaire.eu/login-service/openid_logout",
cookieDomain: ".openaire.eu",
feedbackmail: "feedback@openaire.eu",
cacheUrl: "https://explore.openaire.eu/cache/get?url=",
datasourcesAPI: "https://services.openaire.eu/openaire/ds/search/",
monitorServiceAPIURL: "https://services.openaire.eu/uoa-monitor-service",
adminToolsAPIURL: "https://services.openaire.eu/uoa-monitor-service/",
adminToolsPortalType: "monitor",
adminToolsCommunity: "monitor",
contextsAPI: "https://services.openaire.eu/openaire/context",
communityAPI: "https://services.openaire.eu/openaire/community/",
communitiesAPI: "https://services.openaire.eu/openaire/community/communities",
csvLimit: 2000,
pagingLimit: 20,
resultsPerPage: 10,
baseLink : "",
domain : "https://monitor.openaire.eu",
afterLoginRedirectLink: '/my-dashboards',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
searchLinkToDataProvider: "/search/dataprovider?datasourceId=",
searchLinkToDataset: "/search/dataset?datasetId=",
searchLinkToSoftwareLanding: "/search/software?softwareId=",
searchLinkToOrp: "/search/other?orpId=",
searchLinkToOrganization: "/search/organization?organizationId=",
searchLinkToStakeholders: "/browse",
searchLinkToResults: "/search/find/research-outcomes",
searchLinkToDataProviders: "/search/find/dataproviders",
searchLinkToProjects: "/search/find/projects",
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToJournals: "/search/journals",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
errorLink: '/error',
lastIndexInformationLink: "https://www.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
widgetLink: "https://www.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
claimsInformationLink: "https://www.openaire.eu/linking",
depositLearnHowPage: "/participate/deposit/learn-how",
depositSearchPage: "/participate/deposit/search",
shareInZenodoPage: "/participate/deposit/zenodo",
reCaptchaSiteKey: "6LezhVIUAAAAAOb4nHDd87sckLhMXFDcHuKyS76P",
admins: ["feedback@openaire.eu"],
lastIndexUpdate: "2019-07-24",
indexInfoAPI: "https://services.openaire.eu/openaire/info/",
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",
b2noteAPIURL: "http://b2note-dev.bsc.es/",
footerGrantText: "OpenAIRE has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452"
};
export let properties: EnvProperties = {
...common, ...commonProd, ...props
}

View File

@ -1,18 +1,97 @@
import {EnvProperties} from "../app/openaireLibrary/utils/properties/env-properties";
import {common, commonDev} from "../app/openaireLibrary/utils/properties/environments/environment";
let props: EnvProperties = {
export let properties: EnvProperties = {
environment: "development",
enablePiwikTrack: false,
useCache: false,
showContent: true,
framesAPIURL: "https://beta.openaire.eu/stats3/",
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
statisticsFrameNewAPIURL: "http://88.197.53.71:8080/stats-api/",
useNewStatistisTool: false,
claimsAPIURL: "http://scoobydoo.di.uoa.gr:8080/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/",
searchAPIURLLAst: "https://beta.services.openaire.eu/search/v2/api/",
searchResourcesAPIURL: "https://beta.services.openaire.eu/search/v2/api/resources",
openCitationsAPIURL: "https://services.openaire.eu/opencitations/getCitations?id=",
csvAPIURL: "http://rudie.di.uoa.gr:8080/dnet-functionality-services-2.0.0-SNAPSHOT/rest/v2/reports",
searchCrossrefAPIURL: "https://api.crossref.org/works",
searchDataciteAPIURL: "https://api.datacite.org/works",
searchOrcidURL: "https://pub.orcid.org/v2.1/",
orcidURL: "https://orcid.org/",
doiURL: "https://dx.doi.org/",
pmcURL: "http://europepmc.org/articles/",
pmidURL: "https://www.ncbi.nlm.nih.gov/pubmed/",
handleURL: "http://hdl.handle.net/",
cordisURL: "http://cordis.europa.eu/projects/",
openDoarURL: "http://v2.sherpa.ac.uk/id/repository/",
r3DataURL: "http://service.re3data.org/repository/",
zenodo: "https://zenodo.org/",
zenodoCommunities: "https://zenodo.org/api/communities/",
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
helpdesk: "https://www.openaire.eu/support/helpdesk",
utilsService: "http://mpagasas.di.uoa.gr:8000",
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
piwikSiteId: "298",
registryUrl: 'http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/registry/',
loginUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_connect_login",
userInfoUrl: "http://mpagasas.di.uoa.gr:19080/login-service/userInfo",
logoutUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_logout",
cookieDomain: ".di.uoa.gr",
feedbackmail: "openaire.test@gmail.com",
cacheUrl: "http://scoobydoo.di.uoa.gr:3000/get?url=",
monitorServiceAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service",
adminToolsAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service/",
adminToolsPortalType: "monitor",
adminToolsCommunity: "monitor",
domain : "http://mpagasas.di.uoa.gr:4000",
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/search/",
contextsAPI: "https://dev-openaire.d4science.org/openaire/context",
communityAPI: "https://dev-openaire.d4science.org/openaire/community/",
communitiesAPI: "https://dev-openaire.d4science.org/openaire/community/communities",
csvLimit: 2000,
pagingLimit: 20,
resultsPerPage: 10,
baseLink : "",
domain : "http://dl170.madgik.di.uoa.gr/monitor",
afterLoginRedirectLink: '/my-dashboards',
searchLinkToResult: "/search/result?id=",
searchLinkToPublication: "/search/publication?articleId=",
searchLinkToProject: "/search/project?projectId=",
searchLinkToDataProvider: "/search/dataprovider?datasourceId=",
searchLinkToDataset: "/search/dataset?datasetId=",
searchLinkToSoftwareLanding: "/search/software?softwareId=",
searchLinkToOrganization: "/search/organization?organizationId=",
searchLinkToOrp: "/search/other?orpId=",
searchLinkToStakeholders: "/browse",
searchLinkToResults: "/search/find/research-outcomes",
searchLinkToDataProviders: "/search/find/dataproviders",
searchLinkToProjects: "/search/find/projects",
searchLinkToOrganizations: "/search/find/organizations",
searchLinkToCompatibleDataProviders: "/search/content-providers",
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
searchLinkToJournals: "/search/journals",
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
searchLinkToAdvancedProjects: "/search/advanced/projects",
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
errorLink: '/error',
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
showLastIndexInformationLink: true,
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
claimsInformationLink: "https://beta.openaire.eu/linking",
depositLearnHowPage: "/participate/deposit/learn-how",
depositSearchPage: "/participate/deposit/search",
shareInZenodoPage: "/participate/deposit/zenodo",
reCaptchaSiteKey: "6LcVtFIUAAAAAB2ac6xYivHxYXKoUvYRPi-6_rLu",
admins: ["kostis30fylloy@gmail.com"],
lastIndexUpdate: "2019-05-16",
indexInfoAPI: "https://beta.services.openaire.eu/openaire/info/",
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",
b2noteAPIURL: "http://b2note-dev.bsc.es/",
footerGrantText: "OpenAIRE has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452"
};
export let properties: EnvProperties = {
...common, ...commonDev, ...props
}

View File

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

View File

@ -7,6 +7,8 @@ import {
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
@ -14,3 +16,7 @@ getTestBed().initTestEnvironment(
teardown: { destroyAfterEach: false }
}
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

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

View File

@ -10,14 +10,13 @@
"moduleResolution": "node",
"experimentalDecorators": true,
"importHelpers": true,
"target": "ES2022",
"target": "es2020",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2018",
"dom"
],
"useDefineForClassFields": false
]
}
}