Compare commits
232 Commits
production
...
master
|
@ -1,3 +1,4 @@
|
|||
.angular/
|
||||
node_modules/
|
||||
dist/
|
||||
.idea/
|
||||
|
|
|
@ -4,3 +4,6 @@
|
|||
[submodule "src/assets/common-assets"]
|
||||
path = src/assets/common-assets
|
||||
url = gitea@code-repo.d4science.org:MaDgIK/openaire-assets.git
|
||||
[submodule "src/assets/openaire-theme"]
|
||||
path = src/assets/openaire-theme
|
||||
url = gitea@code-repo.d4science.org:MaDgIK/openaire-theme.git
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Monitor
|
||||
|
||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.3.10 and has been updated to 11.2.14.
|
||||
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.3.10 and has been updated to 16.2.4.
|
||||
|
||||
## Install packages
|
||||
|
||||
|
|
94
angular.json
|
@ -22,7 +22,6 @@
|
|||
"skipTests": true
|
||||
},
|
||||
"@schematics/angular:module": {
|
||||
"skipTests": true
|
||||
},
|
||||
"@schematics/angular:pipe": {
|
||||
"skipTests": true
|
||||
|
@ -35,7 +34,6 @@
|
|||
"build": {
|
||||
"builder": "@angular-devkit/build-angular:browser",
|
||||
"options": {
|
||||
"aot": true,
|
||||
"outputPath": "dist/monitor/browser",
|
||||
"index": "src/index.html",
|
||||
"main": "src/main.ts",
|
||||
|
@ -47,23 +45,34 @@
|
|||
"src/sitemap.xml"
|
||||
],
|
||||
"styles": [
|
||||
"src/styles.css",
|
||||
"src/material.scss"
|
||||
"src/styles.less",
|
||||
"src/assets/common-assets/library-css/material.scss"
|
||||
],
|
||||
"scripts": [
|
||||
"src/assets/common-assets/common/jquery.js",
|
||||
"src/assets/common-assets/common/uikit.min.js",
|
||||
"src/assets/common-assets/common/uikit-icons.min.js",
|
||||
"node_modules/uikit/dist/js/uikit.min.js",
|
||||
"node_modules/uikit/dist/js/uikit-icons.min.js",
|
||||
"node_modules/jquery/dist/jquery.js"
|
||||
]
|
||||
],
|
||||
"vendorChunk": true,
|
||||
"extractLicenses": false,
|
||||
"buildOptimizer": false,
|
||||
"sourceMap": true,
|
||||
"optimization": false,
|
||||
"namedChunks": true
|
||||
},
|
||||
"configurations": {
|
||||
"development": {
|
||||
"optimization": true,
|
||||
"optimization": {
|
||||
"scripts": true,
|
||||
"styles": {
|
||||
"minify": true,
|
||||
"inlineCritical": false
|
||||
},
|
||||
"fonts": true
|
||||
},
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"namedChunks": false,
|
||||
"aot": true,
|
||||
"extractLicenses": true,
|
||||
"vendorChunk": false,
|
||||
"buildOptimizer": true,
|
||||
|
@ -86,11 +95,17 @@
|
|||
"with": "src/environments/environment.beta.ts"
|
||||
}
|
||||
],
|
||||
"optimization": true,
|
||||
"optimization": {
|
||||
"scripts": true,
|
||||
"styles": {
|
||||
"minify": true,
|
||||
"inlineCritical": false
|
||||
},
|
||||
"fonts": true
|
||||
},
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"namedChunks": false,
|
||||
"aot": true,
|
||||
"extractLicenses": true,
|
||||
"vendorChunk": false,
|
||||
"buildOptimizer": true,
|
||||
|
@ -126,11 +141,17 @@
|
|||
"with": "src/environments/environment.prod.ts"
|
||||
}
|
||||
],
|
||||
"optimization": true,
|
||||
"optimization": {
|
||||
"scripts": true,
|
||||
"styles": {
|
||||
"minify": true,
|
||||
"inlineCritical": false
|
||||
},
|
||||
"fonts": true
|
||||
},
|
||||
"outputHashing": "all",
|
||||
"sourceMap": false,
|
||||
"namedChunks": false,
|
||||
"aot": true,
|
||||
"extractLicenses": true,
|
||||
"vendorChunk": false,
|
||||
"buildOptimizer": true,
|
||||
|
@ -146,7 +167,8 @@
|
|||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": ""
|
||||
},
|
||||
"serve": {
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
|
@ -181,30 +203,23 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"builder": "@angular-devkit/build-angular:tslint",
|
||||
"options": {
|
||||
"tsConfig": [
|
||||
"src/tsconfig.app.json",
|
||||
"src/tsconfig.spec.json"
|
||||
],
|
||||
"exclude": [
|
||||
"**/node_modules/**"
|
||||
]
|
||||
}
|
||||
},
|
||||
"server": {
|
||||
"builder": "@angular-devkit/build-angular:server",
|
||||
"options": {
|
||||
"outputPath": "dist/monitor/server",
|
||||
"main": "server.ts",
|
||||
"tsConfig": "src/tsconfig.server.json"
|
||||
"tsConfig": "src/tsconfig.server.json",
|
||||
"sourceMap": true,
|
||||
"optimization": false,
|
||||
"buildOptimizer": false
|
||||
},
|
||||
"configurations": {
|
||||
"development": {
|
||||
"outputHashing": "media",
|
||||
"sourceMap": false,
|
||||
"optimization": true
|
||||
"optimization": true,
|
||||
"vendorChunk": true,
|
||||
"buildOptimizer": true
|
||||
},
|
||||
"beta": {
|
||||
"outputHashing": "media",
|
||||
|
@ -215,7 +230,8 @@
|
|||
}
|
||||
],
|
||||
"sourceMap": false,
|
||||
"optimization": true
|
||||
"optimization": true,
|
||||
"buildOptimizer": true
|
||||
},
|
||||
"production": {
|
||||
"outputHashing": "media",
|
||||
|
@ -226,9 +242,11 @@
|
|||
}
|
||||
],
|
||||
"sourceMap": false,
|
||||
"optimization": true
|
||||
"optimization": true,
|
||||
"buildOptimizer": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": ""
|
||||
},
|
||||
"serve-ssr": {
|
||||
"builder": "@nguniversal/builders:ssr-dev-server",
|
||||
|
@ -274,18 +292,8 @@
|
|||
"devServerTarget": "monitor:serve:production"
|
||||
}
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"builder": "@angular-devkit/build-angular:tslint",
|
||||
"options": {
|
||||
"tsConfig": "e2e/tsconfig.e2e.json",
|
||||
"exclude": [
|
||||
"**/node_modules/**"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultProject": "monitor"
|
||||
}
|
||||
}
|
||||
|
|
53
package.json
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"name": "monitor",
|
||||
"version": "0.0.0",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"ng": "ng",
|
||||
"start": " ng serve --port 4500 --disable-host-check --host 0.0.0.0",
|
||||
"build": "ng build",
|
||||
"build-dev": "ng build --configuration=development",
|
||||
"build-beta": "ng build --configuration=beta",
|
||||
"build-prod": "ng build --prod",
|
||||
"build-prod": "ng build --configuration production",
|
||||
"webpack-bundle-analyzer": "ng build --stats-json && webpack-bundle-analyzer dist/monitor/browser/stats-es2015.json --host 0.0.0.0",
|
||||
"test": "ng test",
|
||||
"e2e": "ng e2e",
|
||||
|
@ -17,44 +17,45 @@
|
|||
"build:ssr-beta": "npm run build-beta && ng run monitor:server:beta",
|
||||
"build:ssr-prod": "npm run build-prod && ng run monitor:server:production",
|
||||
"prerender": "ng run monitor:prerender",
|
||||
"after-build-clean": "rm -rf dist/monitor/browser/assets/common-assets/.svn/ src/app/openaireLibrary/.svn node_modules src/assets/common-assets/.svn/"
|
||||
"after-build-clean": "rm -rf dist/monitor/browser/assets/common-assets/.git/ src/app/openaireLibrary/.git node_modules .angular src/assets/common-assets/.git/ .git/"
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "~11.2.14",
|
||||
"@angular/cdk": "^11.2.13",
|
||||
"@angular/common": "~11.2.14",
|
||||
"@angular/compiler": "~11.2.14",
|
||||
"@angular/core": "~11.2.14",
|
||||
"@angular/forms": "~11.2.14",
|
||||
"@angular/localize": "^11.2.14",
|
||||
"@angular/material": "^11.2.13",
|
||||
"@angular/platform-browser": "~11.2.14",
|
||||
"@angular/platform-browser-dynamic": "~11.2.14",
|
||||
"@angular/platform-server": "~11.2.14",
|
||||
"@angular/router": "~11.2.14",
|
||||
"@nguniversal/express-engine": "^11.2.1",
|
||||
"@angular/animations": "^16.1.8",
|
||||
"@angular/cdk": "^16.1.7",
|
||||
"@angular/common": "^16.1.8",
|
||||
"@angular/compiler": "^16.1.8",
|
||||
"@angular/core": "^16.1.8",
|
||||
"@angular/forms": "^16.1.8",
|
||||
"@angular/localize": "^16.1.8",
|
||||
"@angular/material": "^16.1.7",
|
||||
"@angular/platform-browser": "^16.1.8",
|
||||
"@angular/platform-browser-dynamic": "^16.1.8",
|
||||
"@angular/platform-server": "^16.1.8",
|
||||
"@angular/router": "^16.1.8",
|
||||
"@nguniversal/express-engine": "^16.1.1",
|
||||
"clipboard": "^1.5.16",
|
||||
"core-js": "^2.5.4",
|
||||
"express": "^4.15.2",
|
||||
"jquery": "^3.4.1",
|
||||
"ng-recaptcha": "^7.0.1",
|
||||
"ng-recaptcha": "^12.0.2",
|
||||
"rxjs": "^6.5.1",
|
||||
"ts-md5": "^1.2.0",
|
||||
"tslib": "^2.0.0",
|
||||
"zone.js": "~0.10.2"
|
||||
"uikit": "3.16.24",
|
||||
"zone.js": "~0.13.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.1102.14",
|
||||
"@angular/cli": "~11.2.14",
|
||||
"@angular/compiler-cli": "~11.2.14",
|
||||
"@angular/language-service": "~11.2.14",
|
||||
"@nguniversal/builders": "^11.2.1",
|
||||
"@types/express": "^4.17.0",
|
||||
"@angular-devkit/build-angular": "^16.1.7",
|
||||
"@angular/cli": "^16.1.7",
|
||||
"@angular/compiler-cli": "^16.1.8",
|
||||
"@angular/language-service": "^16.1.8",
|
||||
"@nguniversal/builders": "^16.1.1",
|
||||
"@types/compression": "^1.7.0",
|
||||
"@types/node": "^12.11.1",
|
||||
"@types/express": "^4.17.0",
|
||||
"@types/jasmine": "~3.6.0",
|
||||
"@types/jasminewd2": "~2.0.3",
|
||||
"@types/node": "^16.18.50",
|
||||
"codelyzer": "^6.0.0",
|
||||
"jasmine-core": "~3.8.0",
|
||||
"jasmine-spec-reporter": "~5.0.0",
|
||||
|
@ -65,6 +66,6 @@
|
|||
"karma-jasmine-html-reporter": "^1.6.0",
|
||||
"protractor": "~7.0.0",
|
||||
"ts-node": "~7.0.0",
|
||||
"typescript": "~4.0.7"
|
||||
"typescript": "~4.9.5"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import 'zone.js/dist/zone-node';
|
||||
import 'zone.js/node';
|
||||
|
||||
import { ngExpressEngine } from '@nguniversal/express-engine';
|
||||
import * as express from 'express';
|
||||
|
@ -20,6 +20,7 @@ export function app() {
|
|||
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
|
||||
server.engine('html', ngExpressEngine({
|
||||
bootstrap: AppServerModule,
|
||||
inlineCriticalCss: false
|
||||
}));
|
||||
|
||||
server.set('view engine', 'html');
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
@import "~src/assets/openaire-theme/less/_import-variables";
|
||||
|
||||
.custom-translate-bottom-left {
|
||||
transform: translate(-20%, 20%);
|
||||
}
|
|
@ -0,0 +1,667 @@
|
|||
import {ChangeDetectorRef, Component} from "@angular/core";
|
||||
import {Router} from '@angular/router';
|
||||
import {Meta, Title} from '@angular/platform-browser';
|
||||
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
|
||||
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {StakeholderEntities} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
|
||||
@Component({
|
||||
selector: 'about',
|
||||
template: `
|
||||
<div class="uk-visible@m">
|
||||
<div class="uk-position-relative">
|
||||
<div class="uk-background-muted">
|
||||
<div class="uk-container uk-container-large uk-section uk-section-small">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-column uk-flex-center uk-margin-bottom" uk-scrollspy-class>
|
||||
<h1 class="uk-margin-medium-top" uk-scrollspy-class>How it works<span class="uk-text-primary">.</span></h1>
|
||||
<div class="uk-text-large uk-width-1-2@l uk-width-2-3" uk-scrollspy-class>
|
||||
Join the OpenAIRE Monitor service and we will create for you a dashboard to track, understand and
|
||||
position your organization's research activities and their impact, discover and evaluate Open Science
|
||||
trends for your organization and make data-driven decisions. Here's how it works.
|
||||
</div>
|
||||
<div class="uk-margin-medium-top uk-margin-small-bottom" uk-scrollspy-class>
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-padding"></div>
|
||||
<img class="uk-position-bottom-right uk-width-1-3@xl uk-width-1-2@l"
|
||||
src="assets/monitor-assets/about/hero.svg" loading="lazy">
|
||||
</div>
|
||||
<div class="uk-section uk-section-small">
|
||||
<div class="uk-sticky uk-blur-background uk-visible@l" [attr.uk-sticky]="shouldSticky?'':null" [attr.offset]="offset">
|
||||
<div class="uk-container">
|
||||
<div class="uk-padding uk-padding-remove-right uk-padding-remove-bottom">
|
||||
<slider-tabs flexPosition="center" customClass="uk-text-large" connect="#tabs-content">
|
||||
<slider-tab *ngFor="let section of sections; let i = index" [tabTitle]="section"
|
||||
[tabId]="section"></slider-tab>
|
||||
</slider-tabs>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="tabs-content" class="uk-switcher uk-margin-large-bottom">
|
||||
<li>
|
||||
<you-we [type]="stakeholderEntities.FUNDER" id="funder">
|
||||
<ng-container you>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 1a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">You provide Information about your funded projects and
|
||||
<a href="https://www.openaire.eu/funders-how-to-join-guide" target="_blank">join OpenAIRE</a>.</p>
|
||||
<p>All information is exchanged under confidential agreements and we only make public what you agree
|
||||
on.</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-left custom-translate-bottom-left"
|
||||
src="assets/monitor-assets/about/icon1.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 2a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">You validate the results and approve for them to be shown
|
||||
on the <a href="https://explore.openaire.eu" target="_blank">Explore</a> portal.</p>
|
||||
<p>Examine your dashboard and the showcased information to ensure you are satisfied with what you
|
||||
see.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 3a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
|
||||
us</p>
|
||||
<ul class="uk-list uk-list-disc">
|
||||
<li>to understand any gaps and deviations within the dashboard</li>
|
||||
<li>to verify the data integrity</li>
|
||||
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-medium-bottom">
|
||||
<span class="uk-text-primary">Step 4a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Customise your dashboard and make your own profile.</p>
|
||||
<p>Select the <a href="https://monitor.openaire.eu/indicators/funder" target="_blank">metrics</a> of
|
||||
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
|
||||
</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-left" src="assets/monitor-assets/about/icon3.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
|
||||
<span class="uk-text-primary">Step 5a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Select your team</p>
|
||||
<p>And make them collaborators of the service.</p>
|
||||
</div>
|
||||
</ng-container>
|
||||
<ng-container we>
|
||||
<div class="uk-card uk-card-default uk-overflow-hidden uk-position-relative uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 1b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We ingest your project metadata and mine the <a
|
||||
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a>.
|
||||
</p>
|
||||
<p>We infer links to research results: publications, datasets, software, etc.</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 2b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We present the results to you on our Beta portal.</p>
|
||||
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
|
||||
your dashboard.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 3b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
|
||||
advanced composite indicators.</p>
|
||||
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
|
||||
funded research activities.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 4b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We refine until we are happy with the results.</p>
|
||||
<p>We present your dashboard to you.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
|
||||
<span class="uk-text-primary">Step 5b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Notify you about new metrics and indicators</p>
|
||||
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
|
||||
</div>
|
||||
</ng-container>
|
||||
</you-we>
|
||||
</li>
|
||||
<li>
|
||||
<you-we [type]="stakeholderEntities.RI" id="ri">
|
||||
<ng-container you>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 1a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">You state your interest in having a research initiative
|
||||
dashboard.</p>
|
||||
<p>All information is exchanged under confidential agreements and we only make public what you agree
|
||||
on.</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-left custom-translate-bottom-left"
|
||||
src="assets/monitor-assets/about/icon1.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 2a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">You configure the criteria to identify the research
|
||||
products that you want to be accounted for.</p>
|
||||
<p>You use the administration dashboard we created for you. If this is not enough, you give us input for
|
||||
the implementation of a customised full-text mining algorithm.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 3a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
|
||||
us</p>
|
||||
<ul class="uk-list uk-list-disc">
|
||||
<li>to understand any gaps and deviations within the dashboard</li>
|
||||
<li>to verify the data integrity</li>
|
||||
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-medium-bottom">
|
||||
<span class="uk-text-primary">Step 4a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Customise your dashboard and make your own profile.</p>
|
||||
<p>Select the <a href="https://monitor.openaire.eu/indicators/ri" target="_blank">metrics</a> of
|
||||
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
|
||||
</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-left" src="assets/monitor-assets/about/icon3.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
|
||||
<span class="uk-text-primary">Step 5a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Select your team</p>
|
||||
<p>And make them collaborators of the service.</p>
|
||||
</div>
|
||||
</ng-container>
|
||||
<ng-container we>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 1b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We set up an administration dashboard that you can use
|
||||
to specify which research products of the <a href="https://graph.openaire.eu" target="_blank"
|
||||
class="text-graph">OpenAIRE Graph</a> are
|
||||
relevant for you.</p>
|
||||
<p>If needed, we develop a customized full-text mining algorithm to identify your publications.</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 2b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We present the results to you on our Beta portal.</p>
|
||||
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
|
||||
your dashboard.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 3b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
|
||||
advanced composite indicators.</p>
|
||||
<p>Aligned with the Open Science principles and following an evidence-based approach.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 4b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We refine until we are happy with the results.</p>
|
||||
<p>We present your dashboard to you.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
|
||||
<span class="uk-text-primary">Step 5b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Notify you about new metrics and indicators</p>
|
||||
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
|
||||
</div>
|
||||
</ng-container>
|
||||
</you-we>
|
||||
</li>
|
||||
<li>
|
||||
<!-- RESEARCH INSTITUTION -->
|
||||
<you-we [type]="stakeholderEntities.ORGANIZATION" id="organizations">
|
||||
<ng-container you>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 1a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">You state your interest in having an institutional
|
||||
dashboard for your institution.</p>
|
||||
<p>All information is exchanged under confidential agreements and we only make public what you agree
|
||||
on.</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-left custom-translate-bottom-left"
|
||||
src="assets/monitor-assets/about/icon1.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 2a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">You validate and approve the results.</p>
|
||||
<p>You examine your dashboard and the showcased information to ensure you are satisfied with what you
|
||||
see.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 3a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
|
||||
us</p>
|
||||
<ul class="uk-list uk-list-disc">
|
||||
<li>to understand any gaps and deviations within the dashboard</li>
|
||||
<li>to verify the data integrity</li>
|
||||
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-medium-bottom">
|
||||
<span class="uk-text-primary">Step 4a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Customise your dashboard and make your own profile.</p>
|
||||
<p>Select the <a href="https://monitor.openaire.eu/indicators/organization" target="_blank">metrics</a> of
|
||||
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
|
||||
</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-left" src="assets/monitor-assets/about/icon3.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
|
||||
<span class="uk-text-primary">Step 5a</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Select your team</p>
|
||||
<p>And make them collaborators of the service.</p>
|
||||
</div>
|
||||
</ng-container>
|
||||
<ng-container we>
|
||||
<div class="uk-card uk-card-default uk-position-relative uk-overflow-hidden uk-margin-large-bottom">
|
||||
<div class="uk-card-body uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 1b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Starting from the
|
||||
<a href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a> we check for existing data for your institution.</p>
|
||||
<p>We infer links to research results: publications, datasets, software, etc.</p>
|
||||
</div>
|
||||
<img class="uk-width-xsmall uk-position-bottom-right" src="assets/monitor-assets/about/icon2.svg">
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 2b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We present the results to you on our Beta portal.</p>
|
||||
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
|
||||
your dashboard.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 3b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
|
||||
advanced composite indicators.</p>
|
||||
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
|
||||
institution’s research activities.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<span class="uk-text-primary">Step 4b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">We refine until we are happy with the results.</p>
|
||||
<p>We present your dashboard to you.</p>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative">
|
||||
<span class="uk-text-primary">Step 5b</span>
|
||||
<p class="uk-text-large uk-margin-xsmall-top">Notify you about new metrics and indicators</p>
|
||||
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
|
||||
</div>
|
||||
</ng-container>
|
||||
</you-we>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-hidden@m">
|
||||
<div class="uk-background-muted">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-text-center" uk-scrollspy-class>
|
||||
<h1 class="uk-margin-medium-top uk-margin-medium-bottom" uk-scrollspy-class>How it works<span class="uk-text-primary">.</span></h1>
|
||||
<div class="uk-text-large" uk-scrollspy-class>
|
||||
Join the OpenAIRE Monitor service and we will create for you a dashboard to track, understand and
|
||||
position your organization's research activities and their impact, discover and evaluate Open Science
|
||||
trends for your organization and make data-driven decisions. Here's how it works.
|
||||
</div>
|
||||
<div class="uk-margin-medium-top" uk-scrollspy-class>
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-position-relative uk-height-medium" style="overflow-x: hidden; overflow-x: clip;">
|
||||
<img class="uk-width-large uk-position-absolute" src="assets/monitor-assets/about/hero.svg" loading="lazy"
|
||||
style="bottom: -70px; right: -80px;">
|
||||
</div>
|
||||
<!-- style="transform: translate(60px, 40px);" -->
|
||||
</div>
|
||||
<div class="uk-section uk-section-large uk-margin-medium-top">
|
||||
<div class="uk-sticky uk-blur-background" [attr.uk-sticky]="shouldSticky?'':null">
|
||||
<div class="uk-padding-small uk-padding-remove-right uk-padding-remove-bottom">
|
||||
<slider-tabs flexPosition="center" customClass="uk-text-large" connect="#tabs-content-mobile">
|
||||
<slider-tab *ngFor="let section of sections; let i = index" [tabTitle]="section"
|
||||
[tabId]="section"></slider-tab>
|
||||
</slider-tabs>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large">
|
||||
<ul id="tabs-content-mobile" class="uk-switcher uk-margin-large-bottom">
|
||||
<li id="funder">
|
||||
<div class="uk-h1 uk-text-center uk-margin-xlarge-top uk-margin-xlarge-bottom">
|
||||
Are you a <span class="uk-text-primary">Funder?</span>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 1a</span>
|
||||
<h5 class="uk-margin-xsmall-top">You provide Information about your funded projects and
|
||||
<a href="https://www.openaire.eu/funders-how-to-join-guide" target="_blank">join OpenAIRE</a>.</h5>
|
||||
<p>All information is exchanged under confidential agreements and we only make public what you agree
|
||||
on.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 1b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We ingest your project metadata and mine the <a
|
||||
href="https://graph.openaire.eu" target="_blank" class="text-graph">OpenAIRE Graph</a>.
|
||||
</h5>
|
||||
<p>We infer links to research results: publications, datasets, software, etc.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 2a</span>
|
||||
<h5 class="uk-margin-xsmall-top">You validate the results and approve for them to be shown
|
||||
on the <a href="https://explore.openaire.eu" target="_blank">Explore</a> portal.</h5>
|
||||
<p>Examine your dashboard and the showcased information to ensure you are satisfied with what you
|
||||
see.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 2b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We present the results to you on our Beta portal.</h5>
|
||||
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
|
||||
your dashboard.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 3a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
|
||||
us</h5>
|
||||
<ul class="uk-list uk-list-disc">
|
||||
<li>to understand any gaps and deviations within the dashboard</li>
|
||||
<li>to verify the data integrity</li>
|
||||
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 3b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
|
||||
advanced composite indicators.</h5>
|
||||
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
|
||||
funded research activities.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 4a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Customise your dashboard and make your own profile.</h5>
|
||||
<p>Select the <a href="https://monitor.openaire.eu/indicators/funder" target="_blank">metrics</a> of
|
||||
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
|
||||
</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 4b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We refine until we are happy with the results.</h5>
|
||||
<p>We present your dashboard to you.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 5a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Select your team</h5>
|
||||
<p>And make them collaborators of the service.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 5b</span>
|
||||
<h5 class="uk-margin-xsmall-top">Notify you about new metrics and indicators</h5>
|
||||
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li id="ri">
|
||||
<div class="uk-h1 uk-text-center uk-margin-xlarge-top uk-margin-xlarge-bottom">
|
||||
Are you a <span class="uk-text-primary">Research Initiative?</span>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 1a</span>
|
||||
<h5 class="uk-margin-xsmall-top">You state your interest in having a research initiative
|
||||
dashboard.</h5>
|
||||
<p>All information is exchanged under confidential agreements and we only make public what you agree
|
||||
on.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 1b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We set up an administration dashboard that you can use
|
||||
to specify which research products of the <a href="https://graph.openaire.eu" target="_blank"
|
||||
class="text-graph">OpenAIRE Graph</a> are
|
||||
relevant for you.</h5>
|
||||
<p>If needed, we develop a customized full-text mining algorithm to identify your publications.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 2a</span>
|
||||
<h5 class="uk-margin-xsmall-top">You configure the criteria to identify the research
|
||||
products that you want to be accounted for.</h5>
|
||||
<p>You use the administration dashboard we created for you. If this is not enough, you give us input for
|
||||
the implementation of a customised full-text mining algorithm.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 2b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We present the results to you on our Beta portal.</h5>
|
||||
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
|
||||
your dashboard.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 3a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
|
||||
us</h5>
|
||||
<ul class="uk-list uk-list-disc">
|
||||
<li>to understand any gaps and deviations within the dashboard</li>
|
||||
<li>to verify the data integrity</li>
|
||||
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 3b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
|
||||
advanced composite indicators.</h5>
|
||||
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
|
||||
institution’s research activities.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 4a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Customise your dashboard and make your own profile.</h5>
|
||||
<p>Select the <a href="https://monitor.openaire.eu/indicators/ri" target="_blank">metrics</a> of
|
||||
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
|
||||
</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 4b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We refine until we are happy with the results.</h5>
|
||||
<p>We present your dashboard to you.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 5a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Select your team</h5>
|
||||
<p>And make them collaborators of the service.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 5b</span>
|
||||
<h5 class="uk-margin-xsmall-top">Notify you about new metrics and indicators</h5>
|
||||
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li id="organizations">
|
||||
<div class="uk-h1 uk-text-center uk-margin-xlarge-top uk-margin-xlarge-bottom">
|
||||
Are you a <span class="uk-text-primary">Research Institution?</span>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 1a</span>
|
||||
<h5 class="uk-margin-xsmall-top">You state your interest in having an institutional
|
||||
dashboard for your institution.</h5>
|
||||
<p>All information is exchanged under confidential agreements and we only make public what you agree
|
||||
on.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 1b</span>
|
||||
<h5 class="uk-margin-xsmall-top">Starting from the <a href="https://graph.openaire.eu"
|
||||
target="_blank" class="text-graph">OpenAIRE
|
||||
Research Graph</a> we check for existing data for your institution.</h5>
|
||||
<p>We infer links to research results: publications, datasets, software, etc.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 2a</span>
|
||||
<h5 class="uk-margin-xsmall-top">You validate and approve the results.</h5>
|
||||
<p>You examine your dashboard and the showcased information to ensure you are satisfied with what you
|
||||
see.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 2b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We present the results to you on our Beta portal.</h5>
|
||||
<p>We refine until you are happy with the results. We allocate the hardware resources needed to create
|
||||
your dashboard.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 3a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Through 1-on-1 expert consultations you interact with
|
||||
us</h5>
|
||||
<ul class="uk-list uk-list-disc">
|
||||
<li>to understand any gaps and deviations within the dashboard</li>
|
||||
<li>to verify the data integrity</li>
|
||||
<li>to discuss the addition of any new metrics and indicators that might interest you</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 3b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We produce well-documented visualisations of simple & more
|
||||
advanced composite indicators.</h5>
|
||||
<p>Aligned with the Open Science principles and following an evidence-based approach, and based on the
|
||||
institution’s research activities.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 4a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Customise your dashboard and make your own profile.</h5>
|
||||
<p>Select the <a href="https://monitor.openaire.eu/indicators/organization" target="_blank">metrics</a> of
|
||||
interest to you and the ones you want to publish, to keep private, or to share just with colleagues.
|
||||
</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 4b</span>
|
||||
<h5 class="uk-margin-xsmall-top">We refine until we are happy with the results.</h5>
|
||||
<p>We present your dashboard to you.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-card uk-card-default uk-card-body uk-position-relative uk-margin-large-bottom">
|
||||
<div>
|
||||
<span class="uk-text-primary">Step 5a</span>
|
||||
<h5 class="uk-margin-xsmall-top">Select your team</h5>
|
||||
<p>And make them collaborators of the service.</p>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<span class="uk-text-primary">Step 5b</span>
|
||||
<h5 class="uk-margin-xsmall-top">Notify you about new metrics and indicators</h5>
|
||||
<p>as we keep enriching the Graph, which you may find useful and add to your profile</p>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
styles: [`
|
||||
.custom-translate-bottom-left {
|
||||
transform: translate(-20%, 20%);
|
||||
}
|
||||
`]
|
||||
})
|
||||
export class AboutComponent {
|
||||
public url: string = null;
|
||||
public pageTitle: string = "OpenAIRE - Monitor | About";
|
||||
public description: string = "OpenAIRE - Monitor | About - How it works";
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'About'}];
|
||||
public properties: EnvProperties = properties;
|
||||
public sections: string[] = [StakeholderEntities.FUNDERS, StakeholderEntities.RIS, StakeholderEntities.ORGANIZATIONS];
|
||||
public offset: number;
|
||||
public stakeholderEntities = StakeholderEntities;
|
||||
public shouldSticky: boolean = true;
|
||||
subscriptions = [];
|
||||
|
||||
constructor(
|
||||
private _router: Router,
|
||||
private _meta: Meta,
|
||||
private _title: Title,
|
||||
private seoService: SEOService,
|
||||
private _piwikService: PiwikService,
|
||||
private helper: HelperService,
|
||||
private cdr: ChangeDetectorRef) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
this.updateTitle(this.pageTitle);
|
||||
this.updateDescription(this.description);
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
if (typeof document !== 'undefined') {
|
||||
this.offset = Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-height'));
|
||||
this.cdr.detectChanges();
|
||||
this.observeBottom();
|
||||
}
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private observeBottom() {
|
||||
let bottom = document.getElementById('bottom');
|
||||
if (bottom) {
|
||||
let bottomObs = new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
this.shouldSticky = !entry.isIntersecting;
|
||||
this.cdr.detectChanges();
|
||||
})
|
||||
});
|
||||
this.subscriptions.push(bottomObs);
|
||||
bottomObs.observe(bottom);
|
||||
}
|
||||
}
|
||||
|
||||
private updateDescription(description: string) {
|
||||
this._meta.updateTag({content: description}, "name='description'");
|
||||
this._meta.updateTag({content: description}, "property='og:description'");
|
||||
}
|
||||
|
||||
private updateTitle(title: string) {
|
||||
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
|
||||
this._title.setTitle(_title);
|
||||
this._meta.updateTag({content: _title}, "property='og:title'");
|
||||
}
|
||||
|
||||
private updateUrl(url: string) {
|
||||
this._meta.updateTag({content: url}, "property='og:url'");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
import {CommonModule} from "@angular/common";
|
||||
import {NgModule} from "@angular/core";
|
||||
import {RouterModule} from "@angular/router";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {AboutComponent} from "./about.component";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {SliderTabsModule} from "../openaireLibrary/sharedComponents/tabs/slider-tabs.module";
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
import {YouWeComponent} from "./you-we.component";
|
||||
|
||||
@NgModule({
|
||||
declarations: [AboutComponent, YouWeComponent],
|
||||
imports: [CommonModule, RouterModule.forChild([
|
||||
{
|
||||
path: '',
|
||||
component: AboutComponent,
|
||||
data: {extraOffset: 50}
|
||||
},
|
||||
{
|
||||
path: 'how-it-works',
|
||||
redirectTo: '/about'
|
||||
},
|
||||
{
|
||||
path: 'faqs',
|
||||
redirectTo: '/support'
|
||||
}
|
||||
]), BreadcrumbsModule, SliderTabsModule, HelperModule],
|
||||
exports: [AboutComponent],
|
||||
providers: [PreviousRouteRecorder, PiwikService]
|
||||
})
|
||||
export class AboutModule {}
|
|
@ -0,0 +1,115 @@
|
|||
import {
|
||||
AfterContentChecked, AfterViewInit,
|
||||
ChangeDetectorRef,
|
||||
Component,
|
||||
ElementRef,
|
||||
Input,
|
||||
OnDestroy,
|
||||
ViewChild
|
||||
} from "@angular/core";
|
||||
import {StakeholderEntities} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
|
||||
declare var UIkit;
|
||||
|
||||
@Component({
|
||||
selector: 'you-we',
|
||||
template: `
|
||||
<div>
|
||||
<div class="uk-container">
|
||||
<h2 class="uk-text-center uk-margin-large-top uk-margin-large-bottom">Are you a <span
|
||||
class="uk-text-primary">{{type}}?</span></h2>
|
||||
</div>
|
||||
<div [id]="'sticky-' + id" #sticky class="uk-background-default uk-blur-background uk-sticky uk-visible@l"
|
||||
uk-sticky="animation: uk-animation-slide-bottom" [attr.end]="'#' + id"
|
||||
[attr.start]="'100vh -' + height + 'px'" [attr.offset]="offset">
|
||||
<div class="uk-container">
|
||||
<div class="uk-grid uk-grid-large uk-child-width-1-2@l" [class.uk-grid-divider]="!isSticky">
|
||||
<div class="uk-text-center uk-first-column">
|
||||
<h3 class="uk-margin-remove uk-margin-small-top uk-margin-small-bottom">You</h3>
|
||||
</div>
|
||||
<div class="uk-text-center">
|
||||
<h3 class="uk-margin-remove uk-margin-small-top uk-margin-small-bottom">We</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div [id]="id" class="uk-container">
|
||||
<div class="uk-padding uk-padding-remove-vertical">
|
||||
<div class="uk-grid uk-grid-large uk-grid-divider uk-child-width-1-2@l" uk-grid
|
||||
uk-height-match="target: .uk-card">
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle uk-child-width-1-1">
|
||||
<div class="uk-margin-top uk-margin-xlarge-bottom">
|
||||
<span class="uk-h3 uk-text-center uk-margin-bottom uk-hidden@l">You</span>
|
||||
<ng-content select="[you]"></ng-content>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle uk-child-width-1-1">
|
||||
<div class="uk-margin-top uk-margin-xlarge-bottom">
|
||||
<span class="uk-h3 uk-text-center uk-margin-bottom uk-hidden@l">We</span>
|
||||
<ng-content select="[we]"></ng-content>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`
|
||||
})
|
||||
export class YouWeComponent implements AfterViewInit, AfterContentChecked, OnDestroy {
|
||||
@Input()
|
||||
public type: StakeholderEntities.FUNDER | StakeholderEntities.RI | StakeholderEntities.ORGANIZATION = StakeholderEntities.FUNDER;
|
||||
@Input()
|
||||
public id;
|
||||
@ViewChild('sticky') sticky: ElementRef;
|
||||
public isSticky: boolean = false;
|
||||
public offset: number
|
||||
public height: number;
|
||||
private subscriptions: any[] = [];
|
||||
|
||||
constructor(private cdr: ChangeDetectorRef) {
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
if (this.sticky) {
|
||||
this.observeSticky();
|
||||
}
|
||||
}
|
||||
|
||||
ngAfterContentChecked() {
|
||||
if (this.sticky && typeof document !== 'undefined') {
|
||||
this.offset = this.calcOffset(this.sticky.nativeElement);
|
||||
}
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof (ResizeObserver || IntersectionObserver)) {
|
||||
subscription.disconnect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public observeSticky() {
|
||||
let resizeObs = new ResizeObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
setTimeout(() => {
|
||||
this.offset = this.calcOffset(entry.target);
|
||||
this.cdr.detectChanges();
|
||||
});
|
||||
})
|
||||
});
|
||||
this.subscriptions.push(resizeObs);
|
||||
resizeObs.observe(this.sticky.nativeElement);
|
||||
this.subscriptions.push(UIkit.util.on('#sticky-' + this.id, 'active', (): void => {
|
||||
this.isSticky = true;
|
||||
}));
|
||||
this.subscriptions.push(UIkit.util.on('#sticky-' + this.id, 'inactive', () => {
|
||||
this.isSticky = false;
|
||||
}));
|
||||
}
|
||||
|
||||
calcOffset(element) {
|
||||
this.height = element.offsetHeight;
|
||||
return window.innerHeight - this.height;
|
||||
}
|
||||
}
|
|
@ -3,20 +3,41 @@ import {RouterModule, Routes} from '@angular/router';
|
|||
import {OpenaireErrorPageComponent} from './error/errorPage.component';
|
||||
|
||||
const routes: Routes = [
|
||||
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)},
|
||||
{path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule), data: {hasStickyHeaderOnMobile: true}},
|
||||
{path: 'about/learn-how', redirectTo: 'about', pathMatch: 'full'},
|
||||
{
|
||||
path: 'about',
|
||||
loadChildren: () => import('./about/about.module').then(m => m.AboutModule)
|
||||
},
|
||||
{
|
||||
path: 'support',
|
||||
loadChildren: () => import('./support/support.module').then(m => m.SupportModule),
|
||||
data: {hasStickyHeaderOnMobile: true}
|
||||
},
|
||||
{
|
||||
path: 'methodology',
|
||||
loadChildren: () => import('./openaireLibrary/monitor/methodology/methodology.module').then(m => m.MethodologyModule)
|
||||
},
|
||||
{
|
||||
path: 'indicators',
|
||||
loadChildren: () => import('./openaireLibrary/monitor/indicators/indicators.module').then(m => m.IndicatorsModule)
|
||||
},
|
||||
{
|
||||
path: 'browse',
|
||||
loadChildren: () => import('./search-stakeholders/search-stakeholders.module').then(m => m.SearchStakeholdersModule)
|
||||
},
|
||||
{path: 'about', redirectTo: 'about/learn-how', pathMatch: 'full'},
|
||||
{
|
||||
path: 'about/learn-how',
|
||||
loadChildren: () => import('./learn-how/learn-how.module').then(m => m.LearnHowModule)
|
||||
},
|
||||
{
|
||||
path: 'contact-us',
|
||||
loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule)
|
||||
loadChildren: () => import('./contact/contact.module').then(m => m.ContactModule),
|
||||
data: {hasQuickContact: false}
|
||||
},
|
||||
{
|
||||
path: 'get-started',
|
||||
loadChildren: () => import('./get-started/get-started.module').then(m => m.GetStartedModule)
|
||||
},
|
||||
{
|
||||
path: 'my-dashboards',
|
||||
loadChildren: () => import('./my-stakeholders/my-stakeholders.module').then(m => m.MyStakeholdersModule)},
|
||||
{
|
||||
path: 'reload',
|
||||
loadChildren: () => import('./reload/libReload.module').then(m => m.LibReloadModule)
|
||||
|
|
|
@ -1,32 +1,50 @@
|
|||
import {Component} from '@angular/core';
|
||||
import {ActivatedRoute, NavigationEnd, NavigationStart, Params, Router} from '@angular/router';
|
||||
import {ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
|
||||
import {ActivatedRoute, NavigationEnd, Router} from '@angular/router';
|
||||
|
||||
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
|
||||
import {MenuItem, RootMenuItem} from './openaireLibrary/sharedComponents/menu';
|
||||
import {MenuItem} from './openaireLibrary/sharedComponents/menu';
|
||||
import {EnvironmentSpecificService} from './openaireLibrary/utils/properties/environment-specific.service';
|
||||
import {Session, User} from './openaireLibrary/login/utils/helper.class';
|
||||
import {HelperFunctions} from "./openaireLibrary/utils/HelperFunctions.class";
|
||||
import {UserManagementService} from "./openaireLibrary/services/user-management.service";
|
||||
import {properties} from "../environments/environment";
|
||||
import {BehaviorSubject, Subscriber} from "rxjs";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {StakeholderService} from "./openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component";
|
||||
import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
|
||||
import {QuickContactService} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
|
||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
||||
import {Composer} from "./openaireLibrary/utils/email/composer";
|
||||
import {NotificationHandler} from "./openaireLibrary/utils/notification-handler";
|
||||
import {EmailService} from "./openaireLibrary/utils/email/email.service";
|
||||
import {StringUtils} from "./openaireLibrary/utils/string-utils.class";
|
||||
import {QuickContactComponent} from "./openaireLibrary/sharedComponents/quick-contact/quick-contact.component";
|
||||
import {AlertModal} from "./openaireLibrary/utils/modal/alert";
|
||||
import {StakeholderEntities} from './openaireLibrary/monitor/entities/stakeholder';
|
||||
import {ResourcesService} from "./openaireLibrary/monitor/services/resources.service";
|
||||
import {LayoutService} from "./openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
template: `
|
||||
<div class="monitorApp">
|
||||
<navbar *ngIf="properties && showMenu && header" portal="monitor" [header]="header" [onlyTop]="false"
|
||||
<div>
|
||||
<div id="modal-container"></div>
|
||||
<navbar *ngIf="properties && showMenu && header" #navbar portal="monitor" [header]="header" [onlyTop]="false"
|
||||
[userMenuItems]=userMenuItems [menuItems]=menuItems [user]="user"
|
||||
[showMenu]=showMenu [properties]="properties"></navbar>
|
||||
[showMenu]=showMenu [properties]="properties">
|
||||
<div *ngIf="showGetStarted" extra-s class="uk-margin-large-top uk-margin-left">
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started" (click)="navbar.closeCanvas()">Get Started</a>
|
||||
</div>
|
||||
<a *ngIf="showGetStarted" extra-m class="uk-button uk-button-small uk-button-primary uk-text-uppercase uk-margin-left" routerLink="/get-started">Get Started</a>
|
||||
</navbar>
|
||||
<schema2jsonld *ngIf="properties " [URL]="properties.domain + properties.baseLink"
|
||||
[logoURL]="properties.domain + properties.baseLink+'/assets/common-assets/logo-small-monitor.png'"
|
||||
type="home"
|
||||
[logoURL]="properties.domain + properties.baseLink + logoPath + 'main.svg'"
|
||||
type="home"
|
||||
description="OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators. "
|
||||
name="OpenAIRE Monitor" [searchAction]="true" [searchActionRoute]="properties.domain + properties.baseLink + '/browse'">
|
||||
name="OpenAIRE Monitor" [searchAction]="true"
|
||||
[searchActionRoute]="properties.domain + properties.baseLink + '/browse'">
|
||||
</schema2jsonld>
|
||||
<div class="custom-main-content">
|
||||
<div class="uk-background-default">
|
||||
<main>
|
||||
<router-outlet></router-outlet>
|
||||
</main>
|
||||
|
@ -36,48 +54,74 @@ import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll";
|
|||
Cookies are small pieces of data that websites store in your browser to allow us to give you the best browsing
|
||||
experience possible.
|
||||
By using the OpenAIRE portal you accept our use of cookies. <a
|
||||
href="//ec.europa.eu/ipg/basics/legal/cookies/index_en.htm" target="_blank"> Read more <span class="uk-icon">
|
||||
href="https://www.openaire.eu/privacy-policy#cookies" target="_blank"> Read more <span class="uk-icon">
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg" icon="chevron-right"
|
||||
ratio="1"><polyline fill="none" stroke="#000" stroke-width="1.03"
|
||||
points="7 4 13 10 7 16"></polyline></svg>
|
||||
</span></a>
|
||||
</cookie-law>
|
||||
<bottom *ngIf="properties && showMenu" [grantAdvance]="false"
|
||||
[properties]="properties"></bottom>
|
||||
<bottom #bottom *ngIf="properties && showMenu" id="bottom" [grantAdvance]="false"
|
||||
[properties]="properties"></bottom>
|
||||
<quick-contact #quickContact *ngIf="bottomNotIntersecting && displayQuickContact && showQuickContact && contactForm"
|
||||
(sendEmitter)="send($event)"
|
||||
[contactForm]="contactForm" [sending]="sending" [images]="images" [contact]="'Help'"
|
||||
[organizationTypes]="organizationTypes"
|
||||
class="uk-visible@m"></quick-contact>
|
||||
<modal-alert #modal [overflowBody]="false"></modal-alert>
|
||||
</div>
|
||||
`
|
||||
|
||||
})
|
||||
export class AppComponent {
|
||||
userMenuItems: MenuItem[] = [];
|
||||
menuItems: RootMenuItem [] = [];
|
||||
menuItems: MenuItem [] = [];
|
||||
bottomMenuItems: MenuItem[] = [];
|
||||
properties: EnvProperties = properties;
|
||||
showMenu: boolean = false;
|
||||
user: User;
|
||||
params: BehaviorSubject<Params> = new BehaviorSubject<Params>(null);
|
||||
url: string;
|
||||
header: Header;
|
||||
logoPath: string = 'assets/common-assets/';
|
||||
logoPath: string = 'assets/common-assets/logo-services/monitor/';
|
||||
/* Contact */
|
||||
public showQuickContact: boolean;
|
||||
public bottomNotIntersecting: boolean;
|
||||
public displayQuickContact: boolean; // intersecting with specific section in home page
|
||||
public showGetStarted: boolean = true;
|
||||
public contactForm: UntypedFormGroup;
|
||||
public organizationTypes: string[] = [
|
||||
'Funding agency', 'University / Research Center',
|
||||
'Research Infrastructure', 'Government',
|
||||
'Non-profit', 'Industry', 'Other'
|
||||
];
|
||||
public images: string[] = ['assets/monitor-assets/curators/1.jpg', 'assets/monitor-assets/curators/2.jpg',
|
||||
'assets/monitor-assets/curators/3.jpg', 'assets/monitor-assets/curators/4.jpg']
|
||||
public sending = false;
|
||||
@ViewChild('modal') modal: AlertModal;
|
||||
@ViewChild('quickContact') quickContact: QuickContactComponent;
|
||||
@ViewChild('bottom', {read: ElementRef}) bottom: ElementRef;
|
||||
private subscriptions: any[] = [];
|
||||
public stakeholderEntities = StakeholderEntities;
|
||||
|
||||
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
|
||||
constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
|
||||
private configurationService: ConfigurationService,
|
||||
private router: Router, private stakeholderService: StakeholderService, private smoothScroll: SmoothScroll,
|
||||
private userManagementService: UserManagementService) {
|
||||
private userManagementService: UserManagementService,
|
||||
private quickContactService: QuickContactService,
|
||||
private layoutService: LayoutService,
|
||||
private fb: UntypedFormBuilder,
|
||||
private emailService: EmailService,
|
||||
private resourcesService: ResourcesService,
|
||||
private cdr: ChangeDetectorRef) {
|
||||
this.subscriptions.push(router.events.forEach((event) => {
|
||||
if (event instanceof NavigationEnd) {
|
||||
this.url = event.url;
|
||||
let r = this.route;
|
||||
while (r.firstChild) {
|
||||
r = r.firstChild;
|
||||
}
|
||||
let params = r.snapshot.params;
|
||||
this.params.next(params);
|
||||
if (event instanceof NavigationEnd) {
|
||||
this.showGetStarted = event.url !== '/get-started';
|
||||
}
|
||||
|
||||
}));
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.configurationService.initPortal(this.properties, "monitor");
|
||||
this.userManagementService.fixRedirectURL = properties.afterLoginRedirectLink;
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
this.user = user;
|
||||
this.setUserMenu();
|
||||
|
@ -85,47 +129,88 @@ export class AppComponent {
|
|||
route: "/",
|
||||
url: null,
|
||||
title: 'monitor',
|
||||
logoUrl: this.logoPath + 'logo-large-monitor.png',
|
||||
logoSmallUrl:this.logoPath + 'logo-small-monitor.png',
|
||||
position:'left',
|
||||
badge:true
|
||||
logoUrl: this.logoPath + 'main.svg',
|
||||
logoSmallUrl: this.logoPath + 'small.svg',
|
||||
position: 'left',
|
||||
badge: true,
|
||||
menuPosition: 'center'
|
||||
};
|
||||
this.buildMenu();
|
||||
this.reset();
|
||||
}));
|
||||
this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => {
|
||||
if(this.showQuickContact !== hasQuickContact) {
|
||||
this.showQuickContact = hasQuickContact;
|
||||
this.cdr.detectChanges();
|
||||
}
|
||||
}));
|
||||
this.subscriptions.push(this.quickContactService.isDisplayed.subscribe(display => {
|
||||
if(this.displayQuickContact !== display) {
|
||||
this.displayQuickContact = display;
|
||||
this.cdr.detectChanges();
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
createObservers() {
|
||||
let options = {
|
||||
root: null,
|
||||
rootMargin: '0px',
|
||||
threshold: 0.1
|
||||
};
|
||||
|
||||
let intersectionObserver = new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
// if (entry.isIntersecting && this.showQuickContact) {
|
||||
if(this.bottomNotIntersecting !== (!entry.isIntersecting)) {
|
||||
this.bottomNotIntersecting = !entry.isIntersecting;
|
||||
this.cdr.detectChanges();
|
||||
}
|
||||
});
|
||||
}, options);
|
||||
intersectionObserver.observe(this.bottom.nativeElement);
|
||||
this.subscriptions.push(intersectionObserver);
|
||||
}
|
||||
|
||||
public ngOnDestroy() {
|
||||
this.subscriptions.forEach(value => {
|
||||
if (value instanceof Subscriber) {
|
||||
value.unsubscribe();
|
||||
} else if (typeof IntersectionObserver !== "undefined" && value instanceof IntersectionObserver) {
|
||||
value.disconnect();
|
||||
}
|
||||
});
|
||||
this.userManagementService.clearSubscriptions();
|
||||
this.stakeholderService.clearSubscriptions();
|
||||
this.smoothScroll.clearSubscriptions();
|
||||
}
|
||||
|
||||
|
||||
public buildMenu() {
|
||||
this.menuItems = [];
|
||||
this.menuItems.push({
|
||||
rootItem: new MenuItem("about", "About", "", "/about/learn-how", false, [], null, {}),
|
||||
items: []
|
||||
});
|
||||
this.menuItems.push({
|
||||
rootItem: new MenuItem("stakeholders", "Browse", "", "browse", false, [], null, {}),
|
||||
items: []
|
||||
});
|
||||
this.menuItems.push({
|
||||
rootItem: new MenuItem("contact-us", "Contact us", "", "/contact-us", false, [], null, {}),
|
||||
items: []
|
||||
});
|
||||
this.menuItems.push(
|
||||
new MenuItem("home", "Home", "", "/", false, [], null, {}, null, null, "uk-hidden@m")
|
||||
);
|
||||
this.menuItems.push(
|
||||
new MenuItem("stakeholders", "Browse " + this.stakeholderEntities.STAKEHOLDERS, "", "/browse", false, [], null, {})
|
||||
);
|
||||
this.resourcesService.setResources(this.menuItems);
|
||||
this.menuItems.push(new MenuItem("support", "Support", "", "/support", false, [], null, {}));
|
||||
this.menuItems.push(new MenuItem("about", "About", "", "/about", false, [], null, {}));
|
||||
this.bottomMenuItems = [
|
||||
new MenuItem("", "About", "https://beta.openaire.eu/project-factsheets", "", false, [], [], {}),
|
||||
new MenuItem("", "News - Events", "https://beta.openaire.eu/news-events", "", false, [], [], {}),
|
||||
new MenuItem("", "Blog", "https://blogs.openaire.eu/", "", false, [], [], {}),
|
||||
new MenuItem("", "Contact us", "https://beta.openaire.eu/contact-us", "", false, [], [], {})
|
||||
];
|
||||
this.menuItems.push(
|
||||
new MenuItem("contact-us", "Contact us", "", "/contact-us", false, [], null, {}, null, null, "uk-hidden@m")
|
||||
);
|
||||
this.showMenu = true;
|
||||
if(typeof document !== 'undefined') {
|
||||
setTimeout(() => {
|
||||
this.createObservers();
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
public setUserMenu() {
|
||||
|
@ -133,9 +218,72 @@ export class AppComponent {
|
|||
if (this.user) {
|
||||
if (Session.isPortalAdministrator(this.user) || Session.isMonitorCurator(this.user) || Session.isKindOfMonitorManager(this.user)) {
|
||||
this.userMenuItems.push(new MenuItem("", "Manage profiles",
|
||||
this.properties.domain + properties.baseLink + "/dashboard/admin", "", false, [], [], {}))
|
||||
this.properties.domain + properties.baseLink + "/dashboard/admin", "", false, [], [], {}, null, null, null, null, "_self"));
|
||||
}
|
||||
this.userMenuItems.push(new MenuItem("", "My " + this.stakeholderEntities.STAKEHOLDERS, "", "/my-dashboards", false, [], [], {}));
|
||||
this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {}));
|
||||
}
|
||||
}
|
||||
|
||||
public send(event) {
|
||||
if (event.valid === true) {
|
||||
this.sendMail(this.properties.admins);
|
||||
}
|
||||
}
|
||||
|
||||
public reset() {
|
||||
if (this.quickContact) {
|
||||
this.quickContact.close();
|
||||
}
|
||||
this.contactForm = this.fb.group({
|
||||
name: this.fb.control('', Validators.required),
|
||||
surname: this.fb.control('', Validators.required),
|
||||
email: this.fb.control('', [Validators.required, Validators.email]),
|
||||
job: this.fb.control('', Validators.required),
|
||||
organization: this.fb.control('', Validators.required),
|
||||
organizationType: this.fb.control('', [Validators.required, StringUtils.validatorType(this.organizationTypes)]),
|
||||
message: this.fb.control('', Validators.required),
|
||||
recaptcha: this.fb.control('', Validators.required),
|
||||
});
|
||||
}
|
||||
|
||||
private sendMail(admins: string[]) {
|
||||
this.sending = true;
|
||||
this.subscriptions.push(this.emailService.contact(this.properties,
|
||||
Composer.composeEmailForMonitor(this.contactForm.value, admins),
|
||||
this.contactForm.value.recaptcha).subscribe(
|
||||
res => {
|
||||
if (res) {
|
||||
this.sending = false;
|
||||
this.reset();
|
||||
this.modalOpen();
|
||||
} else {
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.');
|
||||
}
|
||||
},
|
||||
error => {
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.', error);
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
public modalOpen() {
|
||||
this.modal.okButton = true;
|
||||
this.modal.alertTitle = 'Your request has been successfully submitted';
|
||||
this.modal.message = 'Our team will respond to your submission soon.';
|
||||
this.modal.cancelButton = false;
|
||||
this.modal.okButtonLeft = false;
|
||||
this.modal.okButtonText = 'OK';
|
||||
this.modal.open();
|
||||
}
|
||||
|
||||
handleError(message: string, error = null) {
|
||||
if (error) {
|
||||
console.error(error);
|
||||
}
|
||||
this.sending = false;
|
||||
this.quickContact.close();
|
||||
NotificationHandler.rise(message, 'danger');
|
||||
this.contactForm.get('recaptcha').setValue('');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,22 +1,25 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {APP_ID, NgModule} from '@angular/core';
|
||||
import {FormsModule} from '@angular/forms';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {HTTP_INTERCEPTORS, HttpClientModule} from "@angular/common/http";
|
||||
import {BrowserModule, BrowserTransferStateModule} from '@angular/platform-browser';
|
||||
import {BrowserModule} from '@angular/platform-browser';
|
||||
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
|
||||
import {AppComponent} from './app.component';
|
||||
import {OpenaireErrorPageComponent} from './error/errorPage.component';
|
||||
|
||||
import {AppRoutingModule} from './app-routing.module';
|
||||
import {SharedModule} from './shared/shared.module';
|
||||
import {CookieLawModule} from './openaireLibrary/sharedComponents/cookie-law/cookie-law.module';
|
||||
import {BottomModule} from './openaireLibrary/sharedComponents/bottom.module';
|
||||
import {ErrorModule} from './openaireLibrary/error/error.module';
|
||||
import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigationBar.module';
|
||||
import {QuickContactModule} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.module';
|
||||
import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service";
|
||||
import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {HttpInterceptorService} from "./openaireLibrary/http-interceptor.service";
|
||||
import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service";
|
||||
import {SharedModule} from "./openaireLibrary/shared/shared.module";
|
||||
import {AlertModalModule} from "./openaireLibrary/utils/modal/alertModal.module";
|
||||
import {isDevelopmentGuard} from './openaireLibrary/error/isDevelopmentGuard.guard';
|
||||
|
||||
@NgModule({
|
||||
|
||||
|
@ -28,16 +31,19 @@ import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.servi
|
|||
ErrorModule,
|
||||
FormsModule,
|
||||
NavigationBarModule,
|
||||
QuickContactModule,
|
||||
BottomModule,
|
||||
CookieLawModule,
|
||||
BrowserTransferStateModule,
|
||||
BrowserModule.withServerTransition({ appId: 'monitor' }),
|
||||
BrowserModule,
|
||||
AppRoutingModule,
|
||||
Schema2jsonldModule
|
||||
Schema2jsonldModule,
|
||||
AlertModalModule
|
||||
],
|
||||
declarations: [AppComponent, OpenaireErrorPageComponent],
|
||||
exports: [AppComponent],
|
||||
providers: [
|
||||
isDevelopmentGuard,
|
||||
{provide: APP_ID, useValue: 'monitor'},
|
||||
{
|
||||
provide: HTTP_INTERCEPTORS,
|
||||
useClass: HttpInterceptorService,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { NgModule } from '@angular/core';
|
||||
import {ServerModule, ServerTransferStateModule} from '@angular/platform-server';
|
||||
import {ServerModule} from '@angular/platform-server';
|
||||
|
||||
import { AppModule } from './app.module';
|
||||
import { AppComponent } from './app.component';
|
||||
|
@ -7,8 +7,7 @@ import { AppComponent } from './app.component';
|
|||
@NgModule({
|
||||
imports: [
|
||||
AppModule,
|
||||
ServerModule,
|
||||
ServerTransferStateModule
|
||||
ServerModule
|
||||
],
|
||||
bootstrap: [AppComponent],
|
||||
})
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<a *ngIf="directLink && stakeholder" [href]="getStakeholderPageUrl()" target="_blank"
|
||||
class="uk-height-1-1 uk-link-reset uk-display-block" [class.uk-disabled]="!hasPermission()">
|
||||
<ng-container [ngTemplateOutlet]="card"></ng-container>
|
||||
</a>
|
||||
<a *ngIf="!directLink && stakeholder" (click)="confirmModalOpen()"
|
||||
class="uk-height-1-1 uk-link-reset uk-display-block" [class.uk-disabled]="!hasPermission()">
|
||||
<ng-container [ngTemplateOutlet]="card"></ng-container>
|
||||
</a>
|
||||
<ng-template #card>
|
||||
<div class="uk-card uk-card-default uk-card-hover uk-card-body" [ngClass]="stakeholder.type" [class.uk-disabled]="!hasPermission()">
|
||||
<div *ngIf="stakeholder.visibility && stakeholder.visibility !== 'PUBLIC'"
|
||||
class="uk-position-top-right uk-margin-small-top uk-margin-small-right uk-flex uk-flex-column uk-flex-middle uk-position-z-index">
|
||||
<icon [name]="visibilityIcon.get(stakeholder.visibility)" ratio="1.2" [flex]="true"></icon>
|
||||
<span class="uk-text-small uk-text-capitalize">{{stakeholder.visibility.toLowerCase()}}</span>
|
||||
</div>
|
||||
<div class="uk-card-media-top uk-padding-large uk-padding-remove-vertical uk-flex uk-flex-center uk-flex-middle uk-height-xsmall">
|
||||
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl" [alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall uk-blend-multiply">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall uk-blend-multiply">
|
||||
</ng-template>
|
||||
</div>
|
||||
<div class="uk-card-body uk-padding-remove-horizontal">
|
||||
<div class="uk-text-capitalize uk-text-small type">{{mapType(stakeholder.type)}}</div>
|
||||
<div class="uk-h6 uk-margin-remove multi-line-ellipsis lines-2">
|
||||
<p *ngIf="stakeholder.name" class="uk-margin-remove">
|
||||
{{stakeholder.name}}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
<modal-alert #AlertModal [overflowBody]="false" (alertOutput)="goToPage($event)"></modal-alert>
|
|
@ -0,0 +1,23 @@
|
|||
@import (reference) "~src/assets/openaire-theme/less/color.less";
|
||||
|
||||
.setType(@color) {
|
||||
border-bottom: 4px solid fade(@color, 30%);
|
||||
|
||||
& .type {
|
||||
color: @color;
|
||||
}
|
||||
}
|
||||
|
||||
.uk-card {
|
||||
&.funder {
|
||||
.setType(@funder-color);
|
||||
}
|
||||
|
||||
&.ri {
|
||||
.setType(@ri-color);
|
||||
}
|
||||
|
||||
&.organization {
|
||||
.setType(@organization-color);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
import {Component, Input, ViewChild} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {Location} from '@angular/common';
|
||||
import {StakeholderInfo, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {properties} from "../../environments/environment"
|
||||
import {LocalStorageService} from "../openaireLibrary/services/localStorage.service";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
||||
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
|
||||
@Component({
|
||||
selector: 'browse-stakeholder',
|
||||
templateUrl: 'browse-stakeholder.component.html',
|
||||
styleUrls: ['browse-stakeholder.component.less']
|
||||
})
|
||||
export class BrowseStakeholderComponent {
|
||||
@Input() public stakeholder: StakeholderInfo = null;
|
||||
@ViewChild('AlertModal', { static: true }) modal;
|
||||
public properties: EnvProperties = properties;
|
||||
public directLink: boolean = true;
|
||||
public visibilityIcon: Map<Visibility, string> = new Map<Visibility, string> ([
|
||||
["PRIVATE", 'incognito'],
|
||||
["RESTRICTED", 'restricted']
|
||||
]);
|
||||
private subscriptions: any[] = [];
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private location: Location,
|
||||
private localStorageService: LocalStorageService,
|
||||
private layoutService: LayoutService) {
|
||||
}
|
||||
|
||||
|
||||
public ngOnInit() {
|
||||
this.properties = properties;
|
||||
this.subscriptions.push(this.layoutService.isMobile.subscribe(value => {
|
||||
if(value) {
|
||||
this.directLink = true;
|
||||
} else {
|
||||
this.subscriptions.push(this.localStorageService.get().subscribe(value => {
|
||||
this.directLink = value;
|
||||
}));
|
||||
}
|
||||
}));
|
||||
|
||||
|
||||
}
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
mapType(type: string) {
|
||||
return StringUtils.getStakeholderType(type, false);
|
||||
}
|
||||
|
||||
public confirmModalOpen() {
|
||||
this.modal.cancelButton = true;
|
||||
this.modal.okButton = true;
|
||||
this.modal.alertTitle = 'You are going to visit ' + this.stakeholder.name + ' Monitor Dashboard';
|
||||
this.modal.message = 'You will be navigated to a new tab. Are you sure that you want to proceed?';
|
||||
this.modal.okButtonLeft = false;
|
||||
this.modal.okButtonText = 'Yes';
|
||||
this.modal.cancelButtonText = 'No';
|
||||
this.modal.choice = true;
|
||||
this.modal.open();
|
||||
}
|
||||
|
||||
public getStakeholderPageUrl() {
|
||||
return this.properties.domain + this.properties.baseLink + '/dashboard/' + this.stakeholder.alias;
|
||||
}
|
||||
|
||||
hasPermission() {
|
||||
return this.stakeholder.visibility === "PUBLIC" ||
|
||||
(this.stakeholder.visibility === "RESTRICTED" && (this.stakeholder.isManager || this.stakeholder.isMember)) ||
|
||||
(this.stakeholder.visibility === "PRIVATE" && this.stakeholder.isManager);
|
||||
}
|
||||
|
||||
public goToPage(data: any) {
|
||||
if (data.value == true) {
|
||||
let url = this.getStakeholderPageUrl();
|
||||
this.localStorageService.setCommunityDirectLink(data.choice);
|
||||
window.open(url, '_blank');
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||
import {ManageModule} from "../openaireLibrary/utils/manage/manage.module";
|
||||
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
|
||||
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
|
||||
import {BrowseStakeholderComponent} from "./browse-stakeholder.component";
|
||||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||
import {incognito, restricted} from "../openaireLibrary/utils/icons/icons";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, RouterModule,
|
||||
ManageModule, AlertModalModule, LogoUrlPipeModule, IconsModule
|
||||
],
|
||||
declarations: [
|
||||
BrowseStakeholderComponent
|
||||
],
|
||||
providers:[
|
||||
],
|
||||
exports: [
|
||||
BrowseStakeholderComponent
|
||||
]
|
||||
})
|
||||
export class BrowseStakeholderModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([incognito, restricted]);
|
||||
}
|
||||
}
|
|
@ -1,28 +1,31 @@
|
|||
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld>
|
||||
<div class="uk-section">
|
||||
<div class="uk-align-center">
|
||||
<div *ngIf="showLoading" class="uk-margin-large">
|
||||
<div class="uk-animation-fade uk-margin-top uk-width-1-1" role="alert"><span
|
||||
class="loading-gif uk-align-center"></span></div>
|
||||
</div>
|
||||
<div *ngIf="!showLoading" class="uk-container uk-container-large">
|
||||
<div class="uk-grid-divider uk-grid uk-flex-center" uk-grid>
|
||||
<div class="uk-width-1-1 uk-width-1-2@m">
|
||||
<div class="uk-text-center uk-margin-medium-bottom">
|
||||
<h1 class="uk-h2">Contact us to learn more</h1>
|
||||
<h6 class="uk-text-muted uk-margin-remove-top">
|
||||
We’d be happy to provide more information on OpenAIRE Monitor – please fill in your details below to send your questions to our team.
|
||||
</h6>
|
||||
</div>
|
||||
<contact-us [properties]="properties" [errorMessage]="errorMessage" [organizationTypes]="organizationTypes"
|
||||
[contactForm]="contactForm" (sendEmitter)="send($event)"></contact-us>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="uk-visible@m uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-padding-remove-top uk-container uk-container-large uk-flex uk-flex-center"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-padding-small uk-width-1-2@l uk-width-2-3@m uk-width-1-1">
|
||||
<contact-us [organizationTypes]="organizationTypes" [sending]="sending" [scrollspy]="true"
|
||||
[contactForm]="contactForm" (sendEmitter)="send($event)">
|
||||
<h1 page-title class="uk-visible@m uk-margin-auto uk-text-center" uk-scrollspy-class>
|
||||
Contact us<span class="uk-text-primary">.</span>
|
||||
</h1>
|
||||
<h1 page-title class="uk-hidden@m uk-heading-large uk-margin-auto uk-text-center" uk-scrollspy-class>
|
||||
Contact us<span class="uk-text-primary">.</span>
|
||||
</h1>
|
||||
<div page-description class="uk-text-large uk-text-center" uk-scrollspy-class>
|
||||
We would be happy to open a discussion with you to better understand your needs and share examples of how
|
||||
OpenAIRE MONITOR can help your organization in your open science needs.
|
||||
</div>
|
||||
</contact-us>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #AlertModal (alertOutput)="goToHome()">
|
||||
<div class="uk-text-center">
|
||||
<modal-alert #modal (alertOutput)="goToHome()">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Our team will respond to your submission soon.<br>
|
||||
Press OK to redirect to OpenAIRE Monitor home page.
|
||||
</div>
|
||||
|
|
|
@ -1,52 +1,53 @@
|
|||
import {Component, OnInit, ViewChild} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {EmailService} from "../openaireLibrary/utils/email/email.service";
|
||||
import {Email} from "../openaireLibrary/utils/email/email";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {Composer} from "../openaireLibrary/utils/email/composer";
|
||||
import {Meta, Title} from "@angular/platform-browser";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
|
||||
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {AbstractControl, FormBuilder, FormGroup, ValidatorFn, Validators} from "@angular/forms";
|
||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {NotificationHandler} from "../openaireLibrary/utils/notification-handler";
|
||||
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
||||
|
||||
@Component({
|
||||
selector: 'contact',
|
||||
templateUrl: './contact.component.html',
|
||||
templateUrl: './contact.component.html'
|
||||
})
|
||||
export class ContactComponent implements OnInit {
|
||||
public url: string = null;
|
||||
public pageTitle: string = "OpenAIRE - Monitor | Contact Us";
|
||||
public description: string = "OpenAIRE - Monitor . Any Questions? Contact us to learn more";
|
||||
public piwiksub: any;
|
||||
public showLoading = true;
|
||||
public errorMessage = '';
|
||||
public email: Email;
|
||||
public properties: EnvProperties = null;
|
||||
public sending = false;
|
||||
public properties: EnvProperties = properties;
|
||||
public pageContents = null;
|
||||
public divContents = null;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Contact us'}];
|
||||
public organizationTypes: string[] = [
|
||||
'Funding agency', 'University / Research Center',
|
||||
'Research Infrastructure', 'Government',
|
||||
'Non-profit', 'Industry', 'Other'
|
||||
];
|
||||
public contactForm: FormGroup;
|
||||
@ViewChild('AlertModal') modal;
|
||||
|
||||
public contactForm: UntypedFormGroup;
|
||||
@ViewChild('modal') modal;
|
||||
private subscriptions = [];
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private _router: Router,
|
||||
private _emailService: EmailService,
|
||||
private emailService: EmailService,
|
||||
private _meta: Meta,
|
||||
private _title: Title,
|
||||
private seoService: SEOService,
|
||||
private _piwikService: PiwikService,
|
||||
private fb: FormBuilder,
|
||||
private fb: UntypedFormBuilder,
|
||||
private helper: HelperService) {
|
||||
}
|
||||
subscriptions = [];
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
|
@ -54,12 +55,9 @@ export class ContactComponent implements OnInit {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.properties = properties;
|
||||
this.email = {body: '', subject: '', recipients: []};
|
||||
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle, this.properties.piwikSiteId).subscribe());
|
||||
}
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
|
@ -68,8 +66,6 @@ export class ContactComponent implements OnInit {
|
|||
this.reset();
|
||||
//this.getDivContents();
|
||||
// this.getPageContents();
|
||||
this.showLoading = false;
|
||||
|
||||
}
|
||||
|
||||
private getPageContents() {
|
||||
|
@ -85,20 +81,8 @@ export class ContactComponent implements OnInit {
|
|||
}
|
||||
|
||||
public send(event) {
|
||||
HelperFunctions.scroll();
|
||||
if(event.valid === true) {
|
||||
this.sendMail(this.properties.admins);
|
||||
} else {
|
||||
this.errorMessage = 'Please fill in all the required fields!';
|
||||
}
|
||||
}
|
||||
|
||||
private validatorType(options: string[]): ValidatorFn {
|
||||
return (control: AbstractControl): { [key: string]: boolean } | null => {
|
||||
if (options.filter(type => type === control.value).length === 0) {
|
||||
return {'type': false};
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,32 +93,28 @@ export class ContactComponent implements OnInit {
|
|||
email: this.fb.control('', [Validators.required, Validators.email]),
|
||||
job: this.fb.control('', Validators.required),
|
||||
organization: this.fb.control('', Validators.required),
|
||||
organizationType: this.fb.control('', [Validators.required, this.validatorType(this.organizationTypes)]),
|
||||
organizationType: this.fb.control('', [Validators.required, StringUtils.validatorType(this.organizationTypes)]),
|
||||
message: this.fb.control('', Validators.required),
|
||||
recaptcha: this.fb.control('', Validators.required),
|
||||
});
|
||||
this.errorMessage = '';
|
||||
}
|
||||
|
||||
private sendMail(admins: any) {
|
||||
this.showLoading = true;
|
||||
this.subscriptions.push(this._emailService.contact(this.properties,
|
||||
this.sending = true;
|
||||
this.subscriptions.push(this.emailService.contact(this.properties,
|
||||
Composer.composeEmailForMonitor(this.contactForm.value, admins),
|
||||
this.contactForm.value.recaptcha).subscribe(
|
||||
res => {
|
||||
this.showLoading = false;
|
||||
if (res) {
|
||||
this.sending = false;
|
||||
this.reset();
|
||||
this.modalOpen();
|
||||
} else {
|
||||
this.errorMessage = 'Email sent failed! Please try again.';
|
||||
this.contactForm.get('recaptcha').setValue('');
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.');
|
||||
}
|
||||
},
|
||||
error => {
|
||||
this.handleError('Email sent failed! Please try again.', error);
|
||||
this.showLoading = false;
|
||||
this.contactForm.get('recaptcha').setValue('');
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.', error);
|
||||
}
|
||||
));
|
||||
}
|
||||
|
@ -149,10 +129,13 @@ export class ContactComponent implements OnInit {
|
|||
this.modal.open();
|
||||
}
|
||||
|
||||
handleError(message: string, error) {
|
||||
this.errorMessage = message;
|
||||
console.log('Server responded: ' + error);
|
||||
this.showLoading = false;
|
||||
handleError(message: string, error = null) {
|
||||
if(error) {
|
||||
console.error(error);
|
||||
}
|
||||
NotificationHandler.rise(message, 'danger');
|
||||
this.sending = false;
|
||||
this.contactForm.get('recaptcha').setValue('');
|
||||
}
|
||||
|
||||
public goToHome() {
|
||||
|
|
|
@ -13,14 +13,15 @@ import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
|||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
ContactRoutingModule, CommonModule, RouterModule,
|
||||
AlertModalModule, RecaptchaModule, HelperModule,
|
||||
Schema2jsonldModule, SEOServiceModule, ContactUsModule
|
||||
],
|
||||
imports: [
|
||||
ContactRoutingModule, CommonModule, RouterModule,
|
||||
AlertModalModule, RecaptchaModule, HelperModule,
|
||||
Schema2jsonldModule, SEOServiceModule, ContactUsModule, BreadcrumbsModule
|
||||
],
|
||||
declarations: [
|
||||
ContactComponent
|
||||
],
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {GetStartedComponent} from './get-started.component';
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: GetStartedComponent, canActivate: [], canDeactivate: [PreviousRouteRecorder]}
|
||||
])
|
||||
]
|
||||
})
|
||||
export class GetStartedRoutingModule { }
|
|
@ -0,0 +1,126 @@
|
|||
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld>
|
||||
<div class="uk-visible@m">
|
||||
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large uk-section" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-margin-small-top uk-text-center uk-flex uk-flex-middle uk-child-width-1-1 uk-flex-column">
|
||||
<h1 class="uk-width-3-4@m" uk-scrollspy-class>Get started with <br> OpenAIRE Monitor Dashboard <span class="uk-text-primary">.</span></h1>
|
||||
<div class="uk-text-large uk-width-2-3@m" uk-scrollspy-class>
|
||||
The OpenAIRE Monitor Dashboard is an <span class="uk-text-bold">open tracking platform</span> with all the tools you need
|
||||
to understand and make insightful decisions — whether you are a <span class="uk-text-bold">funder</span>, a <span class="uk-text-bold">research initiative</span>
|
||||
or a <span class="uk-text-bold">community</span>, and want to measure or increase uptake
|
||||
of Open Science, understand your costs, gaps and strengths, or build a community around it.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-section-large uk-padding-remove-bottom" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-margin-auto uk-width-1-1 uk-width-3-4@l uk-grid uk-grid-large uk-child-width-1-2" uk-grid>
|
||||
<div class="uk-flex uk-flex-center uk-flex-top" uk-scrollspy-class>
|
||||
<img class="uk-visible@m" src="assets/monitor-assets/get-started/1.svg" alt="Step 1" loading="lazy">
|
||||
<div class="uk-flex uk-flex-column uk-padding-small uk-margin-small-left">
|
||||
<icon name="description" type="outlined" ratio="2" visuallyHidden="Provide some information"
|
||||
customClass="uk-text-background"></icon>
|
||||
<span class="uk-h5 uk-margin-remove uk-text-uppercase">Provide some <br> information</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-center uk-flex-top" uk-scrollspy-class>
|
||||
<img class="uk-visible@m" src="assets/monitor-assets/get-started/2.svg" alt="Step 2" loading="lazy">
|
||||
<div class="uk-flex uk-flex-column uk-padding-small uk-margin-small-left">
|
||||
<icon name="email" type="outlined" ratio="2" visuallyHidden="Provide some information"
|
||||
customClass="uk-text-background"></icon>
|
||||
<span class="uk-h5 uk-margin-remove uk-margin-small-top uk-text-uppercase">We contact <br> you</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large uk-section uk-section-large">
|
||||
<div class="uk-padding-small">
|
||||
<h2 class="uk-h1 uk-text-center">Provide some information<span class="uk-text-primary">.</span></h2>
|
||||
<div class="uk-flex uk-flex-center uk-width-1-1">
|
||||
<div class="uk-width-1-2@m uk-width-1-1 uk-margin-large-top">
|
||||
<contact-us [organizationTypes]="organizationTypes" [sending]="sending"
|
||||
[contactForm]="contactForm" alignButton="center" (sendEmitter)="send($event)">
|
||||
</contact-us>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large uk-section">
|
||||
<div class="uk-grid uk-grid-large uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-1-2@m uk-width-1-1">
|
||||
<div class="uk-padding-small">
|
||||
<h2>Need more information?<br>View details on the process<span class="uk-text-primary">.</span></h2>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/about/learn-how">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Learn More</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-flex uk-flex-center">
|
||||
<img src="assets/monitor-assets/get-started/steps.svg" loading="lazy">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-hidden@m">
|
||||
<div class="uk-container uk-container-large uk-section" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-text-center">
|
||||
<h1 class="uk-heading-small uk-padding-small uk-padding-remove-vertical" uk-scrollspy-class>Get started with <br>OpenAIRE Monitor Dashboard<span class="uk-text-primary">.</span></h1>
|
||||
<div class="uk-text-large uk-margin-large-top" uk-scrollspy-class>
|
||||
The OpenAIRE Monitor Dashboard is an <span class="uk-text-bold">open tracking platform</span> with all the tools you need
|
||||
to understand and make insightful decisions — whether you are a <span class="uk-text-bold">funder</span>, a <span class="uk-text-bold">research initiative</span>
|
||||
or a <span class="uk-text-bold">community</span>, and want to measure or increase uptake
|
||||
of Open Science, understand your costs, gaps and strengths, or build a community around it.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-section-large uk-padding-remove-bottom" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle uk-text-center uk-padding-small uk-position-relative">
|
||||
<img class="uk-position-absolute number-step number-step-1" src="assets/monitor-assets/get-started/1.svg" alt="Step 1" loading="lazy">
|
||||
<icon name="description" type="outlined" ratio="2" visuallyHidden="Provide some information"
|
||||
customClass="uk-text-background"></icon>
|
||||
<span class="uk-h5 uk-margin-remove uk-text-uppercase">Provide some <br> information</span>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle uk-text-center uk-padding-small uk-position-relative">
|
||||
<img class="uk-position-absolute number-step number-step-2" src="assets/monitor-assets/get-started/2.svg" alt="Step 2" loading="lazy">
|
||||
<icon name="email" type="outlined" ratio="2" visuallyHidden="Provide some information"
|
||||
customClass="uk-text-background"></icon>
|
||||
<span class="uk-h5 uk-margin-remove uk-margin-small-top uk-text-uppercase">We contact you</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large uk-section uk-section-large">
|
||||
<div class="uk-padding-small">
|
||||
<h2 class="uk-heading-small uk-text-center">Provide some information<span class="uk-text-primary">.</span></h2>
|
||||
<div class="uk-flex uk-flex-center uk-width-1-1">
|
||||
<div class="uk-width-1-2@m uk-width-1-1 uk-margin-large-top">
|
||||
<contact-us [organizationTypes]="organizationTypes" [sending]="sending"
|
||||
[contactForm]="contactForm" alignButton="center" (sendEmitter)="send($event)">
|
||||
</contact-us>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large uk-section">
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle uk-text-center uk-padding uk-padding-remove-vertical">
|
||||
<h2>Need more information?<br>View details on the process<span class="uk-text-primary">.</span></h2>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text uk-margin-large-top uk-margin-large-bottom"
|
||||
routerLinkActive="router-link-active" routerLink="/about/learn-how">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Learn More</span>
|
||||
</span>
|
||||
</a>
|
||||
<img src="assets/monitor-assets/get-started/steps.svg" loading="lazy">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #modal (alertOutput)="goToHome()">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
Our team will respond to your submission soon.<br>
|
||||
Press OK to redirect to OpenAIRE Monitor home page.
|
||||
</div>
|
||||
</modal-alert>
|
|
@ -0,0 +1,14 @@
|
|||
.number-step {
|
||||
height: 70px;
|
||||
opacity: 0.1;
|
||||
top: 50%;
|
||||
transform: translateY(-50%) rotate(20deg);
|
||||
}
|
||||
|
||||
.number-step-1 {
|
||||
right: 10%;
|
||||
}
|
||||
|
||||
.number-step-2 {
|
||||
left: 10%;
|
||||
}
|
|
@ -0,0 +1,163 @@
|
|||
import {Component, OnInit, ViewChild} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {EmailService} from "../openaireLibrary/utils/email/email.service";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {Composer} from "../openaireLibrary/utils/email/composer";
|
||||
import {Meta, Title} from "@angular/platform-browser";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {NotificationHandler} from "../openaireLibrary/utils/notification-handler";
|
||||
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
||||
import {StakeholderEntities} from '../openaireLibrary/monitor/entities/stakeholder';
|
||||
|
||||
@Component({
|
||||
selector: 'get-started',
|
||||
templateUrl: './get-started.component.html',
|
||||
styleUrls: ['./get-started.component.less']
|
||||
})
|
||||
export class GetStartedComponent implements OnInit {
|
||||
public url: string = null;
|
||||
public pageTitle: string = "OpenAIRE - Monitor | Get Started";
|
||||
public description: string = "OpenAIRE - Monitor . Any Questions? Contact us to learn more";
|
||||
public piwiksub: any;
|
||||
public sending = false;
|
||||
public properties: EnvProperties = properties;
|
||||
public pageContents = null;
|
||||
public divContents = null;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Get started'}];
|
||||
public organizationTypes: string[] = [
|
||||
'Funding agency', 'University / Research Center',
|
||||
'Research Infrastructure', 'Government',
|
||||
'Non-profit', 'Industry', 'Other'
|
||||
];
|
||||
public contactForm: UntypedFormGroup;
|
||||
@ViewChild('modal') modal;
|
||||
private subscriptions = [];
|
||||
public stakeholderEntities = StakeholderEntities;
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private _router: Router,
|
||||
private _emailService: EmailService,
|
||||
private _meta: Meta,
|
||||
private _title: Title,
|
||||
private seoService: SEOService,
|
||||
private _piwikService: PiwikService,
|
||||
private fb: UntypedFormBuilder,
|
||||
private helper: HelperService) {
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
this.updateTitle(this.pageTitle);
|
||||
this.updateDescription(this.description);
|
||||
this.reset();
|
||||
//this.getDivContents();
|
||||
// this.getPageContents();
|
||||
}
|
||||
|
||||
private getPageContents() {
|
||||
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'monitor', this._router.url).subscribe(contents => {
|
||||
this.pageContents = contents;
|
||||
}));
|
||||
}
|
||||
|
||||
private getDivContents() {
|
||||
this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'monitor', this._router.url).subscribe(contents => {
|
||||
this.divContents = contents;
|
||||
}));
|
||||
}
|
||||
|
||||
public send(event) {
|
||||
if (event.valid === true) {
|
||||
this.sendMail(this.properties.admins);
|
||||
}
|
||||
}
|
||||
|
||||
public reset() {
|
||||
this.contactForm = this.fb.group({
|
||||
name: this.fb.control('', Validators.required),
|
||||
surname: this.fb.control('', Validators.required),
|
||||
email: this.fb.control('', [Validators.required, Validators.email]),
|
||||
job: this.fb.control('', Validators.required),
|
||||
organization: this.fb.control('', Validators.required),
|
||||
organizationType: this.fb.control('', [Validators.required, StringUtils.validatorType(this.organizationTypes)]),
|
||||
message: this.fb.control('', Validators.required),
|
||||
recaptcha: this.fb.control('', Validators.required),
|
||||
});
|
||||
}
|
||||
|
||||
private sendMail(admins: any) {
|
||||
this.sending = true;
|
||||
this.subscriptions.push(this._emailService.contact(this.properties,
|
||||
Composer.composeEmailForMonitor(this.contactForm.value, admins),
|
||||
this.contactForm.value.recaptcha).subscribe(
|
||||
res => {
|
||||
if (res) {
|
||||
this.sending = false;
|
||||
this.reset();
|
||||
this.modalOpen();
|
||||
} else {
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.');
|
||||
}
|
||||
},
|
||||
error => {
|
||||
this.handleError('Email <b>sent failed!</b> Please try again.', error);
|
||||
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
public modalOpen() {
|
||||
this.modal.okButton = true;
|
||||
this.modal.alertTitle = 'Your request has been successfully submitted';
|
||||
this.modal.alertMessage = false;
|
||||
this.modal.cancelButton = false;
|
||||
this.modal.okButtonLeft = false;
|
||||
this.modal.okButtonText = 'OK';
|
||||
this.modal.open();
|
||||
}
|
||||
|
||||
handleError(message: string, error = null) {
|
||||
if(error) {
|
||||
console.error(error);
|
||||
}
|
||||
NotificationHandler.rise(message, 'danger');
|
||||
this.sending = false;
|
||||
this.contactForm.get('recaptcha').setValue('');
|
||||
}
|
||||
|
||||
public goToHome() {
|
||||
this._router.navigate(['/']);
|
||||
}
|
||||
|
||||
private updateDescription(description: string) {
|
||||
this._meta.updateTag({content: description}, "name='description'");
|
||||
this._meta.updateTag({content: description}, "property='og:description'");
|
||||
}
|
||||
|
||||
private updateTitle(title: string) {
|
||||
var _title = ((title.length > 50) ? title.substring(0, 50) : title);
|
||||
this._title.setTitle(_title);
|
||||
this._meta.updateTag({content: _title}, "property='og:title'");
|
||||
}
|
||||
|
||||
private updateUrl(url: string) {
|
||||
this._meta.updateTag({content: url}, "property='og:url'");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {GetStartedComponent} from './get-started.component';
|
||||
import {GetStartedRoutingModule} from "./get-started-routing.module";
|
||||
import {EmailService} from "../openaireLibrary/utils/email/email.service";
|
||||
import {RecaptchaModule} from "ng-recaptcha";
|
||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {ContactUsModule} from "../openaireLibrary/contact-us/contact-us.module";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
GetStartedRoutingModule, CommonModule, RouterModule,
|
||||
AlertModalModule, RecaptchaModule, HelperModule,
|
||||
Schema2jsonldModule, SEOServiceModule, ContactUsModule, BreadcrumbsModule, LoadingModule,
|
||||
IconsModule
|
||||
],
|
||||
declarations: [
|
||||
GetStartedComponent
|
||||
],
|
||||
providers: [
|
||||
EmailService, PiwikService, IsRouteEnabled
|
||||
],
|
||||
exports: [
|
||||
GetStartedComponent
|
||||
]
|
||||
})
|
||||
|
||||
export class GetStartedModule { }
|
|
@ -4,11 +4,12 @@ import { RouterModule } from '@angular/router';
|
|||
import{HomeComponent} from './home.component';
|
||||
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {CanExitGuard} from "../openaireLibrary/utils/can-exit.guard";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: HomeComponent, canDeactivate: [PreviousRouteRecorder] }
|
||||
{ path: '', component: HomeComponent, canDeactivate: [PreviousRouteRecorder, CanExitGuard] }
|
||||
|
||||
])
|
||||
]
|
||||
|
|
|
@ -1,98 +0,0 @@
|
|||
@media only screen and (min-width:1200px) {
|
||||
.girl-background {
|
||||
background-size: 210px;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 95% 50%;
|
||||
background-image: url("/assets/monitor-assets/home/girl.png");
|
||||
padding-bottom: 100px;
|
||||
}
|
||||
|
||||
.dashboard-section .dashboard {
|
||||
background-image: url("/assets/monitor-assets/home/dashboard-background.svg");
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard-section .info > div {
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.dashboard-section .info > .uk-active > h5 {
|
||||
color: var(--portal-main-color);
|
||||
}
|
||||
|
||||
.dashboard-section .info > div:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@media only screen and (min-width:960px) {
|
||||
.hologram {
|
||||
background-image: url("/assets/monitor-assets/home/hologram.png");
|
||||
background-size: 20%;
|
||||
background-repeat: no-repeat;
|
||||
background-position: bottom center;
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
}
|
||||
|
||||
.hologram .part {
|
||||
max-width: 370px;
|
||||
}
|
||||
|
||||
|
||||
.graph-section {
|
||||
background-image: url("/assets/monitor-assets/home/graph-background.svg");
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
padding: 5vh 0;
|
||||
}
|
||||
|
||||
.stakeholder-section .stakeholders {
|
||||
min-height: 300px;
|
||||
}
|
||||
|
||||
.stakeholder-section .uk-subnav-pill > li > a {
|
||||
color: currentColor;
|
||||
font-size: 13px;
|
||||
text-transform: none;
|
||||
opacity: 0.5;
|
||||
border-radius: 40px;
|
||||
border: 1px solid currentColor;
|
||||
padding: 6px 18px;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.stakeholder-section .uk-subnav-pill > li:hover > a {
|
||||
border-color: var(--portal-main-color);
|
||||
color: var(--portal-main-color);
|
||||
background-color: var(--portal-main-contrast);
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.stakeholder-section .uk-subnav-pill > li.uk-active > a {
|
||||
opacity: 1;
|
||||
border-color: var(--portal-main-color);
|
||||
color: var(--portal-main-contrast);
|
||||
background-color: var(--portal-main-color);
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.stakeholder-section .uk-card {
|
||||
border-radius: 20px;
|
||||
color: currentColor;
|
||||
font-family: "Roboto", sans-serif;
|
||||
padding: 70px 20px;
|
||||
}
|
||||
|
||||
.stakeholder-section .uk-card img {
|
||||
max-height: 60px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width:639px) {
|
||||
.stakeholder-section .uk-subnav-pill {
|
||||
flex-wrap: nowrap;
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
|
@ -1,259 +1,595 @@
|
|||
<div class="image-front-topbar"
|
||||
style="background: transparent linear-gradient(180deg, #F4F4F4 0%, #F5F5F5 83%, #FAFAFA 100%) no-repeat;">
|
||||
<div
|
||||
class="uk-section uk-container uk-container-large uk-text-center uk-section uk-section-small uk-margin-large-bottom"
|
||||
uk-parallax="media: @l; y: -200; easing: 0.5">
|
||||
<div class="uk-padding-small">
|
||||
<h1 class="uk-margin-top">A new era of monitoring research.</h1>
|
||||
<div class="girl-background">
|
||||
<h4 class="uk-margin-remove-top">Open data. Open methodologies.</h4>
|
||||
<div class="uk-margin-medium-top uk-text-muted">
|
||||
Work together with us to view, understand and visualize<br>research statistics and indicators.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<ng-template #tablet_text>
|
||||
<div>
|
||||
<h6 class="uk-margin-xsmall-bottom">
|
||||
Monitor, discover and understand.
|
||||
</h6>
|
||||
<div>Track your organization’s research output in a comprehensive manner. Identify research pathways across key
|
||||
dimensions with granular and timely indicators.</div>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="uk-margin-xsmall-bottom">
|
||||
<span class="uk-text-primary">Enhance</span> open science uptake<span class="uk-text-primary">.</span>
|
||||
</h6>
|
||||
<div>Work with the Open Science expert community for open and transparent metrics. Discover Open Science costs and
|
||||
trends for your organization. See how you fare in the European Open Science Cloud.</div>
|
||||
</div>
|
||||
<div>
|
||||
<h6 class="uk-margin-xsmall-bottom">
|
||||
Turn data into <span class="uk-text-primary">actionable insights.</span>
|
||||
</h6>
|
||||
<div>See what works and what not, reveal hidden potential. Measure research impact, discover trends, connections
|
||||
and collaborations to improve and optimize your future actions.</div>
|
||||
</div>
|
||||
</ng-template>
|
||||
<div *ngIf="!isMobile" class="uk-visible@m">
|
||||
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden home-background">
|
||||
<div class="uk-container uk-container-large"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-grid uk-flex-middle" uk-grid>
|
||||
<div class="uk-width-3-5@l uk-margin-large-bottom">
|
||||
<h1 class="uk-heading-large" uk-scrollspy-class>
|
||||
A new era of <span class="uk-text-primary">monitoring</span> research<span
|
||||
class="uk-text-primary">.</span>
|
||||
</h1>
|
||||
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
|
||||
<div>Discover, track and understand trends and impact</div>
|
||||
<div>pathways for your organization.</div>
|
||||
<div>Make informed decisions.</div>
|
||||
</div>
|
||||
<div class="uk-margin-medium-top" uk-scrollspy-class>
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase" routerLink="/get-started">Get
|
||||
Started</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-expand" uk-scrollspy-class>
|
||||
<div class="uk-position-relative">
|
||||
<img style="padding: 1px" src="assets/monitor-assets/home/monitor.jpg">
|
||||
<img class="uk-position-top-left" src="assets/monitor-assets/home/mask.svg">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section tablet-section">
|
||||
<div class="uk-container">
|
||||
<div class="uk-text-center">
|
||||
<span class="uk-h6 uk-text-primary">Funders. Research Institutions. Research Initiatives.</span>
|
||||
<h2 class="uk-h1 uk-margin-remove-top">Simplify research<br> monitoring & evaluation<span
|
||||
class="uk-text-primary">.</span></h2>
|
||||
</div>
|
||||
<div class="uk-grid uk-child-width-1-2 uk-flex uk-flex-middle uk-margin-medium-top" uk-grid>
|
||||
<div>
|
||||
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
|
||||
</div>
|
||||
<div class="uk-margin-medium-bottom">
|
||||
<div class="uk-grid uk-child-width-1-1" uk-grid>
|
||||
<ng-container *ngTemplateOutlet="tablet_text"></ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-background-norepeat graph-background">
|
||||
<div class="uk-section uk-section-large uk-container uk-container-large uk-margin-large-top uk-margin-large-bottom uk-overflow-hidden">
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle">
|
||||
<h2 class="uk-h1 uk-width-1-2@m uk-text-center">
|
||||
Tap into the OpenAIRE Graph<span class="uk-text-primary">.</span>
|
||||
</h2>
|
||||
<div class="uk-width-1-2@m uk-text-center uk-margin-top">
|
||||
The OpenAIRE Graph is one of the largest open scholarly record collections
|
||||
worldwide, key in fostering Open Science and establishing its practices in the daily
|
||||
research activities. Conceived as a public and transparent good, populated out of data
|
||||
sources trusted by scientists, the Graph aims at bringing discovery, monitoring, and
|
||||
assessment of science back in the hands of the scientific community.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-center uk-margin-top uk-margin-medium-bottom">
|
||||
<div class="uk-width-1-1 uk-flex-center uk-grid" uk-grid uk-height-match="target: .targetName;"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<ng-template #numberCard let-numberSize="numberSize" let-name="name" let-url="url">
|
||||
<a class="uk-card uk-card-default uk-card-hover uk-position-relative uk-padding-small uk-display-block uk-link-reset"
|
||||
[href]="url" target="_blank" uk-scrollspy-class>
|
||||
<div class="uk-height-small uk-width-small uk-flex uk-flex-center uk-flex-column">
|
||||
<div class="uk-text-center">
|
||||
<div class="uk-text-background uk-text-bold number">{{(numberSize.number|number) + numberSize.size}}</div>
|
||||
<div class="uk-margin-small-top uk-text-large targetName">{{name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</ng-template>
|
||||
<div *ngIf="publicationsSize">
|
||||
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: publicationsSize, name: openaireEntities.PUBLICATIONS,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=publications'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="datasetsSize">
|
||||
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: datasetsSize, name: openaireEntities.DATASETS,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=datasets'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="softwareSize">
|
||||
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: softwareSize, name: openaireEntities.SOFTWARE,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=software'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="otherSize">
|
||||
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: otherSize, name: openaireEntities.OTHER,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=other'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="fundersSize">
|
||||
<ng-container *ngTemplateOutlet="numberCard; context: {numberSize: fundersSize, name: stakeholderEntities.FUNDERS,
|
||||
url: 'https://explore.openaire.eu/search/find/projects'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom">
|
||||
<div class="uk-grid uk-grid-xlarge" uk-grid>
|
||||
<div class="uk-width-1-3@m uk-width-1-1 uk-text-left@m uk-text-center">
|
||||
<h3 class="uk-margin-small-top">Openness. Usability. Replicability. <span
|
||||
class="uk-text-primary">Trust</span><span class="uk-margin-right">.</span></h3>
|
||||
<div class="uk-text-large uk-margin-bottom">Learn and work with a thriving community behind you.</div>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/about/learn-how">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Learn More</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-margin-large-left"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
|
||||
<div class="uk-grid uk-child-width-1-2@s uk-child-width-1-1 uk-grid-large" uk-grid>
|
||||
<div uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-bottom">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Global outlook"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-remove-top">Comprehensive outlook</h5>
|
||||
<div>
|
||||
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph"
|
||||
target="_blank">OpenAIRE Graph</a>. A global linked research
|
||||
graph, a shared data resource from open initiatives around the world. Our indicators cover a
|
||||
wide range of themes from input to impact.
|
||||
</div>
|
||||
</div>
|
||||
<div uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-bottom">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-remove-top">Showcasing, monitoring, analysis</h5>
|
||||
<div>
|
||||
Customize your dashboard by choosing from a variety of pre-defined metrics and select which
|
||||
ones to show publicly, which to invited team members, and which are still work in progress
|
||||
(private).
|
||||
</div>
|
||||
</div>
|
||||
<div uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-bottom">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Transparent methodology"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-remove-top">Transparent methodology</h5>
|
||||
<div>
|
||||
We base our service on Open Science principles. We rely on open data sources, and document
|
||||
our algorithms for every metric and indicator we publish.
|
||||
</div>
|
||||
</div>
|
||||
<div uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-bottom">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Minimum effort to join"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-remove-top">Minimum effort to join</h5>
|
||||
<div>
|
||||
You only share some information with us to include in our backend aggregating and data
|
||||
mining, and we deliver a view of your world.
|
||||
</div>
|
||||
</div>
|
||||
<div uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-bottom">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-remove-top">Tailor-made monitoring, responsive to your needs</h5>
|
||||
<div>
|
||||
Our experts work with you on demand in one-on-one sessions to provide additional indicators
|
||||
and curate your data.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom">
|
||||
<div class="uk-width-1-2@m uk-margin-bottom">
|
||||
<h2 class="uk-heading-xlarge">{{stakeholderEntities.STAKEHOLDERS}} in action<span
|
||||
class="uk-text-primary">.</span></h2>
|
||||
<div class="uk-text-large">
|
||||
View existing {{stakeholderEntities.STAKEHOLDERS | lowercase}} from collaborating organizations. Get a
|
||||
preview on how they work and how our service can be customized to serve you.
|
||||
</div>
|
||||
</div>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/browse">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Browse</span>
|
||||
</span>
|
||||
</a>
|
||||
<div class="uk-margin-large-top">
|
||||
<div *ngIf="loading" class="uk-height-large uk-flex uk-flex-column uk-flex-center">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<ng-container *ngIf="!loading">
|
||||
<div>
|
||||
<slider-tabs position="horizontal">
|
||||
<slider-tab [tabId]="'all'" tabTitle="All"></slider-tab>
|
||||
<slider-tab [tabId]="stakeholderEntities.FUNDERS"
|
||||
tabTitle="{{stakeholderEntities.FUNDERS | titlecase}}"></slider-tab>
|
||||
<slider-tab [tabId]="stakeholderEntities.RIS"
|
||||
tabTitle="{{stakeholderEntities.RIS | titlecase}}"></slider-tab>
|
||||
<slider-tab [tabId]="stakeholderEntities.ORGANIZATIONS"
|
||||
tabTitle="{{stakeholderEntities.ORGANIZATIONS | titlecase}}"></slider-tab>
|
||||
</slider-tabs>
|
||||
</div>
|
||||
<ul class="uk-switcher">
|
||||
<li>
|
||||
<ng-container
|
||||
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.stakeholders}"></ng-container>
|
||||
</li>
|
||||
<li>
|
||||
<ng-container
|
||||
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.funders}"></ng-container>
|
||||
</li>
|
||||
<li>
|
||||
<ng-container
|
||||
*ngTemplateOutlet="sliderTemplate; context: {slides:stakeholdersSlider.ris}"></ng-container>
|
||||
</li>
|
||||
<li>
|
||||
<ng-container
|
||||
*ngTemplateOutlet="sliderTemplate; context: {slides: stakeholdersSlider.organizations}"></ng-container>
|
||||
</li>
|
||||
</ul>
|
||||
</ng-container>
|
||||
<!-- Slider Template for Tab Content -->
|
||||
<ng-template #sliderTemplate let-slides="slides">
|
||||
<div uk-slider class="uk-slider uk-margin-medium-top">
|
||||
<ul class="uk-slider-items" uk-height-match="target: .uk-card; row: false">
|
||||
<!-- Margin right -->
|
||||
<li *ngFor="let slide of slides; let i=index" class="uk-width-1-1">
|
||||
<div class="uk-padding-small">
|
||||
<div uk-grid class="uk-grid uk-child-width-1-3@l uk-child-width-1-2@m"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<ng-container *ngIf="i === 0">
|
||||
<div *ngFor="let stakeholder of slide" uk-scrollspy-class>
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</ng-container>
|
||||
<ng-container *ngIf="i !== 0">
|
||||
<div *ngFor="let stakeholder of slide">
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="uk-slider-nav uk-dotnav uk-flex-center uk-margin-medium-top"></ul>
|
||||
</div>
|
||||
</ng-template>
|
||||
</div>
|
||||
</div>
|
||||
<div #contact
|
||||
class="uk-section uk-container uk-container-large uk-margin-large-bottom uk-flex uk-flex-center uk-position-relative contact-us">
|
||||
<img class="uk-box-shadow-large one" src="assets/monitor-assets/curators/1.jpg">
|
||||
<img class="uk-box-shadow-large two" src="assets/monitor-assets/curators/2.jpg">
|
||||
<img class="uk-box-shadow-large three" src="assets/monitor-assets/curators/3.jpg">
|
||||
<img class="uk-box-shadow-large four" src="assets/monitor-assets/curators/4.jpg">
|
||||
<div class="uk-text-center uk-width-2-3@l uk-width-1-2">
|
||||
<h3>
|
||||
Need more information or a demo? Get in touch and let us show you in practice how you can apply OpenAIRE
|
||||
Monitor to your needs<span class="uk-text-primary">.</span>
|
||||
</h3>
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom"
|
||||
routerLink="/contact-us">Contact us</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-container uk-container-large dashboard-section">
|
||||
<div class="uk-padding-small">
|
||||
<div class="dashboard uk-flex uk-flex-center">
|
||||
<img class="uk-width-1-2@l" src="/assets/monitor-assets/home/dashboard.png">
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<div class="uk-margin-medium-left uk-margin-medium-right uk-margin-large-bottom">
|
||||
<div class="uk-child-width-1-3@m uk-grid info" uk-grid>
|
||||
<div [@1]="state.toString()" class="clickable" [class.uk-active]="state === 1" (click)="startAnimation()">
|
||||
<h5>
|
||||
Get a complete picture
|
||||
</h5>
|
||||
<div class="uk-text-muted">
|
||||
Track and discover your organization’s research output. Use the OpenAIRE Research Graph to get a
|
||||
360<span>°</span>
|
||||
view of your publications-data-code.
|
||||
</div>
|
||||
</div>
|
||||
<div [@2]="state.toString()" class="clickable" [class.uk-active]="state === 2" (click)="startAnimation(2)">
|
||||
<h5>
|
||||
Monitor open science compliance
|
||||
</h5>
|
||||
<div class="uk-text-muted">
|
||||
Work with the open science expert community for open and transparent metrics. Discover open science trends
|
||||
for your organization and see how you fare in EOSC.
|
||||
</div>
|
||||
</div>
|
||||
<div [@3]="state.toString()" class="clickable" [class.uk-active]="state === 3" (click)="startAnimation(3)">
|
||||
<h5>
|
||||
Turn research results to insights
|
||||
</h5>
|
||||
<div class="uk-text-muted">
|
||||
Understand your community. Measure impact, discover trends, connections and collaborations to improve
|
||||
and optimize your future actions.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="isMobile || isServer" class="uk-hidden@m">
|
||||
<div class="uk-section uk-padding-remove-bottom uk-overflow-hidden home-background">
|
||||
<div class="uk-container uk-container-large"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||
<div class="uk-margin-large-bottom" style="max-width: 500px;">
|
||||
<h1 class="uk-heading-small" uk-scrollspy-class>
|
||||
A new era of <span class="uk-text-primary">monitoring</span> research<span
|
||||
class="uk-text-primary">.</span>
|
||||
</h1>
|
||||
<div class="uk-text-large uk-margin-medium-top" uk-scrollspy-class>
|
||||
<div>Discover, track and understand trends and impact pathways for your organization.</div>
|
||||
<div>Make informed decisions.</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-padding-remove-right uk-height-medium uk-position-relative">
|
||||
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%; padding: 1px;"
|
||||
src="assets/monitor-assets/home/monitor.jpg">
|
||||
<img class="uk-position-absolute" style="width: 250px; right: -10%; bottom:-35%;"
|
||||
src="assets/monitor-assets/home/mask.svg">
|
||||
<div>
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase uk-position-relative" routerLink="/get-started">Get
|
||||
Started</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-section-small tablet-section">
|
||||
<div class="uk-container">
|
||||
<div>
|
||||
<span class="uk-text-large uk-text-primary">Funders. Research Institutions. Research Initiatives.</span>
|
||||
<h2 class="uk-h1 uk-margin-remove-top">Simplify research<br> monitoring & evaluation<span
|
||||
class="uk-text-primary">.</span></h2>
|
||||
</div>
|
||||
<div class="uk-grid uk-child-width-1-1 uk-child-width-1-2@s uk-flex uk-flex-middle uk-margin-medium-top" uk-grid>
|
||||
<div class="uk-visible@s">
|
||||
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
|
||||
</div>
|
||||
<div class="uk-hidden@s uk-margin-medium-left">
|
||||
<img src="assets/monitor-assets/home/ipad.png" alt="ipad" loading="lazy">
|
||||
</div>
|
||||
<div class="uk-margin-medium-bottom">
|
||||
<div class="uk-grid uk-child-width-1-1" uk-grid>
|
||||
<ng-container *ngTemplateOutlet="tablet_text"></ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-section-large uk-position-relative uk-overflow-hidden">
|
||||
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph" loading="lazy"
|
||||
style="width: 200px; top: -80px; left: -80px;">
|
||||
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph" loading="lazy"
|
||||
style="width: 200px; top: 60px; right: -145px; transform: rotate(-25deg)">
|
||||
<div class="uk-container uk-container-large uk-section uk-section-large uk-padding-remove-bottom">
|
||||
<div class="uk-flex uk-flex-column uk-flex-middle">
|
||||
<h2 class="uk-h1 uk-text-center uk-padding uk-padding-remove-vertical uk-margin-top">
|
||||
Tap into the OpenAIRE Research Graph<span class="uk-text-primary">.</span>
|
||||
</h2>
|
||||
<div class="uk-text-center">
|
||||
The OpenAIRE Graph is one of the largest open scholarly record collections
|
||||
worldwide, key in fostering Open Science and establishing its practices in the daily
|
||||
research activities. Conceived as a public and transparent good, populated out of data
|
||||
sources trusted by scientists, the Graph aims at bringing discovery, monitoring, and
|
||||
assessment of science back in the hands of the scientific community.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-container uk-container-large uk-position-relative uk-overflow-hidden">
|
||||
<img class="uk-position-absolute" src="assets/monitor-assets/home/graph.svg" alt="OpenAIRE Graph"
|
||||
loading="lazy"
|
||||
style="width: 200px; top: 35%; right: -170px; transform: rotate(-100deg);">
|
||||
<div class="uk-flex uk-flex-center uk-margin-medium-top uk-margin-medium-bottom">
|
||||
<div class="uk-width-1-1 uk-flex-center uk-grid uk-child-width-1-2" uk-grid
|
||||
uk-height-match="target: .targetName;"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<ng-template #numberCardMobile let-numberSize="numberSize" let-name="name" let-url="url">
|
||||
<a class="uk-position-relative uk-display-block uk-link-reset"
|
||||
[href]="url" target="_blank" uk-scrollspy-class>
|
||||
<div class="uk-flex uk-flex-center uk-flex-column uk-margin-auto uk-margin-top">
|
||||
<div class="uk-text-center">
|
||||
<div class="uk-text-background uk-text-bold number">{{(numberSize.number|number) + numberSize.size}}</div>
|
||||
<div class="uk-margin-small-top uk-text-bolder targetName">{{name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</ng-template>
|
||||
<div *ngIf="publicationsSize">
|
||||
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: publicationsSize, name: openaireEntities.PUBLICATIONS,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=publications'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="datasetsSize">
|
||||
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: datasetsSize, name: openaireEntities.DATASETS,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=datasets'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="softwareSize">
|
||||
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: softwareSize, name: openaireEntities.SOFTWARE,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=software'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="otherSize">
|
||||
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: otherSize, name: openaireEntities.OTHER,
|
||||
url: 'https://explore.openaire.eu/search/find/research-outcomes?type=other'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="fundersSize">
|
||||
<ng-container *ngTemplateOutlet="numberCardMobile; context: {numberSize: fundersSize, name: stakeholderEntities.FUNDERS,
|
||||
url: 'https://explore.openaire.eu/search/find/projects'}">
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-section-large uk-container uk-container-large uk-background-muted">
|
||||
<div class="uk-text-center">
|
||||
<div class="">
|
||||
<h3 class="uk-heading-small uk-margin-remove">Openness.</h3>
|
||||
<h3 class="uk-heading-small uk-margin-remove">Usability.</h3>
|
||||
<h3 class="uk-heading-small uk-margin-remove">Replicability.</h3>
|
||||
<h3 class="uk-heading-small uk-text-primary uk-margin-remove">Trust.</h3>
|
||||
<div class="uk-text-large uk-margin-medium-top uk-margin-medium-bottom">Learn and work with a thriving
|
||||
community behind you.
|
||||
</div>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/about/learn-how">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Learn More</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="uk-margin-xlarge-top"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; delay: 250">
|
||||
<div class="">
|
||||
<div uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-auto">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Global outlook"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-top">Comprehensive outlook</h5>
|
||||
<div>
|
||||
Monitor is built on the <a href="https://graph.openaire.eu/" class="text-graph"
|
||||
target="_blank">OpenAIRE Graph</a>. A global linked research
|
||||
graph, a shared data resource from open initiatives around the world. Our indicators cover a
|
||||
wide range of themes from input to impact.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top" uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-auto">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-top">Showcasing, monitoring, analysis</h5>
|
||||
<div>
|
||||
Customize your dashboard by choosing from a variety of pre-defined metrics and select which
|
||||
ones to show publicly, which to invited team members, and which are still work in progress
|
||||
(private).
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top" uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-auto">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Transparent methodology"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-top">Transparent methodology</h5>
|
||||
<div>
|
||||
We base our service on Open Science principles. We rely on open data sources, and document
|
||||
our algorithms for every metric and indicator we publish.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top" uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-auto">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Minimum effort to join"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-top">Minimum effort to join</h5>
|
||||
<div>
|
||||
You only share some information with us to include in our backend aggregating and data
|
||||
mining, and we deliver a view of your world.
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top" uk-scrollspy-class>
|
||||
<div class="uk-icon-bg-shadow uk-margin-auto">
|
||||
<icon name="done" [flex]="true" ratio="1.5" visuallyHidden="Customised to your needs"
|
||||
customClass="uk-text-background"></icon>
|
||||
</div>
|
||||
<h5 class="uk-margin-top">Tailor-made monitoring, responsive to your needs</h5>
|
||||
<div>
|
||||
Our experts work with you on demand in one-on-one sessions to provide additional indicators
|
||||
and curate your data.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-section-large uk-padding-remove-bottom uk-container uk-container-large">
|
||||
<div class="uk-margin-bottom">
|
||||
<h2 class="uk-heading-xlarge">{{stakeholderEntities.STAKEHOLDERS}} in action<span
|
||||
class="uk-text-primary">.</span></h2>
|
||||
<div class="uk-text-large">
|
||||
View existing {{stakeholderEntities.STAKEHOLDERS | lowercase}} from collaborating organizations. Get a
|
||||
preview on how they work and how our service can be customized to serve you.
|
||||
</div>
|
||||
</div>
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/browse">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>Browse</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="uk-margin-xlarge-top uk-margin-xlarge-bottom">
|
||||
<div *ngIf="loading" class="uk-height-large uk-flex uk-flex-column uk-flex-center">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<ng-container *ngIf="!loading">
|
||||
<div class="uk-padding-small uk-padding-remove-right">
|
||||
<slider-tabs position="horizontal">
|
||||
<slider-tab [tabId]="'all'" tabTitle="All"></slider-tab>
|
||||
<slider-tab [tabId]="stakeholderEntities.FUNDERS"
|
||||
tabTitle="{{stakeholderEntities.FUNDERS | titlecase}}"></slider-tab>
|
||||
<slider-tab [tabId]="stakeholderEntities.RIS"
|
||||
tabTitle="{{stakeholderEntities.RIS | titlecase}}"></slider-tab>
|
||||
<slider-tab [tabId]="stakeholderEntities.ORGANIZATIONS"
|
||||
tabTitle="{{stakeholderEntities.ORGANIZATIONS | titlecase}}"></slider-tab>
|
||||
</slider-tabs>
|
||||
</div>
|
||||
<ul class="uk-switcher uk-margin-top uk-overflow-hidden">
|
||||
<li [id]="'all'" class="uk-overflow-auto">
|
||||
<div class="uk-padding-small uk-padding-remove-right"
|
||||
uk-height-match="target: .uk-card; row: false">
|
||||
<div class="uk-grid uk-grid-small uk-flex-nowrap"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<div *ngFor="let stakeholder of stakeholders"
|
||||
class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li [id]="stakeholderEntities.FUNDERS" class="uk-overflow-auto">
|
||||
<div class="uk-padding-small uk-padding-remove-right"
|
||||
uk-height-match="target: .uk-card; row: false">
|
||||
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<div *ngFor="let funder of funders" class="uk-width-4-5 uk-width-2-5@s uk-flex-none"
|
||||
uk-scrollspy-class>
|
||||
<browse-stakeholder [stakeholder]="funder"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li [id]="stakeholderEntities.RIS" class="uk-overflow-auto">
|
||||
<div class="uk-padding-small uk-padding-remove-right"
|
||||
uk-height-match="target: .uk-card; row: false">
|
||||
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<div *ngFor="let ri of ris" class="uk-width-4-5 uk-width-2-5@s uk-flex-none"
|
||||
uk-scrollspy-class>
|
||||
<browse-stakeholder [stakeholder]="ri"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li [id]="stakeholderEntities.ORGANIZATIONS" class="uk-overflow-auto">
|
||||
<div class="uk-padding-small uk-padding-remove-right"
|
||||
uk-height-match="target: .uk-card; row: false">
|
||||
<div class="uk-flex uk-grid uk-grid-small uk-flex-nowrap"
|
||||
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-fade; repeat: true">
|
||||
<div *ngFor="let organization of organizations"
|
||||
class="uk-width-4-5 uk-width-2-5@s uk-flex-none" uk-scrollspy-class>
|
||||
<browse-stakeholder [stakeholder]="organization"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div class="uk-section uk-container uk-container-large uk-margin-large-bottom contact-us">
|
||||
<div class="uk-position-relative">
|
||||
<h2 class="uk-margin-medium-bottom">
|
||||
Need more information or a demo?
|
||||
</h2>
|
||||
<div class="uk-text-large">
|
||||
Get in touch and let us show you in practice how you can apply OpenAIRE Monitor to your needs<span
|
||||
class="uk-text-primary">.</span>
|
||||
</div>
|
||||
<a class="uk-button uk-button-primary uk-text-uppercase uk-margin-medium-top uk-margin-medium-bottom"
|
||||
routerLink="/contact-us">Contact us</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-container uk-container-large">
|
||||
<div class="uk-padding-small hologram uk-position-relative">
|
||||
<div class="uk-grid uk-grid-match uk-child-width-1-2 uk-visible@m" uk-grid>
|
||||
<div uk-parallax="y: 40, -60; easing: 0.5">
|
||||
<div class="uk-margin-large-left uk-margin-large-bottom uk-width-3-4 part">
|
||||
<h5 class="uk-text-secondary">Global outlook</h5>
|
||||
<div>
|
||||
Monitor is built on the OpenAIRE Research Graph. An interconnected scholarly communication shared data
|
||||
resource from open initiatives around the world, of global interest.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div uk-parallax="y: 40, -60; easing: 0.5" class="uk-flex uk-flex-right">
|
||||
<div class="part uk-width-3-4 uk-margin-medium-right">
|
||||
<h5 class="uk-text-secondary">Transparent methodology</h5>
|
||||
<div>
|
||||
We base our service on open science principles. We rely on open data sources, and document our algorithms
|
||||
for every metric and indicator we publish.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div uk-parallax="y: -100; easing: 0.5">
|
||||
<div class="part uk-width-3-4 uk-margin-medium-left">
|
||||
<h5 class="uk-text-secondary">Customised to your needs</h5>
|
||||
<div>
|
||||
Choose from a variety of pre-defined metrics. Select how to visualize them, and who to share with. Use our
|
||||
advanced tools and expertise add add your own metrics.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div uk-parallax="y: -100; easing: 2" class="uk-flex uk-flex-center">
|
||||
<div class="part uk-width-3-4 uk-margin-large-left">
|
||||
<h5 class="uk-text-secondary">Minimum effort to join</h5>
|
||||
<div>
|
||||
You only share some information with us to include in out backend aggregating and data mining, and we
|
||||
deliver a view of your world. As you see fit.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-hidden@m uk-grid uk-child-width-1-1" uk-grid>
|
||||
<div>
|
||||
<h5 class="uk-text-secondary">Global outlook</h5>
|
||||
<div>
|
||||
Monitor is built on the OpenAIRE Research Graph. An interconnected scholarly communication shared data
|
||||
resource from open initiatives around the world, of global interest.
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="uk-text-secondary">Transparent methodology</h5>
|
||||
<div>
|
||||
We base our service on open science principles. We rely on open data sources, and document our algorithms for
|
||||
every metric and indicator we publish.
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="uk-text-secondary">Customised to your needs</h5>
|
||||
<div>
|
||||
Choose from a variety of pre-defined metrics. Select how to visualize them, and who to share with. Use our
|
||||
advanced tools and expertise add add your own metrics.
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<h5 class="uk-text-secondary">Minimum effort to join</h5>
|
||||
<div>
|
||||
You only share some information with us to include in out backend aggregating and data mining, and we deliver
|
||||
a view of your world. As you see fit.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-text-center uk-margin-large">
|
||||
<a class="uk-button portal-button" routerLink="/about">Learn More</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="graph-section">
|
||||
<div class="uk-section uk-container uk-margin-large">
|
||||
<div class="uk-text-center uk-padding-small">
|
||||
<h2>Tap into the OpenAIRE Research Graph</h2>
|
||||
<div class="uk-flex uk-flex-center">
|
||||
<div class="uk-width-3-4@m uk-margin-large-top uk-grid uk-child-width-1-5@m uk-child-width-1-2">
|
||||
<div *ngIf="publicationsSize" class="uk-margin-medium-bottom uk-text-center">
|
||||
<h3 class="uk-margin-remove portal-color">
|
||||
<a class="uk-link-reset"
|
||||
href="https://explore.openaire.eu/search/find/research-outcomes?type=publications" target=_blank>
|
||||
<span class="uk-text-bold number">{{publicationsSize.number|number}}</span>{{publicationsSize.size}}
|
||||
</a>
|
||||
</h3>
|
||||
<div class="uk-margin-small uk-text-large uk-text-uppercase">publications</div>
|
||||
</div>
|
||||
<div *ngIf="datasetsSize" class="uk-margin-medium-bottom uk-text-center">
|
||||
<h3 class="uk-margin-remove portal-color">
|
||||
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/research-outcomes?type=datasets"
|
||||
target=_blank>
|
||||
<span class="uk-text-bold number">{{datasetsSize.number|number}}</span>{{datasetsSize.size}}
|
||||
</a>
|
||||
</h3>
|
||||
<div class="uk-margin-small uk-text-large uk-text-uppercase">datasets</div>
|
||||
</div>
|
||||
<div *ngIf="softwareSize" class="uk-margin-medium-bottom uk-text-center">
|
||||
<h3 class="uk-margin-remove portal-color">
|
||||
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/research-outcomes?type=software"
|
||||
target="_blank">
|
||||
<span class="uk-text-bold number">{{softwareSize.number|number}}</span>{{softwareSize.size}}
|
||||
</a>
|
||||
</h3>
|
||||
<div class="uk-margin-small uk-text-large uk-text-uppercase">software</div>
|
||||
</div>
|
||||
<div *ngIf="otherSize" class="uk-margin-medium-bottom uk-text-center">
|
||||
<h3 class="uk-margin-remove portal-color">
|
||||
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/research-outcomes?type=other"
|
||||
target="_blank">
|
||||
<span class="uk-text-bold number">{{otherSize.number|number}}</span>{{otherSize.size}}
|
||||
</a>
|
||||
</h3>
|
||||
<div class="uk-margin-small uk-text-large uk-text-uppercase">other</div>
|
||||
</div>
|
||||
<div *ngIf="fundersSize" class="uk-margin-medium-bottom uk-text-center">
|
||||
<h3 class="uk-margin-remove portal-color">
|
||||
<a class="uk-link-reset" href="https://explore.openaire.eu/search/find/projects" target="_blank">
|
||||
<span class="uk-text-bold number">{{fundersSize.number|number}}</span>{{fundersSize.size}}
|
||||
</a>
|
||||
</h3>
|
||||
<div class="uk-margin-small uk-text-large uk-text-uppercase">Funders</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="loading && stakeholders.length === 0" class="uk-container uk-container-large uk-margin-large-bottom">
|
||||
<errorMessages [status]="[status]" [type]="'stakeholders'"></errorMessages>
|
||||
</div>
|
||||
<div *ngIf="!loading && stakeholders && stakeholders.length > 0"
|
||||
class="uk-section uk-section-large uk-margin-right uk-margin-left uk-margin-large-top stakeholder-section">
|
||||
<div class="uk-container" uk-filter="target: .stakeholders">
|
||||
<ul class="uk-subnav uk-subnav-pill">
|
||||
<li class="uk-active" uk-filter-control><a (click)="type = null">All</a></li>
|
||||
<li uk-filter-control="[data-type='funder']"><a (click)="type = 'funder'">Funders</a></li>
|
||||
<li uk-filter-control="[data-type='ri']"><a (click)="type = 'ri'">Research Initiatives</a></li>
|
||||
<!--<li uk-filter-control="[data-type='project']"><a (click)="type = 'project'">Projects</a></li>-->
|
||||
<li uk-filter-control="[data-type='organization']"><a (click)="type = 'organization'">Institutions</a></li>
|
||||
</ul>
|
||||
<div
|
||||
class="stakeholders uk-margin-large-top uk-child-width-1-1 uk-child-width-1-2@s uk-child-width-1-3@m uk-grid uk-flex-top uk-flex-wrap-top"
|
||||
uk-grid="masonry: true" uk-height-match="target: .uk-card; row: false;">
|
||||
<div *ngFor="let stakeholder of stakeholders" [attr.data-type]="stakeholder.type">
|
||||
<a *ngIf="directLink && hasPermission(stakeholder)" [href]="getStakeholderPageUrl(stakeholder)" target="_blank">
|
||||
<div class="uk-card uk-card-default uk-text-center uk-position-relative">
|
||||
<ng-container *ngTemplateOutlet="stakeholderCard; context: {stakeholder: stakeholder}"></ng-container>
|
||||
</div>
|
||||
</a>
|
||||
<a *ngIf="!directLink && hasPermission(stakeholder)" (click)="confirmModalOpen(stakeholder)">
|
||||
<ng-container *ngTemplateOutlet="stakeholderCard; context: {stakeholder: stakeholder}"></ng-container>
|
||||
</a>
|
||||
<ng-container *ngIf="!hasPermission(stakeholder)">
|
||||
<ng-container *ngTemplateOutlet="stakeholderCard; context: {stakeholder: stakeholder}"></ng-container>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div *ngIf="stakeholdersNumber === 0" [attr.data-type]="type"
|
||||
class="uk-text-center uk-text-large uk-width-1-1 uk-margin-large-top uk-padding-large">
|
||||
Nothing here yet.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="background: linear-gradient(0deg, #FFFFFF 0%, #EFF3F8 0%, #FAFAFA 100%);">
|
||||
<div class="uk-section uk-container uk-text-center uk-margin-large-bottom">
|
||||
<div class="uk-padding-small">
|
||||
<h3>Contact us to help you.</h3>
|
||||
<div class="uk-text-muted uk-margin-medium">
|
||||
Are you looking for more? Get in touch with our team and let us help you.
|
||||
</div>
|
||||
<a class="uk-button portal-button" routerLink="/contact-us">CONTACT US</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section-muted"
|
||||
uk-scrollspy="{"target":"[uk-scrollspy-class]","cls":"uk-animation-fade","delay":false}">
|
||||
<div class="uk-container uk-container-large">
|
||||
<other-portals [properties]="properties" portal="monitor"></other-portals>
|
||||
</div>
|
||||
</div>
|
||||
<modal-alert #AlertModal (alertOutput)="goToPage($event)">
|
||||
<div class="uk-text-left">
|
||||
You will be navigated to a new tab. Are you sure that you want to proceed?
|
||||
</div>
|
||||
</modal-alert>
|
||||
<ng-template #stakeholderCard let-stakeholder="stakeholder">
|
||||
<div class="uk-card uk-card-default uk-text-center" [class.disabled]="!hasPermission(stakeholder)">
|
||||
<div *ngIf="stakeholder.visibility && stakeholder.visibility !== 'PUBLIC'"
|
||||
class="uk-position-top-right uk-margin-top uk-margin-right uk-flex uk-flex-middle">
|
||||
<icon [name]="visibilityIcon.get(stakeholder.visibility)"></icon>
|
||||
<span class="space uk-text-small uk-text-capitalize">{{stakeholder.visibility.toLowerCase()}}</span>
|
||||
</div>
|
||||
<img *ngIf="stakeholder.logoUrl && stakeholder.isUpload" class="uk-margin-auto"
|
||||
[src]="properties.utilsService + '/download/' + stakeholder.logoUrl">
|
||||
<img *ngIf="stakeholder.logoUrl && !stakeholder.isUpload" class="uk-margin-auto"
|
||||
[src]="stakeholder.logoUrl | urlPrefix">
|
||||
<div class="uk-text-light uk-margin-medium-top">{{stakeholder.name}}</div>
|
||||
</div>
|
||||
</ng-template>
|
|
@ -0,0 +1,75 @@
|
|||
@import (reference) "~src/assets/openaire-theme/less/_import-variables";
|
||||
|
||||
@home-curator-image-size: 136px;
|
||||
|
||||
.home-background {
|
||||
background-color: @global-inverse-color;
|
||||
}
|
||||
|
||||
.tablet-section {
|
||||
background-image:linear-gradient(180deg, @global-inverse-color 0%, @global-muted-background 100%);
|
||||
background-repeat: no-repeat;
|
||||
background-position: top;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: @breakpoint-medium) {
|
||||
.tablet-section {
|
||||
background-image:url("~src/assets/monitor-assets/home/monitor-dark-logo.svg"), linear-gradient(180deg, @global-inverse-color 0%, @global-muted-background 100%);
|
||||
background-repeat: no-repeat;
|
||||
background-position: -5% 95%, top;
|
||||
background-size: 60%, cover;
|
||||
}
|
||||
}
|
||||
|
||||
.graph-background {
|
||||
background-image: url('~src/assets/monitor-assets/home/graph.svg');
|
||||
background-position-y: 50%;
|
||||
background-position-x: -5%;
|
||||
background-size: 25%;
|
||||
}
|
||||
|
||||
#bullets {
|
||||
& > div {
|
||||
max-width: 360px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.contact-us {
|
||||
|
||||
img {
|
||||
position: absolute;
|
||||
width: @home-curator-image-size;
|
||||
height: @home-curator-image-size;
|
||||
object-fit: cover;
|
||||
border-radius: 18px;
|
||||
|
||||
|
||||
&.one {
|
||||
top: 0;
|
||||
left: @global-medium-gutter + (@home-curator-image-size/2);
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
|
||||
&.two {
|
||||
bottom: 0;
|
||||
left: @global-medium-gutter;
|
||||
transform: rotate(-10deg);
|
||||
object-position: top;
|
||||
}
|
||||
|
||||
&.three {
|
||||
top: 0;
|
||||
right: @global-medium-gutter;
|
||||
transform: rotate(-10deg);
|
||||
object-position: -60px;
|
||||
}
|
||||
|
||||
&.four {
|
||||
bottom: 0;
|
||||
right: @global-medium-gutter + (@home-curator-image-size/2);
|
||||
transform: rotate(-10deg);
|
||||
object-position: 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,20 @@
|
|||
import {Component, ViewChild} from '@angular/core';
|
||||
import {
|
||||
AfterViewInit,
|
||||
ChangeDetectorRef,
|
||||
Component,
|
||||
ElementRef,
|
||||
Inject,
|
||||
OnDestroy,
|
||||
OnInit,
|
||||
PLATFORM_ID,
|
||||
QueryList,
|
||||
ViewChild,
|
||||
ViewChildren
|
||||
} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {Meta, Title} from '@angular/platform-browser';
|
||||
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
|
||||
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
|
||||
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
|
||||
|
||||
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
|
||||
import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.component';
|
||||
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
||||
|
@ -12,83 +22,59 @@ import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
|||
import {RefineFieldResultsService} from "../openaireLibrary/services/refineFieldResults.service";
|
||||
import {NumberUtils} from "../openaireLibrary/utils/number-utils.class";
|
||||
import {SearchResearchResultsService} from "../openaireLibrary/services/searchResearchResults.service";
|
||||
import {animate, state, style, transition, trigger} from "@angular/animations";
|
||||
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {LocalStorageService} from "../openaireLibrary/services/localStorage.service";
|
||||
import {Stakeholder, Visibility} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {Session, User} from "../openaireLibrary/login/utils/helper.class";
|
||||
import {Stakeholder, StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {User} from "../openaireLibrary/login/utils/helper.class";
|
||||
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {QuickContactService} from '../openaireLibrary/sharedComponents/quick-contact/quick-contact.service';
|
||||
import {IDeactivateComponent} from "../openaireLibrary/utils/can-exit.guard";
|
||||
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
|
||||
import {isPlatformServer} from '@angular/common';
|
||||
import {LayoutService} from '../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service';
|
||||
|
||||
@Component({
|
||||
selector: 'home',
|
||||
templateUrl: 'home.component.html',
|
||||
styleUrls: ['home.component.css'],
|
||||
animations: [
|
||||
trigger('1', [
|
||||
state('1', style({
|
||||
opacity: 1
|
||||
})),
|
||||
transition('* => *', [
|
||||
animate('0.3s')
|
||||
])
|
||||
]),
|
||||
trigger('2', [
|
||||
state('2', style({
|
||||
opacity: 1
|
||||
})),
|
||||
transition('* => *', [
|
||||
animate('0.3s')
|
||||
])
|
||||
]),
|
||||
trigger('3', [
|
||||
state('3', style({
|
||||
opacity: 1
|
||||
})),
|
||||
transition('* => *', [
|
||||
animate('0.3s')
|
||||
])
|
||||
])
|
||||
]
|
||||
styleUrls: ['home.component.less']
|
||||
})
|
||||
export class HomeComponent {
|
||||
export class HomeComponent implements OnInit, OnDestroy, AfterViewInit, IDeactivateComponent {
|
||||
public pageTitle = "OpenAIRE | Monitor";
|
||||
public stakeholders: Stakeholder[] = [];
|
||||
public description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators.";
|
||||
public stakeholders: StakeholderInfo[] = [];
|
||||
public stakeholdersSlider: {
|
||||
stakeholders: StakeholderInfo[][];
|
||||
funders: StakeholderInfo[][];
|
||||
ris: StakeholderInfo[][];
|
||||
organizations: StakeholderInfo[][];
|
||||
};
|
||||
public selected: Stakeholder = null;
|
||||
public pageContents = null;
|
||||
public divContents = null;
|
||||
// Message variables
|
||||
public status: number;
|
||||
public loading: boolean = true;
|
||||
public subscriberErrorMessage: string = "";
|
||||
public errorCodes: ErrorCodes;
|
||||
private errorMessages: ErrorMessagesComponent;
|
||||
|
||||
properties: EnvProperties;
|
||||
public keyword: string = "";
|
||||
public type: string = null;
|
||||
|
||||
public properties: EnvProperties = properties;
|
||||
public openaireEntities = OpenaireEntities;
|
||||
public stakeholderEntities = StakeholderEntities;
|
||||
public directLink: boolean = true;
|
||||
public publicationsSize: any = null;
|
||||
public datasetsSize: any = null;
|
||||
public softwareSize: any = null;
|
||||
public otherSize: any = null;
|
||||
public fundersSize: any = null;
|
||||
subscriptions = [];
|
||||
|
||||
public state = 1;
|
||||
private timeouts: any[] = [];
|
||||
@ViewChild('AlertModal') modal;
|
||||
public directLink: boolean = true;
|
||||
private errorMessages: ErrorMessagesComponent;
|
||||
private subscriptions = [];
|
||||
private mutationObserver: MutationObserver;
|
||||
private user: User;
|
||||
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string> ([
|
||||
["PUBLIC", 'earth'],
|
||||
["PRIVATE", 'lock'],
|
||||
["RESTRICTED", 'group']
|
||||
]);
|
||||
@ViewChild('contact') contact: ElementRef;
|
||||
isMobile: boolean = false;
|
||||
isServer: boolean;
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private _router: Router,
|
||||
private _meta: Meta,
|
||||
private _title: Title,
|
||||
|
@ -98,63 +84,86 @@ export class HomeComponent {
|
|||
private userManagementService: UserManagementService,
|
||||
private helper: HelperService,
|
||||
private seoService: SEOService,
|
||||
private _refineFieldResultsService: RefineFieldResultsService, private _searchResearchResultsService: SearchResearchResultsService) {
|
||||
|
||||
|
||||
var description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies. Work together with us to view, understand and visualize research statistics and indicators. ";
|
||||
var title = "OpenAIRE - Monitor";
|
||||
|
||||
this._meta.updateTag({content: description}, "name='description'");
|
||||
this._meta.updateTag({content: description}, "property='og:description'");
|
||||
this._meta.updateTag({content: title}, "property='og:title'");
|
||||
this._title.setTitle(title);
|
||||
|
||||
private _refineFieldResultsService: RefineFieldResultsService,
|
||||
private _searchResearchResultsService: SearchResearchResultsService,
|
||||
private quickContactService: QuickContactService,
|
||||
private layoutService: LayoutService,
|
||||
private cdr: ChangeDetectorRef,
|
||||
@Inject(PLATFORM_ID) private platform: any) {
|
||||
this._meta.updateTag({content: this.description}, "name='description'");
|
||||
this._meta.updateTag({content: this.description}, "property='og:description'");
|
||||
this._meta.updateTag({content: this.pageTitle}, "property='og:title'");
|
||||
this._title.setTitle(this.pageTitle);
|
||||
this.errorCodes = new ErrorCodes();
|
||||
this.errorMessages = new ErrorMessagesComponent();
|
||||
this.status = this.errorCodes.LOADING;
|
||||
this.isServer = isPlatformServer(this.platform);
|
||||
this.quickContactService.setDisplay(false);
|
||||
}
|
||||
|
||||
|
||||
public ngOnInit() {
|
||||
this.properties = properties;
|
||||
var url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
let url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(url, false);
|
||||
this._meta.updateTag({content: url}, "property='og:url'");
|
||||
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Monitor", this.properties.piwikSiteId).subscribe());
|
||||
}
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Monitor").subscribe());
|
||||
this.getNumbers();
|
||||
this.getStakeholders();
|
||||
// this.createGifs();
|
||||
//this.getDivContents();
|
||||
// this.getPageContents();
|
||||
this.subscriptions.push(this.localStorageService.get().subscribe(value => {
|
||||
this.directLink = value;
|
||||
}));
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
this.user = user;
|
||||
this.getStakeholders();
|
||||
}));
|
||||
|
||||
if(typeof document != "undefined") {
|
||||
this.startAnimation();
|
||||
this.layoutService.isMobile.subscribe(isMobile => {
|
||||
this.isMobile = isMobile;
|
||||
this.cdr.detectChanges();
|
||||
});
|
||||
}
|
||||
|
||||
canExit(): boolean {
|
||||
this.clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.quickContactService.setDisplay(true);
|
||||
this.clear();
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.subscriptions.forEach(value => {
|
||||
if (value instanceof Subscriber) {
|
||||
value.unsubscribe();
|
||||
} else if (value instanceof IntersectionObserver || value instanceof MutationObserver) {
|
||||
value.disconnect();
|
||||
}
|
||||
});
|
||||
if(this.mutationObserver) {
|
||||
this.mutationObserver.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
public startAnimation(state = 1) {
|
||||
this.clearTimeouts();
|
||||
this.state = state;
|
||||
this.timeouts.push(setTimeout(() => {
|
||||
if (this.state < 3) {
|
||||
this.startAnimation(this.state + 1);
|
||||
} else {
|
||||
this.startAnimation();
|
||||
}
|
||||
}, 6000));
|
||||
ngAfterViewInit() {
|
||||
if(typeof window !== "undefined") {
|
||||
this.createObservers();
|
||||
}
|
||||
}
|
||||
|
||||
private clearTimeouts() {
|
||||
this.timeouts.forEach(timeout => {
|
||||
clearTimeout(timeout);
|
||||
});
|
||||
createObservers() {
|
||||
let options = {
|
||||
root: null,
|
||||
rootMargin: '200px',
|
||||
threshold: 1.0
|
||||
};
|
||||
let intersectionObserver = new IntersectionObserver(entries => {
|
||||
entries.forEach(entry => {
|
||||
this.quickContactService.setDisplay(!entry.isIntersecting);
|
||||
});
|
||||
}, options);
|
||||
if(this.contact) {
|
||||
intersectionObserver.observe(this.contact.nativeElement);
|
||||
}
|
||||
this.subscriptions.push(intersectionObserver);
|
||||
}
|
||||
|
||||
private getPageContents() {
|
||||
|
@ -169,16 +178,8 @@ export class HomeComponent {
|
|||
}));
|
||||
}
|
||||
|
||||
public get stakeholdersNumber(): number {
|
||||
if(this.type === null) {
|
||||
return this.stakeholders.length;
|
||||
} else {
|
||||
return this.stakeholders.filter(stakeholder => stakeholder.type === this.type).length;
|
||||
}
|
||||
}
|
||||
|
||||
getNumbers() {
|
||||
this.subscriptions.push(this._refineFieldResultsService.getRefineFieldsResultsByEntityName(["funder"], "project", this.properties).subscribe(
|
||||
this.subscriptions.push(this._refineFieldResultsService.getAllRefineFieldResultsByFieldName("funder", "project", this.properties).subscribe(
|
||||
data => {
|
||||
if (data[1].length > 0 && data[1][0].filterId == "funder" && data[1][0].values) {
|
||||
this.fundersSize = NumberUtils.roundNumber(data[1][0].values.length);
|
||||
|
@ -188,7 +189,7 @@ export class HomeComponent {
|
|||
//console.log(err);
|
||||
this.handleError("Error getting 'funder' field results of projects", err);
|
||||
}));
|
||||
|
||||
|
||||
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("publication", "", this.properties).subscribe(
|
||||
data => {
|
||||
if (data && data > 0) {
|
||||
|
@ -200,7 +201,7 @@ export class HomeComponent {
|
|||
this.handleError("Error getting number of publications", err);
|
||||
}
|
||||
));
|
||||
|
||||
|
||||
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("dataset", "", this.properties).subscribe(
|
||||
data => {
|
||||
if (data && data > 0) {
|
||||
|
@ -212,7 +213,7 @@ export class HomeComponent {
|
|||
this.handleError("Error getting number of research data", err);
|
||||
}
|
||||
));
|
||||
|
||||
|
||||
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("software", "", this.properties).subscribe(
|
||||
data => {
|
||||
if (data && data > 0) {
|
||||
|
@ -223,7 +224,7 @@ export class HomeComponent {
|
|||
this.handleError("Error getting number of software data", err);
|
||||
}
|
||||
));
|
||||
|
||||
|
||||
this.subscriptions.push(this._searchResearchResultsService.numOfSearchResults("other", "", this.properties).subscribe(
|
||||
data => {
|
||||
if (data && data > 0) {
|
||||
|
@ -241,84 +242,90 @@ export class HomeComponent {
|
|||
public getStakeholders() {
|
||||
this.loading = true;
|
||||
this.status = this.errorCodes.LOADING;
|
||||
this.subscriberErrorMessage = "";
|
||||
this.subscriptions.push(this._stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL).subscribe(
|
||||
stakeholders => {
|
||||
if (!stakeholders || stakeholders.length == 0) {
|
||||
this.status = this.errorCodes.NONE;
|
||||
} else {
|
||||
this.stakeholders = stakeholders;
|
||||
this.stakeholders = StakeholderInfo.toStakeholderInfo(stakeholders, this.user);
|
||||
this.sort(this.stakeholders);
|
||||
this.stakeholders = this.publicStakeholders.concat(this.privateStakeholders);
|
||||
this.stakeholdersSlider = {
|
||||
stakeholders: this.stakeholderSlider(this.stakeholders),
|
||||
funders: this.stakeholderSlider(this.funders),
|
||||
ris: this.stakeholderSlider(this.ris),
|
||||
organizations: this.stakeholderSlider(this.organizations)
|
||||
};
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
error => {
|
||||
this.status = this.handleError("Error getting funders", error);
|
||||
this.status = this.handleError("Error getting stakeholders", error);
|
||||
this.loading = false;
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
private isManager(stakeholder: Stakeholder) {
|
||||
return Session.isPortalAdministrator(this.user) || Session.isMonitorCurator(this.user) || Session.isManager(stakeholder.type, stakeholder.alias, this.user);
|
||||
private sort(results: StakeholderInfo[]) {
|
||||
results.sort((left, right): number => {
|
||||
if (left.name > right.name) {
|
||||
return 1;
|
||||
} else if (left.name < right.name) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
private isMember(stakeholder: Stakeholder) {
|
||||
return Session.isMember(stakeholder.type, stakeholder.alias, this.user);
|
||||
public stakeholderSlider(stakeholders: StakeholderInfo[], size: number = 6): StakeholderInfo[][] {
|
||||
let slider: StakeholderInfo[][] = [];
|
||||
for (let i = 0; i < (stakeholders.length / size); i++) {
|
||||
slider.push(stakeholders.slice(i * size, ((i + 1) * size)));
|
||||
}
|
||||
return slider;
|
||||
}
|
||||
|
||||
public confirmModalOpen(result: Stakeholder) {
|
||||
this.selected = result;
|
||||
this.modal.cancelButton = true;
|
||||
this.modal.okButton = true;
|
||||
this.modal.alertTitle = 'You are going to visit ' + result.name + ' Monitor Dashboard';
|
||||
this.modal.alertMessage = false;
|
||||
this.modal.okButtonLeft = false;
|
||||
this.modal.okButtonText = 'Yes';
|
||||
this.modal.cancelButtonText = 'No';
|
||||
this.modal.choice = true;
|
||||
this.modal.open();
|
||||
get publicStakeholders(): StakeholderInfo[] {
|
||||
return this.stakeholders.filter(stakeholder => stakeholder.visibility === "PUBLIC");
|
||||
}
|
||||
|
||||
public getStakeholderPageUrl(stakeholder: Stakeholder) {
|
||||
return this.properties.domain + this.properties.baseLink + '/dashboard/' + stakeholder.alias;
|
||||
get privateStakeholders(): StakeholderInfo[] {
|
||||
return this.stakeholders.filter(stakeholder => stakeholder.visibility !== "PUBLIC");
|
||||
}
|
||||
|
||||
public goToPage(data: any) {
|
||||
if (data.value == true) {
|
||||
let url = this.getStakeholderPageUrl(this.selected);
|
||||
this.localStorageService.setCommunityDirectLink(data.choice);
|
||||
window.open(url, '_blank');
|
||||
get funders(): StakeholderInfo[] {
|
||||
if (this.stakeholders) {
|
||||
return this.stakeholders.filter(stakeholder => stakeholder.type === "funder");
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
public quote(param: string): string {
|
||||
return StringUtils.quote(param);
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
this.clearTimeouts();
|
||||
get ris(): StakeholderInfo[] {
|
||||
if (this.stakeholders) {
|
||||
return this.stakeholders.filter(stakeholder => stakeholder.type === "ri");
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
hasPermission(stakeholder: Stakeholder) {
|
||||
return stakeholder.visibility === "PUBLIC" || this.isManager(stakeholder) || this.isMember(stakeholder);
|
||||
get organizations(): StakeholderInfo[] {
|
||||
if (this.stakeholders) {
|
||||
return this.stakeholders.filter(stakeholder => stakeholder.type === "organization");
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
private handleError(message: string, error): number {
|
||||
var code = "";
|
||||
let code = "";
|
||||
if (!error.status) {
|
||||
var error = error.json();
|
||||
code = error.code;
|
||||
} else {
|
||||
code = error.status;
|
||||
}
|
||||
|
||||
console.error("Home Component: " + message, error);
|
||||
|
||||
return this.errorMessages.getErrorCode(code);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,11 +2,8 @@ import {NgModule} from '@angular/core';
|
|||
import {CommonModule} from '@angular/common';
|
||||
import {FormsModule} from '@angular/forms';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {HomeComponent} from './home.component';
|
||||
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
|
||||
import {ErrorMessagesModule} from '../openaireLibrary/utils/errorMessages.module';
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
|
@ -18,15 +15,19 @@ import {RefineFieldResultsServiceModule} from "../openaireLibrary/services/refin
|
|||
import {SearchResearchResultsServiceModule} from "../openaireLibrary/services/searchResearchResultsService.module";
|
||||
import {AlertModalModule} from "../openaireLibrary/utils/modal/alertModal.module";
|
||||
import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
|
||||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||
import {group, lock} from "../openaireLibrary/utils/icons/icons";
|
||||
import {UrlPrefixModule} from "../openaireLibrary/utils/pipes/url-prefix.module";
|
||||
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
|
||||
import {SectionScrollModule} from '../openaireLibrary/utils/section-scroll/section-scroll.module';
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
import {BrowseStakeholderModule} from "../browse-stakeholder/browse-stakeholder.module";
|
||||
import {SliderTabsModule} from '../openaireLibrary/sharedComponents/tabs/slider-tabs.module';
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule, RouterModule, ErrorMessagesModule, OtherPortalsModule,
|
||||
HelperModule, Schema2jsonldModule, SEOServiceModule, HomeRoutingModule, SearchResearchResultsServiceModule,
|
||||
RefineFieldResultsServiceModule, AlertModalModule, IconsModule, UrlPrefixModule
|
||||
RefineFieldResultsServiceModule, AlertModalModule, IconsModule, UrlPrefixModule, LogoUrlPipeModule,
|
||||
SectionScrollModule, LoadingModule, BrowseStakeholderModule, SliderTabsModule
|
||||
],
|
||||
declarations: [
|
||||
HomeComponent
|
||||
|
@ -40,7 +41,5 @@ import {UrlPrefixModule} from "../openaireLibrary/utils/pipes/url-prefix.module"
|
|||
]
|
||||
})
|
||||
export class HomeModule {
|
||||
constructor(private iconsService: IconsService) {
|
||||
this.iconsService.registerIcons([group, lock])
|
||||
}
|
||||
constructor() {}
|
||||
}
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {LearnHowComponent} from "./learn-how.component";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{ path: '', component: LearnHowComponent, canDeactivate: [PreviousRouteRecorder] }
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class LearnHowRoutingModule { }
|
|
@ -1,197 +0,0 @@
|
|||
@media only screen and (min-width: 640px) {
|
||||
.process .zero {
|
||||
position: relative;
|
||||
padding: 0 8% 0 3%;
|
||||
}
|
||||
|
||||
.process .zero::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/1.svg");
|
||||
top: 57%;
|
||||
right: -6%;
|
||||
width: 30%;
|
||||
height: 21%;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .first {
|
||||
position: relative;
|
||||
padding: 3% 6% 0 4%;
|
||||
}
|
||||
|
||||
.process .first::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/2.svg");
|
||||
top: 78%;
|
||||
right: -9%;
|
||||
width: 30%;
|
||||
height: 21%;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .second {
|
||||
position: relative;
|
||||
padding: 6% 6% 0 4.8%;
|
||||
}
|
||||
|
||||
.process .second::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/3.svg");
|
||||
top: 100%;
|
||||
left: 50%;
|
||||
width: 30%;
|
||||
height: 48%;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .third {
|
||||
position: relative;
|
||||
padding: 8% 9% 0 3%;
|
||||
}
|
||||
|
||||
.process .third::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/4.svg");
|
||||
top: 68%;
|
||||
left: -25%;
|
||||
width: 30%;
|
||||
height: 15%;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .fourth {
|
||||
position: relative;
|
||||
padding: 14% 8% 0 3%;
|
||||
}
|
||||
|
||||
.process .fourth::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/5.svg");
|
||||
top: 87%;
|
||||
left: -25%;
|
||||
width: 30%;
|
||||
height: 15%;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .fifth {
|
||||
padding: 16% 10% 0 2%;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 639px) {
|
||||
.process .zero {
|
||||
position: relative;
|
||||
padding: 0 12% 0 12%;
|
||||
}
|
||||
|
||||
.process .zero::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/1.svg");
|
||||
top: 100%;
|
||||
right: 11%;
|
||||
width: 30%;
|
||||
height: 21%;
|
||||
-moz-transform: rotate(90deg);
|
||||
-o-transform: rotate(90deg);
|
||||
-webkit-transform: rotate(90deg);
|
||||
transform: rotate(90deg);
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .first {
|
||||
position: relative;
|
||||
padding: 20% 7% 0 12%;
|
||||
}
|
||||
|
||||
.process .first::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/2.svg");
|
||||
top: 105%;
|
||||
left: 2%;
|
||||
width: 30%;
|
||||
height: 21%;
|
||||
-moz-transform: rotate(35deg);
|
||||
-o-transform: rotate(35deg);
|
||||
-webkit-transform: rotate(35deg);
|
||||
transform: rotate(35deg);
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .second {
|
||||
position: relative;
|
||||
padding: 20% 7% 0 12%;
|
||||
}
|
||||
|
||||
.process .second::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/3.svg");
|
||||
top: 100%;
|
||||
left: 66%;
|
||||
width: 30%;
|
||||
height: 48%;;
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .third {
|
||||
position: relative;
|
||||
padding: 20% 7% 0 16%;
|
||||
}
|
||||
|
||||
.process .third::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/4.svg");
|
||||
top: 106%;
|
||||
left: 5%;
|
||||
width: 30%;
|
||||
height: 15%;
|
||||
-moz-transform: rotate(215deg) scaleY(-1);
|
||||
-o-transform: rotate(215deg) scaleY(-1);
|
||||
-webkit-transform: rotate(215deg) scaleY(-1);
|
||||
transform: rotate(215deg) scaleY(-1);
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .fourth {
|
||||
position: relative;
|
||||
padding: 20% 8% 0 16%;
|
||||
}
|
||||
|
||||
.process .fourth::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
background-image: url("/assets/monitor-assets/about/arrows/5.svg");
|
||||
top: 100%;
|
||||
right: 0;
|
||||
width: 30%;
|
||||
height: 19%;
|
||||
-moz-transform: rotate(310deg);
|
||||
-o-transform: rotate(310deg);
|
||||
-webkit-transform: rotate(310deg);
|
||||
transform: rotate(310deg);
|
||||
background-size: contain;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.process .fifth {
|
||||
padding: 20% 7.6% 0 16%;
|
||||
}
|
||||
}
|
|
@ -1,98 +0,0 @@
|
|||
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other" [description]="description"></schema2jsonld>
|
||||
<div class="uk-section uk-container uk-container-large">
|
||||
<div class="uk-padding-small">
|
||||
<div class="uk-flex uk-flex-center">
|
||||
<div class="uk-text-center uk-width-2-5@m uk-width-2-3@s">
|
||||
<h1 class="uk-h2">Learn the process</h1>
|
||||
<h6 class="uk-text-muted uk-margin-remove">
|
||||
Use the Monitor Dashboard to view your research results, open science…
|
||||
</h6>
|
||||
</div>
|
||||
</div>
|
||||
<div class="process uk-margin-large-top">
|
||||
<div class="uk-flex uk-flex-wrap uk-child-width-1-3@s">
|
||||
<div class="zero">
|
||||
<div class="uk-text-center">
|
||||
<img width="90" src="../../assets/monitor-assets/about/process/0.png">
|
||||
</div>
|
||||
<h6>0. Starting from the OpenAIRE RESEARCH GRAPH</h6>
|
||||
<div class="uk-text-small uk-text-muted">
|
||||
<a class="uk-link" href="https://graph.openaire.eu" target="_blank">OpenAIRE Research Graph</a> aggregates
|
||||
a collection of research data properties for funders, organizations,
|
||||
researchers, research communities and publishers to interlink information by using a semantic graph
|
||||
database approach.
|
||||
</div>
|
||||
</div>
|
||||
<div class="first">
|
||||
<div class="uk-text-center">
|
||||
<img width="110" src="../../assets/monitor-assets/about/process/1.png">
|
||||
</div>
|
||||
<h6>1. Provide us some information</h6>
|
||||
<div class="uk-text-small uk-text-muted">
|
||||
You give us some simple (meta)data related to your organization function: e.g., funding database,
|
||||
repositories, related projects, registry of people… All under confidential agreements.
|
||||
</div>
|
||||
</div>
|
||||
<div class="second">
|
||||
<div class="uk-text-center">
|
||||
<img width="100" src="../../assets/monitor-assets/about/process/2.png">
|
||||
</div>
|
||||
<h6>2. We get the ball rolling</h6>
|
||||
<div class="uk-text-small uk-text-muted">
|
||||
We ingest your data in our system and start the work: we clean and normalize your data, we identify and
|
||||
extract related information, we infer links. We refine until we are happy of the results and present to
|
||||
you.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-wrap uk-child-width-1-3@s">
|
||||
<div class="third uk-flex-last@s">
|
||||
<div class="uk-text-center">
|
||||
<img width="105" src="../../assets/monitor-assets/about/process/3.png">
|
||||
</div>
|
||||
<h6>3. You validate</h6>
|
||||
<div class="uk-text-small uk-text-muted">
|
||||
After the first iteration you examine our results to ensure you are satisfied with what you see. As
|
||||
numbers are important, we advise you to take your time and tell us of any deviations. We correct, you
|
||||
check, you approve.
|
||||
</div>
|
||||
</div>
|
||||
<div class="fourth">
|
||||
<div class="uk-text-center">
|
||||
<img width="135" src="../../assets/monitor-assets/about/process/4.png">
|
||||
</div>
|
||||
<h6>4. You set up your portal</h6>
|
||||
<div class="uk-text-small uk-text-muted">
|
||||
Using our admin panel you set up your portal. You decide what metrics are of interest to you (full
|
||||
documentation available). You decide what you want to publish, what to keep private, what to share with
|
||||
colleagues.
|
||||
</div>
|
||||
</div>
|
||||
<div class="fifth uk-flex-first@s">
|
||||
<div class="uk-text-center">
|
||||
<img width="105" src="../../assets/monitor-assets/about/process/5.png">
|
||||
</div>
|
||||
<h6>5. You track, monitor, report</h6>
|
||||
<div class="uk-text-small uk-text-muted">
|
||||
Now your views are updated every two weeks, as new content and new providers join OpenAIRE. You are
|
||||
notified about new metrics and indicators as we keep on enriching the OpenAIRE Research Graph and you may
|
||||
add them as they come along.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-section uk-container uk-container-large">
|
||||
<div class="uk-padding-small">
|
||||
<div class="uk-text-center">
|
||||
<h2>See how it works</h2>
|
||||
<h6 class="uk-text-muted uk-margin-remove">
|
||||
Simplify research tracking & monitoring
|
||||
</h6>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<how></how>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,30 +0,0 @@
|
|||
import { NgModule} from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
|
||||
|
||||
import {LearnHowComponent} from "./learn-how.component";
|
||||
import {LearnHowRoutingModule} from "./learn-how-routing.module";
|
||||
import {GifSliderModule} from "../openaireLibrary/utils/gif-slider/gif-slider.module";
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {HowModule} from "../openaireLibrary/monitor/how/how.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, RouterModule, LearnHowRoutingModule, GifSliderModule, HelperModule,
|
||||
Schema2jsonldModule, SEOServiceModule, HowModule
|
||||
],
|
||||
declarations: [
|
||||
LearnHowComponent
|
||||
],
|
||||
exports: [
|
||||
LearnHowComponent
|
||||
],
|
||||
providers:[
|
||||
PreviousRouteRecorder, PiwikService
|
||||
]
|
||||
})
|
||||
export class LearnHowModule { }
|
|
@ -0,0 +1,16 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
|
||||
import {MyStakeholdersComponent} from "./my-stakeholders.component";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
RouterModule.forChild([
|
||||
{path: '', component: MyStakeholdersComponent, canActivate: [LoginGuard], canDeactivate: [PreviousRouteRecorder]}
|
||||
|
||||
])
|
||||
]
|
||||
})
|
||||
export class MyStakeholdersRoutingModule {
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
<schema2jsonld [URL]="properties.domain + properties.baseLink"
|
||||
[logoURL]="properties.domain + properties.baseLink+'/assets/common-assets/logo-small-monitor.png'"
|
||||
type="home"
|
||||
name="OpenAIRE Monitor">
|
||||
</schema2jsonld>
|
||||
<div>
|
||||
<div class="uk-section uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
<div class="uk-margin-large-top uk-margin-large-bottom">
|
||||
<div *ngIf="loading" class="uk-height-large uk-flex uk-flex-column uk-flex-center">
|
||||
<loading></loading>
|
||||
</div>
|
||||
<div *ngIf="!loading">
|
||||
<div *ngIf="manager.length > 0 || member.length > 0">
|
||||
<div *ngIf="manager.length > 0" [class.uk-margin-xlarge-bottom]="member.length > 0">
|
||||
<h1 class="uk-h1">You are managing</h1>
|
||||
<div class="uk-margin-large-top" uk-height-match="target: .uk-card">
|
||||
<div class="uk-visible@xl">
|
||||
<div class="uk-grid-match uk-grid-medium uk-child-width-1-4 uk-flex-center" uk-grid>
|
||||
<div *ngFor="let stakeholder of manager.slice(0, 4); let i = index">
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="manager.length > 4" class="uk-text-center uk-margin-large-top">
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/browse"
|
||||
[queryParams]="{role: quote('manager')}">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>View All ({{manager.length}})</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-hidden@xl">
|
||||
<div class="uk-grid-match uk-grid-medium uk-child-width-1-3@m uk-child-width-1-1 uk-flex-center" uk-grid>
|
||||
<div *ngFor="let stakeholder of manager.slice(0, 3); let i = index">
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="manager.length > 3" class="uk-text-center uk-margin-large-top">
|
||||
<a class="uk-hidden@xl uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/browse"
|
||||
[queryParams]="{role: quote('manager')}">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>View All ({{manager.length}})</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="member.length > 0">
|
||||
<h1 class="uk-h1">You are member of</h1>
|
||||
<div class="uk-margin-large-top" uk-height-match="target: .uk-card">
|
||||
<div class="uk-visible@xl">
|
||||
<div class="uk-grid-match uk-grid-medium uk-child-width-1-4 uk-flex-center" uk-grid>
|
||||
<div *ngFor="let stakeholder of member.slice(0, 4); let i = index">
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="member.length > 4" class="uk-text-center uk-margin-large-top">
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/browse"
|
||||
[queryParams]="{role: quote('member')}">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>View All ({{member.length}})</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-hidden@xl">
|
||||
<div class="uk-grid-match uk-grid-medium uk-child-width-1-3@m uk-child-width-1-1 uk-flex-center" uk-grid>
|
||||
<div *ngFor="let stakeholder of member.slice(0, 3); let i = index">
|
||||
<browse-stakeholder [stakeholder]="stakeholder"></browse-stakeholder>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="member.length > 3" class="uk-text-center uk-margin-large-top">
|
||||
<a class="uk-display-inline-block uk-text-uppercase uk-button uk-button-text"
|
||||
routerLinkActive="router-link-active" routerLink="/browse"
|
||||
[queryParams]="{role: quote('member')}">
|
||||
<span class="uk-flex uk-flex-middle">
|
||||
<span>View All ({{member.length}})</span>
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="manager.length === 0 && member.length === 0">
|
||||
<div class="uk-flex uk-flex-center uk-margin-large-bottom">
|
||||
<div class="uk-card uk-card-default">
|
||||
<div class="uk-card-body uk-text-bold uk-text-center ">
|
||||
You are not yet member in any {{stakeholderEntities.STAKEHOLDERS}}.<br>
|
||||
Start by browsing and subscribing in those that you are interested in.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,151 @@
|
|||
import {Component} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {Meta, Title} from '@angular/platform-browser';
|
||||
import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties';
|
||||
|
||||
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
|
||||
import {User} from '../openaireLibrary/login/utils/helper.class';
|
||||
import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
|
||||
|
||||
import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes';
|
||||
import {ErrorMessagesComponent} from '../openaireLibrary/utils/errorMessages.component';
|
||||
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
||||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
|
||||
@Component({
|
||||
selector: 'my-stakeholders',
|
||||
templateUrl: 'my-stakeholders.component.html',
|
||||
})
|
||||
|
||||
export class MyStakeholdersComponent {
|
||||
public stakeholderEntities = StakeholderEntities;
|
||||
public pageTitle = "OpenAIRE | My " + this.stakeholderEntities.STAKEHOLDERS;
|
||||
public description = "OpenAIRE - Monitor, A new era of monitoring research. Open data. Open methodologies | My managing and member of " + this.stakeholderEntities.STAKEHOLDERS;
|
||||
public stakeholders: StakeholderInfo[] = [];
|
||||
public pageContents = null;
|
||||
public divContents = null;
|
||||
// Message variables
|
||||
public status: number;
|
||||
public loading: boolean = true;
|
||||
public subscriberErrorMessage: string = "";
|
||||
public errorCodes: ErrorCodes;
|
||||
private errorMessages: ErrorMessagesComponent;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'My ' + this.stakeholderEntities.STAKEHOLDERS}];
|
||||
public properties: EnvProperties = properties;
|
||||
private user: User;
|
||||
private subscriptions = [];
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private _router: Router,
|
||||
private _meta: Meta,
|
||||
private _title: Title,
|
||||
private _piwikService: PiwikService,
|
||||
private stakeholderService: StakeholderService,
|
||||
private helper: HelperService,
|
||||
private seoService: SEOService,
|
||||
private userManagementService: UserManagementService) {
|
||||
this._meta.updateTag({content: this.description}, "name='description'");
|
||||
this._meta.updateTag({content: this.description}, "property='og:description'");
|
||||
this._meta.updateTag({content: this.pageTitle}, "property='og:title'");
|
||||
this._title.setTitle(this.pageTitle);
|
||||
this.errorCodes = new ErrorCodes();
|
||||
this.errorMessages = new ErrorMessagesComponent();
|
||||
this.status = this.errorCodes.LOADING;
|
||||
}
|
||||
|
||||
public ngOnInit() {
|
||||
var url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(url, false);
|
||||
this._meta.updateTag({content: url}, "property='og:url'");
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, "OpenAIRE Connect").subscribe());
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
this.user = user;
|
||||
if (this.user) {
|
||||
this.getStakeholders();
|
||||
}
|
||||
//this.getDivContents();
|
||||
//this.getPageContents();
|
||||
}));
|
||||
|
||||
}
|
||||
|
||||
private getPageContents() {
|
||||
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => {
|
||||
this.pageContents = contents;
|
||||
}));
|
||||
}
|
||||
|
||||
private getDivContents() {
|
||||
this.subscriptions.push(this.helper.getDivHelpContents(this.properties, 'connect', this._router.url).subscribe(contents => {
|
||||
this.divContents = contents;
|
||||
}));
|
||||
}
|
||||
|
||||
get manager(): StakeholderInfo[] {
|
||||
return (this.stakeholders)?this.stakeholders.filter(stakeholder => stakeholder.isManager):[];
|
||||
}
|
||||
|
||||
get member(): StakeholderInfo[] {
|
||||
return (this.stakeholders)?this.stakeholders.filter(stakeholder => stakeholder.isMember):[];
|
||||
}
|
||||
|
||||
public getStakeholders() {
|
||||
this.loading = true;
|
||||
this.status = this.errorCodes.LOADING;
|
||||
this.subscriberErrorMessage = "";
|
||||
this.stakeholders = [];
|
||||
this.subscriptions.push(this.stakeholderService.getMyStakeholders(properties.monitorServiceAPIURL).subscribe(
|
||||
stakeholders => {
|
||||
this.stakeholders = StakeholderInfo.toStakeholderInfo(stakeholders, this.user);
|
||||
this.sort(this.stakeholders);
|
||||
this.loading = false;
|
||||
},
|
||||
error => {
|
||||
this.status = this.handleError("Error getting communities", error);
|
||||
this.loading = false;
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
private sort(results: StakeholderInfo[]) {
|
||||
results.sort((left, right): number => {
|
||||
if (left.name > right.name) {
|
||||
return 1;
|
||||
} else if (left.name < right.name) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
public quote(param: string): string {
|
||||
return StringUtils.quote(param);
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private handleError(message: string, error): number {
|
||||
let code = "";
|
||||
if (!error.status) {
|
||||
code = error.code;
|
||||
} else {
|
||||
code = error.status;
|
||||
}
|
||||
console.error("Communities (component): " + message, error);
|
||||
return this.errorMessages.getErrorCode(code);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
import {NgModule} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
import {FormsModule} from '@angular/forms';
|
||||
import {RouterModule} from '@angular/router';
|
||||
import {ManageModule} from '../openaireLibrary/utils/manage/manage.module';
|
||||
import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard';
|
||||
|
||||
import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service';
|
||||
import {ErrorMessagesModule} from '../openaireLibrary/utils/errorMessages.module';
|
||||
import {Schema2jsonldModule} from "../openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||
import {SEOServiceModule} from "../openaireLibrary/sharedComponents/SEO/SEOService.module";
|
||||
import {LoginGuard} from "../openaireLibrary/login/loginGuard.guard";
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {MyStakeholdersRoutingModule} from "./my-stakeholders-routing.module";
|
||||
import {MyStakeholdersComponent} from "./my-stakeholders.component";
|
||||
import {LoadingModule} from "../openaireLibrary/utils/loading/loading.module";
|
||||
import {BrowseStakeholderModule} from "../browse-stakeholder/browse-stakeholder.module";
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
CommonModule, FormsModule, RouterModule, HelperModule,
|
||||
ManageModule, ErrorMessagesModule, Schema2jsonldModule, SEOServiceModule,
|
||||
MyStakeholdersRoutingModule, BreadcrumbsModule, LoadingModule, BrowseStakeholderModule
|
||||
],
|
||||
declarations: [
|
||||
MyStakeholdersComponent
|
||||
],
|
||||
providers: [
|
||||
LoginGuard, PreviousRouteRecorder, PiwikService
|
||||
],
|
||||
exports: [
|
||||
MyStakeholdersComponent
|
||||
]
|
||||
})
|
||||
export class MyStakeholdersModule {
|
||||
}
|
|
@ -1 +1 @@
|
|||
Subproject commit 5c7430ae7cde032c1b6b4d9bd990f761cd6b73e3
|
||||
Subproject commit 1a7624eed148c35659891198c403580dd48e3619
|
|
@ -1,474 +1,494 @@
|
|||
import { Component, ViewChild } from "@angular/core";
|
||||
import { SearchUtilsClass } from "../openaireLibrary/searchPages/searchUtils/searchUtils.class";
|
||||
import { ErrorMessagesComponent } from "../openaireLibrary/utils/errorMessages.component";
|
||||
import { ErrorCodes } from "../openaireLibrary/utils/properties/errorCodes";
|
||||
import { EnvProperties } from "../openaireLibrary/utils/properties/env-properties";
|
||||
import { ActivatedRoute } from "@angular/router";
|
||||
import { AdvancedField, Filter, Value } from "../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class";
|
||||
import { SearchFields } from "../openaireLibrary/utils/properties/searchFields";
|
||||
import { Session, User } from "../openaireLibrary/login/utils/helper.class";
|
||||
import { StringUtils } from "../openaireLibrary/utils/string-utils.class";
|
||||
import { UserManagementService } from "../openaireLibrary/services/user-management.service";
|
||||
import { StakeholderService } from "../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import { NewSearchPageComponent } from "../openaireLibrary/searchPages/searchUtils/newSearchPage.component";
|
||||
import { StakeholderInfo } from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import { properties } from "../../environments/environment";
|
||||
import { Subscriber } from "rxjs";
|
||||
import {ChangeDetectorRef, Component, ViewChild} from "@angular/core";
|
||||
import {SearchUtilsClass} from "../openaireLibrary/searchPages/searchUtils/searchUtils.class";
|
||||
import {ErrorMessagesComponent} from "../openaireLibrary/utils/errorMessages.component";
|
||||
import {ErrorCodes} from "../openaireLibrary/utils/properties/errorCodes";
|
||||
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
|
||||
import {ActivatedRoute} from "@angular/router";
|
||||
import {AdvancedField, Filter, Value} from "../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class";
|
||||
import {SearchFields} from "../openaireLibrary/utils/properties/searchFields";
|
||||
import {Session, User} from "../openaireLibrary/login/utils/helper.class";
|
||||
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
||||
import {UserManagementService} from "../openaireLibrary/services/user-management.service";
|
||||
import {StakeholderService} from "../openaireLibrary/monitor/services/stakeholder.service";
|
||||
import {NewSearchPageComponent, SearchForm} from "../openaireLibrary/searchPages/searchUtils/newSearchPage.component";
|
||||
import {StakeholderEntities, StakeholderInfo} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
|
||||
import {TitleCasePipe} from "@angular/common";
|
||||
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
|
||||
@Component({
|
||||
selector: 'search-stakeholders',
|
||||
template: `
|
||||
<new-search-page pageTitle="OpenAIRE-Monitor | Browse"
|
||||
[hasPrefix]=false [piwikSiteId]="piwikSiteId"
|
||||
[formPlaceholderText]="'Search profiles'"
|
||||
type="organizations" entityType="stakeholder"
|
||||
selector: 'search-stakeholders',
|
||||
template: `
|
||||
<new-search-page pageTitle="OpenAIRE-Monitor | Browse {{this.stakeholderEntities.STAKEHOLDERS}}"
|
||||
[hasPrefix]=false
|
||||
[formPlaceholderText]="'Search ' + (!isMobile?'OpenAIRE Monitor ':'') + this.stakeholderEntities.STAKEHOLDERS"
|
||||
[type]="(results.length > 1) ? this.stakeholderEntities.STAKEHOLDERS:this.stakeholderEntities.STAKEHOLDER"
|
||||
entityType="stakeholder"
|
||||
[results]="results" [searchUtils]="searchUtils"
|
||||
[showResultCount]=true
|
||||
[disableForms]="disableForms"
|
||||
[showIndexInfo]=false
|
||||
[simpleView]="true"
|
||||
[searchForm]="searchForm"
|
||||
[fieldIds]="fieldIds" [fieldIdsMap]="fieldIdsMap" [selectedFields]="selectedFields"
|
||||
[showBreadcrumb]="true" [breadcrumbs]="breadcrumbs"
|
||||
[simpleSearchLink]="searchLink" [entitiesSelection]="false">
|
||||
</new-search-page>
|
||||
`
|
||||
})
|
||||
export class SearchStakeholdersComponent {
|
||||
public piwikSiteId = null;
|
||||
private errorCodes: ErrorCodes;
|
||||
private errorMessages: ErrorMessagesComponent;
|
||||
public results: StakeholderInfo[] = [];
|
||||
public totalResults: StakeholderInfo[] = [];
|
||||
public subscriptions = [];
|
||||
public filters = [];
|
||||
public searchFields: SearchFields = new SearchFields();
|
||||
public searchUtils: SearchUtilsClass = new SearchUtilsClass();
|
||||
public selectedFields: AdvancedField[] = [];
|
||||
public disableForms: boolean = false;
|
||||
public baseUrl: string = null;
|
||||
public fieldIds: string[] = ["q"];
|
||||
public refineFields: string[] = this.searchFields.STAKEHOLDER_SEARCH_FIELDS;
|
||||
public fieldIdsMap = {
|
||||
["q"]: {
|
||||
name: "All fields",
|
||||
type: "keyword",
|
||||
param: "q",
|
||||
operator: "op",
|
||||
equalityOperator: "=",
|
||||
filterType: null
|
||||
}
|
||||
};
|
||||
public keyword = "";
|
||||
public searchLink;
|
||||
properties: EnvProperties = properties;
|
||||
@ViewChild(NewSearchPageComponent, { static: true }) searchPage: NewSearchPageComponent;
|
||||
private user: User;
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private _stakeholderService: StakeholderService,
|
||||
private userManagementService: UserManagementService) {
|
||||
this.errorCodes = new ErrorCodes();
|
||||
this.errorMessages = new ErrorMessagesComponent();
|
||||
this.searchUtils.status = this.errorCodes.LOADING;
|
||||
}
|
||||
|
||||
public ngOnInit() {
|
||||
this.piwikSiteId = this.properties.piwikSiteId;
|
||||
this.baseUrl = this.properties.searchLinkToStakeholders;
|
||||
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
||||
this.searchPage.resultsPerPage = 10;
|
||||
this.keyword = (params['fv0'] ? params['fv0'] : '');
|
||||
this.keyword = StringUtils.URIDecode(this.keyword);
|
||||
this.searchUtils.page = (params['page'] === undefined) ? 1 : +params['page'];
|
||||
this.searchUtils.sortBy = (params['sortBy'] === undefined) ? '' : params['sortBy'];
|
||||
this.searchUtils.validateSize(params['size']);
|
||||
this.searchUtils.baseUrl = this.baseUrl;
|
||||
this.searchPage.searchUtils = this.searchUtils;
|
||||
if (this.searchUtils.sortBy && this.searchUtils.sortBy != "creationdate,descending" && this.searchUtils.sortBy != "creationdate,ascending") {
|
||||
this.searchUtils.sortBy = "";
|
||||
}
|
||||
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);
|
||||
let queryParams = params;
|
||||
if (typeof document !== 'undefined') {
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
this.user = user;
|
||||
this.initFunders(queryParams);
|
||||
}));
|
||||
} else {
|
||||
this.initFunders(queryParams);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize stakeholders from Communities APIs
|
||||
*
|
||||
* @param params
|
||||
*/
|
||||
private initFunders(params) {
|
||||
this.subscriptions.push(this._stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL).subscribe(
|
||||
data => {
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
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]);
|
||||
}
|
||||
this._getResults(params);
|
||||
},
|
||||
err => {
|
||||
this.handleError('Error getting stakeholders', err);
|
||||
this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
|
||||
this.disableForms = false;
|
||||
}
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all stakeholders from mock API and apply permission access validator,
|
||||
* keyword searching, filter, paging and sorting.
|
||||
*
|
||||
* @param params, status
|
||||
* @private
|
||||
*/
|
||||
private _getResults(params) {
|
||||
this.searchUtils.status = this.errorCodes.LOADING;
|
||||
this.disableForms = true;
|
||||
this.results = this.totalResults;
|
||||
this.filters = this.createFilters();
|
||||
this.searchUtils.totalResults = 0;
|
||||
this.applyParams(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply permission access validator,
|
||||
* keyword searching, filter, paging and sorting.
|
||||
*
|
||||
* @param params
|
||||
* @param status
|
||||
*/
|
||||
public applyParams(params) {
|
||||
if (this.keyword && this.keyword != '') {
|
||||
this.searchForKeywords();
|
||||
}
|
||||
this.checkFilters(params);
|
||||
this.sort();
|
||||
this.searchUtils.totalResults = this.results.length;
|
||||
this.filters = this.searchPage.prepareFiltersToShow(this.filters, this.searchUtils.totalResults);
|
||||
this.results = this.results.slice((this.searchUtils.page - 1) * this.searchUtils.size, (this.searchUtils.page * this.searchUtils.size));
|
||||
this.searchUtils.status = this.errorCodes.DONE;
|
||||
if (this.searchUtils.totalResults == 0) {
|
||||
this.searchUtils.status = this.errorCodes.NONE;
|
||||
}
|
||||
this.disableForms = false;
|
||||
if (this.searchUtils.status == this.errorCodes.DONE) {
|
||||
// Page out of limit!!!
|
||||
let totalPages: any = this.searchUtils.totalResults / (this.searchUtils.size);
|
||||
if (!(Number.isInteger(totalPages))) {
|
||||
totalPages = (parseInt(totalPages, 10) + 1);
|
||||
}
|
||||
if (totalPages < this.searchUtils.page) {
|
||||
this.searchUtils.totalResults = 0;
|
||||
this.searchUtils.status = this.errorCodes.OUT_OF_BOUND;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parse the given keywords into array and check if any of the requirements field of a funder includes
|
||||
* one of the given words.
|
||||
*/
|
||||
private searchForKeywords() {
|
||||
let ret = [];
|
||||
let keywords: string[] = this.keyword.split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
for (let keyword of keywords) {
|
||||
keyword = keyword.toLowerCase();
|
||||
if (keyword != '' && (StringUtils.containsWord(this.results[i].name, keyword) || StringUtils.containsWord(this.results[i].index_shortName, keyword) ||
|
||||
StringUtils.containsWord(this.results[i].alias, keyword) || StringUtils.containsWord(this.results[i].description, keyword))) {
|
||||
ret.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.results = ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the current results if they satisfy the values of each filter category and
|
||||
* update the number of possible results in each value.
|
||||
*
|
||||
* @param params
|
||||
*/
|
||||
private checkFilters(params) {
|
||||
let typeResults: StakeholderInfo[] = this.applyFilter('type', params);
|
||||
let accessResults: StakeholderInfo[] = this.results;
|
||||
let roleResults: StakeholderInfo[] = this.results;
|
||||
accessResults = this.applyFilter('access', params);
|
||||
roleResults = this.applyFilter('role', params);
|
||||
this.resetFilterNumbers('access');
|
||||
this.updateFilterNumbers(typeResults.filter(value => {
|
||||
return roleResults.includes(value);
|
||||
}), 'access');
|
||||
if (this.user) {
|
||||
this.resetFilterNumbers('role');
|
||||
this.updateFilterNumbers(accessResults.filter(value => {
|
||||
return typeResults.includes(value);
|
||||
}), 'role');
|
||||
}
|
||||
this.resetFilterNumbers('type');
|
||||
this.updateFilterNumbers(accessResults.filter(value => {
|
||||
return roleResults.includes(value);
|
||||
}), 'type');
|
||||
this.results = accessResults.filter(value => {
|
||||
return typeResults.includes(value);
|
||||
})
|
||||
this.results = this.results.filter(value => {
|
||||
return roleResults.includes(value);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply filter with filterId and return the results
|
||||
*
|
||||
* @param filterId
|
||||
* @param params
|
||||
*/
|
||||
private applyFilter(filterId: string, params): StakeholderInfo[] {
|
||||
let results = [];
|
||||
let values: string[] = [];
|
||||
if (params[filterId]) {
|
||||
values = (StringUtils.URIDecode(params[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||
}
|
||||
if (filterId == 'type') {
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
if (values.length == 0) {
|
||||
results.push(this.results[i]);
|
||||
} else {
|
||||
for (let value of values) {
|
||||
if (this.results[i].type == value.replace(/["']/g, "")) {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (filterId == 'access') {
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
if (values.length == 0) {
|
||||
results.push(this.results[i]);
|
||||
} else {
|
||||
for (let value of values) {
|
||||
if (value.replace(/["']/g, "") == 'public') {
|
||||
if (this.results[i].visibility === 'PUBLIC') {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
} else if (value.replace(/["']/g, "") == 'restricted') {
|
||||
if (this.results[i].visibility === 'RESTRICTED') {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
} /*else if (value.replace(/["']/g, "") == 'private') {
|
||||
private errorCodes: ErrorCodes;
|
||||
private errorMessages: ErrorMessagesComponent;
|
||||
public results: StakeholderInfo[] = [];
|
||||
public totalResults: StakeholderInfo[];
|
||||
public subscriptions = [];
|
||||
public filters = [];
|
||||
public searchFields: SearchFields = new SearchFields();
|
||||
public searchUtils: SearchUtilsClass = new SearchUtilsClass();
|
||||
public selectedFields: AdvancedField[] = [];
|
||||
public disableForms: boolean = false;
|
||||
public baseUrl: string = null;
|
||||
public fieldIds: string[] = ["q"];
|
||||
public refineFields: string[] = this.searchFields.STAKEHOLDER_SEARCH_FIELDS;
|
||||
public fieldIdsMap = {
|
||||
["q"]: {
|
||||
name: "All fields",
|
||||
type: "keyword",
|
||||
param: "q",
|
||||
operator: "op",
|
||||
equalityOperator: "=",
|
||||
filterType: null
|
||||
}
|
||||
};
|
||||
public keyword = "";
|
||||
public searchLink;
|
||||
public stakeholderEntities = StakeholderEntities;
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Browse ' + this.stakeholderEntities.STAKEHOLDERS}];
|
||||
public searchForm: SearchForm = {class: 'uk-background-muted', dark: false};
|
||||
public isMobile: boolean = false;
|
||||
properties: EnvProperties = properties;
|
||||
@ViewChild(NewSearchPageComponent, {static: true}) searchPage: NewSearchPageComponent;
|
||||
private user: User;
|
||||
|
||||
constructor(private route: ActivatedRoute,
|
||||
private _stakeholderService: StakeholderService,
|
||||
private userManagementService: UserManagementService,
|
||||
public titleCasePipe: TitleCasePipe,
|
||||
private layoutService: LayoutService,
|
||||
private cdr: ChangeDetectorRef) {
|
||||
this.errorCodes = new ErrorCodes();
|
||||
this.errorMessages = new ErrorMessagesComponent();
|
||||
this.searchUtils.status = this.errorCodes.LOADING;
|
||||
}
|
||||
|
||||
public ngOnInit() {
|
||||
this.baseUrl = this.properties.searchLinkToStakeholders;
|
||||
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
||||
this.searchPage.resultsPerPage = 10;
|
||||
this.keyword = (params['fv0'] ? params['fv0'] : '');
|
||||
this.keyword = StringUtils.URIDecode(this.keyword);
|
||||
this.searchUtils.page = (params['page'] === undefined) ? 1 : +params['page'];
|
||||
this.searchUtils.sortBy = (params['sortBy'] === undefined) ? '' : params['sortBy'];
|
||||
this.searchUtils.validateSize(params['size']);
|
||||
this.searchUtils.baseUrl = this.baseUrl;
|
||||
this.searchPage.searchUtils = this.searchUtils;
|
||||
if (this.searchUtils.sortBy && this.searchUtils.sortBy != "creationdate,descending" && this.searchUtils.sortBy != "creationdate,ascending") {
|
||||
this.searchUtils.sortBy = "";
|
||||
}
|
||||
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);
|
||||
let queryParams = params;
|
||||
if (typeof document !== 'undefined') {
|
||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||
this.user = user;
|
||||
this.initFunders(queryParams);
|
||||
}));
|
||||
} else {
|
||||
this.initFunders(queryParams);
|
||||
}
|
||||
}));
|
||||
this.layoutService.isMobile.subscribe(isMobile => {
|
||||
this.isMobile = isMobile;
|
||||
this.cdr.detectChanges();
|
||||
})
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.subscriptions.forEach(subscription => {
|
||||
if (subscription instanceof Subscriber) {
|
||||
subscription.unsubscribe();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
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 initFunders(params) {
|
||||
if (this.totalResults) {
|
||||
this.parseResults(this.totalResults);
|
||||
this._getResults(params);
|
||||
} else {
|
||||
this.subscriptions.push(this._stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL).subscribe(
|
||||
data => {
|
||||
this.totalResults = [];
|
||||
this.parseResults(data);
|
||||
this._getResults(params);
|
||||
},
|
||||
err => {
|
||||
this.handleError('Error getting stakeholders', err);
|
||||
this.searchUtils.status = this.errorMessages.getErrorCode(err.status);
|
||||
this.disableForms = false;
|
||||
}
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all stakeholders from mock API and apply permission access validator,
|
||||
* keyword searching, filter, paging and sorting.
|
||||
*
|
||||
* @param params, status
|
||||
* @private
|
||||
*/
|
||||
private _getResults(params) {
|
||||
this.searchUtils.status = this.errorCodes.LOADING;
|
||||
this.disableForms = true;
|
||||
this.results = this.totalResults;
|
||||
this.filters = this.createFilters();
|
||||
this.searchUtils.totalResults = 0;
|
||||
this.applyParams(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply permission access validator,
|
||||
* keyword searching, filter, paging and sorting.
|
||||
*
|
||||
* @param params
|
||||
* @param status
|
||||
*/
|
||||
public applyParams(params) {
|
||||
if (this.keyword && this.keyword != '') {
|
||||
this.searchForKeywords();
|
||||
}
|
||||
this.checkFilters(params);
|
||||
this.sort();
|
||||
this.searchUtils.totalResults = this.results.length;
|
||||
this.filters = this.searchPage.prepareFiltersToShow(this.filters, this.searchUtils.totalResults);
|
||||
this.results = this.results.slice((this.searchUtils.page - 1) * this.searchUtils.size, (this.searchUtils.page * this.searchUtils.size));
|
||||
this.searchUtils.status = this.errorCodes.DONE;
|
||||
if (this.searchUtils.totalResults == 0) {
|
||||
this.searchUtils.status = this.errorCodes.NONE;
|
||||
}
|
||||
this.disableForms = false;
|
||||
if (this.searchUtils.status == this.errorCodes.DONE) {
|
||||
// Page out of limit!!!
|
||||
let totalPages: any = this.searchUtils.totalResults / (this.searchUtils.size);
|
||||
if (!(Number.isInteger(totalPages))) {
|
||||
totalPages = (parseInt(totalPages, 10) + 1);
|
||||
}
|
||||
if (totalPages < this.searchUtils.page) {
|
||||
this.searchUtils.totalResults = 0;
|
||||
this.searchUtils.status = this.errorCodes.OUT_OF_BOUND;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parse the given keywords into array and check if any of the requirements field of a funder includes
|
||||
* one of the given words.
|
||||
*/
|
||||
private searchForKeywords() {
|
||||
let ret = [];
|
||||
let keywords: string[] = this.keyword.split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
for (let keyword of keywords) {
|
||||
keyword = keyword.toLowerCase();
|
||||
if (keyword != '' && (StringUtils.containsWord(this.results[i].name, keyword) || StringUtils.containsWord(this.results[i].index_shortName, keyword) ||
|
||||
StringUtils.containsWord(this.results[i].alias, keyword) || StringUtils.containsWord(this.results[i].description, keyword))) {
|
||||
ret.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
this.results = ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the current results if they satisfy the values of each filter category and
|
||||
* update the number of possible results in each value.
|
||||
*
|
||||
* @param params
|
||||
*/
|
||||
private checkFilters(params) {
|
||||
let typeResults: StakeholderInfo[] = this.applyFilter('type', params);
|
||||
let accessResults: StakeholderInfo[] = this.applyFilter('access', params);
|
||||
let roleResults: StakeholderInfo[] = this.results;
|
||||
if (this.user) {
|
||||
roleResults = this.applyFilter('role', params);
|
||||
this.resetFilterNumbers('role');
|
||||
this.updateFilterNumbers(accessResults.filter(value => {
|
||||
return typeResults.includes(value);
|
||||
}), 'role');
|
||||
}
|
||||
this.resetFilterNumbers('access');
|
||||
this.updateFilterNumbers(typeResults.filter(value => {
|
||||
return roleResults.includes(value);
|
||||
}), 'access');
|
||||
this.resetFilterNumbers('type');
|
||||
this.updateFilterNumbers(accessResults.filter(value => {
|
||||
return roleResults.includes(value);
|
||||
}), 'type');
|
||||
this.results = accessResults.filter(value => {
|
||||
return typeResults.includes(value);
|
||||
})
|
||||
this.results = this.results.filter(value => {
|
||||
return roleResults.includes(value);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply filter with filterId and return the results
|
||||
*
|
||||
* @param filterId
|
||||
* @param params
|
||||
*/
|
||||
private applyFilter(filterId: string, params): StakeholderInfo[] {
|
||||
let results = [];
|
||||
let values: string[] = [];
|
||||
if (params[filterId]) {
|
||||
values = (StringUtils.URIDecode(params[filterId])).split(/,(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/, -1);
|
||||
}
|
||||
if (filterId == 'type') {
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
if (values.length == 0) {
|
||||
results.push(this.results[i]);
|
||||
} else {
|
||||
for (let value of values) {
|
||||
if (this.results[i].type == value.replace(/["']/g, "")) {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (filterId == 'access') {
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
if (values.length == 0) {
|
||||
results.push(this.results[i]);
|
||||
} else {
|
||||
for (let value of values) {
|
||||
if (value.replace(/["']/g, "") == 'public') {
|
||||
if (this.results[i].visibility === 'PUBLIC') {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
} else if (value.replace(/["']/g, "") == 'restricted') {
|
||||
if (this.results[i].visibility === 'RESTRICTED') {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
} else if (value.replace(/["']/g, "") == 'private') {
|
||||
if (this.results[i].visibility === 'PRIVATE') {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (filterId == 'role') {
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
if (values.length == 0) {
|
||||
results.push(this.results[i]);
|
||||
} else {
|
||||
for (let value of values) {
|
||||
if (value.replace(/["']/g, "") == 'manager') {
|
||||
if (this.results[i].isManager) {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (value.replace(/["']/g, "") == 'member') {
|
||||
if (this.results[i].isMember) {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the values of filter with id filterId with zero.
|
||||
*
|
||||
* @param filterId
|
||||
*/
|
||||
private resetFilterNumbers(filterId: string) {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
if (this.filters[i].filterId == filterId) {
|
||||
for (let j = 0; j < this.filters[i].values.length; j++) {
|
||||
this.filters[i].values[j].number = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the values of filter with id filterId based on
|
||||
* results.
|
||||
*
|
||||
* @param results
|
||||
* @param filterId
|
||||
*/
|
||||
private updateFilterNumbers(results: StakeholderInfo[], filterId: string) {
|
||||
for (let k = 0; k < results.length; k++) {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
if (this.filters[i].filterId == filterId) {
|
||||
if (this.filters[i].filterId == 'type') {
|
||||
for (let j = 0; j < this.filters[i].values.length; j++) {
|
||||
if (results[k].type == this.filters[i].values[j].id) {
|
||||
this.filters[i].values[j].number++;
|
||||
}
|
||||
}
|
||||
} else if (this.filters[i].filterId == 'access') {
|
||||
if (results[k].visibility === 'PUBLIC') {
|
||||
this.filters[i].values[0].number++;
|
||||
} else if (results[k].visibility === 'RESTRICTED') {
|
||||
this.filters[i].values[1].number++;
|
||||
} else {
|
||||
this.filters[i].values[2].number++;
|
||||
}
|
||||
} else if (this.filters[i].filterId == 'role') {
|
||||
if (results[k].isManager) {
|
||||
this.filters[i].values[0].number++;
|
||||
}
|
||||
if (results[k].isMember) {
|
||||
this.filters[i].values[1].number++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorting results based on sortBy.
|
||||
*/
|
||||
private sort() {
|
||||
if (this.searchUtils.sortBy == '') {
|
||||
this.results.sort((left, right): number => {
|
||||
if (left.name > right.name) {
|
||||
return 1;
|
||||
} else if (left.name < right.name) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
} else if (this.searchUtils.sortBy == 'creationdate,descending') {
|
||||
this.results.sort((left, right): number => {
|
||||
if (!right.creationDate || left.creationDate > right.creationDate) {
|
||||
return -1;
|
||||
} else if (!left.creationDate || left.creationDate < right.creationDate) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
} else if (this.searchUtils.sortBy == 'creationdate,ascending') {
|
||||
this.results.sort((left, right): number => {
|
||||
if (!right.creationDate || left.creationDate > right.creationDate) {
|
||||
return 1;
|
||||
} else if (!left.creationDate || left.creationDate < right.creationDate) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Search Stakeholder filters.
|
||||
*
|
||||
*/
|
||||
private createFilters(): Filter[] {
|
||||
let filter_names = [];
|
||||
let filter_ids = [];
|
||||
let value_names = [];
|
||||
let value_original_ids = [];
|
||||
filter_names.push("Type");
|
||||
filter_ids.push("type");
|
||||
value_names.push(["Funders", "Research Initiatives", "Institutions"]);
|
||||
value_original_ids.push(["funder", "ri", "organization"]);
|
||||
filter_names.push("Accessibility");
|
||||
filter_ids.push("access");
|
||||
if (!this.user) {
|
||||
value_names.push(["Public", "Restricted"]);
|
||||
value_original_ids.push(["public", "restricted"]);
|
||||
} else {
|
||||
value_names.push(["Public", "Restricted", "Private"]);
|
||||
value_original_ids.push(["public", "restricted", "private"]);
|
||||
filter_names.push("Role");
|
||||
filter_ids.push("role");
|
||||
value_names.push(["Manager", "Member"]);
|
||||
value_original_ids.push(["manager", "member"]);
|
||||
}
|
||||
let filters: Filter[] = [];
|
||||
for (let i = 0; i < filter_names.length; i++) {
|
||||
let values: Value[] = [];
|
||||
for (let j = 0; j < value_names[i].length; j++) {
|
||||
let value: Value = { name: value_names[i][j], id: value_original_ids[i][j], number: 0, selected: false };
|
||||
values.push(value);
|
||||
}
|
||||
let filter: Filter = {
|
||||
title: filter_names[i],
|
||||
filterId: filter_ids[i],
|
||||
originalFilterId: this.refineFields[i],
|
||||
values: values,
|
||||
countSelectedValues: 0,
|
||||
"filterOperator": 'or',
|
||||
valueIsExact: true,
|
||||
filterType: "checkbox"
|
||||
};
|
||||
filters.push(filter);
|
||||
}
|
||||
return filters;
|
||||
}
|
||||
|
||||
private handleError(message: string, error) {
|
||||
console.error('Communities Search Page: ' + message, error);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (filterId == 'role') {
|
||||
for (let i = 0; i < this.results.length; i++) {
|
||||
if (values.length == 0) {
|
||||
results.push(this.results[i]);
|
||||
} else {
|
||||
for (let value of values) {
|
||||
if (value.replace(/["']/g, "") == 'manager') {
|
||||
if (this.results[i].isManager) {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (value.replace(/["']/g, "") == 'member') {
|
||||
if (this.results[i].isMember) {
|
||||
results.push(this.results[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the values of filter with id filterId with zero.
|
||||
*
|
||||
* @param filterId
|
||||
*/
|
||||
private resetFilterNumbers(filterId: string) {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
if (this.filters[i].filterId == filterId) {
|
||||
for (let j = 0; j < this.filters[i].values.length; j++) {
|
||||
this.filters[i].values[j].number = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the values of filter with id filterId based on
|
||||
* results.
|
||||
*
|
||||
* @param results
|
||||
* @param filterId
|
||||
*/
|
||||
private updateFilterNumbers(results: StakeholderInfo[], filterId: string) {
|
||||
for (let k = 0; k < results.length; k++) {
|
||||
for (let i = 0; i < this.filters.length; i++) {
|
||||
if (this.filters[i].filterId == filterId) {
|
||||
if (this.filters[i].filterId == 'type') {
|
||||
for (let j = 0; j < this.filters[i].values.length; j++) {
|
||||
if (results[k].type == this.filters[i].values[j].id) {
|
||||
this.filters[i].values[j].number++;
|
||||
}
|
||||
}
|
||||
} else if (this.filters[i].filterId == 'access') {
|
||||
if (results[k].visibility === 'PUBLIC') {
|
||||
this.filters[i].values[0].number++;
|
||||
} else if (results[k].visibility === 'RESTRICTED') {
|
||||
this.filters[i].values[1].number++;
|
||||
} else if (this.user) {
|
||||
this.filters[i].values[2].number++;
|
||||
}
|
||||
} else if (this.filters[i].filterId == 'role') {
|
||||
if (results[k].isManager) {
|
||||
this.filters[i].values[0].number++;
|
||||
}
|
||||
if (results[k].isMember) {
|
||||
this.filters[i].values[1].number++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorting results based on sortBy.
|
||||
*/
|
||||
private sort() {
|
||||
if (this.searchUtils.sortBy == '') {
|
||||
this.results.sort((left, right): number => {
|
||||
if (left.name > right.name) {
|
||||
return 1;
|
||||
} else if (left.name < right.name) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
} else if (this.searchUtils.sortBy == 'creationdate,descending') {
|
||||
this.results.sort((left, right): number => {
|
||||
if (!right.creationDate || left.creationDate > right.creationDate) {
|
||||
return -1;
|
||||
} else if (!left.creationDate || left.creationDate < right.creationDate) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
} else if (this.searchUtils.sortBy == 'creationdate,ascending') {
|
||||
this.results.sort((left, right): number => {
|
||||
if (!right.creationDate || left.creationDate > right.creationDate) {
|
||||
return 1;
|
||||
} else if (!left.creationDate || left.creationDate < right.creationDate) {
|
||||
return -1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Search Stakeholder filters.
|
||||
*
|
||||
*/
|
||||
private createFilters(): Filter[] {
|
||||
let filter_names = [];
|
||||
let filter_ids = [];
|
||||
let value_names = [];
|
||||
let value_original_ids = [];
|
||||
filter_names.push("Type");
|
||||
filter_ids.push("type");
|
||||
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) {
|
||||
value_names.push(["Public", "Restricted"]);
|
||||
value_original_ids.push(["public", "restricted"]);
|
||||
} else {
|
||||
value_names.push(["Public", "Restricted", "Private"]);
|
||||
value_original_ids.push(["public", "restricted", "private"]);
|
||||
filter_names.push("Role");
|
||||
filter_ids.push("role");
|
||||
value_names.push(["Manager", "Member"]);
|
||||
value_original_ids.push(["manager", "member"]);
|
||||
}
|
||||
let filters: Filter[] = [];
|
||||
for (let i = 0; i < filter_names.length; i++) {
|
||||
let values: Value[] = [];
|
||||
for (let j = 0; j < value_names[i].length; j++) {
|
||||
let value: Value = {name: value_names[i][j], id: value_original_ids[i][j], number: 0, selected: false};
|
||||
values.push(value);
|
||||
}
|
||||
let filter: Filter = {
|
||||
title: filter_names[i],
|
||||
filterId: filter_ids[i],
|
||||
originalFilterId: this.refineFields[i],
|
||||
values: values,
|
||||
countSelectedValues: 0,
|
||||
filterOperator: 'or',
|
||||
valueIsExact: true,
|
||||
filterType: "checkbox"
|
||||
};
|
||||
filters.push(filter);
|
||||
}
|
||||
return filters;
|
||||
}
|
||||
|
||||
private handleError(message: string, error) {
|
||||
console.error('Communities Search Page: ' + message, error);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import {NgModule} from "@angular/core";
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {CommonModule, TitleCasePipe} from "@angular/common";
|
||||
import {FormsModule} from "@angular/forms";
|
||||
import {SearchStakeholdersComponent} from "./search-stakeholders.component";
|
||||
import {SearchFormModule} from "../openaireLibrary/searchPages/searchUtils/searchForm.module";
|
||||
|
@ -16,7 +16,7 @@ import {NewSearchPageModule} from "../openaireLibrary/searchPages/searchUtils/ne
|
|||
declarations: [
|
||||
SearchStakeholdersComponent
|
||||
],
|
||||
providers:[ PreviousRouteRecorder],
|
||||
providers:[ PreviousRouteRecorder, TitleCasePipe],
|
||||
exports: [
|
||||
SearchStakeholdersComponent
|
||||
]
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
import { NgModule, ModuleWithProviders } from '@angular/core';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { RouterModule } from '@angular/router';
|
||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||
|
||||
|
||||
const MODULES = [
|
||||
// Do NOT include UniversalModule, HttpModule, or JsonpModule here
|
||||
CommonModule,
|
||||
RouterModule,
|
||||
FormsModule,
|
||||
ReactiveFormsModule
|
||||
];
|
||||
|
||||
const PIPES = [
|
||||
// put pipes here
|
||||
];
|
||||
|
||||
const COMPONENTS = [
|
||||
// put shared components here
|
||||
];
|
||||
|
||||
|
||||
|
||||
@NgModule({
|
||||
imports: [
|
||||
...MODULES
|
||||
],
|
||||
declarations: [
|
||||
...PIPES,
|
||||
...COMPONENTS
|
||||
],
|
||||
exports: [
|
||||
...MODULES,
|
||||
...PIPES,
|
||||
...COMPONENTS
|
||||
]
|
||||
})
|
||||
export class SharedModule {
|
||||
static forRoot(): ModuleWithProviders<SharedModule> {
|
||||
return {
|
||||
ngModule: SharedModule,
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
<div class="uk-visible@m">
|
||||
<div class="uk-background-muted">
|
||||
<div class="uk-container uk-container-large uk-section uk-section-small">
|
||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||
</div>
|
||||
<div class="uk-flex uk-flex-middle" uk-scrollspy-class>
|
||||
<div class="uk-width-1-2 uk-margin-medium-bottom">
|
||||
<h1 class="uk-margin-medium-top">How can we help you?</h1>
|
||||
<div class="uk-margin-medium-bottom">Monitor expert support team is ready and excited to help.</div>
|
||||
<a routerLink="/contact-us" class="uk-button uk-button-primary">Contact Us</a>
|
||||
</div>
|
||||
<div class="uk-position-relative uk-width-1-2 uk-visible@l contact-us">
|
||||
<img class="uk-box-shadow-large one" src="../../assets/monitor-assets/curators/1.jpg">
|
||||
<img class="uk-box-shadow-large two" src="../../assets/monitor-assets/curators/2.jpg">
|
||||
<img class="uk-box-shadow-large three" src="../../assets/monitor-assets/curators/3.jpg">
|
||||
<img class="uk-box-shadow-large four" src="../../assets/monitor-assets/curators/4.jpg">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-large-top">
|
||||
<h3 class="uk-text-center">Frequently Asked Questions</h3>
|
||||
</div>
|
||||
<helper *ngIf="pageContents" [texts]="pageContents.top"></helper>
|
||||
</div>
|
||||
<div class="uk-hidden@m">
|
||||
<div class="uk-background-muted">
|
||||
<div class="uk-section-small uk-container uk-container-large">
|
||||
<div class="uk-text-center" uk-scrollspy-class>
|
||||
<h1 class="uk-margin-top">How can we help you?</h1>
|
||||
<div class="uk-margin-medium-bottom">Monitor expert support team is ready and excited to help.</div>
|
||||
<a routerLink="/contact-us" class="uk-button uk-button-small uk-button-primary">Contact Us</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-medium-top">
|
||||
<h3 class="uk-text-center">Frequently Asked Questions</h3>
|
||||
</div>
|
||||
<helper *ngIf="pageContents" [texts]="pageContents.top"></helper>
|
||||
</div>
|
|
@ -0,0 +1,44 @@
|
|||
@import (reference) "~../../assets/openaire-theme/less/_import-variables";
|
||||
|
||||
@faqs-curator-image-size: 136px;
|
||||
@faqs-contact-us-height: 450px;
|
||||
|
||||
.contact-us {
|
||||
height: @faqs-contact-us-height;
|
||||
|
||||
img {
|
||||
position: absolute;
|
||||
width: @faqs-curator-image-size;
|
||||
height: @faqs-curator-image-size;
|
||||
object-fit: cover;
|
||||
border-radius: 18px;
|
||||
|
||||
|
||||
&.one {
|
||||
top: @global-medium-gutter;
|
||||
right: @global-medium-gutter + (@faqs-curator-image-size/2);
|
||||
transform: rotate(10deg);
|
||||
}
|
||||
|
||||
&.two {
|
||||
bottom: @global-medium-gutter;
|
||||
right: @global-medium-gutter + (@faqs-curator-image-size);
|
||||
transform: rotate(-10deg);
|
||||
object-position: top;
|
||||
}
|
||||
|
||||
&.three {
|
||||
top: 0;
|
||||
left: @global-medium-gutter + (@faqs-curator-image-size);
|
||||
transform: rotate(-10deg);
|
||||
object-position: -60px;
|
||||
}
|
||||
|
||||
&.four {
|
||||
bottom: 2*@global-medium-gutter;
|
||||
left: 2*@global-medium-gutter;
|
||||
transform: rotate(-10deg);
|
||||
object-position: 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,21 +7,24 @@ import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
|
|||
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
|
||||
import {properties} from "../../environments/environment";
|
||||
import {Subscriber} from "rxjs";
|
||||
import {Breadcrumb} from '../openaireLibrary/utils/breadcrumbs/breadcrumbs.component';
|
||||
|
||||
@Component({
|
||||
selector: 'learn-how',
|
||||
styleUrls: ['learn-how.component.css'],
|
||||
templateUrl: 'learn-how.component.html',
|
||||
selector: 'support',
|
||||
templateUrl: 'support.component.html',
|
||||
styleUrls: ['support.component.less']
|
||||
})
|
||||
export class LearnHowComponent {
|
||||
export class SupportComponent {
|
||||
public pageContents = null;
|
||||
public divContents = null;
|
||||
|
||||
public url: string = null;
|
||||
public pageTitle: string = "OpenAIRE - Monitor | Learn How";
|
||||
public description: string = "Learn the process: Use the Monitor Dashboard to view your research results, open science. See how it works. Simplify research tracking & monitoring ";
|
||||
properties: EnvProperties;
|
||||
public pageTitle: string = "OpenAIRE - Monitor | Support";
|
||||
public description: string = "OpenAIRE - Monitor | Support";
|
||||
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Support'}];
|
||||
public properties: EnvProperties = properties;
|
||||
subscriptions = [];
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private _router: Router,
|
||||
|
@ -33,19 +36,14 @@ export class LearnHowComponent {
|
|||
}
|
||||
|
||||
public ngOnInit() {
|
||||
|
||||
this.properties = properties;
|
||||
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle, this.properties.piwikSiteId).subscribe());
|
||||
}
|
||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||
this.url = this.properties.domain + this.properties.baseLink + this._router.url;
|
||||
this.seoService.createLinkForCanonicalURL(this.url);
|
||||
this.updateUrl(this.url);
|
||||
this.updateTitle(this.pageTitle);
|
||||
this.updateDescription("OpenAIRE - Monitor, Funders, Statistics, EC - Learn How");``
|
||||
this.updateDescription(this.description);
|
||||
//this.getDivContents();
|
||||
//this.getPageContents();
|
||||
|
||||
this.getPageContents();
|
||||
}
|
||||
|
||||
private getPageContents() {
|
|
@ -0,0 +1,22 @@
|
|||
import {CommonModule} from "@angular/common";
|
||||
import {NgModule} from "@angular/core";
|
||||
import {RouterModule} from "@angular/router";
|
||||
import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard";
|
||||
import {SupportComponent} from "./support.component";
|
||||
import {BreadcrumbsModule} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.module";
|
||||
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
|
||||
import {HelperModule} from "../openaireLibrary/utils/helper/helper.module";
|
||||
|
||||
@NgModule({
|
||||
declarations: [SupportComponent],
|
||||
imports: [CommonModule, RouterModule.forChild([
|
||||
{
|
||||
path: '',
|
||||
component: SupportComponent,
|
||||
data: {extraOffset: 50}
|
||||
}
|
||||
]), BreadcrumbsModule, HelperModule],
|
||||
exports: [SupportComponent],
|
||||
providers: [PreviousRouteRecorder, PiwikService]
|
||||
})
|
||||
export class SupportModule {}
|
|
@ -1 +1 @@
|
|||
Subproject commit 443ef4d544d370c698ed0856481b71e489a044d8
|
||||
Subproject commit e77e591bbb8264895adb9934210844e70f01e219
|
|
@ -1,6 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="95.647" height="60.692" viewBox="0 0 95.647 60.692">
|
||||
<g id="Group_905" data-name="Group 905" transform="translate(70.298 97.482) rotate(-161)">
|
||||
<path id="Path_2339" data-name="Path 2339" d="M87.648,29.439C24.781,46.54,24.677-5.5,39.79.481,53.326,5.835,44.623,25.816,0,17.558" transform="translate(-0.02 39.459)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
|
||||
<path id="Path_2366" data-name="Path 2366" d="M0,0,2.814,1.387l-.607,3.29" transform="translate(-3.724 59.204) rotate(-150)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 625 B |
|
@ -1,6 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="96.457" height="61.415" viewBox="0 0 96.457 61.415">
|
||||
<g id="Group_906" data-name="Group 906" transform="translate(59.107 54.14) rotate(-152)">
|
||||
<path id="Path_2339" data-name="Path 2339" d="M67.968,21.473c-54.526,13.788-31.41-33.246-25.4-10.629C47.607,28.611.938-12.841-23.762,21.873" transform="translate(1.017 0)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="6"/>
|
||||
<path id="Path_55797" data-name="Path 55797" d="M0,0,3.3,1.628,2.591,5.49" transform="matrix(-0.921, 0.391, -0.391, -0.921, -22.719, 28.548)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 645 B |
|
@ -1,11 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="103.827" height="153.958" viewBox="0 0 103.827 153.958">
|
||||
<g id="Group_2401" data-name="Group 2401" transform="translate(-1318.198 -779.424) rotate(-20)">
|
||||
<g id="Group_1141" data-name="Group 1141" transform="matrix(-0.174, 0.985, -0.985, -0.174, 1046.902, 1211.049)">
|
||||
<path id="Path_2339" data-name="Path 2339" d="M135.26,80.668C60.034-45.855,6.029,11.188,0,23.336" transform="translate(0 0)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
|
||||
</g>
|
||||
<g id="Group_1142" data-name="Group 1142" transform="translate(936.789 1330.947) rotate(-43)">
|
||||
<line id="Line_345" data-name="Line 345" x1="1.778" y1="4.377" transform="translate(0.089 1.532)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
<line id="Line_346" data-name="Line 346" x2="2.189" y2="3.556" transform="translate(0 2.189) rotate(-90)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 963 B |
|
@ -1,9 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="117.496" height="64.012" viewBox="0 0 117.496 64.012">
|
||||
<g id="Group_1143" data-name="Group 1143" transform="translate(55.846 -4.676) rotate(-19)">
|
||||
<path id="Path_2339" data-name="Path 2339" d="M33.748,7.2C7.979,32.136-55.782,25.421-38.011,8.591-20.191-7.271-28.973,53.122-80.2,26.067" transform="translate(13.972 16.105)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
|
||||
<g id="Group_1144" data-name="Group 1144" transform="translate(-69.001 39.672)">
|
||||
<line id="Line_345" data-name="Line 345" x1="2.651" y1="5.302" transform="translate(0.132 1.855)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
<line id="Line_346" data-name="Line 346" x2="2.651" y2="5.302" transform="translate(0 2.651) rotate(-90)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 864 B |
|
@ -1,11 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="107.525" height="69.445" viewBox="0 0 107.525 69.445">
|
||||
<g id="Group_11721" data-name="Group 11721" transform="translate(112.848 -39.172) rotate(56)">
|
||||
<g id="Group_1141" data-name="Group 1141" transform="matrix(-0.174, 0.985, -0.985, -0.174, 53.579, 43.214)">
|
||||
<path id="Path_2339" data-name="Path 2339" d="M96.963,31.663C43.036-18,4.322,4.391,0,9.159" transform="translate(0 0)" fill="none" stroke="#212121" stroke-width="1" stroke-dasharray="7"/>
|
||||
</g>
|
||||
<g id="Group_1142" data-name="Group 1142" transform="translate(-0.484 133.795) rotate(-43)">
|
||||
<line id="Line_345" data-name="Line 345" x1="1.663" y1="4.095" transform="translate(0.083 1.433)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
<line id="Line_346" data-name="Line 346" x2="2.048" y2="3.327" transform="translate(0 2.048) rotate(-90)" fill="none" stroke="#212121" stroke-width="1"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 947 B |
After Width: | Height: | Size: 179 KiB |
|
@ -0,0 +1,99 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="632.213" height="519.857" viewBox="0 0 632.213 519.857">
|
||||
<defs>
|
||||
<filter id="dark" x="312.065" y="348.286" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-2" x="119.861" y="0" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-2"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-2"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-3" x="23.937" y="225.984" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-3"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-3"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-4" x="266.709" y="50.667" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-4"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-4"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-5" x="407.988" y="122.304" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-5"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-5"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-6" x="166.589" y="286.537" width="171.572" height="171.572" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-6"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-6"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Group_14281" data-name="Group 14281" transform="matrix(0.985, 0.174, -0.174, 0.985, -733.479, -286.153)">
|
||||
<g id="Group_12983" data-name="Group 12983" transform="translate(877.932 158.215) rotate(13)">
|
||||
<path id="Path_104359" data-name="Path 104359" d="M19.757,27.133S166.609,0,290.143,0s305.85,5.749,277.5,40.262S204.069,143.135,204.069,143.135-75.4,210.955,19.757,242.683s547.888,0,547.888,0" transform="translate(0 0)" fill="none" stroke="#dedede" stroke-width="5"/>
|
||||
<g id="Group_12980" data-name="Group 12980" transform="translate(375.294 219.485)">
|
||||
<g id="Group_12847" data-name="Group 12847" transform="translate(0 0)">
|
||||
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -479.34, -199.34)" filter="url(#dark)">
|
||||
<rect id="dark-7" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 363.34, 370.79)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12979" data-name="Group 12979" transform="translate(944.471 146.878) rotate(13)">
|
||||
<g id="Group_12847-2" data-name="Group 12847" transform="translate(0 0)">
|
||||
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -166.33, 46.16)" filter="url(#dark-2)">
|
||||
<rect id="dark-8" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 171.14, 22.5)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-2" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12982" data-name="Group 12982" transform="translate(889.246 386.086) rotate(13)">
|
||||
<g id="Group_12847-3" data-name="Group 12847" transform="translate(0 0)">
|
||||
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -166.33, -199.34)" filter="url(#dark-3)">
|
||||
<rect id="dark-9" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 75.21, 248.48)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-3" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12977" data-name="Group 12977" transform="translate(1097.886 171.275) rotate(13)">
|
||||
<g id="Group_12847-4" data-name="Group 12847" transform="translate(0 0)">
|
||||
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -321.3, 56.9)" filter="url(#dark-4)">
|
||||
<rect id="dark-10" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 317.99, 73.17)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-4" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12978" data-name="Group 12978" transform="translate(1249.459 217.291) rotate(13)">
|
||||
<g id="Group_12847-5" data-name="Group 12847" transform="translate(0 0)">
|
||||
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -479.34, 46.16)" filter="url(#dark-5)">
|
||||
<rect id="dark-11" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 459.27, 144.8)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-5" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12981" data-name="Group 12981" transform="translate(1040.246 420.948) rotate(13)">
|
||||
<g id="Group_12847-6" data-name="Group 12847" transform="translate(0 0)">
|
||||
<g transform="matrix(0.92, -0.39, 0.39, 0.92, -321.3, -199.34)" filter="url(#dark-6)">
|
||||
<rect id="dark-12" data-name="dark" width="73.649" height="73.649" rx="36.825" transform="matrix(0.92, 0.39, -0.39, 0.92, 217.87, 309.04)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-6" data-name="neutral" width="73.649" height="73.649" rx="36.825" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.2 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 230.46 231.21"><defs><style>.cls-1{fill:#e0e0e0;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><g id="Layer_2-2" data-name="Layer 2-2"><g id="Layer_1-2-2" data-name="Layer 1-2-2"><path class="cls-1" d="M200.49,115.56A64.68,64.68,0,0,1,176.8,120a46.06,46.06,0,0,1-6.55-.31A70.26,70.26,0,1,1,90.08,61a71.42,71.42,0,0,1,10.74-.82,69.75,69.75,0,0,1,11.27.92q-.28-3-.28-6.13a64.92,64.92,0,0,1,4.6-24,97.65,97.65,0,0,0-15.56-1.23A100.79,100.79,0,1,0,201.57,130.48v0a98.63,98.63,0,0,0-1.11-15Zm-32.68-6.36a53.06,53.06,0,0,0,9,.77,55,55,0,0,0,21.69-4.48,100.5,100.5,0,0,0-16.29-34.4v3.46a5.38,5.38,0,0,1-10.74.63,2.22,2.22,0,0,1,0-.63V59.81H156.72a4.86,4.86,0,1,1,0-9.72h5.08A101,101,0,0,0,126.67,33a54.33,54.33,0,0,0-4.6,22,49,49,0,0,0,.57,8.55,70.57,70.57,0,0,1,45.17,45.64Z"/><path class="cls-1" d="M176.8,0a55,55,0,0,0-50.35,33,54,54,0,0,0-4.6,22,49,49,0,0,0,.69,8.55,55.05,55.05,0,0,0,45.27,45.64,53,53,0,0,0,9,.76A55,55,0,0,0,176.8,0ZM197,59.81H182.2V74.52a5.38,5.38,0,0,1-10.74.63,2.22,2.22,0,0,1,0-.63V59.81H156.72a4.86,4.86,0,1,1,0-9.72h14.84V35.42a5.37,5.37,0,1,1,10.73-.64V50.09H197a4.86,4.86,0,0,1,0,9.72Z"/></g></g></g></g></svg>
|
After Width: | Height: | Size: 1.2 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 229.31 217.01"><defs><style>.cls-1{fill:#e0e0e0;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="129.5" cy="27.44" r="10.66"/><circle class="cls-1" cx="54.7" cy="80.97" r="7.66"/><circle class="cls-1" cx="202.92" cy="64.54" r="7.66"/><circle class="cls-1" cx="7.66" cy="153.55" r="7.66"/><circle class="cls-1" cx="86.21" cy="199.22" r="7.66"/><circle class="cls-1" cx="82.67" cy="140.04" r="4.09"/><circle class="cls-1" cx="225.44" cy="138.17" r="3.87"/><circle class="cls-1" cx="136.31" cy="211.34" r="4.34"/><circle class="cls-1" cx="61.34" cy="171.09" r="2.68"/><circle class="cls-1" cx="154.49" cy="72.12" r="3.99"/><circle class="cls-1" cx="19.05" cy="176.68" r="2.36"/><circle class="cls-1" cx="70.19" cy="77.74" r="2.06"/><circle class="cls-1" cx="137.94" cy="4.54" r="4.54"/><path class="cls-1" d="M86.77,200.12,7,153.72,54.41,80.56l74.49-53,.13-.32,8.44-22.87.94.35-8.35,22.62,73.28,36.85L225.92,138l-1,.29L202.51,64.89,129.69,28.27,83.18,140.12ZM8.37,153.38l77.29,44.94L82.17,140l0-.1,46-110.54-73.11,52Z"/><polygon class="cls-1" points="7.75 154.04 7.57 153.06 81.94 139.66 54.25 81.19 55.15 80.76 83.41 140.41 82.76 140.53 7.75 154.04"/><polygon class="cls-1" points="154.22 72.66 129.06 27.68 129.93 27.19 154.75 71.57 202.85 64.05 203 65.04 154.22 72.66"/><rect class="cls-1" x="18.86" y="173.38" width="42.66" height="1" transform="translate(-22.39 6.75) rotate(-7.51)"/><polygon class="cls-1" points="136.19 211.83 88.85 200.38 113.86 216.98 113.84 217.01 112.09 217.01 83.57 198.07 136.42 210.86 136.19 211.83"/></g></g></svg>
|
After Width: | Height: | Size: 1.6 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 257.04 125.21"><defs><style>.cls-1{fill:#e0e0e0;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M67,125.21H25.49L.2,25.47a6.44,6.44,0,0,1,4.66-7.83l26.51-6.72a6.45,6.45,0,0,1,7.82,4.66Z"/><path class="cls-1" d="M131.38,125.21H89.87L75.69,69.28a6.44,6.44,0,0,1,4.66-7.83l26.51-6.72a6.44,6.44,0,0,1,7.83,4.66Z"/><path class="cls-1" d="M195.06,125.21h-41.5l-28-110.46a6.43,6.43,0,0,1,4.66-7.82L156.72.2a6.45,6.45,0,0,1,7.83,4.67Z"/><path class="cls-1" d="M257,125.21H215.55l-11.7-46.15a6.43,6.43,0,0,1,4.66-7.82L235,64.52a6.43,6.43,0,0,1,7.82,4.66Z"/></g></g></svg>
|
After Width: | Height: | Size: 680 B |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 162 KiB |
After Width: | Height: | Size: 1.0 MiB |
After Width: | Height: | Size: 2.6 MiB |
After Width: | Height: | Size: 303 KiB |
|
@ -0,0 +1,7 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="152.064" height="298.117" viewBox="0 0 152.064 298.117">
|
||||
<g id="Group_13811" data-name="Group 13811" transform="translate(-311 -600)">
|
||||
<g id="Group_13810" data-name="Group 13810" transform="translate(311 600)" style="isolation: isolate">
|
||||
<path id="Path_104582" data-name="Path 104582" d="M103.163-138h-28.3c-15.812,0-30.793,4.161-46.189,12.9L-37.9-85.57v54.095L45.739-77.664V149.117h57.424V-138Z" transform="translate(37.9 138)" fill="#3086ed"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 528 B |
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="219.715" height="298.559" viewBox="0 0 219.715 298.559">
|
||||
<g id="Group_13812" data-name="Group 13812" transform="translate(-767.284 -600)">
|
||||
<path id="Path_104612" data-name="Path 104612" d="M35.232,101.726,87.361,50.819C138.675.726,156.187-24.524,156.187-59.956,156.187-108.012,123.607-141,61.7-141-1.422-141-38.889-108.012-44.591-47.738L-45-43.665H10.8l.407-4.073c3.665-33.8,17.1-51.315,45.206-51.315,26.065,0,40.319,17.512,40.319,42.355,0,26.879-15.069,46.835-52.944,83.9L-50.7,119.645v26.472H154.151V101.726Z" transform="translate(817.984 741)" fill="#3086ed"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 631 B |
|
@ -0,0 +1,159 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="418.875" height="364.357" viewBox="0 0 418.875 364.357">
|
||||
<defs>
|
||||
<filter id="dark" x="228.772" y="231.79" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="light" x="198.772" y="201.79" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-2"/>
|
||||
<feFlood flood-color="#fff"/>
|
||||
<feComposite operator="in" in2="blur-2"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-2" x="65.992" y="30" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-3"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-3"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="light-2" x="35.992" y="0" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-4"/>
|
||||
<feFlood flood-color="#fff"/>
|
||||
<feComposite operator="in" in2="blur-4"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-3" x="30" y="185.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-5"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-5"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="light-3" x="0" y="155.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-6"/>
|
||||
<feFlood flood-color="#fff"/>
|
||||
<feComposite operator="in" in2="blur-6"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-4" x="165.979" y="45.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-7"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-7"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="light-4" x="135.979" y="15.9" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-8"/>
|
||||
<feFlood flood-color="#fff"/>
|
||||
<feComposite operator="in" in2="blur-8"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-5" x="264.764" y="75.891" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-9"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-9"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="light-5" x="234.764" y="45.891" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-10"/>
|
||||
<feFlood flood-color="#fff"/>
|
||||
<feComposite operator="in" in2="blur-10"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="dark-6" x="128.412" y="208.621" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="15" dy="15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-11"/>
|
||||
<feFlood flood-opacity="0.102"/>
|
||||
<feComposite operator="in" in2="blur-11"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="light-6" x="98.412" y="178.621" width="132.567" height="132.567" filterUnits="userSpaceOnUse">
|
||||
<feOffset dx="-15" dy="-15" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="12.5" result="blur-12"/>
|
||||
<feFlood flood-color="#fff"/>
|
||||
<feComposite operator="in" in2="blur-12"/>
|
||||
<feComposite in="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Group_13415" data-name="Group 13415" transform="translate(-799.043 -94.379)">
|
||||
<g id="Group_12983" data-name="Group 12983" transform="translate(86.549 -222.191) rotate(13)">
|
||||
<path id="Path_104359" data-name="Path 104359" d="M-18163.937-17731.363s95.709-17.684,176.221-17.684,199.334,3.746,180.857,26.24-236.955,67.047-236.955,67.047-182.137,44.2-120.123,64.879,357.078,0,357.078,0" transform="translate(19010.223 17943)" fill="none" stroke="#dedede" stroke-width="1"/>
|
||||
<g id="Group_12980" data-name="Group 12980" transform="translate(931.002 -818)">
|
||||
<g id="Group_12847" data-name="Group 12847" transform="translate(147 1155)">
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -188.82)" filter="url(#dark)">
|
||||
<rect id="dark-7" data-name="dark" width="48" height="48" rx="24" transform="translate(262.07 254.29) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -188.82)" filter="url(#light)">
|
||||
<rect id="light-7" data-name="light" width="48" height="48" rx="24" transform="translate(262.07 254.29) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12979" data-name="Group 12979" transform="translate(1014.92 -1011.586) rotate(13)">
|
||||
<g id="Group_12847-2" data-name="Group 12847" transform="translate(147 1155)">
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -28.82)" filter="url(#dark-2)">
|
||||
<rect id="dark-8" data-name="dark" width="48" height="48" rx="24" transform="translate(99.29 52.5) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -28.82)" filter="url(#light-2)">
|
||||
<rect id="light-8" data-name="light" width="48" height="48" rx="24" transform="translate(99.29 52.5) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-2" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12982" data-name="Group 12982" transform="translate(978.928 -855.686) rotate(13)">
|
||||
<g id="Group_12847-3" data-name="Group 12847" transform="translate(147 1155)">
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -188.82)" filter="url(#dark-3)">
|
||||
<rect id="dark-9" data-name="dark" width="48" height="48" rx="24" transform="translate(63.3 208.4) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -108.56, -188.82)" filter="url(#light-3)">
|
||||
<rect id="light-9" data-name="light" width="48" height="48" rx="24" transform="translate(63.3 208.4) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-3" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12977" data-name="Group 12977" transform="translate(1114.906 -995.686) rotate(13)">
|
||||
<g id="Group_12847-4" data-name="Group 12847" transform="translate(147 1155)">
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -21.82)" filter="url(#dark-4)">
|
||||
<rect id="dark-10" data-name="dark" width="48" height="48" rx="24" transform="translate(199.28 68.4) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -21.82)" filter="url(#light-4)">
|
||||
<rect id="light-10" data-name="light" width="48" height="48" rx="24" transform="translate(199.28 68.4) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-4" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12978" data-name="Group 12978" transform="translate(1213.691 -965.695) rotate(13)">
|
||||
<g id="Group_12847-5" data-name="Group 12847" transform="translate(147 1155)">
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -28.82)" filter="url(#dark-5)">
|
||||
<rect id="dark-11" data-name="dark" width="48" height="48" rx="24" transform="translate(298.06 98.39) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -312.56, -28.82)" filter="url(#light-5)">
|
||||
<rect id="light-11" data-name="light" width="48" height="48" rx="24" transform="translate(298.06 98.39) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-5" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Group_12981" data-name="Group 12981" transform="translate(1077.34 -832.965) rotate(13)">
|
||||
<g id="Group_12847-6" data-name="Group 12847" transform="translate(147 1155)">
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -188.82)" filter="url(#dark-6)">
|
||||
<rect id="dark-12" data-name="dark" width="48" height="48" rx="24" transform="translate(161.71 231.12) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<g transform="matrix(0.97, -0.22, 0.22, 0.97, -209.56, -188.82)" filter="url(#light-6)">
|
||||
<rect id="light-12" data-name="light" width="48" height="48" rx="24" transform="translate(161.71 231.12) rotate(13)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
<rect id="neutral-6" data-name="neutral" width="48" height="48" rx="24" transform="translate(-0.001 -0.001)" fill="#f9f9f9"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
|
@ -1,14 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="891.972" height="404" viewBox="0 0 891.972 404">
|
||||
<g id="Group_11723" data-name="Group 11723" transform="translate(-250 -759)">
|
||||
<g id="Group_3098" data-name="Group 3098" transform="translate(-80 574.953)">
|
||||
<path id="Path_16420" data-name="Path 16420" d="M338.05,210.66l-18.6,6.887-19.11,7.078-33.015,12.223-9.235,3.424-19.136,7.084" transform="translate(855.417 86.511)" fill="none" stroke="#09091e" stroke-miterlimit="10" stroke-width="3"/>
|
||||
<path id="Path_17201" data-name="Path 17201" d="M131.762,0,107.036,22.093,81.626,44.8l-43.9,39.214L25.446,95,0,117.726" transform="translate(1057.45 316.813) rotate(-20)" fill="none" stroke="#09091e" stroke-miterlimit="10" stroke-width="1"/>
|
||||
<path id="Path_17202" data-name="Path 17202" d="M110.125,0,89.459,18.465,68.221,37.444,31.53,70.218,21.267,79.4,0,98.393" transform="translate(1122.86 315.774) rotate(50)" fill="none" stroke="#09091e" stroke-miterlimit="10" stroke-width="1"/>
|
||||
</g>
|
||||
<circle id="Ellipse_360" data-name="Ellipse 360" cx="124" cy="124" r="124" transform="translate(250 759)" fill="#8bcc00" opacity="0.5"/>
|
||||
<g id="Ellipse_372" data-name="Ellipse 372" transform="translate(906 984)" fill="none" stroke="#4687e6" stroke-width="1">
|
||||
<circle cx="89.5" cy="89.5" r="89.5" stroke="none"/>
|
||||
<circle cx="89.5" cy="89.5" r="89" fill="none"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 288 KiB |
Before Width: | Height: | Size: 448 KiB |
|
@ -1,6 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="1367" height="393.812" viewBox="0 0 1367 393.812">
|
||||
<g id="Group_11724" data-name="Group 11724" transform="translate(1 -2386)">
|
||||
<path id="Path_2342" data-name="Path 2342" d="M1366-68.381S1070.67-131.445,608.9-142.3C354.509-148.279-.867-68.381-.867-68.381V190.035s538.452,102.97,836.881,41.69c286.66-60.522,529.986,0,529.986,0Z" transform="translate(-0.133 2528.619)" fill="#eff3f8"/>
|
||||
<path id="Path_2356" data-name="Path 2356" d="M-.867,176.956s295.142,63.063,756.615,73.918c254.234,5.98,609.385-73.918,609.385-73.918V-81.46s-538.111-102.97-836.35-41.69c-286.478,60.522-529.65,0-529.65,0Z" transform="translate(0.867 2528.619)" fill="#eff3f8" opacity="0.499"/>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 731 B |
After Width: | Height: | Size: 158 KiB |
Before Width: | Height: | Size: 177 KiB |
After Width: | Height: | Size: 566 KiB |
After Width: | Height: | Size: 2.0 MiB |
After Width: | Height: | Size: 553 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 677.14 1140.24"><defs><style>.cls-1{fill:#fff;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><g id="Layer_2-2" data-name="Layer 2"><g id="Layer_1-2-2" data-name="Layer 1-2"><path class="cls-1" d="M0,0V1140.24H677.14V0ZM610.28,223,486.33,650l-80.56-23.4,124-427Zm23.35,290.67L580.34,697.23l-80.55-23.38L553.07,490.3ZM452,384.54l-123.94,427L247.52,788.1l124-426.95Zm-169.26-119,80.57,23.39L328.07,410.36,247.51,387Zm35.93,177.17L239.38,715.86l-80.56-23.39,79.3-273.17ZM207,436.4,116,749.91,35.39,726.52,126.4,413ZM509.68,940.64l-80.55-23.39L490.4,706.17,571,729.56Z"/></g></g></g></g></svg>
|
After Width: | Height: | Size: 684 B |
|
@ -0,0 +1,426 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="955.582" height="215.812" viewBox="0 0 955.582 215.812">
|
||||
<defs>
|
||||
<filter id="Path_104565">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur"/>
|
||||
<feFlood flood-opacity="0.302" result="color"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur"/>
|
||||
<feComposite operator="in" in="color"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104566">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-2"/>
|
||||
<feFlood flood-opacity="0.302" result="color-2"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-2"/>
|
||||
<feComposite operator="in" in="color-2"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104567">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-3"/>
|
||||
<feFlood flood-opacity="0.302" result="color-3"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-3"/>
|
||||
<feComposite operator="in" in="color-3"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Rectangle_2960">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-4"/>
|
||||
<feFlood flood-opacity="0.302" result="color-4"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-4"/>
|
||||
<feComposite operator="in" in="color-4"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104568">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-5"/>
|
||||
<feFlood flood-opacity="0.302" result="color-5"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-5"/>
|
||||
<feComposite operator="in" in="color-5"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104569">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-6"/>
|
||||
<feFlood flood-opacity="0.302" result="color-6"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-6"/>
|
||||
<feComposite operator="in" in="color-6"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104570">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-7"/>
|
||||
<feFlood flood-opacity="0.302" result="color-7"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-7"/>
|
||||
<feComposite operator="in" in="color-7"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104571">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-8"/>
|
||||
<feFlood flood-opacity="0.302" result="color-8"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-8"/>
|
||||
<feComposite operator="in" in="color-8"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104572">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-9"/>
|
||||
<feFlood flood-opacity="0.302" result="color-9"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-9"/>
|
||||
<feComposite operator="in" in="color-9"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104573">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-10"/>
|
||||
<feFlood flood-opacity="0.302" result="color-10"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-10"/>
|
||||
<feComposite operator="in" in="color-10"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104574">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-11"/>
|
||||
<feFlood flood-opacity="0.302" result="color-11"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-11"/>
|
||||
<feComposite operator="in" in="color-11"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104575">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-12"/>
|
||||
<feFlood flood-opacity="0.302" result="color-12"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-12"/>
|
||||
<feComposite operator="in" in="color-12"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104576">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-13"/>
|
||||
<feFlood flood-opacity="0.302" result="color-13"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-13"/>
|
||||
<feComposite operator="in" in="color-13"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104577">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-14"/>
|
||||
<feFlood flood-opacity="0.302" result="color-14"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-14"/>
|
||||
<feComposite operator="in" in="color-14"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104578">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-15"/>
|
||||
<feFlood flood-opacity="0.302" result="color-15"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-15"/>
|
||||
<feComposite operator="in" in="color-15"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104579">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-16"/>
|
||||
<feFlood flood-opacity="0.302" result="color-16"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-16"/>
|
||||
<feComposite operator="in" in="color-16"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104580">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-17"/>
|
||||
<feFlood flood-opacity="0.302" result="color-17"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-17"/>
|
||||
<feComposite operator="in" in="color-17"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104581">
|
||||
<feOffset dx="1" dy="1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-18"/>
|
||||
<feFlood flood-opacity="0.302" result="color-18"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-18"/>
|
||||
<feComposite operator="in" in="color-18"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104565-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-19"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-19"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-19"/>
|
||||
<feComposite operator="in" in="color-19"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104566-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-20"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-20"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-20"/>
|
||||
<feComposite operator="in" in="color-20"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104567-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-21"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-21"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-21"/>
|
||||
<feComposite operator="in" in="color-21"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Rectangle_2960-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-22"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-22"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-22"/>
|
||||
<feComposite operator="in" in="color-22"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104568-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-23"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-23"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-23"/>
|
||||
<feComposite operator="in" in="color-23"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104569-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-24"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-24"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-24"/>
|
||||
<feComposite operator="in" in="color-24"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104570-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-25"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-25"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-25"/>
|
||||
<feComposite operator="in" in="color-25"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104571-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-26"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-26"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-26"/>
|
||||
<feComposite operator="in" in="color-26"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104572-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-27"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-27"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-27"/>
|
||||
<feComposite operator="in" in="color-27"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104573-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-28"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-28"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-28"/>
|
||||
<feComposite operator="in" in="color-28"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104574-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-29"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-29"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-29"/>
|
||||
<feComposite operator="in" in="color-29"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104575-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-30"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-30"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-30"/>
|
||||
<feComposite operator="in" in="color-30"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104576-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-31"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-31"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-31"/>
|
||||
<feComposite operator="in" in="color-31"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104577-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-32"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-32"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-32"/>
|
||||
<feComposite operator="in" in="color-32"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104578-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-33"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-33"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-33"/>
|
||||
<feComposite operator="in" in="color-33"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104579-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-34"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-34"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-34"/>
|
||||
<feComposite operator="in" in="color-34"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104580-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-35"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-35"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-35"/>
|
||||
<feComposite operator="in" in="color-35"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
<filter id="Path_104581-2">
|
||||
<feOffset dx="-1" dy="-1" input="SourceAlpha"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="blur-36"/>
|
||||
<feFlood flood-color="#727272" flood-opacity="0.4" result="color-36"/>
|
||||
<feComposite operator="out" in="SourceGraphic" in2="blur-36"/>
|
||||
<feComposite operator="in" in="color-36"/>
|
||||
<feComposite operator="in" in2="SourceGraphic"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g id="Group_13397" data-name="Group 13397" transform="translate(24202 16582.441)" opacity="0.4">
|
||||
<g id="Group_13397-2" data-name="Group 13397" transform="translate(-24202 -16582.441)">
|
||||
<path id="Path_104565-3" data-name="Path 104565" d="M302.219,78.851,291.25,51.59H277.78V96.728h9.582V65.184l12.752,31.545H304.3L317.05,65.184V96.728h9.657V51.59H313.163Z" transform="translate(374.139 47.526)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104566-3" data-name="Path 104566" d="M323.833,51.3a22.656,22.656,0,0,0-23.547,23.324A23.6,23.6,0,1,0,323.833,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856,13.742,6.363,13.742,14.856S332.178,89.481,323.833,89.481Z" transform="translate(407.344 47.073)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104567-3" data-name="Path 104567" d="M352.946,79.941,331.9,51.59h-9.83V96.728H331.7V67.288l21.517,29.44h9.335V51.59h-9.607Z" transform="translate(439.514 47.526)" fill="#56a601" opacity="0.2"/>
|
||||
<rect id="Rectangle_2960-3" data-name="Rectangle 2960" width="9.533" height="45.163" transform="translate(810.955 99.092)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104568-3" data-name="Path 104568" d="M348.38,60.033h13.2v36.7h9.681v-36.7h13.123V51.59h-36Z" transform="translate(478.348 47.526)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104569-3" data-name="Path 104569" d="M387.157,51.3a23.349,23.349,0,1,0,23.622,23.324A22.656,22.656,0,0,0,387.157,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856S400.9,66.134,400.9,74.627,395.476,89.483,387.157,89.483Z" transform="translate(501.522 47.071)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104570-3" data-name="Path 104570" d="M411.986,79.559a12.95,12.95,0,0,0,9.9-13.4c0-8.394-5.744-14.584-15.153-14.584H385.69V96.743h9.632V80.7h7.007l8.889,16.045h10.944Zm-6.636-7.428H395.272V60.048H405.35a6.116,6.116,0,1,1,0,12.182Z" transform="translate(533.42 47.512)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104571-3" data-name="Path 104571" d="M269.072,31.72a1.659,1.659,0,0,0-1.634,1.634V171.79a1.659,1.659,0,1,0,3.293,0V33.354A1.659,1.659,0,0,0,269.072,31.72Z" transform="translate(358.855 18.197)" fill="#56a601" opacity="0.2"/>
|
||||
<path id="Path_104572-3" data-name="Path 104572" d="M131.979,48.36c-18.447,0-30.629,14.262-30.629,31.3s12.232,31.248,30.629,31.248,30.629-14.237,30.629-31.248S150.45,48.36,131.979,48.36Zm0,54.671c-14.039,0-21.938-10.969-21.938-23.374s7.923-23.374,21.938-23.374,21.938,10.994,21.938,23.374S146.043,103.031,131.979,103.031Z" transform="translate(113.72 42.759)" fill="#303030"/>
|
||||
<path id="Path_104573-3" data-name="Path 104573" d="M150.98,56.863a16.317,16.317,0,0,0-14.287,7.775V61.245a4.11,4.11,0,0,0-4.16-4.036h-.371a3.937,3.937,0,0,0-3.615,4.234v49.249a4.259,4.259,0,1,0,8.518,0V90.562a16.193,16.193,0,0,0,14.014,7.8c10.424,0,18.942-8.22,18.942-20.749C169.922,65.628,161.4,56.863,150.98,56.863ZM149.247,91.3c-7.428,0-12.38-6.438-12.38-13.693s4.952-13.668,12.38-13.668h0c7.428,0,12.108,5.6,12.108,13.742S156.626,91.3,149.247,91.3Z" transform="translate(153.846 55.302)" fill="#303030"/>
|
||||
<path id="Path_104574-3" data-name="Path 104574" d="M166.938,56.851A19.982,19.982,0,0,0,146.659,77.6c0,11.316,7.156,20.749,20.65,20.749a21.591,21.591,0,0,0,16.119-6.636,3.739,3.739,0,0,0,1.089-2.476,3.516,3.516,0,0,0-3.491-3.516,4.135,4.135,0,0,0-2.823,1.387,14.015,14.015,0,0,1-10.5,4.432,11.39,11.39,0,0,1-12.38-10.969h27.113c2.476,0,3.244-1.436,3.244-2.9C185.78,66.112,178.352,56.876,166.938,56.851ZM155.622,73.763A11.241,11.241,0,0,1,166.938,63.71h0a11.043,11.043,0,0,1,10.969,10.078Z" transform="translate(180.576 55.289)" fill="#303030"/>
|
||||
<path id="Path_104575-3" data-name="Path 104575" d="M183.4,56.863h-.817A18.546,18.546,0,0,0,164.463,75.8V93.756a4.284,4.284,0,0,0,8.542,0V74.814a10.523,10.523,0,0,1,20.923,0V93.756a4.259,4.259,0,1,0,8.518,0V75.037A18.62,18.62,0,0,0,183.4,56.863Z" transform="translate(206.871 55.302)" fill="#303030"/>
|
||||
<path id="Path_104576-3" data-name="Path 104576" d="M215.825,51.451a4.655,4.655,0,0,0-4.7-2.922,4.779,4.779,0,0,0-4.729,2.922l-23.126,51.428a5.25,5.25,0,0,0-.545,2.179v.248a5.125,5.125,0,0,0,5.249,4.952,4.8,4.8,0,0,0,4.63-2.971l5.15-11.043h26.84l5.1,11.142a4.779,4.779,0,0,0,4.605,2.971h.248a5.125,5.125,0,0,0,4.952-5.249,4.729,4.729,0,0,0-.545-2.179ZM201.761,86.586l9.409-23.027L220.6,86.586Z" transform="translate(233.826 42.986)" fill="#303030"/>
|
||||
<path id="Path_104577-3" data-name="Path 104577" d="M212.971,48.52a5.67,5.67,0,0,0-5.621,5.621V104.7a5.621,5.621,0,0,0,5.621,5.6h0a5.5,5.5,0,0,0,5.4-5.6V54.091a5.522,5.522,0,0,0-5.4-5.571Z" transform="translate(270.181 42.995)" fill="#303030"/>
|
||||
<path id="Path_104578-3" data-name="Path 104578" d="M266.153,66.984c0-10.746-6.462-18.174-21.492-18.174H221.312a5.5,5.5,0,0,0-5.472,5.546v49.991a5.546,5.546,0,0,0,11.068,0V85.059h18.224L255.853,106.9a4.952,4.952,0,0,0,4.952,2.971h0a5.447,5.447,0,0,0,5.447-5.5,5.6,5.6,0,0,0-.668-2.476l-9.31-18.917a16.491,16.491,0,0,0,9.88-16Zm-11.192.768a8.27,8.27,0,0,1-8.74,7.8H226.933V58.987H246.2a7.973,7.973,0,0,1,8.79,8.047,6.953,6.953,0,0,1-.025.718Z" transform="translate(282.713 43.423)" fill="#303030"/>
|
||||
<path id="Path_104579-3" data-name="Path 104579" d="M278.916,98.779H250.293V83.551h23a5.076,5.076,0,0,0,5.076-4.952,5.15,5.15,0,0,0-5.076-5.274H250.368V59.038H277.6a5.249,5.249,0,0,0,5.249-5.176h0a5.125,5.125,0,0,0-5.249-4.952H244.846a5.571,5.571,0,0,0-5.6,5.546v49.15h0a5.546,5.546,0,0,0,5.621,5.5h34.145a5.125,5.125,0,0,0,5.15-5.1,5.249,5.249,0,0,0-5.249-5.224Z" transform="translate(317.267 43.569)" fill="#303030"/>
|
||||
<path id="Path_104580-3" data-name="Path 104580" d="M179.667,106.98q-3.046,0-6.091-.3A65.516,65.516,0,1,1,98.824,51.938a64.578,64.578,0,0,1,9.9-.768,65.319,65.319,0,0,1,10.523.842c-.173-1.882-.272-3.788-.272-5.72a60.638,60.638,0,0,1,4.308-22.433A94.1,94.1,0,1,0,202.67,116.81a96.566,96.566,0,0,0-1.015-13.891,60.688,60.688,0,0,1-21.987,4.061Z" transform="translate(-14.49 4.913)" fill="#303030"/>
|
||||
<path id="Path_104581-3" data-name="Path 104581" d="M111.754,11.56A51.329,51.329,0,0,0,60.5,62.814a49.091,49.091,0,0,0,.668,8.069,51.3,51.3,0,0,0,42.093,42.467,47.836,47.836,0,0,0,8.493.817,50.982,50.982,0,0,0,20.2-4.16,1.413,1.413,0,0,0,0-.347,51.254,51.254,0,0,0-20.2-98.1Zm18.719,55.785H116.781V81.038a5.035,5.035,0,0,1-7.552,4.63,5.175,5.175,0,0,1-1.956-2.1,4.952,4.952,0,0,1-.5-1.931,2.475,2.475,0,0,1,0-.594V67.345H93.06a4.531,4.531,0,0,1-4.531-4.531,4.482,4.482,0,0,1,4.407-4.531h13.841V44.591a4.961,4.961,0,1,1,9.9-.594V58.283h13.693a4.531,4.531,0,1,1,0,9.062Z" transform="translate(53.423 -11.56)" fill="#303030"/>
|
||||
</g>
|
||||
<g id="dark" transform="translate(-24202 -16582.441)">
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104565)">
|
||||
<path id="Path_104565-4" data-name="Path 104565" d="M302.219,78.851,291.25,51.59H277.78V96.728h9.582V65.184l12.752,31.545H304.3L317.05,65.184V96.728h9.657V51.59H313.163Z" transform="translate(374.14 47.53)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104566)">
|
||||
<path id="Path_104566-4" data-name="Path 104566" d="M323.833,51.3a22.656,22.656,0,0,0-23.547,23.324A23.6,23.6,0,1,0,323.833,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856,13.742,6.363,13.742,14.856S332.178,89.481,323.833,89.481Z" transform="translate(407.34 47.07)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104567)">
|
||||
<path id="Path_104567-4" data-name="Path 104567" d="M352.946,79.941,331.9,51.59h-9.83V96.728H331.7V67.288l21.517,29.44h9.335V51.59h-9.607Z" transform="translate(439.51 47.53)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Rectangle_2960)">
|
||||
<rect id="Rectangle_2960-4" data-name="Rectangle 2960" width="9.533" height="45.163" transform="translate(810.96 99.09)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104568)">
|
||||
<path id="Path_104568-4" data-name="Path 104568" d="M348.38,60.033h13.2v36.7h9.681v-36.7h13.123V51.59h-36Z" transform="translate(478.35 47.53)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104569)">
|
||||
<path id="Path_104569-4" data-name="Path 104569" d="M387.157,51.3a23.349,23.349,0,1,0,23.622,23.324A22.656,22.656,0,0,0,387.157,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856S400.9,66.134,400.9,74.627,395.476,89.483,387.157,89.483Z" transform="translate(501.52 47.07)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104570)">
|
||||
<path id="Path_104570-4" data-name="Path 104570" d="M411.986,79.559a12.95,12.95,0,0,0,9.9-13.4c0-8.394-5.744-14.584-15.153-14.584H385.69V96.743h9.632V80.7h7.007l8.889,16.045h10.944Zm-6.636-7.428H395.272V60.048H405.35a6.116,6.116,0,1,1,0,12.182Z" transform="translate(533.42 47.51)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104571)">
|
||||
<path id="Path_104571-4" data-name="Path 104571" d="M269.072,31.72a1.659,1.659,0,0,0-1.634,1.634V171.79a1.659,1.659,0,1,0,3.293,0V33.354A1.659,1.659,0,0,0,269.072,31.72Z" transform="translate(358.85 18.2)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104572)">
|
||||
<path id="Path_104572-4" data-name="Path 104572" d="M131.979,48.36c-18.447,0-30.629,14.262-30.629,31.3s12.232,31.248,30.629,31.248,30.629-14.237,30.629-31.248S150.45,48.36,131.979,48.36Zm0,54.671c-14.039,0-21.938-10.969-21.938-23.374s7.923-23.374,21.938-23.374,21.938,10.994,21.938,23.374S146.043,103.031,131.979,103.031Z" transform="translate(113.72 42.76)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104573)">
|
||||
<path id="Path_104573-4" data-name="Path 104573" d="M150.98,56.863a16.317,16.317,0,0,0-14.287,7.775V61.245a4.11,4.11,0,0,0-4.16-4.036h-.371a3.937,3.937,0,0,0-3.615,4.234v49.249a4.259,4.259,0,1,0,8.518,0V90.562a16.193,16.193,0,0,0,14.014,7.8c10.424,0,18.942-8.22,18.942-20.749C169.922,65.628,161.4,56.863,150.98,56.863ZM149.247,91.3c-7.428,0-12.38-6.438-12.38-13.693s4.952-13.668,12.38-13.668h0c7.428,0,12.108,5.6,12.108,13.742S156.626,91.3,149.247,91.3Z" transform="translate(153.85 55.3)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104574)">
|
||||
<path id="Path_104574-4" data-name="Path 104574" d="M166.938,56.851A19.982,19.982,0,0,0,146.659,77.6c0,11.316,7.156,20.749,20.65,20.749a21.591,21.591,0,0,0,16.119-6.636,3.739,3.739,0,0,0,1.089-2.476,3.516,3.516,0,0,0-3.491-3.516,4.135,4.135,0,0,0-2.823,1.387,14.015,14.015,0,0,1-10.5,4.432,11.39,11.39,0,0,1-12.38-10.969h27.113c2.476,0,3.244-1.436,3.244-2.9C185.78,66.112,178.352,56.876,166.938,56.851ZM155.622,73.763A11.241,11.241,0,0,1,166.938,63.71h0a11.043,11.043,0,0,1,10.969,10.078Z" transform="translate(180.58 55.29)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104575)">
|
||||
<path id="Path_104575-4" data-name="Path 104575" d="M183.4,56.863h-.817A18.546,18.546,0,0,0,164.463,75.8V93.756a4.284,4.284,0,0,0,8.542,0V74.814a10.523,10.523,0,0,1,20.923,0V93.756a4.259,4.259,0,1,0,8.518,0V75.037A18.62,18.62,0,0,0,183.4,56.863Z" transform="translate(206.87 55.3)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104576)">
|
||||
<path id="Path_104576-4" data-name="Path 104576" d="M215.825,51.451a4.655,4.655,0,0,0-4.7-2.922,4.779,4.779,0,0,0-4.729,2.922l-23.126,51.428a5.25,5.25,0,0,0-.545,2.179v.248a5.125,5.125,0,0,0,5.249,4.952,4.8,4.8,0,0,0,4.63-2.971l5.15-11.043h26.84l5.1,11.142a4.779,4.779,0,0,0,4.605,2.971h.248a5.125,5.125,0,0,0,4.952-5.249,4.729,4.729,0,0,0-.545-2.179ZM201.761,86.586l9.409-23.027L220.6,86.586Z" transform="translate(233.83 42.99)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104577)">
|
||||
<path id="Path_104577-4" data-name="Path 104577" d="M212.971,48.52a5.67,5.67,0,0,0-5.621,5.621V104.7a5.621,5.621,0,0,0,5.621,5.6h0a5.5,5.5,0,0,0,5.4-5.6V54.091a5.522,5.522,0,0,0-5.4-5.571Z" transform="translate(270.18 42.99)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104578)">
|
||||
<path id="Path_104578-4" data-name="Path 104578" d="M266.153,66.984c0-10.746-6.462-18.174-21.492-18.174H221.312a5.5,5.5,0,0,0-5.472,5.546v49.991a5.546,5.546,0,0,0,11.068,0V85.059h18.224L255.853,106.9a4.952,4.952,0,0,0,4.952,2.971h0a5.447,5.447,0,0,0,5.447-5.5,5.6,5.6,0,0,0-.668-2.476l-9.31-18.917a16.491,16.491,0,0,0,9.88-16Zm-11.192.768a8.27,8.27,0,0,1-8.74,7.8H226.933V58.987H246.2a7.973,7.973,0,0,1,8.79,8.047,6.953,6.953,0,0,1-.025.718Z" transform="translate(282.71 43.42)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104579)">
|
||||
<path id="Path_104579-4" data-name="Path 104579" d="M278.916,98.779H250.293V83.551h23a5.076,5.076,0,0,0,5.076-4.952,5.15,5.15,0,0,0-5.076-5.274H250.368V59.038H277.6a5.249,5.249,0,0,0,5.249-5.176h0a5.125,5.125,0,0,0-5.249-4.952H244.846a5.571,5.571,0,0,0-5.6,5.546v49.15h0a5.546,5.546,0,0,0,5.621,5.5h34.145a5.125,5.125,0,0,0,5.15-5.1,5.249,5.249,0,0,0-5.249-5.224Z" transform="translate(317.27 43.57)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104580)">
|
||||
<path id="Path_104580-4" data-name="Path 104580" d="M179.667,106.98q-3.046,0-6.091-.3A65.516,65.516,0,1,1,98.824,51.938a64.578,64.578,0,0,1,9.9-.768,65.319,65.319,0,0,1,10.523.842c-.173-1.882-.272-3.788-.272-5.72a60.638,60.638,0,0,1,4.308-22.433A94.1,94.1,0,1,0,202.67,116.81a96.566,96.566,0,0,0-1.015-13.891,60.688,60.688,0,0,1-21.987,4.061Z" transform="translate(-14.49 4.91)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104581)">
|
||||
<path id="Path_104581-4" data-name="Path 104581" d="M111.754,11.56A51.329,51.329,0,0,0,60.5,62.814a49.091,49.091,0,0,0,.668,8.069,51.3,51.3,0,0,0,42.093,42.467,47.836,47.836,0,0,0,8.493.817,50.982,50.982,0,0,0,20.2-4.16,1.413,1.413,0,0,0,0-.347,51.254,51.254,0,0,0-20.2-98.1Zm18.719,55.785H116.781V81.038a5.035,5.035,0,0,1-7.552,4.63,5.175,5.175,0,0,1-1.956-2.1,4.952,4.952,0,0,1-.5-1.931,2.475,2.475,0,0,1,0-.594V67.345H93.06a4.531,4.531,0,0,1-4.531-4.531,4.482,4.482,0,0,1,4.407-4.531h13.841V44.591a4.961,4.961,0,1,1,9.9-.594V58.283h13.693a4.531,4.531,0,1,1,0,9.062Z" transform="translate(53.42 -11.56)" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="light" transform="translate(-24202 -16582.441)">
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104565-2)">
|
||||
<path id="Path_104565-5" data-name="Path 104565" d="M302.219,78.851,291.25,51.59H277.78V96.728h9.582V65.184l12.752,31.545H304.3L317.05,65.184V96.728h9.657V51.59H313.163Z" transform="translate(374.14 47.53)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104566-2)">
|
||||
<path id="Path_104566-5" data-name="Path 104566" d="M323.833,51.3a22.656,22.656,0,0,0-23.547,23.324A23.6,23.6,0,1,0,323.833,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856,13.742,6.363,13.742,14.856S332.178,89.481,323.833,89.481Z" transform="translate(407.34 47.07)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104567-2)">
|
||||
<path id="Path_104567-5" data-name="Path 104567" d="M352.946,79.941,331.9,51.59h-9.83V96.728H331.7V67.288l21.517,29.44h9.335V51.59h-9.607Z" transform="translate(439.51 47.53)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Rectangle_2960-2)">
|
||||
<rect id="Rectangle_2960-5" data-name="Rectangle 2960" width="9.533" height="45.163" transform="translate(810.96 99.09)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104568-2)">
|
||||
<path id="Path_104568-5" data-name="Path 104568" d="M348.38,60.033h13.2v36.7h9.681v-36.7h13.123V51.59h-36Z" transform="translate(478.35 47.53)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104569-2)">
|
||||
<path id="Path_104569-5" data-name="Path 104569" d="M387.157,51.3a23.349,23.349,0,1,0,23.622,23.324A22.656,22.656,0,0,0,387.157,51.3Zm0,38.181c-8.319,0-13.668-6.388-13.668-14.856s5.348-14.856,13.668-14.856S400.9,66.134,400.9,74.627,395.476,89.483,387.157,89.483Z" transform="translate(501.52 47.07)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104570-2)">
|
||||
<path id="Path_104570-5" data-name="Path 104570" d="M411.986,79.559a12.95,12.95,0,0,0,9.9-13.4c0-8.394-5.744-14.584-15.153-14.584H385.69V96.743h9.632V80.7h7.007l8.889,16.045h10.944Zm-6.636-7.428H395.272V60.048H405.35a6.116,6.116,0,1,1,0,12.182Z" transform="translate(533.42 47.51)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104571-2)">
|
||||
<path id="Path_104571-5" data-name="Path 104571" d="M269.072,31.72a1.659,1.659,0,0,0-1.634,1.634V171.79a1.659,1.659,0,1,0,3.293,0V33.354A1.659,1.659,0,0,0,269.072,31.72Z" transform="translate(358.85 18.2)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104572-2)">
|
||||
<path id="Path_104572-5" data-name="Path 104572" d="M131.979,48.36c-18.447,0-30.629,14.262-30.629,31.3s12.232,31.248,30.629,31.248,30.629-14.237,30.629-31.248S150.45,48.36,131.979,48.36Zm0,54.671c-14.039,0-21.938-10.969-21.938-23.374s7.923-23.374,21.938-23.374,21.938,10.994,21.938,23.374S146.043,103.031,131.979,103.031Z" transform="translate(113.72 42.76)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104573-2)">
|
||||
<path id="Path_104573-5" data-name="Path 104573" d="M150.98,56.863a16.317,16.317,0,0,0-14.287,7.775V61.245a4.11,4.11,0,0,0-4.16-4.036h-.371a3.937,3.937,0,0,0-3.615,4.234v49.249a4.259,4.259,0,1,0,8.518,0V90.562a16.193,16.193,0,0,0,14.014,7.8c10.424,0,18.942-8.22,18.942-20.749C169.922,65.628,161.4,56.863,150.98,56.863ZM149.247,91.3c-7.428,0-12.38-6.438-12.38-13.693s4.952-13.668,12.38-13.668h0c7.428,0,12.108,5.6,12.108,13.742S156.626,91.3,149.247,91.3Z" transform="translate(153.85 55.3)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104574-2)">
|
||||
<path id="Path_104574-5" data-name="Path 104574" d="M166.938,56.851A19.982,19.982,0,0,0,146.659,77.6c0,11.316,7.156,20.749,20.65,20.749a21.591,21.591,0,0,0,16.119-6.636,3.739,3.739,0,0,0,1.089-2.476,3.516,3.516,0,0,0-3.491-3.516,4.135,4.135,0,0,0-2.823,1.387,14.015,14.015,0,0,1-10.5,4.432,11.39,11.39,0,0,1-12.38-10.969h27.113c2.476,0,3.244-1.436,3.244-2.9C185.78,66.112,178.352,56.876,166.938,56.851ZM155.622,73.763A11.241,11.241,0,0,1,166.938,63.71h0a11.043,11.043,0,0,1,10.969,10.078Z" transform="translate(180.58 55.29)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104575-2)">
|
||||
<path id="Path_104575-5" data-name="Path 104575" d="M183.4,56.863h-.817A18.546,18.546,0,0,0,164.463,75.8V93.756a4.284,4.284,0,0,0,8.542,0V74.814a10.523,10.523,0,0,1,20.923,0V93.756a4.259,4.259,0,1,0,8.518,0V75.037A18.62,18.62,0,0,0,183.4,56.863Z" transform="translate(206.87 55.3)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104576-2)">
|
||||
<path id="Path_104576-5" data-name="Path 104576" d="M215.825,51.451a4.655,4.655,0,0,0-4.7-2.922,4.779,4.779,0,0,0-4.729,2.922l-23.126,51.428a5.25,5.25,0,0,0-.545,2.179v.248a5.125,5.125,0,0,0,5.249,4.952,4.8,4.8,0,0,0,4.63-2.971l5.15-11.043h26.84l5.1,11.142a4.779,4.779,0,0,0,4.605,2.971h.248a5.125,5.125,0,0,0,4.952-5.249,4.729,4.729,0,0,0-.545-2.179ZM201.761,86.586l9.409-23.027L220.6,86.586Z" transform="translate(233.83 42.99)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104577-2)">
|
||||
<path id="Path_104577-5" data-name="Path 104577" d="M212.971,48.52a5.67,5.67,0,0,0-5.621,5.621V104.7a5.621,5.621,0,0,0,5.621,5.6h0a5.5,5.5,0,0,0,5.4-5.6V54.091a5.522,5.522,0,0,0-5.4-5.571Z" transform="translate(270.18 42.99)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104578-2)">
|
||||
<path id="Path_104578-5" data-name="Path 104578" d="M266.153,66.984c0-10.746-6.462-18.174-21.492-18.174H221.312a5.5,5.5,0,0,0-5.472,5.546v49.991a5.546,5.546,0,0,0,11.068,0V85.059h18.224L255.853,106.9a4.952,4.952,0,0,0,4.952,2.971h0a5.447,5.447,0,0,0,5.447-5.5,5.6,5.6,0,0,0-.668-2.476l-9.31-18.917a16.491,16.491,0,0,0,9.88-16Zm-11.192.768a8.27,8.27,0,0,1-8.74,7.8H226.933V58.987H246.2a7.973,7.973,0,0,1,8.79,8.047,6.953,6.953,0,0,1-.025.718Z" transform="translate(282.71 43.42)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104579-2)">
|
||||
<path id="Path_104579-5" data-name="Path 104579" d="M278.916,98.779H250.293V83.551h23a5.076,5.076,0,0,0,5.076-4.952,5.15,5.15,0,0,0-5.076-5.274H250.368V59.038H277.6a5.249,5.249,0,0,0,5.249-5.176h0a5.125,5.125,0,0,0-5.249-4.952H244.846a5.571,5.571,0,0,0-5.6,5.546v49.15h0a5.546,5.546,0,0,0,5.621,5.5h34.145a5.125,5.125,0,0,0,5.15-5.1,5.249,5.249,0,0,0-5.249-5.224Z" transform="translate(317.27 43.57)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104580-2)">
|
||||
<path id="Path_104580-5" data-name="Path 104580" d="M179.667,106.98q-3.046,0-6.091-.3A65.516,65.516,0,1,1,98.824,51.938a64.578,64.578,0,0,1,9.9-.768,65.319,65.319,0,0,1,10.523.842c-.173-1.882-.272-3.788-.272-5.72a60.638,60.638,0,0,1,4.308-22.433A94.1,94.1,0,1,0,202.67,116.81a96.566,96.566,0,0,0-1.015-13.891,60.688,60.688,0,0,1-21.987,4.061Z" transform="translate(-14.49 4.91)" fill="#fff"/>
|
||||
</g>
|
||||
<g transform="matrix(1, 0, 0, 1, 0, 0)" filter="url(#Path_104581-2)">
|
||||
<path id="Path_104581-5" data-name="Path 104581" d="M111.754,11.56A51.329,51.329,0,0,0,60.5,62.814a49.091,49.091,0,0,0,.668,8.069,51.3,51.3,0,0,0,42.093,42.467,47.836,47.836,0,0,0,8.493.817,50.982,50.982,0,0,0,20.2-4.16,1.413,1.413,0,0,0,0-.347,51.254,51.254,0,0,0-20.2-98.1Zm18.719,55.785H116.781V81.038a5.035,5.035,0,0,1-7.552,4.63,5.175,5.175,0,0,1-1.956-2.1,4.952,4.952,0,0,1-.5-1.931,2.475,2.475,0,0,1,0-.594V67.345H93.06a4.531,4.531,0,0,1-4.531-4.531,4.482,4.482,0,0,1,4.407-4.531h13.841V44.591a4.961,4.961,0,1,1,9.9-.594V58.283h13.693a4.531,4.531,0,1,1,0,9.062Z" transform="translate(53.42 -11.56)" fill="#fff"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 74 KiB |
|
@ -1,65 +0,0 @@
|
|||
:root {
|
||||
--portal-main-color: #8DCA26;
|
||||
--portal-main-contrast: white;
|
||||
--portal-dark-color: #7cb021;
|
||||
|
||||
--openaire-main-color: #313179;
|
||||
|
||||
--explore-portal-color: #D95F2D;
|
||||
--provide-portal-color: #37C7E9;
|
||||
--monitor-portal-color: #8DCA26;
|
||||
--connect-portal-color: #EBB13E;
|
||||
--develop-portal-color: #DA65AB;
|
||||
|
||||
--explore-portal-lower-tone: #a0462c;
|
||||
--provide-portal-lower-tone: #3A8FA3;
|
||||
--monitor-portal-lower-tone: #7cb021;
|
||||
--connect-portal-lower-tone: #b48536;
|
||||
--develop-portal-lower-tone: #9f4e7e;
|
||||
}
|
||||
|
||||
.tm-toolbar .uk-subnav-line .custom-monitor-li {
|
||||
background: var(--portal-main-color);
|
||||
}
|
||||
|
||||
.monitorApp, .searchForm {
|
||||
background: #F9F9F9 !important;
|
||||
}
|
||||
|
||||
.monitorApp .login text {
|
||||
stroke: white;
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.uk-card {
|
||||
color: #1a1a1a;
|
||||
}
|
||||
|
||||
main {
|
||||
min-height: calc(100vh - 100px);
|
||||
line-height: 23px;
|
||||
font-size: 16px;
|
||||
color: #1a1a1a;
|
||||
font-family: "Open Sans", sans-serif;
|
||||
}
|
||||
|
||||
.monitorApp .uk-text-small {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.monitorApp .uk-text-muted {
|
||||
color: #4D4D4D !important;
|
||||
}
|
||||
|
||||
.monitorApp .portal-button {
|
||||
color: white !important;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.monitorApp .uk-grid-divider>:not(.uk-first-column)::before {
|
||||
border-left: 1px solid #DEDEDE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
/** Global */
|
||||
@global-primary-gradient: linear-gradient(110deg, @monitor-light-color 0%, @monitor-dark-color 100%);
|
||||
|
||||
/** Background*/
|
||||
@background-primary-background: @monitor-color;
|
||||
@background-primary-background-gradient: none;
|
||||
|
||||
/** Buttons */
|
||||
@button-primary-background: @monitor-color;
|
||||
@button-secondary-border: @monitor-color;
|
||||
@button-secondary-color: @monitor-color;
|
||||
@button-secondary-hover-background: @global-secondary-background;
|
||||
@button-secondary-hover-background-gradient: none;
|
||||
@button-secondary-active-background: @global-secondary-background;
|
||||
@button-secondary-active-background-gradient: none;
|
||||
|
||||
/** Label */
|
||||
@label-secondary-color: @monitor-color;
|
||||
@label-secondary-border: @monitor-color;
|
||||
|
||||
/** List */
|
||||
@list-primary-color: @monitor-color;
|
||||
|
||||
/** Text */
|
||||
@text-primary-color: @monitor-color;
|
||||
@text-background-color: @monitor-color;
|
||||
@inverse-text-primary-color: @monitor-color;
|
||||
|
||||
/* Slider */
|
||||
@dotnav-item-background: fade(@monitor-color, 50%);
|
||||
@dotnav-item-hover-background: @monitor-color;
|
||||
@dotnav-item-onclick-background: @monitor-color;
|
||||
@dotnav-item-active-background: @monitor-color;
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 5b2ec5ad3c5d43fcd69f82ddfa3a841a0d34ba0c
|
|
@ -5,8 +5,6 @@ export let properties: EnvProperties = {
|
|||
enablePiwikTrack: true,
|
||||
useCache: true,
|
||||
showContent: true,
|
||||
metricsAPIURL: "https://beta.services.openaire.eu/usagestats/",
|
||||
framesAPIURL: "https://beta.openaire.eu/stats3/",
|
||||
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
|
||||
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
|
||||
statisticsFrameNewAPIURL: "https://stats.madgik.di.uoa.gr/stats-api/",
|
||||
|
@ -29,45 +27,32 @@ export let properties: EnvProperties = {
|
|||
r3DataURL: "http://service.re3data.org/repository/",
|
||||
zenodo: "https://zenodo.org/",
|
||||
zenodoCommunities: "https://zenodo.org/api/communities/",
|
||||
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
|
||||
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
|
||||
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
|
||||
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
|
||||
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
|
||||
helpdesk: "https://www.openaire.eu/support/helpdesk",
|
||||
utilsService: "https://demo.openaire.eu/utils-service",
|
||||
|
||||
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
|
||||
|
||||
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
|
||||
piwikSiteId: "298",
|
||||
loginUrl :"https://beta.services.openaire.eu/monitor-login/openid_connect_login",
|
||||
userInfoUrl : "https://beta.services.openaire.eu/uoa-user-management/api/users/getUserInfo?accessToken=",
|
||||
|
||||
|
||||
logoutUrl: "https://beta.services.openaire.eu/monitor-login/openid_logout",
|
||||
|
||||
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-admin-tools",
|
||||
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",
|
||||
baseLink : "",
|
||||
domain : "https://beta.monitor.openaire.eu",
|
||||
afterLoginRedirectLink: '/my-dashboards',
|
||||
searchLinkToResult: "/search/result?id=",
|
||||
searchLinkToPublication: "/search/publication?articleId=",
|
||||
searchLinkToProject: "/search/project?projectId=",
|
||||
|
@ -76,7 +61,6 @@ export let properties: EnvProperties = {
|
|||
searchLinkToSoftwareLanding: "/search/software?softwareId=",
|
||||
searchLinkToOrganization: "/search/organization?organizationId=",
|
||||
searchLinkToOrp: "/search/other?orpId=",
|
||||
|
||||
searchLinkToStakeholders: "/browse",
|
||||
searchLinkToResults: "/search/find/research-outcomes",
|
||||
searchLinkToDataProviders: "/search/find/dataproviders",
|
||||
|
@ -84,27 +68,20 @@ export let properties: EnvProperties = {
|
|||
searchLinkToOrganizations: "/search/find/organizations",
|
||||
searchLinkToCompatibleDataProviders: "/search/content-providers",
|
||||
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
|
||||
searchLinkToEntityRegistriesDataProvidersTable: "/search/entity-registries-table",
|
||||
searchLinkToJournals: "/search/journals",
|
||||
searchLinkToJournalsTable: "/search/journals-table",
|
||||
|
||||
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
|
||||
searchLinkToAdvancedProjects: "/search/advanced/projects",
|
||||
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
|
||||
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
|
||||
|
||||
errorLink: '/error',
|
||||
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
|
||||
showLastIndexInformationLink: true,
|
||||
|
||||
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
|
||||
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/",
|
||||
|
|
|
@ -5,8 +5,6 @@ export let properties: EnvProperties = {
|
|||
enablePiwikTrack: true,
|
||||
useCache: true,
|
||||
showContent: true,
|
||||
metricsAPIURL: "https://services.openaire.eu/usagestats/",
|
||||
framesAPIURL: "https://www.openaire.eu/stats3/",
|
||||
statisticsAPIURL: "https://services.openaire.eu/stats-api/",
|
||||
statisticsFrameAPIURL: "https://www.openaire.eu/stats/",
|
||||
statisticsFrameNewAPIURL: "",
|
||||
|
@ -29,25 +27,22 @@ export let properties: EnvProperties = {
|
|||
r3DataURL: "http://service.re3data.org/repository/",
|
||||
zenodo: "https://zenodo.org/",
|
||||
zenodoCommunities: "https://zenodo.org/api/communities/",
|
||||
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
|
||||
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
|
||||
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
|
||||
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
|
||||
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
|
||||
helpdesk: "https://www.openaire.eu/support/helpdesk",
|
||||
utilsService: "https://explore.openaire.eu/utils-service",
|
||||
vocabulariesAPI: "https://services.openaire.eu/provision/mvc/vocabularies/",
|
||||
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
|
||||
piwikSiteId: "104",
|
||||
loginUrl: "https://services.openaire.eu/monitor-login/openid_connect_login",
|
||||
userInfoUrl: " https://services.openaire.eu/uoa-user-management/api/users/getUserInfo?accessToken=",
|
||||
logoutUrl: "https://services.openaire.eu/monitor-login/openid_logout",
|
||||
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-admin-tools/",
|
||||
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/",
|
||||
|
@ -55,8 +50,9 @@ export let properties: EnvProperties = {
|
|||
csvLimit: 2000,
|
||||
pagingLimit: 20,
|
||||
resultsPerPage: 10,
|
||||
"baseLink" : "",
|
||||
"domain" : "https://monitor.openaire.eu",
|
||||
baseLink : "",
|
||||
domain : "https://monitor.openaire.eu",
|
||||
afterLoginRedirectLink: '/my-dashboards',
|
||||
searchLinkToResult: "/search/result?id=",
|
||||
searchLinkToPublication: "/search/publication?articleId=",
|
||||
searchLinkToProject: "/search/project?projectId=",
|
||||
|
@ -65,7 +61,6 @@ export let properties: EnvProperties = {
|
|||
searchLinkToSoftwareLanding: "/search/software?softwareId=",
|
||||
searchLinkToOrp: "/search/other?orpId=",
|
||||
searchLinkToOrganization: "/search/organization?organizationId=",
|
||||
|
||||
searchLinkToStakeholders: "/browse",
|
||||
searchLinkToResults: "/search/find/research-outcomes",
|
||||
searchLinkToDataProviders: "/search/find/dataproviders",
|
||||
|
@ -73,13 +68,12 @@ export let properties: EnvProperties = {
|
|||
searchLinkToOrganizations: "/search/find/organizations",
|
||||
searchLinkToCompatibleDataProviders: "/search/content-providers",
|
||||
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
|
||||
searchLinkToEntityRegistriesDataProvidersTable: "/search/entity-registries-table",
|
||||
searchLinkToJournals: "/search/journals",
|
||||
searchLinkToJournalsTable: "/search/journals-table",
|
||||
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
|
||||
searchLinkToAdvancedProjects: "/search/advanced/projects",
|
||||
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
|
||||
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
|
||||
errorLink: '/error',
|
||||
lastIndexInformationLink: "https://www.openaire.eu/aggregation-and-content-provision-workflows",
|
||||
showLastIndexInformationLink: true,
|
||||
widgetLink: "https://www.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
|
||||
|
|
|
@ -1,8 +1,3 @@
|
|||
// The file contents for the current environment will overwrite these during build.
|
||||
// The build system defaults to the dev environment which uses `environment.ts`, but if you do
|
||||
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
|
||||
// The list of which env maps to which file can be found in `.angular-cli.json`.
|
||||
|
||||
import {EnvProperties} from "../app/openaireLibrary/utils/properties/env-properties";
|
||||
|
||||
export let properties: EnvProperties = {
|
||||
|
@ -10,8 +5,6 @@ export let properties: EnvProperties = {
|
|||
enablePiwikTrack: false,
|
||||
useCache: false,
|
||||
showContent: true,
|
||||
metricsAPIURL: "https://beta.services.openaire.eu/usagestats/",
|
||||
framesAPIURL: "https://beta.openaire.eu/stats3/",
|
||||
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
|
||||
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
|
||||
statisticsFrameNewAPIURL: "http://88.197.53.71:8080/stats-api/",
|
||||
|
@ -34,26 +27,21 @@ export let properties: EnvProperties = {
|
|||
r3DataURL: "http://service.re3data.org/repository/",
|
||||
zenodo: "https://zenodo.org/",
|
||||
zenodoCommunities: "https://zenodo.org/api/communities/",
|
||||
openAccess: "https://www.openaire.eu/support/faq#article-id-234",
|
||||
openAccessRepo: "https://www.openaire.eu/support/faq#article-id-310",
|
||||
fp7Guidlines: "https://www.openaire.eu/open-access-in-fp7-seventh-research-framework-programme",
|
||||
h2020Guidlines: "https://www.openaire.eu/oa-publications/h2020/open-access-in-horizon-2020",
|
||||
ercGuidlines: "http://erc.europa.eu/sites/default/files/document/file/ERC_Open_Access_Guidelines-revised_2014.pdf",
|
||||
helpdesk: "https://www.openaire.eu/support/helpdesk",
|
||||
utilsService: "http://mpagasas.di.uoa.gr:8000",
|
||||
vocabulariesAPI: "https://beta.services.openaire.eu/provision/mvc/vocabularies/",
|
||||
piwikBaseUrl: "https://analytics.openaire.eu/piwik.php?idsite=",
|
||||
piwikSiteId: "298",
|
||||
registryUrl: 'http://mpagasas.di.uoa.gr:8080/dnet-openaire-users-1.0.0-SNAPSHOT/api/registry/',
|
||||
loginUrl: "http://dl170.madgik.di.uoa.gr:8180/dnet-login/openid_connect_login",
|
||||
userInfoUrl: "http://dl170.madgik.di.uoa.gr:8180/dnet-openaire-users-1.0.0-SNAPSHOT/api/users/getUserInfo?accessToken=",
|
||||
/*logoutUrl: "http://dl170.madgik.di.uoa.gr:8180/dnet-login/openid_logout",*/
|
||||
logoutUrl: "https://aai.openaire.eu/proxy/saml2/idp/SingleLogoutService.php?ReturnTo=",
|
||||
loginUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_connect_login",
|
||||
userInfoUrl: "http://mpagasas.di.uoa.gr:19080/login-service/userInfo",
|
||||
logoutUrl: "http://mpagasas.di.uoa.gr:19080/login-service/openid_logout",
|
||||
cookieDomain: ".di.uoa.gr",
|
||||
feedbackmail: "openaire.test@gmail.com",
|
||||
cacheUrl: "http://scoobydoo.di.uoa.gr:3000/get?url=",
|
||||
monitorServiceAPIURL: "http://duffy.di.uoa.gr:8080/uoa-monitor-service",
|
||||
adminToolsAPIURL: "http://duffy.di.uoa.gr:8080/uoa-admin-tools/",
|
||||
monitorServiceAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service",
|
||||
adminToolsAPIURL: "http://duffy.di.uoa.gr:19380/uoa-monitor-service/",
|
||||
adminToolsPortalType: "monitor",
|
||||
adminToolsCommunity: "monitor",
|
||||
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/search/",
|
||||
contextsAPI: "https://dev-openaire.d4science.org/openaire/context",
|
||||
|
@ -62,8 +50,9 @@ export let properties: EnvProperties = {
|
|||
csvLimit: 2000,
|
||||
pagingLimit: 20,
|
||||
resultsPerPage: 10,
|
||||
"baseLink" : "",
|
||||
"domain" : "http://dl170.madgik.di.uoa.gr/monitor",
|
||||
baseLink : "",
|
||||
domain : "http://dl170.madgik.di.uoa.gr/monitor",
|
||||
afterLoginRedirectLink: '/my-dashboards',
|
||||
searchLinkToResult: "/search/result?id=",
|
||||
searchLinkToPublication: "/search/publication?articleId=",
|
||||
searchLinkToProject: "/search/project?projectId=",
|
||||
|
@ -79,13 +68,12 @@ export let properties: EnvProperties = {
|
|||
searchLinkToOrganizations: "/search/find/organizations",
|
||||
searchLinkToCompatibleDataProviders: "/search/content-providers",
|
||||
searchLinkToEntityRegistriesDataProviders: "/search/entity-registries",
|
||||
searchLinkToEntityRegistriesDataProvidersTable: "/search/entity-registries-table",
|
||||
searchLinkToJournals: "/search/journals",
|
||||
searchLinkToJournalsTable: "/search/journals-table",
|
||||
searchLinkToAdvancedResults: "/search/advanced/research-outcomes",
|
||||
searchLinkToAdvancedProjects: "/search/advanced/projects",
|
||||
searchLinkToAdvancedDataProviders: "/search/advanced/dataproviders",
|
||||
searchLinkToAdvancedOrganizations: "/search/advanced/organizations",
|
||||
errorLink: '/error',
|
||||
lastIndexInformationLink: "https://beta.openaire.eu/aggregation-and-content-provision-workflows",
|
||||
showLastIndexInformationLink: true,
|
||||
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
|
||||
|
@ -94,7 +82,7 @@ export let properties: EnvProperties = {
|
|||
depositSearchPage: "/participate/deposit/search",
|
||||
shareInZenodoPage: "/participate/deposit/zenodo",
|
||||
reCaptchaSiteKey: "6LcVtFIUAAAAAB2ac6xYivHxYXKoUvYRPi-6_rLu",
|
||||
admins: ["kostis30fylloy@gmail.com", "argirok@di.uoa.gr"],
|
||||
admins: ["kostis30fylloy@gmail.com"],
|
||||
lastIndexUpdate: "2019-05-16",
|
||||
indexInfoAPI: "https://beta.services.openaire.eu/openaire/info/",
|
||||
altMetricsAPIURL: "https://api.altmetric.com/v1/doi/",
|
||||
|
|
|
@ -12,4 +12,4 @@ if (properties.environment !== "development") {
|
|||
}
|
||||
|
||||
export {AppServerModule} from './app/app.server.module';
|
||||
export {renderModule, renderModuleFactory} from '@angular/platform-server';
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
@import '../node_modules/@angular/material/theming';
|
||||
@include mat-core();
|
||||
$my-app-primary: mat-palette($mat-gray, 900);
|
||||
$my-app-accent: mat-palette($mat-light-green, 700);
|
||||
|
||||
$my-app-theme: mat-light-theme($my-app-primary, $my-app-accent);
|
||||
|
||||
@include angular-material-theme($my-app-theme);
|
||||
|
|
@ -22,16 +22,6 @@ import '@angular/localize/init';
|
|||
* BROWSER POLYFILLS
|
||||
*/
|
||||
|
||||
/** IE10 and IE11 requires the following for NgClass support on SVG elements */
|
||||
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
||||
|
||||
/**
|
||||
* Web Animations `@angular/platform-browser/animations`
|
||||
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
|
||||
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
|
||||
*/
|
||||
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
||||
|
||||
/**
|
||||
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||
|
@ -59,7 +49,7 @@ import '@angular/localize/init';
|
|||
/***************************************************************************************************
|
||||
* Zone JS is required by default for Angular itself.
|
||||
*/
|
||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||
import 'zone.js'; // Included with Angular CLI.
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
/* You can add global styles to this file, and also import other style files */
|
||||
@import "assets/common-assets/common/theme.css";
|
||||
@import "assets/common-assets/common/custom.css";
|
||||
@import "assets/common-assets/library.css";
|
||||
@import "assets/monitor-custom.css";
|
|
@ -0,0 +1,5 @@
|
|||
/* You can add global styles to this file, and also import other style files */
|
||||
@import "~src/assets/openaire-theme/less/_import";
|
||||
@import "~src/assets/common-assets/less/general";
|
||||
@import "~src/assets/common-assets/less/user";
|
||||
@import "assets/monitor-custom";
|
12
src/test.ts
|
@ -1,20 +1,16 @@
|
|||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
||||
|
||||
import 'zone.js/dist/zone-testing';
|
||||
import 'zone.js/testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
import {
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting
|
||||
} from '@angular/platform-browser-dynamic/testing';
|
||||
|
||||
declare const require: any;
|
||||
|
||||
// First, initialize the Angular testing environment.
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting()
|
||||
platformBrowserDynamicTesting(), {
|
||||
teardown: { destroyAfterEach: false }
|
||||
}
|
||||
);
|
||||
// Then we find all the tests.
|
||||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
// And load the modules.
|
||||
context.keys().map(context);
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
"extends": "./tsconfig.app.json",
|
||||
"compilerOptions": {
|
||||
"outDir": "../out-tsc/app-server",
|
||||
"target": "es2016",
|
||||
"types": [
|
||||
"node"
|
||||
]
|
||||
|
|
|
@ -8,16 +8,16 @@
|
|||
"declaration": false,
|
||||
"module": "es2020",
|
||||
"moduleResolution": "node",
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"importHelpers": true,
|
||||
"target": "es2015",
|
||||
"target": "ES2022",
|
||||
"typeRoots": [
|
||||
"node_modules/@types"
|
||||
],
|
||||
"lib": [
|
||||
"es2018",
|
||||
"dom"
|
||||
]
|
||||
],
|
||||
"useDefineForClassFields": false
|
||||
}
|
||||
}
|
||||
|
|