Compare commits

..

36 Commits

Author SHA1 Message Date
Konstantina Galouni 5f4e40a834 Merge remote-tracking branch 'origin/develop' 2024-09-23 14:11:11 +03:00
Konstantina Galouni 7abfb0bb49 Updating openaireLibrary 2024-09-23 14:09:01 +03:00
Konstantina Galouni e356b58380 Updating openaireLibrary & common-assets 2024-09-23 14:04:53 +03:00
Konstantina Galouni 7d986a7028 Merge remote-tracking branch 'origin/develop' 2024-08-02 10:41:44 +03:00
Konstantina Galouni 24895a85a2 Updating openaireLibrary 2024-08-02 10:41:28 +03:00
Konstantina Galouni a1ec284c63 Merge remote-tracking branch 'origin/develop' 2024-07-23 11:24:11 +03:00
Konstantina Galouni 3acffc3d79 Updating openaireLibrary 2024-07-23 11:24:04 +03:00
Konstantina Galouni 4fc4182696 Merge remote-tracking branch 'origin/develop' 2024-07-12 11:29:46 +03:00
Konstantina Galouni 2754736693 Updating libraries 2024-07-12 11:26:47 +03:00
Konstantina Galouni b059b300ba Merge remote-tracking branch 'origin/develop' 2024-06-04 17:36:04 +03:00
Konstantina Galouni d05209a54c Updating openaireLibrary & common-assets 2024-06-04 17:35:55 +03:00
Konstantina Galouni dbdb929a8f Merge remote-tracking branch 'origin/develop' 2024-05-23 19:30:32 +03:00
Konstantina Galouni 58770771ca Updating libraries 2024-05-23 19:30:19 +03:00
Konstantina Galouni 2a4b92ba00 Merge remote-tracking branch 'origin/develop' 2024-03-05 13:53:24 +02:00
Konstantina Galouni 3d2ad5336b Merge remote-tracking branch 'origin/develop' 2024-03-04 18:46:56 +02:00
Konstantina Galouni 60de7eb2a0 Updating libraries 2024-03-04 18:46:36 +02:00
Konstantina Galouni 9f53423ae3 Merge remote-tracking branch 'origin/develop' 2024-02-12 14:50:33 +02:00
Konstantina Galouni 15499aa4ca Updating openaireLibrary 2024-02-12 14:50:19 +02:00
Konstantina Galouni b6db196e68 Merge pull request 'Production release February 2024 - Fixes and updates in cache' (#13) from develop into master
Reviewed-on: #13
2024-02-12 12:30:21 +01:00
Konstantina Galouni 4258055e51 Merge pull request 'Production release February 2024 - Home page logos update' (#12) from develop into master
Reviewed-on: #12
2024-02-12 08:08:29 +01:00
Konstantina Galouni 134c21d6be Merge pull request 'Production release February 2024 - Fix' (#11) from develop into master
Reviewed-on: #11
2024-02-08 18:44:55 +01:00
Konstantina Galouni a5019e083c Merge remote-tracking branch 'origin/develop' 2024-02-08 19:10:13 +02:00
Konstantina Galouni ee38203ee4 Updating openaireLibrary & openaire-theme 2024-02-08 19:10:04 +02:00
Konstantina Galouni 414ff59fd0 Merge remote-tracking branch 'origin/develop' 2024-02-07 22:41:04 +02:00
Konstantina Galouni 5408bd9f82 Updating openaireLibrary & common-assets 2024-02-07 22:39:56 +02:00
Konstantina Galouni 278fefb45a Merge remote-tracking branch 'origin/develop' 2024-02-01 21:52:27 +02:00
Konstantina Galouni 3562d4f6c6 Updating openaireLibrary 2024-02-01 21:52:17 +02:00
Konstantina Galouni b21d7dcd93 Merge remote-tracking branch 'origin/develop' 2024-02-01 21:12:13 +02:00
Konstantina Galouni 2adb378467 Updating libraries 2024-02-01 21:10:48 +02:00
Konstantina Galouni c3587bb2c4 Merge remote-tracking branch 'origin/develop' 2023-11-28 13:15:23 +02:00
Konstantina Galouni 288e106779 Updating libraries 2023-11-28 13:12:26 +02:00
Konstantina Galouni 11f0f8befb Merge remote-tracking branch 'origin/develop' 2023-11-10 19:33:22 +02:00
Konstantina Galouni ab839498a8 Updating libraries 2023-11-10 19:31:34 +02:00
Konstantina Galouni 4aa01517f2 Merge remote-tracking branch 'origin/develop' 2023-10-16 13:43:23 +03:00
Konstantina Galouni fb2e542c4d Updating openaireLibrary (after it was merged from develop to master). 2023-10-16 13:43:09 +03:00
Konstantina Galouni c676603faa Updating libraries 2023-10-16 13:34:18 +03:00
12 changed files with 300 additions and 144 deletions

View File

@ -239,18 +239,18 @@
"serve": { "serve": {
"builder": "@angular-devkit/build-angular:dev-server", "builder": "@angular-devkit/build-angular:dev-server",
"options": { "options": {
"buildTarget": "explore:build" "browserTarget": "explore:build"
}, },
"configurations": { "configurations": {
"production": { "production": {
"buildTarget": "explore:build:production" "browserTarget": "explore:build:production"
} }
} }
}, },
"extract-i18n": { "extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n", "builder": "@angular-devkit/build-angular:extract-i18n",
"options": { "options": {
"buildTarget": "explore:build" "browserTarget": "explore:build"
} }
}, },
"test": { "test": {
@ -327,7 +327,7 @@
"defaultConfiguration": "" "defaultConfiguration": ""
}, },
"serve-ssr": { "serve-ssr": {
"builder": "@angular-devkit/build-angular:ssr-dev-server", "builder": "@nguniversal/builders:ssr-dev-server",
"options": { "options": {
"browserTarget": "explore:build", "browserTarget": "explore:build",
"serverTarget": "explore:server" "serverTarget": "explore:server"
@ -340,7 +340,7 @@
} }
}, },
"prerender": { "prerender": {
"builder": "@angular-devkit/build-angular:prerender", "builder": "@nguniversal/builders:prerender",
"options": { "options": {
"browserTarget": "explore:build:production", "browserTarget": "explore:build:production",
"serverTarget": "explore:server:production", "serverTarget": "explore:server:production",

View File

@ -23,43 +23,43 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^18.1.0", "@angular/animations": "^16.1.7",
"@angular/cdk": "^18.1.0", "@angular/cdk": "^16.1.6",
"@angular/common": "^18.1.0", "@angular/common": "^16.1.7",
"@angular/compiler": "^18.1.0", "@angular/compiler": "^16.1.7",
"@angular/core": "^18.1.0", "@angular/core": "^16.1.7",
"@angular/forms": "^18.1.0", "@angular/forms": "^16.1.7",
"@angular/localize": "^18.1.0", "@angular/localize": "^16.1.7",
"@angular/material": "^18.1.0", "@angular/material": "^16.1.6",
"@angular/platform-browser": "^18.1.0", "@angular/platform-browser": "^16.1.7",
"@angular/platform-browser-dynamic": "^18.1.0", "@angular/platform-browser-dynamic": "^16.1.7",
"@angular/platform-server": "^18.1.0", "@angular/platform-server": "^16.1.7",
"@angular/router": "^18.1.0", "@angular/router": "^16.1.7",
"@angular/ssr": "^18.1.0", "@nguniversal/express-engine": "^16.1.1",
"clipboard": "^1.5.16", "clipboard": "^1.5.16",
"core-js": "^2.5.4", "core-js": "^2.5.4",
"express": "^4.15.2", "express": "^4.15.2",
"flag-icons": "^7.2.1", "flag-icons": "^7.2.1",
"jquery": "^3.4.1", "jquery": "^3.4.1",
"ng-recaptcha-2": "^14.0.0", "ng-recaptcha": "^12.0.2",
"prom-client": "^11.3.0", "prom-client": "^11.3.0",
"rxjs": "^6.5.1", "rxjs": "^6.5.1",
"ts-md5": "^1.2.0", "ts-md5": "^1.2.0",
"tslib": "^2.0.0", "tslib": "^2.0.0",
"uikit": "3.16.24", "uikit": "3.16.24",
"zone.js": "~0.14.0" "zone.js": "~0.13.1"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "^18.1.0", "@angular-devkit/build-angular": "^16.1.6",
"@angular/cli": "^18.1.0", "@angular/cli": "^16.1.6",
"@angular/compiler-cli": "^18.1.0", "@angular/compiler-cli": "^16.1.7",
"@angular/language-service": "^18.1.0", "@angular/language-service": "^16.1.7",
"@nguniversal/builders": "^16.1.1",
"@types/compression": "^1.7.0", "@types/compression": "^1.7.0",
"@types/express": "^4.17.0", "@types/express": "^4.17.0",
"@types/jasmine": "~3.6.0", "@types/jasmine": "~3.6.0",
"@types/jasminewd2": "~2.0.3", "@types/jasminewd2": "~2.0.3",
"@types/node": "^18.19.1", "@types/node": "^16.18.50",
"browser-sync": "^3.0.0",
"codelyzer": "^6.0.0", "codelyzer": "^6.0.0",
"jasmine-core": "~3.8.0", "jasmine-core": "~3.8.0",
"jasmine-spec-reporter": "~5.0.0", "jasmine-spec-reporter": "~5.0.0",
@ -69,8 +69,7 @@
"karma-jasmine": "~4.0.0", "karma-jasmine": "~4.0.0",
"karma-jasmine-html-reporter": "^1.6.0", "karma-jasmine-html-reporter": "^1.6.0",
"protractor": "~7.0.0", "protractor": "~7.0.0",
"replace-in-file": "^8.2.0",
"ts-node": "~7.0.0", "ts-node": "~7.0.0",
"typescript": "~5.4.0" "typescript": "~4.9.5"
} }
} }

View File

@ -1,40 +1,33 @@
import 'zone.js/node'; import 'zone.js/node';
import { APP_BASE_HREF } from '@angular/common'; import { ngExpressEngine } from '@nguniversal/express-engine';
import { CommonEngine } from '@angular/ssr';
import * as express from 'express'; import * as express from 'express';
import { existsSync } from 'node:fs'; import * as compression from 'compression';
import { join } from 'path';
import { AppServerModule } from './src/main.server';
import { APP_BASE_HREF } from '@angular/common';
import { existsSync } from 'fs';
import * as prom from "prom-client"; import * as prom from "prom-client";
import { join } from 'node:path';
import {AppServerModule} from "./src/main.server";
import {routes} from "./routes"; import {routes} from "./routes";
import {REQUEST, RESPONSE} from "./src/app/openaireLibrary/utils/tokens"; import {REQUEST, RESPONSE} from "./src/app/openaireLibrary/utils/tokens";
import * as compression from "compression";
// The Express app is exported so that it can be used by serverless Functions. // The Express app is exported so that it can be used by serverless Functions.
export function app(): express.Express { export function app() {
const server = express(); const server = express();
server.use(compression()); server.use(compression());
const distFolder = join(process.cwd(), 'dist/explore/browser'); const distFolder = join(process.cwd(), 'dist/explore/browser');
const indexHtml = existsSync(join(distFolder, 'index.original.html')) const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';
? join(distFolder, 'index.original.html')
: join(distFolder, 'index.html');
const commonEngine = new CommonEngine();
server.set('view engine', 'html');
server.set('views', distFolder);
const register = new prom.Registry(); const register = new prom.Registry();
const responses = new prom.Counter({ const responses = new prom.Counter({
name: 'portal_http_responses_total', name: 'portal_http_responses_total',
help: 'A counter for portal response codes for every existed or not existed pages.', help: 'A counter for portal response codes for every existed or not existed pages.',
labelNames: ['route', 'code'], labelNames: ['route', 'code'],
registers: [register] registers: [register]
}); });
const histogram = new prom.Histogram({ const histogram = new prom.Histogram({
name: 'portal_http_request_duration_seconds', name: 'portal_http_request_duration_seconds',
help: 'A Histogram for a portal. Providing information about page visits and load latency in seconds.', help: 'A Histogram for a portal. Providing information about page visits and load latency in seconds.',
@ -42,6 +35,15 @@ export function app(): express.Express {
registers: [register], registers: [register],
buckets: [0.1, 0.2, 0.5, 1, 2] buckets: [0.1, 0.2, 0.5, 1, 2]
}); });
// 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');
server.set('views', distFolder);
// Example Express Rest API endpoints // Example Express Rest API endpoints
// server.get('/api/**', (req, res) => { }); // server.get('/api/**', (req, res) => { });
@ -49,7 +51,7 @@ export function app(): express.Express {
server.get('*.*', express.static(distFolder, { server.get('*.*', express.static(distFolder, {
maxAge: '1y' maxAge: '1y'
})); }));
server.get('/metrics', (req, res) => { server.get('/metrics', (req, res) => {
res.set('Content-Type', register.contentType); res.set('Content-Type', register.contentType);
res.end(register.metrics()); res.end(register.metrics());
@ -78,59 +80,56 @@ export function app(): express.Express {
} }
}); });
// All regular routes use the Angular engine // All regular routes use the Universal engine
server.get('*', (req, res, next) => { server.get('*', (req, res) => {
const { protocol, originalUrl, baseUrl, headers } = req;
if (routes.indexOf(req.path) !== -1) { if (routes.indexOf(req.path) !== -1) {
const end = histogram.startTimer({route: req.path}); const end = histogram.startTimer({route: req.path});
commonEngine.render({ res.render(indexHtml, {
bootstrap: AppServerModule, req, providers: [
documentFilePath: indexHtml, {
url: `${protocol}://${headers.host}${originalUrl}`, provide: APP_BASE_HREF,
publicPath: distFolder, useValue: req.baseUrl
inlineCriticalCss: false, },
providers: [ {
{provide: APP_BASE_HREF, useValue: baseUrl}, provide: REQUEST, useValue: (req)
{provide: REQUEST, useValue: (req)}, },
{provide: RESPONSE, useValue: (res)} {
], provide: RESPONSE, useValue: (res)
}) }
.then((html) => { ]
res.on('finish', function () { }
responses.inc({route: req.path, code: res.statusCode}); );
end(); res.on('finish', function () {
}); responses.inc({route: req.path, code: res.statusCode});
res.status(200).send(html) end();
}) });
.catch((err) => res.status(500).send('Error during SSR'))
} else { } else {
commonEngine.render({ res.render(indexHtml, {
bootstrap: AppServerModule, req, providers: [
documentFilePath: indexHtml, {
url: `${protocol}://${headers.host}${originalUrl}`, provide: APP_BASE_HREF,
publicPath: distFolder, useValue: req.baseUrl
inlineCriticalCss: false, },
providers: [ {
{provide: APP_BASE_HREF, useValue: baseUrl}, provide: REQUEST, useValue: (req)
{provide: REQUEST, useValue: (req)}, },
{provide: RESPONSE, useValue: (res)} {
], provide: RESPONSE, useValue: (res)
}) }
.then((html) => { ]
res.on('finish', function () { }
responses.inc({route: '**', code: res.statusCode}); );
}); res.on('finish', function () {
res.status(200).send(html) responses.inc({route: '**', code: res.statusCode});
}) });
.catch((err) => res.status(500).send('Error during SSR'))
} }
}); });
return server; return server;
} }
function run(): void { function run() {
const port = process.env['PORT'] || 4000; const port = process.env.PORT || 4000;
// Start up the Node server // Start up the Node server
const server = app(); const server = app();
@ -147,4 +146,6 @@ const mainModule = __non_webpack_require__.main;
const moduleFilename = mainModule && mainModule.filename || ''; const moduleFilename = mainModule && mainModule.filename || '';
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
run(); run();
} }
export * from './src/main.server';

View File

@ -1,6 +1,7 @@
import {NgModule} from '@angular/core'; import {NgModule} from '@angular/core';
import {RouterModule, Routes} from '@angular/router'; import {RouterModule, Routes} from '@angular/router';
import {PageURLResolverComponent} from "./openaireLibrary/utils/pageURLResolver.component"; import {PageURLResolverComponent} from "./openaireLibrary/utils/pageURLResolver.component";
import {SdgModule} from "./openaireLibrary/sdg/sdg.module";
import {ErrorPageComponent} from "./openaireLibrary/error/errorPage.component"; import {ErrorPageComponent} from "./openaireLibrary/error/errorPage.component";
const routes: Routes = [ const routes: Routes = [

View File

@ -1,7 +1,8 @@
import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core'; import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';
import {ActivatedRoute} from '@angular/router'; import {ActivatedRoute, Router} from '@angular/router';
import {EnvProperties} from './openaireLibrary/utils/properties/env-properties'; import {EnvProperties} from './openaireLibrary/utils/properties/env-properties';
import {MenuItem} 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 {Session, User} from './openaireLibrary/login/utils/helper.class';
import {UserManagementService} from "./openaireLibrary/services/user-management.service"; import {UserManagementService} from "./openaireLibrary/services/user-management.service";
import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service"; import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service";
@ -86,8 +87,8 @@ export class AppComponent implements AfterViewInit {
subscriptions = []; subscriptions = [];
constructor(private route: ActivatedRoute, constructor(private route: ActivatedRoute, private propertiesService: EnvironmentSpecificService,
private userManagementService: UserManagementService, private smoothScroll: SmoothScroll, private router: Router, private userManagementService: UserManagementService, private smoothScroll: SmoothScroll,
private configurationService: ConfigurationService, private _meta: Meta, private seoService: SEOService, private configurationService: ConfigurationService, private _meta: Meta, private seoService: SEOService,
private emailService: EmailService, private fb: FormBuilder, private quickContactService: QuickContactService, private emailService: EmailService, private fb: FormBuilder, private quickContactService: QuickContactService,
private layoutService: LayoutService, private cdr: ChangeDetectorRef, private layoutService: LayoutService, private cdr: ChangeDetectorRef,
@ -338,13 +339,13 @@ export class AppComponent implements AfterViewInit {
this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => { this.subscriptions.push(this.layoutService.hasQuickContact.subscribe(hasQuickContact => {
if(this.showQuickContact !== hasQuickContact) { if(this.showQuickContact !== hasQuickContact) {
this.showQuickContact = hasQuickContact; this.showQuickContact = hasQuickContact;
this.cdr.markForCheck(); this.cdr.detectChanges();
} }
})); }));
this.subscriptions.push(this.quickContactService.isDisplayed.subscribe(display => { this.subscriptions.push(this.quickContactService.isDisplayed.subscribe(display => {
if(this.displayQuickContact !== display) { if(this.displayQuickContact !== display) {
this.displayQuickContact = display; this.displayQuickContact = display;
this.cdr.markForCheck(); this.cdr.detectChanges();
} }
})); }));
} }
@ -367,7 +368,7 @@ export class AppComponent implements AfterViewInit {
this.createObservers(); this.createObservers();
this.subscriptions.push(this.layoutService.rootClass.subscribe(rootClass => { this.subscriptions.push(this.layoutService.rootClass.subscribe(rootClass => {
this.loading = true; this.loading = true;
this.cdr.markForCheck(); this.cdr.detectChanges();
if (rootClass && this.isClient) { if (rootClass && this.isClient) {
let link = <HTMLLinkElement>document.getElementById('theme'); let link = <HTMLLinkElement>document.getElementById('theme');
let append = false; let append = false;
@ -384,10 +385,10 @@ export class AppComponent implements AfterViewInit {
} }
} }
this.rootClass = rootClass; this.rootClass = rootClass;
this.cdr.markForCheck(); this.cdr.detectChanges();
setTimeout(() => { setTimeout(() => {
this.loading = false; this.loading = false;
this.cdr.markForCheck(); this.cdr.detectChanges();
}, 500) }, 500)
})); }));
} }
@ -403,7 +404,7 @@ export class AppComponent implements AfterViewInit {
entries.forEach(entry => { entries.forEach(entry => {
if(this.bottomNotIntersecting !== (!entry.isIntersecting)) { if(this.bottomNotIntersecting !== (!entry.isIntersecting)) {
this.bottomNotIntersecting = !entry.isIntersecting; this.bottomNotIntersecting = !entry.isIntersecting;
this.cdr.markForCheck(); this.cdr.detectChanges();
} }
}); });
}, options); }, options);

View File

@ -3,7 +3,7 @@ import {SharedModule} from './openaireLibrary/shared/shared.module';
import {BrowserModule} from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import {CommonModule} from '@angular/common'; import {CommonModule} from '@angular/common';
import {HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi} from '@angular/common/http'; import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';
import {AppComponent} from './app.component'; import {AppComponent} from './app.component';
import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigationBar.module'; import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigationBar.module';
import {CookieLawModule} from './openaireLibrary/sharedComponents/cookie-law/cookie-law.module'; import {CookieLawModule} from './openaireLibrary/sharedComponents/cookie-law/cookie-law.module';
@ -13,40 +13,52 @@ import {AppRoutingModule} from './app-routing.module';
import {HttpInterceptorService} from "./openaireLibrary/http-interceptor.service"; import {HttpInterceptorService} from "./openaireLibrary/http-interceptor.service";
import {PageURLResolverModule} from "./openaireLibrary/utils/pageURLResolver.module"; import {PageURLResolverModule} from "./openaireLibrary/utils/pageURLResolver.module";
import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module"; import {Schema2jsonldModule} from "./openaireLibrary/sharedComponents/schema2jsonld/schema2jsonld.module";
import {CacheInterceptorService} from "./openaireLibrary/cache-interceptor.service";
import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service"; import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service";
import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service"; import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service";
import {QuickContactModule} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.module'; import {QuickContactModule} from './openaireLibrary/sharedComponents/quick-contact/quick-contact.module';
import {AlertModalModule} from './openaireLibrary/utils/modal/alertModal.module'; import {AlertModalModule} from './openaireLibrary/utils/modal/alertModal.module';
import {LoadingModule} from "./openaireLibrary/utils/loading/loading.module"; import {LoadingModule} from "./openaireLibrary/utils/loading/loading.module";
@NgModule({ declarations: [AppComponent], @NgModule({
exports: [AppComponent], imports: [
bootstrap: [AppComponent], imports: [SharedModule, SharedModule,
CommonModule, CommonModule,
ErrorModule, HttpClientModule,
NavigationBarModule, BottomModule, ErrorModule,
CookieLawModule, NavigationBarModule, BottomModule,
BrowserModule, CookieLawModule,
AppRoutingModule, BrowserModule,
BrowserAnimationsModule, PageURLResolverModule, AppRoutingModule,
Schema2jsonldModule, BrowserAnimationsModule, PageURLResolverModule,
QuickContactModule, Schema2jsonldModule,
AlertModalModule, LoadingModule], providers: [ QuickContactModule,
{ provide: APP_ID, useValue: 'explore' }, AlertModalModule, LoadingModule
{ ],
provide: HTTP_INTERCEPTORS, declarations: [AppComponent],
useClass: HttpInterceptorService, exports: [AppComponent],
multi: true providers: [
}, {provide: APP_ID, useValue: 'explore'},
{ // {
provide: HTTP_INTERCEPTORS, // provide: HTTP_INTERCEPTORS,
useClass: ErrorInterceptorService, // useClass: CacheInterceptorService,
multi: true // multi: true
}, // },
[{ provide: HTTP_INTERCEPTORS, useClass: TimeoutInterceptor, multi: true }], {
[{ provide: DEFAULT_TIMEOUT, useValue: 3000 }], provide: HTTP_INTERCEPTORS,
provideHttpClient(withInterceptorsFromDi()) useClass: HttpInterceptorService,
] }) multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: ErrorInterceptorService,
multi: true
},
[{provide: HTTP_INTERCEPTORS, useClass: TimeoutInterceptor, multi: true}],
[{provide: DEFAULT_TIMEOUT, useValue: 3000}]
],
bootstrap: [AppComponent]
})
//
export class AppModule { export class AppModule {
} }

View File

@ -1,5 +1,5 @@
import {Component, OnInit, ViewChild} from '@angular/core'; import {Component, OnInit, ViewChild} from '@angular/core';
import {Router} from '@angular/router'; import {ActivatedRoute, Router} from '@angular/router';
import {EmailService} from "../openaireLibrary/utils/email/email.service"; import {EmailService} from "../openaireLibrary/utils/email/email.service";
import {Email} from "../openaireLibrary/utils/email/email"; import {Email} from "../openaireLibrary/utils/email/email";
import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties"; import {EnvProperties} from "../openaireLibrary/utils/properties/env-properties";
@ -7,6 +7,7 @@ import {Composer} from "../openaireLibrary/utils/email/composer";
import {Meta, Title} from "@angular/platform-browser"; import {Meta, Title} from "@angular/platform-browser";
import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service"; import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class"; import {HelperFunctions} from "../openaireLibrary/utils/HelperFunctions.class";
import {HelperService} from "../openaireLibrary/utils/helper/helper.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service"; import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {FormBuilder, FormGroup, Validators} from "@angular/forms"; import {FormBuilder, FormGroup, Validators} from "@angular/forms";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component"; import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
@ -27,6 +28,8 @@ export class ContactComponent implements OnInit {
public sending = true; public sending = true;
public email: Email; public email: Email;
public properties: EnvProperties = properties; public properties: EnvProperties = properties;
public pageContents = null;
public divContents = null;
public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Contact us'}]; public breadcrumbs: Breadcrumb[] = [{name: 'home', route: '/'}, {name: 'Contact us'}];
public contactForm: FormGroup; public contactForm: FormGroup;
@ViewChild('modal') modal; @ViewChild('modal') modal;
@ -41,13 +44,15 @@ export class ContactComponent implements OnInit {
}); });
} }
constructor(private _router: Router, constructor(private route: ActivatedRoute,
private _router: Router,
private _emailService: EmailService, private _emailService: EmailService,
private _meta: Meta, private _meta: Meta,
private _title: Title, private _title: Title,
private seoService: SEOService, private seoService: SEOService,
private _piwikService: PiwikService, private _piwikService: PiwikService,
private fb: FormBuilder) { private fb: FormBuilder,
private helper: HelperService) {
} }
ngOnInit() { ngOnInit() {
@ -61,9 +66,16 @@ export class ContactComponent implements OnInit {
this.updateTitle(this.pageTitle); this.updateTitle(this.pageTitle);
this.updateDescription(this.description); this.updateDescription(this.description);
this.reset(); this.reset();
// this.getPageContents();
this.sending = false; this.sending = false;
} }
private getPageContents() {
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, 'explore', this._router.url).subscribe(contents => {
this.pageContents = contents;
}));
}
public send(event) { public send(event) {
HelperFunctions.scroll(); HelperFunctions.scroll();
if(event.valid === true) { if(event.valid === true) {

View File

@ -8,6 +8,8 @@ import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service";
import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service"; import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service";
import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component"; import {Breadcrumb} from "../openaireLibrary/utils/breadcrumbs/breadcrumbs.component";
import {properties} from "../../environments/environment"; import {properties} from "../../environments/environment";
import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service';
import {StakeholderService} from '../openaireLibrary/monitor/services/stakeholder.service';
import {Option} from '../openaireLibrary/sharedComponents/input/input.component'; import {Option} from '../openaireLibrary/sharedComponents/input/input.component';
import {StringUtils} from '../openaireLibrary/utils/string-utils.class'; import {StringUtils} from '../openaireLibrary/utils/string-utils.class';
import {HelperFunctions} from '../openaireLibrary/utils/HelperFunctions.class'; import {HelperFunctions} from '../openaireLibrary/utils/HelperFunctions.class';
@ -89,6 +91,8 @@ export class FundersComponent implements OnInit {
private title: Title, private title: Title,
private seoService: SEOService, private seoService: SEOService,
private piwikService: PiwikService, private piwikService: PiwikService,
private refineFieldResultsService: RefineFieldResultsService,
private stakeholderService: StakeholderService,
private layoutService: LayoutService, private layoutService: LayoutService,
private cdr: ChangeDetectorRef, private cdr: ChangeDetectorRef,
private fb: FormBuilder, private fb: FormBuilder,
@ -221,6 +225,102 @@ export class FundersComponent implements OnInit {
this.displayedFunders = this.funders; this.displayedFunders = this.funders;
this.showLoading = false; this.showLoading = false;
})) }))
// let refineParams = '&fq=resultbestaccessright%20exact%20%22Open%20Access%22';
// this.subscriptions.push(
// zip(
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties),
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('relfunder', 'result', this.properties, refineParams),
// this.refineFieldResultsService.getAllRefineFieldResultsByFieldName('funder', 'project', this.properties),
// this.stakeholderService.getStakeholders(this.properties.monitorServiceAPIURL, 'funder')
// ).subscribe((data: any[]) => {
// // storing all needed data to a map
// // 1st call
// let queriedFunders1 = data[0][1][0].values;
// queriedFunders1.forEach(queriedFunder => {
// this.fundersMap.set(queriedFunder.id, {
// "id": queriedFunder.id,
// "name": queriedFunder.name,
// "alias": '',
// "researchProducts": +queriedFunder.number,
// "openAccessResearchProducts": 0,
// "openAccessPercentage": 0,
// "projects": 0,
// "monitorDashboard": '',
// "monitorDashboardStatus": '',
// "logoUrl": ''
// });
// });
//
// // 2nd call
// let queriedFunders2 = data[1][1][0].values;
// queriedFunders2.forEach(queriedFunder => {
// if(this.fundersMap.has(queriedFunder.id)) {
// this.fundersMap.get(queriedFunder.id).openAccessResearchProducts = +queriedFunder.number;
// }
// });
//
// // 3rd call
// let queriedFunders3 = data[2][1][0].values;
// queriedFunders3.forEach(queriedFunder => {
// if(+queriedFunder.number > 1) {
// if (this.fundersMap.has(queriedFunder.id)) {
// this.fundersMap.get(queriedFunder.id).projects = +queriedFunder.number;
// } else {
// this.fundersMap.set(queriedFunder.id, {
// "id": queriedFunder.id,
// "name": queriedFunder.name,
// "alias": '',
// "researchProducts": 0,
// "openAccessResearchProducts": 0,
// "openAccessPercentage": 0,
// "projects": +queriedFunder.number,
// "monitorDashboard": '',
// "monitorDashboardStatus": '',
// "logoUrl": ''
// });
// }
// }
// });
//
// // 4th call
// let queriedFunders4 = data[3];
// queriedFunders4.forEach(queriedFunder => {
// let id = queriedFunder.index_id + '||' + queriedFunder.index_name + '||' + queriedFunder.index_shortName;
// if(this.fundersMap.has(id) && (
// !this.fundersMap.get(id).monitorDashboardStatus
// ||
// (this.fundersMap.get(id).monitorDashboardStatus == "RESTRICTED" && queriedFunder.visibility == "PUBLIC")
// ||
// (this.fundersMap.get(id).monitorDashboardStatus == "PRIVATE" && (queriedFunder.visibility == "RESTRICTED" || queriedFunder.visibility == "PUBLIC")))) {
// this.fundersMap.get(id).alias = queriedFunder.alias;
// this.fundersMap.get(id).monitorDashboard = queriedFunder.alias;
// this.fundersMap.get(id).monitorDashboardStatus = queriedFunder.visibility;
// this.fundersMap.get(id).logoUrl = (queriedFunder.isUpload ? properties.utilsService + "/download/" : "")+ (queriedFunder.logoUrl);
// }
// });
// this.fundersMap.forEach((value) => {
// if(value.openAccessResearchProducts > 0) {
// value.openAccessPercentage = Math.round((value.openAccessResearchProducts / value.researchProducts) * 100);
// }
// if(!value.logoUrl && this.staticLogos.has(value.id)) {
// let split = value.id.split("||");
// let shortname = (split && split.length==3) ? value.id.split("||")[2] : value.id;
// value.logoUrl = "assets/explore-assets/funders/logos/"+shortname+".png";
// }
// });
// // convert funders map into an array
// this.funders = Array.from(this.fundersMap.values());
// // calculate total numbers for intro content
// this.calculateNumbers();
// // sort funders
// this.funders.sort((a, b) => a['name'].localeCompare(b['name']));
// // initialize displayedFunders
// this.displayedFunders = this.funders;
// console.log(this.funders);
// this.showLoading = false;
// })
// );
} }
private calculateSum(array, property) { private calculateSum(array, property) {

View File

@ -1,5 +1,6 @@
import { import {
AfterViewInit, AfterViewInit,
ChangeDetectorRef,
Component, Component,
ElementRef, ElementRef,
OnDestroy, OnDestroy,
@ -75,7 +76,12 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
@ViewChild('contact') contact: ElementRef; @ViewChild('contact') contact: ElementRef;
subscriptions: any[] = []; subscriptions: any[] = [];
@ViewChildren('scrolling_element') elements: QueryList<ElementRef>; @ViewChildren('scrolling_element') elements: QueryList<ElementRef>;
resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = null; resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = null;//{
// filter: null,
// selected: true,
// filterId: "resultbestaccessright",
// value: "Open Access"
// };
selectedEntity = "all"; selectedEntity = "all";
selectedEntitySimpleUrl; selectedEntitySimpleUrl;
selectedEntityAdvancedUrl; selectedEntityAdvancedUrl;
@ -102,13 +108,14 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
{value: "lcsh:Technology", label: "Technology"}, {value: "lcsh:Technology", label: "Technology"},
]; ];
stringUtils = new StringUtils(); stringUtils = new StringUtils();
// disableSelect: boolean = true;
constructor( constructor(
private _router: Router, private _router: Router,
private _piwikService: PiwikService, private _piwikService: PiwikService,
private config: ConfigurationService, private _meta: Meta, private config: ConfigurationService, private _meta: Meta, private _title: Title, private seoService: SEOService,
private _title: Title, private seoService: SEOService,
private helper: HelperService, private helper: HelperService,
private cdr: ChangeDetectorRef,
private quickContactService: QuickContactService private quickContactService: QuickContactService
) { ) {
let description = "OpenAIRE Explore: Over 100M of research deduplicated, 170K research software, 11M research data. One of the largest open scholarly records collection worldwide."; let description = "OpenAIRE Explore: Over 100M of research deduplicated, 170K research software, 11M research data. One of the largest open scholarly records collection worldwide.";
@ -284,11 +291,29 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
goTo() { goTo() {
let parameterNames = []; let parameterNames = [];
let parameterValues = []; let parameterValues = [];
// if (this.selectedEntity == "result") {
// if (this.resultTypes) {
// let values = [];
// for (let value of this.resultTypes.values) {
// if (value.selected) {
// values.push(value.id);
// }
// }
// if (values.length > 0 && values.length != 4) {
// parameterNames.push("type");
// parameterValues.push(values.join(","));
// }
// if (this.resultsQuickFilter && this.resultsQuickFilter.selected) {
// parameterNames.push(this.resultsQuickFilter.filterId);
// parameterValues.push('"' + encodeURIComponent(this.resultsQuickFilter.value) + '"');
// }
// }
// } else if (this.selectedEntity == "all") {
if (this.resultsQuickFilter && this.resultsQuickFilter.selected) { if (this.resultsQuickFilter && this.resultsQuickFilter.selected) {
parameterNames.push(this.resultsQuickFilter.filterId); parameterNames.push(this.resultsQuickFilter.filterId);
parameterValues.push('"' + encodeURIComponent(this.resultsQuickFilter.value) + '"'); parameterValues.push('"' + encodeURIComponent(this.resultsQuickFilter.value) + '"');
} }
// }
if (this.keyword.length > 0) { if (this.keyword.length > 0) {
parameterNames.push("fv0"); parameterNames.push("fv0");
parameterValues.push(this.keyword); parameterValues.push(this.keyword);
@ -301,4 +326,9 @@ export class HomeComponent implements OnInit, OnDestroy, AfterViewInit {
getSubjectParameter(param) { getSubjectParameter(param) {
return {'f0': 'resultsubject', 'fv0': '"' + (param) + '"', size: 50}; return {'f0': 'resultsubject', 'fv0': '"' + (param) + '"', size: 50};
} }
}
// disableSelectChange(event: boolean) {
// this.disableSelect = event;
// this.cdr.detectChanges();
// }
}

@ -1 +1 @@
Subproject commit 9c93a1e306ce7abd43e3c552a2fff0240ae2f04c Subproject commit f1fd1ef60c5a964e283ced7840876dc5896af9be

@ -1 +1 @@
Subproject commit 3c9fbe2a9c606ebaec0749cf46f819020d76f6cf Subproject commit a4d8923b82a59ac1cc41e9c0574f1d64a61c0c1b

@ -1 +1 @@
Subproject commit b4d09b7cd942893c238d4152eeac1bbc822a0b13 Subproject commit 55765bf0829910661a55337e0e7ca7b1262b7298