From 6244439392729ab2cdb606bf9d9a9ff8c825afae Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Fri, 22 Sep 2023 10:08:25 +0300 Subject: [PATCH] Adding code files (sources & assets) --- .gitmodules | 9 + CHANGELOG.md | 16 + README.md | 39 +++ angular.json | 307 ++++++++++++++++++ e2e/protractor.conf.js | 28 ++ e2e/src/app.e2e-spec.ts | 23 ++ e2e/src/app.po.ts | 11 + e2e/tsconfig.e2e.json | 13 + package.json | 72 ++++ prometheus.ts | 125 +++++++ server.ts | 110 +++++++ src/app/app-routing.module.ts | 136 ++++++++ src/app/app.component.ts | 163 ++++++++++ src/app/app.module.ts | 54 +++ src/app/app.server.module.ts | 15 + .../directLinking-routing.module.ts | 21 ++ .../directLinking/directLinking.component.ts | 10 + .../directLinking/directLinking.module.ts | 20 ++ .../claims/linking/linking-routing.module.ts | 20 ++ .../linking/linkingGeneric.component.ts | 10 + .../claims/linking/linkingGeneric.module.ts | 21 ++ .../myClaims/myClaims-routing.module.ts | 18 + src/app/claims/myClaims/myClaims.component.ts | 36 ++ src/app/claims/myClaims/myClaims.module.ts | 24 ++ src/app/deposit/deposit-routing.module.ts | 18 + src/app/deposit/deposit.component.ts | 12 + src/app/deposit/deposit.module.ts | 31 ++ ...chDataprovidersToDeposit-routing.module.ts | 21 ++ .../searchDataprovidersToDeposit.component.ts | 12 + .../searchDataprovidersToDeposit.module.ts | 31 ++ src/app/develop/develop.component.css | 60 ++++ src/app/develop/develop.component.ts | 134 ++++++++ src/app/develop/develop.module.ts | 21 ++ src/app/error/errorPage.component.ts | 12 + src/app/home/home-routing.module.ts | 14 + src/app/home/home.component.html | 131 ++++++++ src/app/home/home.component.ts | 268 +++++++++++++++ src/app/home/home.module.ts | 59 ++++ .../dataProvider-routing.module.ts | 19 ++ .../dataProvider/dataProvider.component.ts | 8 + .../dataProvider/libDataProvider.module.ts | 14 + .../dataset/dataset-routing.module.ts | 19 ++ .../landingPages/dataset/dataset.component.ts | 8 + .../landingPages/dataset/libDataset.module.ts | 13 + .../htmlProjectReport-routing.module.ts | 15 + .../htmlProjectReport.component.ts | 8 + .../libHtmlProjectReport.module.ts | 14 + .../organization/libOrganization.module.ts | 14 + .../organization-routing.module.ts | 19 ++ .../organization/organization.component.ts | 8 + src/app/landingPages/orp/libOrp.module.ts | 14 + .../landingPages/orp/orp-routing.module.ts | 18 + src/app/landingPages/orp/orp.component.ts | 8 + .../landingPages/project/libProject.module.ts | 14 + .../project/project-routing.module.ts | 19 ++ .../landingPages/project/project.component.ts | 8 + .../publication/libPublication.module.ts | 14 + .../publication/publication-routing.module.ts | 19 ++ .../publication/publication.component.ts | 9 + .../landingPages/result/libResult.module.ts | 13 + .../result/result-routing.module.ts | 18 + .../landingPages/result/result.component.ts | 8 + .../landingPages/service/libService.module.ts | 14 + .../service/service-routing.module.ts | 19 ++ .../landingPages/service/service.component.ts | 8 + .../software/libSoftware.module.ts | 15 + .../software/software-routing.module.ts | 15 + .../software/software.component.ts | 8 + src/app/login/libUser.module.ts | 23 ++ src/app/login/user-routing.module.ts | 15 + src/app/login/user.component.ts | 11 + src/app/openaireLibrary | 1 + src/app/reload/libReload.module.ts | 23 ++ ...ancedSearchDataProviders-routing.module.ts | 18 + .../advancedSearchDataProviders.component.ts | 24 ++ .../advancedSearchDataProviders.module.ts | 25 ++ ...ancedSearchOrganizations-routing.module.ts | 19 ++ .../advancedSearchOrganizations.component.ts | 23 ++ .../advancedSearchOrganizations.module.ts | 23 ++ .../advancedSearchProjects-routing.module.ts | 18 + .../advancedSearchProjects.component.ts | 22 ++ .../advanced/advancedSearchProjects.module.ts | 23 ++ .../advancedSearchServices-routing.module.ts | 18 + .../advancedSearchServices.component.ts | 26 ++ .../advanced/advancedSearchServices.module.ts | 25 ++ .../searchResearchResults-routing.module.ts | 19 ++ .../searchResearchResults.component.ts | 22 ++ .../advanced/searchResearchResults.module.ts | 25 ++ src/app/searchPages/find/libSearch.module.ts | 14 + .../find/mainSearch-routing.module.ts | 16 + src/app/searchPages/find/search.component.ts | 13 + .../searchDataProviders-routing.module.ts | 20 ++ .../simple/searchDataProviders.module.ts | 23 ++ .../simple/searchDataproviders.component.ts | 19 ++ .../searchOrganizations-routing.module.ts | 18 + .../simple/searchOrganizations.component.ts | 19 ++ .../simple/searchOrganizations.module.ts | 26 ++ .../simple/searchProjects-routing.module.ts | 19 ++ .../simple/searchProjects.component.ts | 19 ++ .../simple/searchProjects.module.ts | 24 ++ .../searchResearchResults-routing.module.ts | 19 ++ .../simple/searchResearchResults.component.ts | 21 ++ .../simple/searchResearchResults.module.ts | 25 ++ .../simple/searchServices-routing.module.ts | 19 ++ .../simple/searchServices.component.ts | 24 ++ .../simple/searchServices.module.ts | 23 ++ src/app/shared/shared.module.ts | 45 +++ src/app/utils/aggregators.ts | 65 ++++ src/assets/aggregator-custom.css | 105 ++++++ src/assets/arrow.svg | 3 + src/assets/common-assets | 1 + src/assets/eosc-custom.less | 173 ++++++++++ src/assets/graph.svg | 1 + src/assets/home.jpg | Bin 0 -> 181662 bytes src/assets/link.svg | 1 + .../inter/Inter-VariableFont_slnt,wght.ttf | Bin 0 -> 803384 bytes src/assets/media/fonts/inter/OFL.txt | 93 ++++++ src/assets/media/fonts/inter/README.txt | 72 ++++ .../media/fonts/inter/static/Inter-Black.ttf | Bin 0 -> 316372 bytes .../media/fonts/inter/static/Inter-Bold.ttf | Bin 0 -> 316100 bytes .../fonts/inter/static/Inter-ExtraBold.ttf | Bin 0 -> 316716 bytes .../fonts/inter/static/Inter-ExtraLight.ttf | Bin 0 -> 310808 bytes .../media/fonts/inter/static/Inter-Light.ttf | Bin 0 -> 310420 bytes .../media/fonts/inter/static/Inter-Medium.ttf | Bin 0 -> 314712 bytes .../fonts/inter/static/Inter-Regular.ttf | Bin 0 -> 309828 bytes .../fonts/inter/static/Inter-SemiBold.ttf | Bin 0 -> 315756 bytes .../media/fonts/inter/static/Inter-Thin.ttf | Bin 0 -> 310516 bytes src/assets/numbers_background_pattern.svg | 1 + src/assets/openaire-theme | 1 + src/assets/portal-custom.css | 75 +++++ src/assets/share.svg | 1 + src/assets/sitemap.xml | 88 +++++ src/assets/top-bar.svg | 10 + src/beta/index.html | 67 ++++ src/beta/robots.txt | 2 + src/environments/environment-aggregator.ts | 63 ++++ src/environments/environment.beta.ts | 122 +++++++ src/environments/environment.prod.ts | 127 ++++++++ src/environments/environment.ts | 149 +++++++++ src/index.html | 67 ++++ src/karma.conf.js | 32 ++ src/main.server.ts | 15 + src/main.ts | 14 + src/polyfills.ts | 57 ++++ src/prod/index.html | 66 ++++ src/prod/robots.txt | 2 + src/robots.txt | 2 + src/styles.less | 13 + src/test.ts | 22 ++ src/tsconfig.app.json | 14 + src/tsconfig.server.json | 17 + src/tsconfig.spec.json | 18 + tsconfig.json | 22 ++ 153 files changed, 4915 insertions(+) create mode 100644 .gitmodules create mode 100644 CHANGELOG.md create mode 100644 angular.json create mode 100644 e2e/protractor.conf.js create mode 100644 e2e/src/app.e2e-spec.ts create mode 100644 e2e/src/app.po.ts create mode 100644 e2e/tsconfig.e2e.json create mode 100644 package.json create mode 100644 prometheus.ts create mode 100644 server.ts create mode 100644 src/app/app-routing.module.ts create mode 100644 src/app/app.component.ts create mode 100755 src/app/app.module.ts create mode 100644 src/app/app.server.module.ts create mode 100644 src/app/claims/directLinking/directLinking-routing.module.ts create mode 100644 src/app/claims/directLinking/directLinking.component.ts create mode 100644 src/app/claims/directLinking/directLinking.module.ts create mode 100644 src/app/claims/linking/linking-routing.module.ts create mode 100644 src/app/claims/linking/linkingGeneric.component.ts create mode 100644 src/app/claims/linking/linkingGeneric.module.ts create mode 100644 src/app/claims/myClaims/myClaims-routing.module.ts create mode 100644 src/app/claims/myClaims/myClaims.component.ts create mode 100644 src/app/claims/myClaims/myClaims.module.ts create mode 100644 src/app/deposit/deposit-routing.module.ts create mode 100644 src/app/deposit/deposit.component.ts create mode 100644 src/app/deposit/deposit.module.ts create mode 100644 src/app/deposit/searchDataprovidersToDeposit-routing.module.ts create mode 100644 src/app/deposit/searchDataprovidersToDeposit.component.ts create mode 100644 src/app/deposit/searchDataprovidersToDeposit.module.ts create mode 100644 src/app/develop/develop.component.css create mode 100644 src/app/develop/develop.component.ts create mode 100644 src/app/develop/develop.module.ts create mode 100644 src/app/error/errorPage.component.ts create mode 100644 src/app/home/home-routing.module.ts create mode 100644 src/app/home/home.component.html create mode 100644 src/app/home/home.component.ts create mode 100644 src/app/home/home.module.ts create mode 100644 src/app/landingPages/dataProvider/dataProvider-routing.module.ts create mode 100644 src/app/landingPages/dataProvider/dataProvider.component.ts create mode 100644 src/app/landingPages/dataProvider/libDataProvider.module.ts create mode 100644 src/app/landingPages/dataset/dataset-routing.module.ts create mode 100644 src/app/landingPages/dataset/dataset.component.ts create mode 100644 src/app/landingPages/dataset/libDataset.module.ts create mode 100644 src/app/landingPages/htmlProjectReport/htmlProjectReport-routing.module.ts create mode 100644 src/app/landingPages/htmlProjectReport/htmlProjectReport.component.ts create mode 100644 src/app/landingPages/htmlProjectReport/libHtmlProjectReport.module.ts create mode 100644 src/app/landingPages/organization/libOrganization.module.ts create mode 100644 src/app/landingPages/organization/organization-routing.module.ts create mode 100644 src/app/landingPages/organization/organization.component.ts create mode 100644 src/app/landingPages/orp/libOrp.module.ts create mode 100644 src/app/landingPages/orp/orp-routing.module.ts create mode 100644 src/app/landingPages/orp/orp.component.ts create mode 100644 src/app/landingPages/project/libProject.module.ts create mode 100644 src/app/landingPages/project/project-routing.module.ts create mode 100644 src/app/landingPages/project/project.component.ts create mode 100644 src/app/landingPages/publication/libPublication.module.ts create mode 100644 src/app/landingPages/publication/publication-routing.module.ts create mode 100644 src/app/landingPages/publication/publication.component.ts create mode 100644 src/app/landingPages/result/libResult.module.ts create mode 100644 src/app/landingPages/result/result-routing.module.ts create mode 100644 src/app/landingPages/result/result.component.ts create mode 100644 src/app/landingPages/service/libService.module.ts create mode 100644 src/app/landingPages/service/service-routing.module.ts create mode 100644 src/app/landingPages/service/service.component.ts create mode 100644 src/app/landingPages/software/libSoftware.module.ts create mode 100644 src/app/landingPages/software/software-routing.module.ts create mode 100644 src/app/landingPages/software/software.component.ts create mode 100644 src/app/login/libUser.module.ts create mode 100644 src/app/login/user-routing.module.ts create mode 100644 src/app/login/user.component.ts create mode 160000 src/app/openaireLibrary create mode 100644 src/app/reload/libReload.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchDataProviders.component.ts create mode 100644 src/app/searchPages/advanced/advancedSearchDataProviders.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchOrganizations.component.ts create mode 100644 src/app/searchPages/advanced/advancedSearchOrganizations.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchProjects.component.ts create mode 100644 src/app/searchPages/advanced/advancedSearchProjects.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchServices-routing.module.ts create mode 100644 src/app/searchPages/advanced/advancedSearchServices.component.ts create mode 100644 src/app/searchPages/advanced/advancedSearchServices.module.ts create mode 100644 src/app/searchPages/advanced/searchResearchResults-routing.module.ts create mode 100644 src/app/searchPages/advanced/searchResearchResults.component.ts create mode 100644 src/app/searchPages/advanced/searchResearchResults.module.ts create mode 100644 src/app/searchPages/find/libSearch.module.ts create mode 100644 src/app/searchPages/find/mainSearch-routing.module.ts create mode 100644 src/app/searchPages/find/search.component.ts create mode 100644 src/app/searchPages/simple/searchDataProviders-routing.module.ts create mode 100644 src/app/searchPages/simple/searchDataProviders.module.ts create mode 100644 src/app/searchPages/simple/searchDataproviders.component.ts create mode 100644 src/app/searchPages/simple/searchOrganizations-routing.module.ts create mode 100644 src/app/searchPages/simple/searchOrganizations.component.ts create mode 100644 src/app/searchPages/simple/searchOrganizations.module.ts create mode 100644 src/app/searchPages/simple/searchProjects-routing.module.ts create mode 100644 src/app/searchPages/simple/searchProjects.component.ts create mode 100644 src/app/searchPages/simple/searchProjects.module.ts create mode 100644 src/app/searchPages/simple/searchResearchResults-routing.module.ts create mode 100644 src/app/searchPages/simple/searchResearchResults.component.ts create mode 100644 src/app/searchPages/simple/searchResearchResults.module.ts create mode 100644 src/app/searchPages/simple/searchServices-routing.module.ts create mode 100644 src/app/searchPages/simple/searchServices.component.ts create mode 100644 src/app/searchPages/simple/searchServices.module.ts create mode 100644 src/app/shared/shared.module.ts create mode 100644 src/app/utils/aggregators.ts create mode 100644 src/assets/aggregator-custom.css create mode 100644 src/assets/arrow.svg create mode 160000 src/assets/common-assets create mode 100644 src/assets/eosc-custom.less create mode 100644 src/assets/graph.svg create mode 100644 src/assets/home.jpg create mode 100644 src/assets/link.svg create mode 100644 src/assets/media/fonts/inter/Inter-VariableFont_slnt,wght.ttf create mode 100644 src/assets/media/fonts/inter/OFL.txt create mode 100644 src/assets/media/fonts/inter/README.txt create mode 100644 src/assets/media/fonts/inter/static/Inter-Black.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-Bold.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-ExtraBold.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-ExtraLight.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-Light.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-Medium.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-Regular.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-SemiBold.ttf create mode 100644 src/assets/media/fonts/inter/static/Inter-Thin.ttf create mode 100644 src/assets/numbers_background_pattern.svg create mode 160000 src/assets/openaire-theme create mode 100644 src/assets/portal-custom.css create mode 100644 src/assets/share.svg create mode 100644 src/assets/sitemap.xml create mode 100644 src/assets/top-bar.svg create mode 100644 src/beta/index.html create mode 100644 src/beta/robots.txt create mode 100644 src/environments/environment-aggregator.ts create mode 100644 src/environments/environment.beta.ts create mode 100644 src/environments/environment.prod.ts create mode 100644 src/environments/environment.ts create mode 100644 src/index.html create mode 100644 src/karma.conf.js create mode 100644 src/main.server.ts create mode 100644 src/main.ts create mode 100644 src/polyfills.ts create mode 100644 src/prod/index.html create mode 100644 src/prod/robots.txt create mode 100644 src/robots.txt create mode 100644 src/styles.less create mode 100644 src/test.ts create mode 100644 src/tsconfig.app.json create mode 100644 src/tsconfig.server.json create mode 100644 src/tsconfig.spec.json create mode 100644 tsconfig.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1009376 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "openaireLibrary"] + path = src/app/openaireLibrary + url = gitea@code-repo.d4science.org:MaDgIK/openaire-library.git +[submodule "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 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..688ae4e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +*For each release, use the following sub-sections:* + +- *Added (for new features)* +- *Changed (for changes in existing functionality)* +- *Deprecated (for soon-to-be removed features)* +- *Removed (for now removed features)* +- *Fixed (for any bug fixes)* +- *Security (in case of vulnerabilities)* + diff --git a/README.md b/README.md index 41a0a3f..29d5a73 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,41 @@ # faircore4eosc-explore +# EOSC EXPLORE + +This project was built with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.3. + +## Install packages + +Run npm install (maybe needs sudo), a script that will delete unused files from library will be run. + +## Development server + +Run `npm start` for a dev server. Navigate to `http://localhost:5200/`. The app will automatically reload if you change any of the source files. + +## Build - CSR + +Use the `npm run build-dev` for a development build.
+Use the `npm run build-beta` for a beta build.
+Use the `npm run build-prod` for a production build. + +## Build - SSR + +Use the `npm run build:ssr-dev` for a development build.
+Use the `npm run build:ssr-beta` for a beta build.
+Use the `npm run build:ssr-prod` for a production build. + +## Run SSR + +`npm run serve:ssr` will run the last server build. + +## Webpack Analyzer + +In order to analyze bundle size you can run `npm run webpack-bundle-analyzer` + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..16fa119 --- /dev/null +++ b/angular.json @@ -0,0 +1,307 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "eosc": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": { + "@schematics/angular:class": { + "skipTests": true + }, + "@schematics/angular:component": { + "skipTests": true + }, + "@schematics/angular:directive": { + "skipTests": true + }, + "@schematics/angular:guard": { + "skipTests": true + }, + "@schematics/angular:module": { + }, + "@schematics/angular:pipe": { + "skipTests": true + }, + "@schematics/angular:service": { + "skipTests": true + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/eosc/browser", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.app.json", + "assets": [ + "src/assets", + "src/robots.txt" + ], + "styles": [ + "src/styles.less", + "src/assets/common-assets/library-css/material.scss" + ], + "scripts": [ + "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": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + }, + "fonts": true + }, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ] + }, + "beta": { + "assets": [ + "src/assets", + { + "input": "src/beta/", + "output": "/", + "glob": "*.txt" + } + ], + "index": { + "input": "src/beta/index.html", + "output": "index.html" + }, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.beta.ts" + } + ], + "optimization": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + }, + "fonts": true + }, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ] + }, + "production": { + "assets": [ + "src/assets", + { + "input": "src/prod/", + "output": "/", + "glob": "*.txt" + } + ], + "index": { + "input": "src/prod/index.html", + "output": "index.html" + }, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + }, + "fonts": true + }, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb" + } + ] + } + }, + "defaultConfiguration": "" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "eosc:build" + }, + "configurations": { + "production": { + "browserTarget": "eosc:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "eosc:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "karmaConfig": "src/karma.conf.js", + "styles": [ + "src/styles.less" + ], + "scripts": [], + "assets": [ + "src/assets" + ] + } + }, + "server": { + "builder": "@angular-devkit/build-angular:server", + "options": { + "outputPath": "dist/eosc/server", + "main": "server.ts", + "tsConfig": "src/tsconfig.server.json", + "sourceMap": true, + "optimization": false + }, + "configurations": { + "development": { + "outputHashing": "media", + "sourceMap": false, + "optimization": true + }, + "beta": { + "outputHashing": "media", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.beta.ts" + } + ], + "sourceMap": false, + "optimization": true + }, + "production": { + "outputHashing": "media", + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "sourceMap": false, + "optimization": true + } + }, + "defaultConfiguration": "" + }, + "serve-ssr": { + "builder": "@nguniversal/builders:ssr-dev-server", + "options": { + "browserTarget": "eosc:build", + "serverTarget": "eosc:server" + }, + "configurations": { + "production": { + "browserTarget": "eosc:build:production", + "serverTarget": "eosc:server:production" + } + } + }, + "prerender": { + "builder": "@nguniversal/builders:prerender", + "options": { + "browserTarget": "eosc:build:production", + "serverTarget": "eosc:server:production", + "routes": [ + "/" + ] + }, + "configurations": { + "production": {} + } + } + } + }, + "eosc-e2e": { + "root": "e2e/", + "projectType": "application", + "prefix": "", + "architect": { + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "eosc:serve" + }, + "configurations": { + "production": { + "devServerTarget": "eosc:serve:production" + } + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/e2e/protractor.conf.js b/e2e/protractor.conf.js new file mode 100644 index 0000000..86776a3 --- /dev/null +++ b/e2e/protractor.conf.js @@ -0,0 +1,28 @@ +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require('jasmine-spec-reporter'); + +exports.config = { + allScriptsTimeout: 11000, + specs: [ + './src/**/*.e2e-spec.ts' + ], + capabilities: { + 'browserName': 'chrome' + }, + directConnect: true, + baseUrl: 'http://localhost:4200/', + framework: 'jasmine', + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require('ts-node').register({ + project: require('path').join(__dirname, './tsconfig.e2e.json') + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; \ No newline at end of file diff --git a/e2e/src/app.e2e-spec.ts b/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..4cad9ad --- /dev/null +++ b/e2e/src/app.e2e-spec.ts @@ -0,0 +1,23 @@ +import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getTitleText()).toEqual('Welcome to aggregator!'); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); + }); +}); diff --git a/e2e/src/app.po.ts b/e2e/src/app.po.ts new file mode 100644 index 0000000..5776aa9 --- /dev/null +++ b/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from 'protractor'; + +export class AppPage { + navigateTo() { + return browser.get(browser.baseUrl) as Promise; + } + + getTitleText() { + return element(by.css('app-root h1')).getText() as Promise; + } +} diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json new file mode 100644 index 0000000..a6dd622 --- /dev/null +++ b/e2e/tsconfig.e2e.json @@ -0,0 +1,13 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "module": "commonjs", + "target": "es5", + "types": [ + "jasmine", + "jasminewd2", + "node" + ] + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..bad0b03 --- /dev/null +++ b/package.json @@ -0,0 +1,72 @@ +{ + "name": "eosc", + "version": "3.1.0", + "scripts": { + "ng": "ng", + "start": "ng serve --disable-host-check --host 0.0.0.0 --port 5200", + "build": "ng build", + "build-dev": "ng build --configuration=development", + "build-beta": "ng build --configuration=beta", + "build-prod": "ng build --configuration production", + "webpack-bundle-analyzer": "ng build --stats-json && webpack-bundle-analyzer dist/eosc/browser/stats-es2015.json --host 0.0.0.0", + "test": "ng test", + "e2e": "ng e2e", + "dev:ssr": "ng run eosc:serve-ssr", + "serve:ssr": "node dist/eosc/server/main.js", + "build:ssr-dev": "npm run build-dev && ng run eosc:server:development", + "build:ssr-beta": "npm run build-beta && ng run eosc:server:beta", + "build:ssr-prod": "npm run build-prod && ng run eosc:server:production", + "prerender": "ng run eosc:prerender", + "after-build-clean": "rm -rf dist/eosc/browser/assets/common-assets/.git/ src/app/openaireLibrary/.git node_modules .angular .git*" + }, + "private": true, + "dependencies": { + "@angular/animations": "^14.2.3", + "@angular/cdk": "^14.2.2", + "@angular/common": "^14.2.3", + "@angular/compiler": "^14.2.3", + "@angular/core": "^14.2.3", + "@angular/forms": "^14.2.3", + "@angular/localize": "^14.2.3", + "@angular/material": "^14.2.2", + "@angular/platform-browser": "^14.2.3", + "@angular/platform-browser-dynamic": "^14.2.3", + "@angular/platform-server": "^14.2.3", + "@angular/router": "^14.2.3", + "@nguniversal/express-engine": "^14.2.0", + "clipboard": "^1.5.16", + "core-js": "^2.5.4", + "express": "^4.15.2", + "jquery": "^3.4.1", + "ng-recaptcha": "^10.0.0", + "prom-client": "^11.3.0", + "rxjs": "^6.5.1", + "ts-md5": "^1.2.0", + "tslib": "^2.0.0", + "uikit": "3.13.10", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^14.2.3", + "@angular/cli": "^14.2.3", + "@angular/compiler-cli": "^14.2.3", + "@angular/language-service": "^14.2.3", + "@nguniversal/builders": "^14.2.0", + "@types/express": "^4.17.0", + "@types/compression": "^1.7.0", + "@types/node": "^12.11.1", + "@types/jasmine": "~3.6.0", + "@types/jasminewd2": "~2.0.3", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.8.0", + "jasmine-spec-reporter": "~5.0.0", + "karma": "~6.3.3", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage-istanbul-reporter": "~3.0.2", + "karma-jasmine": "~4.0.0", + "karma-jasmine-html-reporter": "^1.6.0", + "protractor": "~7.0.0", + "ts-node": "~7.0.0", + "typescript": "~4.6.4" + } +} diff --git a/prometheus.ts b/prometheus.ts new file mode 100644 index 0000000..26bdbf4 --- /dev/null +++ b/prometheus.ts @@ -0,0 +1,125 @@ +import * as prom from 'prom-client'; + + +export class Prometheus { + + register = new prom.Registry(); + + counters: Map = new Map([ + ["/", new prom.Counter({ + name: 'home', + help: 'Home Page Counter', + registers: [this.register] + })], + ["/search/publication", new prom.Counter({ + name: 'search_publication', + help: 'Publication Landing Page Counter', + registers: [this.register] + })], + ["/search/dataset", new prom.Counter({ + name: 'search_dataset', + help: 'Dataset Landing Page Counter', + registers: [this.register] + })], + ["/search/software", new prom.Counter({ + name: 'search_software', + help: 'Software Landing Page Counter', + registers: [this.register] + })], + ["/search/other", new prom.Counter({ + name: 'search_other', + help: 'Other Landing Page Counter', + registers: [this.register] + })], + ["/search/project", new prom.Counter({ + name: 'search_project', + help: 'Project Landing Page Counter', + registers: [this.register] + })], + ["/search/dataprovider", new prom.Counter({ + name: 'search_dataprovider', + help: 'DataProvider Landing Page Counter', + registers: [this.register] + })], + ["/search/organization", new prom.Counter({ + name: 'search_organization', + help: 'organization Landing Page Counter', + registers: [this.register] + })], + ["/search/find", new prom.Counter({ + name: 'search_find', + help: 'Main Search Page Counter', + registers: [this.register] + })], + ["/search/find/publications", new prom.Counter({ + name: 'search_find_publications', + help: 'Publications Search Page Counter', + registers: [this.register] + })], + ["/search/find/datasets", new prom.Counter({ + name: 'search_find_datasets', + help: 'Datasets Search Page Counter', + registers: [this.register] + })], + ["/search/find/software", new prom.Counter({ + name: 'search_find_software', + help: 'Software Search Page Counter', + registers: [this.register] + })], + ["/search/find/other", new prom.Counter({ + name: 'search_find_other', + help: 'Other Search Page Counter', + registers: [this.register] + })], + ["/search/find/projects", new prom.Counter({ + name: 'search_find_projects', + help: 'Projects Search Page Counter', + registers: [this.register] + })], + ["/search/find/dataproviders", new prom.Counter({ + name: 'search_find_dataproviders', + help: 'DataProviders Search Page Counter', + registers: [this.register] + })], + ["/search/find/organizations", new prom.Counter({ + name: 'search_find_organizations', + help: 'Organizations Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/publications", new prom.Counter({ + name: 'search_advanced_publications', + help: 'Publications Advanced Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/datasets", new prom.Counter({ + name: 'search_advanced_datasets', + help: 'Datasets Advanced Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/software", new prom.Counter({ + name: 'search_advanced_software', + help: 'Software Advanced Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/other", new prom.Counter({ + name: 'search_advanced_other', + help: 'Other Advanced Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/projects", new prom.Counter({ + name: 'search_advanced_projects', + help: 'Projects Advanced Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/dataproviders", new prom.Counter({ + name: 'search_advanced_dataproviders', + help: 'DataProviders Advanced Search Page Counter', + registers: [this.register] + })], + ["/search/advanced/organizations", new prom.Counter({ + name: 'search_advanced_organizations', + help: 'Organizations Advanced Search Page Counter', + registers: [this.register] + })] + ]); +} diff --git a/server.ts b/server.ts new file mode 100644 index 0000000..0a5218d --- /dev/null +++ b/server.ts @@ -0,0 +1,110 @@ +import 'zone.js/node'; + +import { ngExpressEngine } from '@nguniversal/express-engine'; +import * as express from 'express'; +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 {Prometheus} from "./prometheus"; +import {Counter} from "prom-client"; +import {REQUEST, RESPONSE} from "./src/app/openaireLibrary/utils/tokens"; + +// The Express app is exported so that it can be used by serverless Functions. +export function app() { + const server = express(); + server.use(compression()); + const distFolder = join(process.cwd(), 'dist/eosc/browser'); + const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index'; + + const prometheus: Prometheus = new Prometheus(); + + // 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 + // server.get('/api/**', (req, res) => { }); + // Serve static files from /browser + server.get('*.*', express.static(distFolder, { + maxAge: '1y' + })); + + server.get('/metrics', (req, res) => { + res.set('Content-Type', prometheus.register.contentType); + res.end(prometheus.register.metrics()); + }); + + // All regular routes use the Universal engine + server.get('*', (req, res) => { + let start = new Date(); + let counter: Counter = prometheus.counters.get(req.path); + if(counter !== undefined) { + counter.inc(1, new Date()); + res.render(indexHtml, { + req, providers: [ + { + provide: APP_BASE_HREF, + useValue: req.baseUrl + }, + { + provide: REQUEST, useValue: (req) + }, + { + provide: RESPONSE, useValue: (res) + } + ] + }); + // event triggers when express is done sending response + res.on('finish', function() { + console.log(new Date().getTime() - start.getTime()); + }); + } else { + res.render(indexHtml, { + req, providers: [ + { + provide: APP_BASE_HREF, + useValue: req.baseUrl + }, + { + provide: REQUEST, useValue: (req) + }, + { + provide: RESPONSE, useValue: (res) + } + ] + }); + } + }); + + return server; +} + +function run() { + const port = process.env.PORT || 4000; + + // Start up the Node server + const server = app(); + server.listen(port, () => { + console.log(`Node Express server listening on http://localhost:${port}`); + }); +} + +// Webpack will replace 'require' with '__webpack_require__' +// '__non_webpack_require__' is a proxy to Node 'require' +// The below code is to ensure that the server is run only when not requiring the bundle. +declare const __non_webpack_require__: NodeRequire; +const mainModule = __non_webpack_require__.main; +const moduleFilename = mainModule && mainModule.filename || ''; +if (moduleFilename === __filename || moduleFilename.includes('iisnode')) { + run(); +} + +export * from './src/main.server'; diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 0000000..6c12df9 --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,136 @@ +import {NgModule} from '@angular/core'; +import {Router, RouterModule, Routes} from '@angular/router'; +import {OpenaireErrorPageComponent} from './error/errorPage.component'; +import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service"; + +const routes: Routes = [ + {path: '', loadChildren: () => import('./home/home.module').then(m => m.HomeModule)}, + { + path: 'search/result', + loadChildren: () => import('./landingPages/result/libResult.module').then(m => m.LibResultModule), data: { showHeader: true} + }, + { + path: 'search/publication', + loadChildren: () => import('./landingPages/publication/libPublication.module').then(m => m.LibPublicationModule), data: { showHeader: true} + }, + { + path: 'search/dataset', + loadChildren: () => import('./landingPages/dataset/libDataset.module').then(m => m.LibDatasetModule), data: { showHeader: true} + }, + { + path: 'search/software', + loadChildren: () => import('./landingPages/software/libSoftware.module').then(m => m.LibSoftwareModule), data: { showHeader: true} + }, + { + path: 'search/other', + loadChildren: () => import('./landingPages/orp/libOrp.module').then(m => m.LibOrpModule), data: { showHeader: true} + }, + { + path: 'search/project', + loadChildren: () => import('./landingPages/project/libProject.module').then(m => m.LibProjectModule), data: { showHeader: true} + }, + { + path: 'search/dataprovider', + loadChildren: () => import('./landingPages/dataProvider/libDataProvider.module').then(m => m.LibDataProviderModule), data: { showHeader: true} + }, + { + path: 'search/service', + loadChildren: () => import('./landingPages/service/libService.module').then(m => m.LibServiceModule), data: { showHeader: true} + }, + { + path: 'search/organization', + loadChildren: () => import('./landingPages/organization/libOrganization.module').then(m => m.LibOrganizationModule), data: { showHeader: true} + }, + { + path: 'search/find', + redirectTo: '' + // loadChildren: () => import('./searchPages/find/libSearch.module').then(m => m.LibMainSearchModule) + }, + { + path: 'search/find/research-outcomes', + redirectTo: '' + // loadChildren: () => import('./searchPages/simple/searchResearchResults.module').then(m => m.OpenaireSearchResearchResultsModule) + }, + { + path: 'search/find/projects', + redirectTo: '' + // loadChildren: () => import('./searchPages/simple/searchProjects.module').then(m => m.LibSearchProjectsModule) + }, + { + path: 'search/find/dataproviders', + redirectTo: '' + // loadChildren: () => import('./searchPages/simple/searchDataProviders.module').then(m => m.LibSearchDataProvidersModule) + }, + { + path: 'search/find/services', + redirectTo: '' + // loadChildren: () => import('./searchPages/simple/searchServices.module').then(m => m.LibSearchServicesModule) + }, + { + path: 'search/find/organizations', + redirectTo: '' + // loadChildren: () => import('./searchPages/simple/searchOrganizations.module').then(m => m.LibSearchOrganizationsModule) + }, + { + path: 'search/advanced/research-outcomes', + redirectTo: '' + // loadChildren: () => import('./searchPages/advanced/searchResearchResults.module').then(m => m.OpenaireAdvancedSearchResearchResultsModule) + }, + { + path: 'search/advanced/organizations', + redirectTo: '' + // loadChildren: () => import('./searchPages/advanced/advancedSearchOrganizations.module').then(m => m.LibAdvancedSearchOrganizationsModule) + }, + { + path: 'search/advanced/dataproviders', + redirectTo: '' + // loadChildren: () => import('./searchPages/advanced/advancedSearchDataProviders.module').then(m => m.LibAdvancedSearchDataProvidersModule) + }, + { + path: 'search/advanced/services', + redirectTo: '' + // loadChildren: () => import('./searchPages/advanced/advancedSearchServices.module').then(m => m.LibAdvancedSearchServicesModule) + }, + { + path: 'search/advanced/projects', + redirectTo: '' + // loadChildren: () => import('./searchPages/advanced/advancedSearchProjects.module').then(m => m.LibAdvancedSearchProjectsModule) + }, + { + path: 'reload', + loadChildren: () => import('./reload/libReload.module').then(m => m.LibReloadModule), + data: {hasSidebar: false} + }, + {path: 'user-info', loadChildren: () => import('./login/libUser.module').then(m => m.LibUserModule)}, + {path: 'error', component: OpenaireErrorPageComponent} +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes, { + onSameUrlNavigation: "reload", + })], + exports: [RouterModule] +}) +export class AppRoutingModule { + subs = []; + enabledRoutes =[]; + ngOnDestroy() { + for (let sub of this.subs) { + sub.unsubscribe(); + } + } + constructor( private config: ConfigurationService, private router: Router){ + this.subs.push(this.config.portalAsObservable.subscribe(data => { + if (data) { + if (data['pages']) { + for (var i = 0; i < data['pages'].length; i++) { + this.enabledRoutes[data['pages'][i]['route']] = data['pages'][i]['isEnabled']; + } + } + } + }, + error => { + // this.handleError('Error getting community information (e.g. pages,entities) for community with id: ' + this.communityId, error); + })); + } +} diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..d794d09 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,163 @@ +import {Component, Inject, RendererFactory2, ViewEncapsulation} from '@angular/core'; +import {EnvProperties} from './openaireLibrary/utils/properties/env-properties'; +import {MenuItem} from './openaireLibrary/sharedComponents/menu'; +import {AggregatorInfo, PortalAggregators} from "./utils/aggregators"; +import {UserManagementService} from "./openaireLibrary/services/user-management.service"; +import {User} from "./openaireLibrary/login/utils/helper.class"; +import {Header} from "./openaireLibrary/sharedComponents/navigationBar.component"; +import {portalProperties} from "../environments/environment-aggregator"; +import {properties} from "../environments/environment"; +import {ConnectHelper} from "./openaireLibrary/connect/connectHelper"; +import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service"; +import {Subscriber} from "rxjs"; +import {DOCUMENT} from "@angular/common"; +import {SmoothScroll} from "./openaireLibrary/utils/smooth-scroll"; +import {ActivatedRoute, NavigationEnd, Router} from "@angular/router"; +import {OpenaireEntities} from "./openaireLibrary/utils/properties/searchFields"; + +@Component({ + selector: 'app-root', + template: ` + +
+ + + + +
+
+ +
+
+
+ ` +}) +export class AppComponent { + isClient: boolean = false; + menuItems: MenuItem [] = []; + userMenuItems: MenuItem[] = []; + community = null; + properties: EnvProperties = properties; + user: User; + loginCheck: boolean = false; + footer = portalProperties.sectionFooter; + header: Header; + showHeader; + agg: AggregatorInfo = null; + subscriptions = []; + + constructor(private userManagementService: UserManagementService, + private configurationService: ConfigurationService, private smoothScroll: SmoothScroll, + @Inject(DOCUMENT) private document, private rendererFactory: RendererFactory2, private router: Router, private route: ActivatedRoute) { + this.agg = PortalAggregators.eoscInfo; + this.setStyles(); + this.configurationService.initStaticPortal(PortalAggregators.getCommunityInfo()); + this.showHeader = this.agg.showHeaderAlways; + } + + ngOnInit() { + this.subscriptions.push(this.router.events.subscribe(event => { + if (event instanceof NavigationEnd) { + let r = this.route; + while (r.firstChild) { + r = r.firstChild; + } + this.showHeader = (r.snapshot.data.showHeader == true || this.agg.showHeaderAlways); + } + })); + if (typeof document !== 'undefined') { + this.isClient = true; + } + this.agg = PortalAggregators.eoscInfo; + if (this.agg) { + this.header = { + route: '/', + url: null, + title: this.agg.title, + logoUrl: this.agg.logoUrl, + logoSmallUrl: this.agg.logoUrl, + position: 'center', + menuPosition: 'center', + badge: false, + darkBg: true + }; + this.buildMenu(); + } + this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => { + this.user = user; + this.loginCheck = true; + this.userMenuItems = []; + if (this.user) { + this.userMenuItems.push(new MenuItem("", "My links", "", "/myclaims", false, [], [], {})); + // this.userMenuItems.push(new MenuItem("", "User information", "", "/user-info", false, [], [], {})); + } + })); + } + + ngOnDestroy() { + this.subscriptions.forEach(subscription => { + if (subscription instanceof Subscriber) { + subscription.unsubscribe(); + } + }); + this.configurationService.clearSubscriptions(); + this.userManagementService.clearSubscriptions(); + this.smoothScroll.clearSubscriptions(); + } + + private buildMenu() { + this.menuItems = [ + new MenuItem("home", "Home", "", "/", false, [], null, {}), + new MenuItem("search", "Search", "", "/search/find", false, [], ["/search/find"], {}), + new MenuItem("deposit", "Deposit", "", "/participate/deposit/learn-how", false, [], ["/participate/deposit/learn-how"], {}), + new MenuItem("link", "Link", "", "/participate/claim", false, [], ["/participate/claim"], {}, + null, null, null, null, "_blank", "internal", false, + [ + new MenuItem("", "Start linking", "", "/participate/claim", false, [], ["/participate/claim"], {}), + new MenuItem("", "Learn more", this.properties.claimsInformationLink, "", false, [], [], {}) + ] + ), + new MenuItem("develop", "Develop", "", "/develop", false, [], ["/develop"], {}) + ]; + let params = {}; + // params[this.agg.queryFieldName] = this.agg.valueId; + this.menuItems[1].items.push(new MenuItem("", OpenaireEntities.RESULTS, "", properties.searchLinkToResults, false, [], ["/search/find/research-outcomes"], params)); + this.menuItems[1].items.push(new MenuItem("", OpenaireEntities.PROJECTS, "", properties.searchLinkToProjects, false, ["project"], ["/search/find/projects"], params)); + this.menuItems[1].items.push(new MenuItem("", OpenaireEntities.DATASOURCES, "", properties.searchLinkToDataProviders, false, ["datasource"], ["/search/find/dataproviders"], params)); + this.menuItems[1].items.push(new MenuItem("", OpenaireEntities.SERVICES, "", properties.searchLinkToServices, false, ["service"], ["/search/find/services"], params)); + this.menuItems[1].items.push(new MenuItem("", OpenaireEntities.ORGANIZATIONS, "", properties.searchLinkToOrganizations, false, ["organization"], ["/search/find/organizations"], params)); + + } + setStyles(){ + let css:string = this.agg.customCss; + try { + if( this.document.getElementById('customStyle')){ + try { + this.document.getElementById('customStyle').append(css); + }catch(e){ + console.log("error with append style") + } + }else { + const renderer = this.rendererFactory.createRenderer(this.document, { + id: '-1', + encapsulation: ViewEncapsulation.None, + styles: [], + data: {} + }); + + const head = this.document.head; + if (head === null) { + throw new Error(' not found within DOCUMENT.'); + } + const style = renderer.createElement('style'); + renderer.setAttribute(style, "id", "customStyle"); + let CSSElement = renderer.createText(css); + renderer.appendChild(head, style); + renderer.appendChild(style, CSSElement); + } + } catch (e) { + console.error('Renderrer Error to append style ', e); + } + } + +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100755 index 0000000..0534261 --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,54 @@ +import {NgModule} from '@angular/core'; +import {SharedModule} from './shared/shared.module'; +import {BrowserModule, BrowserTransferStateModule} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {CommonModule} from '@angular/common'; +import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http'; +import {AppComponent} from './app.component'; +import {NavigationBarModule} from './openaireLibrary/sharedComponents/navigationBar.module'; +import {CookieLawModule} from './openaireLibrary/sharedComponents/cookie-law/cookie-law.module'; +import {BottomModule} from './openaireLibrary/sharedComponents/bottom.module'; +import {FeedbackModule} from './openaireLibrary/sharedComponents/feedback/feedback.module'; +import {ErrorModule} from './openaireLibrary/error/error.module'; +import {OpenaireErrorPageComponent} from './error/errorPage.component'; +import {AppRoutingModule} from './app-routing.module'; +import {HttpInterceptorService} from "./openaireLibrary/http-interceptor.service"; +import {ErrorInterceptorService} from "./openaireLibrary/error-interceptor.service"; +import {DEFAULT_TIMEOUT, TimeoutInterceptor} from "./openaireLibrary/timeout-interceptor.service"; +import {ConfigurationService} from "./openaireLibrary/utils/configuration/configuration.service"; + +@NgModule({ + imports: [ + SharedModule, + BrowserAnimationsModule, + CommonModule, + HttpClientModule, + ErrorModule, + NavigationBarModule, FeedbackModule, BottomModule, + CookieLawModule, + BrowserAnimationsModule, + BrowserTransferStateModule, + BrowserModule.withServerTransition({appId: 'eosc'}), + AppRoutingModule + ], + declarations: [AppComponent, OpenaireErrorPageComponent], + exports: [AppComponent], + providers: [ + ConfigurationService, + { + provide: HTTP_INTERCEPTORS, + useClass: HttpInterceptorService, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: ErrorInterceptorService, + multi: true + }, + [{provide: HTTP_INTERCEPTORS, useClass: TimeoutInterceptor, multi: true}], + [{provide: DEFAULT_TIMEOUT, useValue: 30000}] + ], + bootstrap: [AppComponent] +}) +export class AppModule { +} diff --git a/src/app/app.server.module.ts b/src/app/app.server.module.ts new file mode 100644 index 0000000..cc86a55 --- /dev/null +++ b/src/app/app.server.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import {ServerModule, ServerTransferStateModule} from '@angular/platform-server'; + +import { AppModule } from './app.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + AppModule, + ServerModule, + ServerTransferStateModule + ], + bootstrap: [AppComponent], +}) +export class AppServerModule {} diff --git a/src/app/claims/directLinking/directLinking-routing.module.ts b/src/app/claims/directLinking/directLinking-routing.module.ts new file mode 100644 index 0000000..45d32e6 --- /dev/null +++ b/src/app/claims/directLinking/directLinking-routing.module.ts @@ -0,0 +1,21 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireDirectLinkingComponent} from './directLinking.component'; +import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard"; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireDirectLinkingComponent, canActivate: [IsRouteEnabled, LoginGuard], data: { + redirect: properties.errorLink, community : 'openaire' + }, canDeactivate: [PreviousRouteRecorder]}, + + ]) + ] +}) +export class DirectLinkingRoutingModule { } diff --git a/src/app/claims/directLinking/directLinking.component.ts b/src/app/claims/directLinking/directLinking.component.ts new file mode 100644 index 0000000..efab6dd --- /dev/null +++ b/src/app/claims/directLinking/directLinking.component.ts @@ -0,0 +1,10 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; + +@Component({ + selector: 'openaire-directLinking', + template: ` + ` +}) +export class OpenaireDirectLinkingComponent { +} diff --git a/src/app/claims/directLinking/directLinking.module.ts b/src/app/claims/directLinking/directLinking.module.ts new file mode 100644 index 0000000..34e279d --- /dev/null +++ b/src/app/claims/directLinking/directLinking.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; + +import { SharedModule } from '../../shared/shared.module'; +import { OpenaireDirectLinkingComponent } from './directLinking.component'; +import{ DirectLinkingModule} from '../../openaireLibrary/claims/directLinking/directLinking.module'; +import {DirectLinkingRoutingModule} from './directLinking-routing.module'; +import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard'; + +@NgModule({ + imports: [ + SharedModule, DirectLinkingModule, DirectLinkingRoutingModule + ], + providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], + declarations: [ + OpenaireDirectLinkingComponent + ], exports:[OpenaireDirectLinkingComponent] +}) +export class LibDirectLinkingModule { } diff --git a/src/app/claims/linking/linking-routing.module.ts b/src/app/claims/linking/linking-routing.module.ts new file mode 100644 index 0000000..40d66a5 --- /dev/null +++ b/src/app/claims/linking/linking-routing.module.ts @@ -0,0 +1,20 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireLinkingComponent} from './linkingGeneric.component'; +import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard"; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireLinkingComponent, canActivate: [IsRouteEnabled, LoginGuard], data: { + redirect: properties.errorLink, community : 'openaire' + }, canDeactivate: [PreviousRouteRecorder]}, + + ]) + ] +}) +export class LinkingRoutingModule { } diff --git a/src/app/claims/linking/linkingGeneric.component.ts b/src/app/claims/linking/linkingGeneric.component.ts new file mode 100644 index 0000000..d7c5b1b --- /dev/null +++ b/src/app/claims/linking/linkingGeneric.component.ts @@ -0,0 +1,10 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; + +@Component({ + selector: 'openaire-linking-generic', + template: `` + +}) +export class OpenaireLinkingComponent { +} diff --git a/src/app/claims/linking/linkingGeneric.module.ts b/src/app/claims/linking/linkingGeneric.module.ts new file mode 100644 index 0000000..95ae3ed --- /dev/null +++ b/src/app/claims/linking/linkingGeneric.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; + +import { SharedModule } from '../../shared/shared.module'; +import {OpenaireLinkingComponent} from './linkingGeneric.component'; +import {LinkingRoutingModule} from './linking-routing.module'; +import{ LinkingGenericModule} from '../../openaireLibrary/claims/linking/linkingGeneric.module'; +import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard'; + +@NgModule({ + imports: [ + SharedModule, LinkingRoutingModule, LinkingGenericModule + ], + providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], + declarations: [ + OpenaireLinkingComponent + ], exports:[ + OpenaireLinkingComponent ] +}) +export class LibLinkingGenericModule { } diff --git a/src/app/claims/myClaims/myClaims-routing.module.ts b/src/app/claims/myClaims/myClaims-routing.module.ts new file mode 100644 index 0000000..ca7e43f --- /dev/null +++ b/src/app/claims/myClaims/myClaims-routing.module.ts @@ -0,0 +1,18 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireMyClaimsComponent} from './myClaims.component'; +import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from "../../openaireLibrary/error/isRouteEnabled.guard"; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireMyClaimsComponent, canActivate: [IsRouteEnabled, LoginGuard], + data: {redirect: properties.errorLink, community : 'openaire'}, canDeactivate: [PreviousRouteRecorder]}]) + ] +}) +export class MyClaimsRoutingModule { } diff --git a/src/app/claims/myClaims/myClaims.component.ts b/src/app/claims/myClaims/myClaims.component.ts new file mode 100644 index 0000000..c60df6e --- /dev/null +++ b/src/app/claims/myClaims/myClaims.component.ts @@ -0,0 +1,36 @@ +import {Component} from '@angular/core'; +import {ActivatedRoute} from '@angular/router'; +import {EnvProperties} from '../../openaireLibrary/utils/properties/env-properties'; +import {Subscriber} from "rxjs"; +import {properties} from "../../../environments/environment"; + + + +@Component({ + selector: 'openaire-my-claims', + template: ` + + +` + +}) + export class OpenaireMyClaimsComponent { + claimsInfoURL:string; + userInfoURL: string; + sub; + + constructor (private route: ActivatedRoute) { + } + ngOnDestroy() { + if (this.sub instanceof Subscriber) { + this.sub.unsubscribe(); + } + } + public ngOnInit() { + this.sub = this.route.data + .subscribe((data: { envSpecific: EnvProperties }) => { + this.claimsInfoURL = data.envSpecific.claimsInformationLink; + this.userInfoURL = data.envSpecific.userInfoUrl; + }); + } +} diff --git a/src/app/claims/myClaims/myClaims.module.ts b/src/app/claims/myClaims/myClaims.module.ts new file mode 100644 index 0000000..8402be1 --- /dev/null +++ b/src/app/claims/myClaims/myClaims.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; + +import { SharedModule } from '../../shared/shared.module'; +import { OpenaireMyClaimsComponent } from './myClaims.component'; +import { MyClaimsRoutingModule } from './myClaims-routing.module'; +import{ MyClaimsModule} from '../../openaireLibrary/claims/myClaims/myClaims.module'; +import {LoginGuard} from '../../openaireLibrary/login/loginGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from '../../openaireLibrary/error/isRouteEnabled.guard'; + + +@NgModule({ + imports: [ + SharedModule, + MyClaimsRoutingModule, + MyClaimsModule + + ], + providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled], + declarations: [ + OpenaireMyClaimsComponent + ] +}) +export class LibMyClaimsModule { } diff --git a/src/app/deposit/deposit-routing.module.ts b/src/app/deposit/deposit-routing.module.ts new file mode 100644 index 0000000..8af8110 --- /dev/null +++ b/src/app/deposit/deposit-routing.module.ts @@ -0,0 +1,18 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireDepositComponent} from './deposit.component'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard"; +import {properties} from "../../environments/environment"; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireDepositComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder], canActivate: [IsRouteEnabled] } + + ]) + ] +}) +export class DepositRoutingModule { } diff --git a/src/app/deposit/deposit.component.ts b/src/app/deposit/deposit.component.ts new file mode 100644 index 0000000..e305fd2 --- /dev/null +++ b/src/app/deposit/deposit.component.ts @@ -0,0 +1,12 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-deposit', + template: ` + + ` +}) + +export class OpenaireDepositComponent { +} + diff --git a/src/app/deposit/deposit.module.ts b/src/app/deposit/deposit.module.ts new file mode 100644 index 0000000..e32cbaa --- /dev/null +++ b/src/app/deposit/deposit.module.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + + +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard'; + +import {OpenaireDepositComponent} from "./deposit.component"; +import {DepositRoutingModule} from "./deposit-routing.module"; +import {DepositFirstPageModule} from "../openaireLibrary/deposit/depositFirstPage.module"; + +import {ZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/zenodo-communities.service"; +import {CommunityService} from "../openaireLibrary/connect/community/community.service"; +import {SearchZenodoCommunitiesService} from "../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunities.service"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + DepositRoutingModule, DepositFirstPageModule + ], + declarations: [ + OpenaireDepositComponent + ], + exports: [ + OpenaireDepositComponent, + ], + providers: [PreviousRouteRecorder, IsRouteEnabled, + ZenodoCommunitiesService, CommunityService, SearchZenodoCommunitiesService] +}) +export class LibDepositModule { } diff --git a/src/app/deposit/searchDataprovidersToDeposit-routing.module.ts b/src/app/deposit/searchDataprovidersToDeposit-routing.module.ts new file mode 100644 index 0000000..3dd5eb7 --- /dev/null +++ b/src/app/deposit/searchDataprovidersToDeposit-routing.module.ts @@ -0,0 +1,21 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireSearchDataprovidersToDepositComponent} from './searchDataprovidersToDeposit.component'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from "../openaireLibrary/error/isRouteEnabled.guard"; +import {properties} from "../../environments/environment"; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { + path: '', component: OpenaireSearchDataprovidersToDepositComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder], canActivate: [IsRouteEnabled] + } + + ]) + ] +}) +export class SearchDataprovidersToDepositRoutingModule { +} diff --git a/src/app/deposit/searchDataprovidersToDeposit.component.ts b/src/app/deposit/searchDataprovidersToDeposit.component.ts new file mode 100644 index 0000000..f4cffa0 --- /dev/null +++ b/src/app/deposit/searchDataprovidersToDeposit.component.ts @@ -0,0 +1,12 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-search-deposit', + template: ` + + ` +}) + +export class OpenaireSearchDataprovidersToDepositComponent { +} + diff --git a/src/app/deposit/searchDataprovidersToDeposit.module.ts b/src/app/deposit/searchDataprovidersToDeposit.module.ts new file mode 100644 index 0000000..2e76ce7 --- /dev/null +++ b/src/app/deposit/searchDataprovidersToDeposit.module.ts @@ -0,0 +1,31 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { OpenaireSearchDataprovidersToDepositComponent } from './searchDataprovidersToDeposit.component'; + +import {SearchDataprovidersToDepositRoutingModule} from './searchDataprovidersToDeposit-routing.module'; +import {SearchDataprovidersToDepositModule} from '../openaireLibrary/deposit/searchDataprovidersToDeposit.module'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {IsRouteEnabled} from '../openaireLibrary/error/isRouteEnabled.guard'; +import {ZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoCommunities/zenodo-communitiesService.module'; +import {SearchZenodoCommunitiesServiceModule} from '../openaireLibrary/connect/zenodoCommunities/searchZenodoCommunitiesService.module'; + +import {CommunityService} from '../openaireLibrary/connect/community/community.service'; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchDataprovidersToDepositModule, + SearchDataprovidersToDepositRoutingModule, + ZenodoCommunitiesServiceModule, SearchZenodoCommunitiesServiceModule + ], + declarations: [ + OpenaireSearchDataprovidersToDepositComponent + ], + exports: [ + OpenaireSearchDataprovidersToDepositComponent, + ], + providers: [PreviousRouteRecorder, IsRouteEnabled, CommunityService] +}) +export class LibSearchDataprovidersToDepositModule { } diff --git a/src/app/develop/develop.component.css b/src/app/develop/develop.component.css new file mode 100644 index 0000000..a1924dd --- /dev/null +++ b/src/app/develop/develop.component.css @@ -0,0 +1,60 @@ +.uk-card { + box-shadow: 0 6px 15px #0000001A; + border-radius: 36px; + padding: 65px; + font-family: "Roboto", sans-serif; + font-size: var(--large-font-size);; +} + +ul.portal-circle { + list-style: none; + padding-left: 40px; + font-family: "Open Sans", sans-serif; + font-size: var(--font-size);; +} + +ul.portal-circle li { + margin: 0 0 20px 0; + position: relative; +} + +ul.portal-circle li:before { + content: ""; + border: 5px var(--portal-main-color) solid !important; + border-radius: 50px; + line-height: 21px; + margin-left: -20px; + position: absolute; + top: 7px; +} + +.documentation { + max-width: 500px; + background: #EEF7E6; + border-radius: 15px; + padding: 30px; + font-family: "Open Sans", sans-serif; + font-size: var(--small-font-size); +} + +@media only screen and (max-width: 959px) { + .uk-card { + padding: 30px; + } + + ul.portal-circle { + padding-left: 20px; + } + + ul.light-blue-triangle li { + margin: 0 0 20px 0; + } + + ul.light-blue-circle.large li { + margin: 0 0 20px 0; + } + + .documentation { + padding: 10px; + } +} diff --git a/src/app/develop/develop.component.ts b/src/app/develop/develop.component.ts new file mode 100644 index 0000000..e3a892d --- /dev/null +++ b/src/app/develop/develop.component.ts @@ -0,0 +1,134 @@ +import {Component, OnInit} from "@angular/core"; +import {Meta, Title} from "@angular/platform-browser"; +import {SEOService} from "../openaireLibrary/sharedComponents/SEO/SEO.service"; +import {properties} from "../../environments/environment"; +import {Router} from "@angular/router"; +import {AggregatorInfo, PortalAggregators} from "../utils/aggregators"; +import {ConnectHelper} from "../openaireLibrary/connect/connectHelper"; +import {PiwikService} from "../openaireLibrary/utils/piwik/piwik.service"; +import {Subscription} from "rxjs"; + +@Component({ + selector: 'develop', + template: ` +
+
+
+

+ Develop +

+
+

Help developers with OpenAIRE APIs +

+
+ Not sure where to start? Let us give you some guides and request examples. +
+

+ For research outcomes + (publications, datasets, software and other research data) you can use the + Selective Access APIs + by adding the country parameter. +

+
+
+ +

+ Request examples: +

+
    +
  • + Access “Publications”
    + GET + https://api.openaire.eu/search/publications?country={{aggregator.valueId}} +
  • +
  • + Access “Open Access Publications”
    + GET + http://api.openaire.eu/search/publications?country={{aggregator.valueId}}&OA=true +
  • +
  • + Access “Datasets”
    + GET + https://api.openaire.eu/search/datasets?country={{aggregator.valueId}} +
  • +
  • + Access “Software”
    + GET + https://api.openaire.eu/search/software?country={{aggregator.valueId}} +
  • +
  • + Access “Other Research”
    + GET + https://api.openaire.eu/search/other?country={{aggregator.valueId}} +
  • +
+
+
+
+ +
+
+
+
+
+ For more information on the full potential of the OpenAIRE APIs please check + the OpenAIRE API Documentation. +
+
+
+
+
+
+ `, + styleUrls: ['develop.component.css'] +}) +export class DevelopComponent implements OnInit { + + public aggregator: AggregatorInfo = null; + subs: Subscription[] = []; + + constructor(private seoService: SEOService, + private _meta: Meta, + private _router: Router, + private _title: Title, private _piwikService:PiwikService) { + } + public ngOnDestroy() { + for (let sub of this.subs) { + sub.unsubscribe(); + } + } + ngOnInit() { + + this.aggregator = PortalAggregators.eoscInfo; + if (this.aggregator) { + + /* Metadata */ + const url = properties.domain + properties.baseLink + this._router.url; + this.seoService.createLinkForCanonicalURL(url, false); + this._meta.updateTag({content: url}, "property='og:url'"); + const description = "Develop | " + this.aggregator.valueName; + const title = "Develop | " + this.aggregator.valueName; + 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); + this.subs.push(this._piwikService.trackView(properties, "OpenAIRE").subscribe()); + }else { + this.navigateToError(); + } + + } + + private navigateToError() { + this._router.navigate([properties.errorLink], {queryParams: {'page': this._router.url}}); + } + + +} diff --git a/src/app/develop/develop.module.ts b/src/app/develop/develop.module.ts new file mode 100644 index 0000000..73d6fcc --- /dev/null +++ b/src/app/develop/develop.module.ts @@ -0,0 +1,21 @@ +import {NgModule} from "@angular/core"; +import {CommonModule} from "@angular/common"; +import {DevelopComponent} from "./develop.component"; +import {RouterModule} from "@angular/router"; +import {PreviousRouteRecorder} from "../openaireLibrary/utils/piwik/previousRouteRecorder.guard"; +import {PiwikServiceModule} from "../openaireLibrary/utils/piwik/piwikService.module"; + +@NgModule({ + declarations: [DevelopComponent], + imports: [CommonModule,PiwikServiceModule, RouterModule.forChild([ + { + path: '', + component: DevelopComponent, + canDeactivate: [PreviousRouteRecorder] + }, + ])], + exports: [DevelopComponent] +}) +export class DevelopModule { + +} diff --git a/src/app/error/errorPage.component.ts b/src/app/error/errorPage.component.ts new file mode 100644 index 0000000..52073bc --- /dev/null +++ b/src/app/error/errorPage.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'openaire-error', + template: ` + + ` +}) + +export class OpenaireErrorPageComponent { + +} diff --git a/src/app/home/home-routing.module.ts b/src/app/home/home-routing.module.ts new file mode 100644 index 0000000..89a7faa --- /dev/null +++ b/src/app/home/home-routing.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import{HomeComponent} from './home.component'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: HomeComponent,canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class HomeRoutingModule { } diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html new file mode 100644 index 0000000..f10560e --- /dev/null +++ b/src/app/home/home.component.html @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts new file mode 100644 index 0000000..d338016 --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,268 @@ +import {Component, Inject} from "@angular/core"; +import {DOCUMENT} from "@angular/common"; +import {Meta, Title} from "@angular/platform-browser"; +import {properties} from "../../environments/environment"; + +@Component({ + selector: 'home', + templateUrl: 'home.component.html', +}) +export class HomeComponent { + + constructor(@Inject(DOCUMENT) readonly document: Document, private _meta: Meta, private _title: Title) { + let title = "EOSC Explore"; + + this._title.setTitle(title); + this._meta.updateTag({content:title},"property='og:title'"); + } + + /** The Window object from Document defaultView */ + get window(): Window { + return this.document.defaultView; + } + + ngOnInit() { + // this.window.location.href = '...'; + if (typeof document !== 'undefined') { + this.window.open('https://'+(properties.environment == "beta" ? "beta." : "")+'search.marketplace.eosc-portal.eu/search/all?q=*', "_self"); + } + } +} + + + + +// import {ChangeDetectorRef, Component, Inject, ViewChild} from '@angular/core'; +// import {Subscription, zip} from 'rxjs'; +// import {ActivatedRoute, Router} from '@angular/router'; +// import {DOCUMENT, Location} from '@angular/common'; +// import {Meta, Title} from '@angular/platform-browser'; +// import {ConfigurationService} from '../openaireLibrary/utils/configuration/configuration.service'; +// import {SearchDataprovidersService} from '../openaireLibrary/services/searchDataproviders.service'; +// import {SearchProjectsService} from '../openaireLibrary/services/searchProjects.service'; +// import {SearchOrganizationsService} from '../openaireLibrary/services/searchOrganizations.service'; +// import {RefineFieldResultsService} from '../openaireLibrary/services/refineFieldResults.service'; +// import {OpenaireEntities, SearchFields} from '../openaireLibrary/utils/properties/searchFields'; +// +// import {RouterHelper} from '../openaireLibrary/utils/routerHelper.class'; +// import {EnvProperties} from '../openaireLibrary/utils/properties/env-properties'; +// import {ErrorCodes} from '../openaireLibrary/utils/properties/errorCodes'; +// import {PiwikService} from '../openaireLibrary/utils/piwik/piwik.service'; +// import {SEOService} from '../openaireLibrary/sharedComponents/SEO/SEO.service'; +// import {SearchResearchResultsService} from "../openaireLibrary/services/searchResearchResults.service"; +// import {HelperService} from "../openaireLibrary/utils/helper/helper.service"; +// import {Filter} from "../openaireLibrary/searchPages/searchUtils/searchHelperClasses.class"; +// import {AggregatorInfo, PortalAggregators} from "../utils/aggregators"; +// import {SearchCustomFilter} from "../openaireLibrary/searchPages/searchUtils/searchUtils.class"; +// import {properties} from "../../environments/environment"; +// import {portalProperties} from "../../environments/environment-aggregator"; +// +// @Component({ +// selector: 'home', +// templateUrl: 'home.component.html', +// }) +// export class HomeComponent { +// public keyword:string = ""; +// +// public searchFields:SearchFields = new SearchFields(); +// public errorCodes:ErrorCodes = new ErrorCodes(); +// public routerHelper:RouterHelper = new RouterHelper(); +// showPublications: boolean = portalProperties.entities.publication.isEnabled; +// showDatasets: boolean = portalProperties.entities.dataset.isEnabled; +// showSoftware: boolean = portalProperties.entities.software.isEnabled; +// showOrp: boolean = portalProperties.entities.other.isEnabled; +// showOrganizations: boolean = portalProperties.entities.organization.isEnabled; +// showProjects: boolean = portalProperties.entities.project.isEnabled; +// showDataProviders: boolean = portalProperties.entities.datasource.isEnabled; +// properties: EnvProperties = properties; +// public readMore: boolean = false; +// +// private noOfFunders = 3; +// public funders = []; +// +// subs: Subscription[] = []; +// +// resultsQuickFilter: { filter: Filter, selected: boolean, filterId: string, value: string } = { +// filter: null, +// selected: true, +// filterId: "resultbestaccessright", +// value: "Open Access" +// }; +// selectedEntity = "all"; +// disableSelect: boolean = true; +// selectedEntitySimpleUrl; +// selectedEntityAdvancedUrl; +// resultTypes:Filter = {values:[],filterId:"type", countSelectedValues: 0, filterType: 'checkbox', originalFilterId: "", valueIsExact: true, title: "Result Types",filterOperator:"or"}; +// public pageContents = null; +// customFilter:SearchCustomFilter= null; +// aggregator:AggregatorInfo; +// +// constructor ( +// private route: ActivatedRoute, +// private _router: Router, +// private _searchResearchResultsService: SearchResearchResultsService, +// private _searchDataprovidersService: SearchDataprovidersService, +// private _searchProjectsService: SearchProjectsService, +// private _searchOrganizationsService: SearchOrganizationsService, +// private _refineFieldResultsService:RefineFieldResultsService, +// private location: Location, private _piwikService:PiwikService, +// private config: ConfigurationService, private _meta: Meta, private _title: Title, private seoService: SEOService, +// private helper: HelperService, private cdr: ChangeDetectorRef +// ) { +// this.aggregator = PortalAggregators.eoscInfo; +// this.customFilter = PortalAggregators.getSearchCustomFilterByAggregator(); +// 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 title = "OpenAIRE - Explore| " +this.aggregator.title; +// +// this._title.setTitle(title); +// this._meta.updateTag({content:description},"name='description'"); +// this._meta.updateTag({content:description},"property='og:description'"); +// this._meta.updateTag({content:title},"property='og:title'"); +// +// +// } +// +// private getPageContents() { +// this.subs.push(this.helper.getPageHelpContents(this.properties, 'openaire', this._router.url).subscribe(contents => { +// this.pageContents = contents; +// })); +// } +// +// public ceil(num: number) { +// return Math.ceil(num); +// } +// +// public ngOnInit() { +// this.seoService.createLinkForCanonicalURL(this.properties.domain + this.properties.baseLink+this._router.url, false); +// this.getPageContents(); +// if(this.properties!=null){ +// var url = this.properties.domain + this.properties.baseLink+this._router.url; +// this._meta.updateTag({content:url},"property='og:url'"); +// if(this.properties.enablePiwikTrack && (typeof document !== 'undefined')){ +// this.subs.push(this._piwikService.trackView(this.properties, "OpenAIRE").subscribe()); +// } +// +// //this.config.getCommunityInformation(this.properties, this.properties.adminToolsCommunity ).subscribe(data => { +// this.subs.push(this.config.communityInformationState.subscribe(data => { +// if(data) { +// var showEntity = {}; +// for (var i = 0; i < data['entities'].length; i++) { +// +// showEntity["" + data['entities'][i]["pid"] + ""] = data['entities'][i]["isEnabled"]; +// } +// this.showPublications = !!showEntity["publication"]; +// this.showDatasets = !!showEntity["dataset"]; +// this.showSoftware = !!showEntity["software"]; +// this.showOrp = !!showEntity["orp"]; +// this.showProjects = !!showEntity["project"]; +// this.showDataProviders = !!showEntity["datasource"]; +// this.showOrganizations = !!showEntity["organization"]; +// if(this.showPublications){ +// this.resultTypes.values.push({name: OpenaireEntities.PUBLICATIONS , id:"publications",selected:false, number:0}); +// } +// if(this.showDatasets){ +// this.resultTypes.values.push({name: OpenaireEntities.DATASETS , id:"datasets",selected:false, number:0}); +// } +// if(this.showSoftware){ +// this.resultTypes.values.push({name: OpenaireEntities.SOFTWARE , id:"software",selected:false, number:0}); +// } +// if(this.showOrp){ +// this.resultTypes.values.push({name: OpenaireEntities.OTHER , id:"other",selected:false, number:0}); +// } +// } +// }, +// error => { +// this.handleError("Error getting community information", error); +// } +// )); +// } +// +// } +// public ngOnDestroy() { +// for (let sub of this.subs) { +// sub.unsubscribe(); +// } +// } +// +// private handleError(message: string, error) { +// console.error("Home Page: "+message, error); +// } +// entityChanged($event){ +// this.selectedEntity = $event.entity; +// this.selectedEntitySimpleUrl = $event.simpleUrl; +// this.selectedEntityAdvancedUrl = $event.advancedUrl; +// } +// goTo(simple:boolean){ +// let url = (simple)?this.selectedEntitySimpleUrl:this.selectedEntityAdvancedUrl; +// let parameterNames = []; +// let parameterValues = []; +// if (this.selectedEntity == "result") { +// if (this.resultTypes) { +// let values = []; +// for(let value of this.resultTypes.values){ +// if (value.selected) { +// values.push(value.id); +// } +// } +// if (values.length > 0 && values.length !=4) { +// parameterNames.push("type"); +// parameterValues.push(values.join(",")); +// } +// if (this.resultsQuickFilter) { +// parameterNames.push("qf"); +// parameterValues.push("" + this.resultsQuickFilter.selected); +// } +// } +// }else if(this.selectedEntity == "all"){ +// if (this.resultsQuickFilter) { +// parameterNames.push("qf"); +// parameterValues.push("true"); +// } +// } +// if(this.keyword.length > 0) { +// parameterNames.push("fv0"); +// parameterValues.push(this.keyword); +// parameterNames.push("f0"); +// parameterValues.push("q"); +// } +// if(this.customFilter){ +// parameterNames.push(this.customFilter.queryFieldName); +// parameterValues.push(this.customFilter.valueId); +// parameterNames.push("cf"); +// parameterValues.push("true"); +// } +// this._router.navigate([url], {queryParams: this.routerHelper.createQueryParams(parameterNames, parameterValues)}); +// } +// getQueryParamsForAdvancedSearch(entity){ +// let params = {}; +// if (entity == "result") { +// if (this.resultsQuickFilter) { +// params["qf"] = "" + this.resultsQuickFilter.selected; +// } +// } +// if(this.keyword.length > 0) { +// params["fv0"] = "" + this.keyword; +// params["f0"] = "q"; +// } +// if(this.customFilter){ +// params = this.customFilter.getParameters(params); +// } +// return params; +// } +// +// +// isRouteAvailable(routeToCheck: string) { +// for (let i = 0; i < this._router.config.length; i++) { +// let routePath: string = this._router.config[i].path; +// if (routePath == routeToCheck) { +// return true; +// } +// } +// return false; +// } +// +// disableSelectChange(event: boolean) { +// this.disableSelect = event; +// this.cdr.detectChanges(); +// } +// } diff --git a/src/app/home/home.module.ts b/src/app/home/home.module.ts new file mode 100644 index 0000000..f5e41b9 --- /dev/null +++ b/src/app/home/home.module.ts @@ -0,0 +1,59 @@ +import { NgModule} from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + +import {HomeRoutingModule} from './home-routing.module'; +import {HomeComponent} from './home.component'; + +import { DataProvidersServiceModule} from '../openaireLibrary/services/dataProvidersService.module'; +import { SearchResearchResultsServiceModule} from '../openaireLibrary/services/searchResearchResultsService.module'; +import { ProjectsServiceModule} from '../openaireLibrary/services/projectsService.module'; +import { OrganizationsServiceModule} from '../openaireLibrary/services/organizationsService.module'; +import { SearchFormModule} from '../openaireLibrary/searchPages/searchUtils/searchForm.module'; +import { PiwikServiceModule} from '../openaireLibrary/utils/piwik/piwikService.module'; + +import {HelperModule} from '../openaireLibrary/utils/helper/helper.module'; + +import {RefineFieldResultsServiceModule} from '../openaireLibrary/services/refineFieldResultsService.module'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import { SEOServiceModule } from '../openaireLibrary/sharedComponents/SEO/SEOService.module'; + +import {ErrorMessagesModule} from '../openaireLibrary/utils/errorMessages.module'; +import {EntitiesSelectionModule} from "../openaireLibrary/searchPages/searchUtils/entitiesSelection.module"; +import {QuickSelectionsModule} from "../openaireLibrary/searchPages/searchUtils/quick-selections.module"; +import {IconsModule} from "../openaireLibrary/utils/icons/icons.module"; +import {IconsService} from "../openaireLibrary/utils/icons/icons.service"; +import {book, cog, database, earth} from "../openaireLibrary/utils/icons/icons"; +import {NumbersModule} from "../openaireLibrary/sharedComponents/numbers/numbers.module"; +import {AdvancedSearchInputModule} from "../openaireLibrary/sharedComponents/advanced-search-input/advanced-search-input.module"; +import {InputModule} from "../openaireLibrary/sharedComponents/input/input.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, RouterModule, + RefineFieldResultsServiceModule, + DataProvidersServiceModule, SearchResearchResultsServiceModule, + ProjectsServiceModule, OrganizationsServiceModule, + SearchFormModule, + PiwikServiceModule, + HomeRoutingModule, + HelperModule, + ErrorMessagesModule, + SEOServiceModule, EntitiesSelectionModule, QuickSelectionsModule, IconsModule, NumbersModule, AdvancedSearchInputModule, InputModule + ], + declarations: [ + HomeComponent + ], + providers:[ + PreviousRouteRecorder + ], + exports: [ + HomeComponent + ] +}) +export class HomeModule { + constructor(private iconsService: IconsService) { + this.iconsService.registerIcons([book, earth, cog, database]); + } +} diff --git a/src/app/landingPages/dataProvider/dataProvider-routing.module.ts b/src/app/landingPages/dataProvider/dataProvider-routing.module.ts new file mode 100644 index 0000000..316ccf6 --- /dev/null +++ b/src/app/landingPages/dataProvider/dataProvider-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { OpenaireDataProviderComponent } from './dataProvider.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireDataProviderComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class DataProviderRoutingModule { } diff --git a/src/app/landingPages/dataProvider/dataProvider.component.ts b/src/app/landingPages/dataProvider/dataProvider.component.ts new file mode 100644 index 0000000..361d3e5 --- /dev/null +++ b/src/app/landingPages/dataProvider/dataProvider.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-dataprovider', + template: ``, + }) +export class OpenaireDataProviderComponent{ +} diff --git a/src/app/landingPages/dataProvider/libDataProvider.module.ts b/src/app/landingPages/dataProvider/libDataProvider.module.ts new file mode 100644 index 0000000..d6f8f93 --- /dev/null +++ b/src/app/landingPages/dataProvider/libDataProvider.module.ts @@ -0,0 +1,14 @@ +import { NgModule} from '@angular/core'; +import { DataProviderModule } from '../../openaireLibrary/landingPages/dataProvider/dataProvider.module'; +import { OpenaireDataProviderComponent } from './dataProvider.component'; +import {DataProviderRoutingModule} from './dataProvider-routing.module'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; + +@NgModule({ + imports: [DataProviderModule, DataProviderRoutingModule], + declarations:[OpenaireDataProviderComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireDataProviderComponent] +}) +export class LibDataProviderModule { } diff --git a/src/app/landingPages/dataset/dataset-routing.module.ts b/src/app/landingPages/dataset/dataset-routing.module.ts new file mode 100644 index 0000000..455ca4e --- /dev/null +++ b/src/app/landingPages/dataset/dataset-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { OpenaireDatasetComponent } from './dataset.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireDatasetComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class DatasetRoutingModule { } diff --git a/src/app/landingPages/dataset/dataset.component.ts b/src/app/landingPages/dataset/dataset.component.ts new file mode 100644 index 0000000..6b7f525 --- /dev/null +++ b/src/app/landingPages/dataset/dataset.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-dataset', + template: ``, + }) +export class OpenaireDatasetComponent{ +} diff --git a/src/app/landingPages/dataset/libDataset.module.ts b/src/app/landingPages/dataset/libDataset.module.ts new file mode 100644 index 0000000..48a0269 --- /dev/null +++ b/src/app/landingPages/dataset/libDataset.module.ts @@ -0,0 +1,13 @@ +import { NgModule} from '@angular/core'; +import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module"; +import { OpenaireDatasetComponent } from './dataset.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {DatasetRoutingModule} from './dataset-routing.module'; + @NgModule({ + imports: [ResultLandingModule, DatasetRoutingModule], + declarations:[OpenaireDatasetComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireDatasetComponent] +}) +export class LibDatasetModule { } diff --git a/src/app/landingPages/htmlProjectReport/htmlProjectReport-routing.module.ts b/src/app/landingPages/htmlProjectReport/htmlProjectReport-routing.module.ts new file mode 100644 index 0000000..b3003f1 --- /dev/null +++ b/src/app/landingPages/htmlProjectReport/htmlProjectReport-routing.module.ts @@ -0,0 +1,15 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireHtmlProjectReportComponent} from './htmlProjectReport.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireHtmlProjectReportComponent , canActivate: [FreeGuard],canDeactivate: [PreviousRouteRecorder]} + ]) +] +}) +export class HtmlProjectReportRoutingModule { } diff --git a/src/app/landingPages/htmlProjectReport/htmlProjectReport.component.ts b/src/app/landingPages/htmlProjectReport/htmlProjectReport.component.ts new file mode 100644 index 0000000..5236c9f --- /dev/null +++ b/src/app/landingPages/htmlProjectReport/htmlProjectReport.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-htmlProjectReport', + template: ``, + }) +export class OpenaireHtmlProjectReportComponent{ +} diff --git a/src/app/landingPages/htmlProjectReport/libHtmlProjectReport.module.ts b/src/app/landingPages/htmlProjectReport/libHtmlProjectReport.module.ts new file mode 100644 index 0000000..c779678 --- /dev/null +++ b/src/app/landingPages/htmlProjectReport/libHtmlProjectReport.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; +import {HtmlProjectReportModule} from '../../openaireLibrary/landingPages/htmlProjectReport/htmlProjectReport.module'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OpenaireHtmlProjectReportComponent} from './htmlProjectReport.component'; +import {HtmlProjectReportRoutingModule} from './htmlProjectReport-routing.module'; + +@NgModule({ + imports: [HtmlProjectReportModule, HtmlProjectReportRoutingModule], + declarations:[OpenaireHtmlProjectReportComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireHtmlProjectReportComponent] +}) +export class LibHtmlProjectReportModule { } diff --git a/src/app/landingPages/organization/libOrganization.module.ts b/src/app/landingPages/organization/libOrganization.module.ts new file mode 100644 index 0000000..545ad62 --- /dev/null +++ b/src/app/landingPages/organization/libOrganization.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; +import {OrganizationModule} from '../../openaireLibrary/landingPages/organization/organization.module'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OpenaireOrganizationComponent} from './organization.component'; +import {OrganizationRoutingModule} from './organization-routing.module'; + +@NgModule({ + imports: [OrganizationModule, OrganizationRoutingModule], + declarations:[OpenaireOrganizationComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireOrganizationComponent] +}) +export class LibOrganizationModule { } diff --git a/src/app/landingPages/organization/organization-routing.module.ts b/src/app/landingPages/organization/organization-routing.module.ts new file mode 100644 index 0000000..3b0a2ab --- /dev/null +++ b/src/app/landingPages/organization/organization-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireOrganizationComponent} from './organization.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireOrganizationComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class OrganizationRoutingModule { } diff --git a/src/app/landingPages/organization/organization.component.ts b/src/app/landingPages/organization/organization.component.ts new file mode 100644 index 0000000..bae58be --- /dev/null +++ b/src/app/landingPages/organization/organization.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-organization', + template: ``, + }) +export class OpenaireOrganizationComponent{ +} diff --git a/src/app/landingPages/orp/libOrp.module.ts b/src/app/landingPages/orp/libOrp.module.ts new file mode 100644 index 0000000..8f6bac8 --- /dev/null +++ b/src/app/landingPages/orp/libOrp.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; +import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module"; +import {OpenaireOrpComponent} from './orp.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OrpRoutingModule} from './orp-routing.module'; + +@NgModule({ + imports: [ResultLandingModule, OrpRoutingModule], + declarations:[OpenaireOrpComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireOrpComponent] +}) +export class LibOrpModule { } diff --git a/src/app/landingPages/orp/orp-routing.module.ts b/src/app/landingPages/orp/orp-routing.module.ts new file mode 100644 index 0000000..13003b9 --- /dev/null +++ b/src/app/landingPages/orp/orp-routing.module.ts @@ -0,0 +1,18 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireOrpComponent} from './orp.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireOrpComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class OrpRoutingModule { } diff --git a/src/app/landingPages/orp/orp.component.ts b/src/app/landingPages/orp/orp.component.ts new file mode 100644 index 0000000..a5d348b --- /dev/null +++ b/src/app/landingPages/orp/orp.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-orp', + template: ``, + }) +export class OpenaireOrpComponent{ +} diff --git a/src/app/landingPages/project/libProject.module.ts b/src/app/landingPages/project/libProject.module.ts new file mode 100644 index 0000000..179a4fe --- /dev/null +++ b/src/app/landingPages/project/libProject.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; +import {ProjectModule} from '../../openaireLibrary/landingPages/project/project.module'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OpenaireProjectComponent} from './project.component'; +import {ProjectRoutingModule} from './project-routing.module'; + +@NgModule({ + imports: [ProjectModule, ProjectRoutingModule], + declarations:[OpenaireProjectComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireProjectComponent] +}) +export class LibProjectModule { } diff --git a/src/app/landingPages/project/project-routing.module.ts b/src/app/landingPages/project/project-routing.module.ts new file mode 100644 index 0000000..9655032 --- /dev/null +++ b/src/app/landingPages/project/project-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireProjectComponent} from './project.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireProjectComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) + ] +}) +export class ProjectRoutingModule { } diff --git a/src/app/landingPages/project/project.component.ts b/src/app/landingPages/project/project.component.ts new file mode 100644 index 0000000..e1c278b --- /dev/null +++ b/src/app/landingPages/project/project.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-project', + template: ``, + }) +export class OpenaireProjectComponent{ +} diff --git a/src/app/landingPages/publication/libPublication.module.ts b/src/app/landingPages/publication/libPublication.module.ts new file mode 100644 index 0000000..302dc5a --- /dev/null +++ b/src/app/landingPages/publication/libPublication.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; +import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module"; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OpenairePublicationComponent} from './publication.component'; +import {PublicationRoutingModule} from './publication-routing.module'; + +@NgModule({ + imports: [ResultLandingModule, PublicationRoutingModule], + declarations:[OpenairePublicationComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenairePublicationComponent] +}) +export class LibPublicationModule { } diff --git a/src/app/landingPages/publication/publication-routing.module.ts b/src/app/landingPages/publication/publication-routing.module.ts new file mode 100644 index 0000000..8161a3e --- /dev/null +++ b/src/app/landingPages/publication/publication-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenairePublicationComponent} from './publication.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenairePublicationComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class PublicationRoutingModule { } diff --git a/src/app/landingPages/publication/publication.component.ts b/src/app/landingPages/publication/publication.component.ts new file mode 100644 index 0000000..1d6b86d --- /dev/null +++ b/src/app/landingPages/publication/publication.component.ts @@ -0,0 +1,9 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-publication', + template: ` + `, +}) +export class OpenairePublicationComponent { +} diff --git a/src/app/landingPages/result/libResult.module.ts b/src/app/landingPages/result/libResult.module.ts new file mode 100644 index 0000000..39be478 --- /dev/null +++ b/src/app/landingPages/result/libResult.module.ts @@ -0,0 +1,13 @@ +import {NgModule} from '@angular/core'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OpenaireResultComponent} from './result.component'; +import {ResultRoutingModule} from './result-routing.module'; +import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module"; + +@NgModule({ + imports: [ResultRoutingModule, ResultLandingModule], + declarations:[OpenaireResultComponent], + providers:[PreviousRouteRecorder], + exports:[OpenaireResultComponent] +}) +export class LibResultModule { } diff --git a/src/app/landingPages/result/result-routing.module.ts b/src/app/landingPages/result/result-routing.module.ts new file mode 100644 index 0000000..666fcc6 --- /dev/null +++ b/src/app/landingPages/result/result-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import {OpenaireResultComponent } from './result.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireResultComponent, data: { + redirect: properties.errorLink, community : 'openaire' + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class ResultRoutingModule { } diff --git a/src/app/landingPages/result/result.component.ts b/src/app/landingPages/result/result.component.ts new file mode 100644 index 0000000..9fa51e2 --- /dev/null +++ b/src/app/landingPages/result/result.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-publication', + template: ``, + }) +export class OpenaireResultComponent{ +} diff --git a/src/app/landingPages/service/libService.module.ts b/src/app/landingPages/service/libService.module.ts new file mode 100644 index 0000000..2820134 --- /dev/null +++ b/src/app/landingPages/service/libService.module.ts @@ -0,0 +1,14 @@ +import { NgModule} from '@angular/core'; +import { DataProviderModule } from '../../openaireLibrary/landingPages/dataProvider/dataProvider.module'; +import { OpenaireServiceComponent } from './service.component'; +import {ServiceRoutingModule} from './service-routing.module'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; + +@NgModule({ + imports: [DataProviderModule, ServiceRoutingModule], + declarations:[OpenaireServiceComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireServiceComponent] +}) +export class LibServiceModule { } diff --git a/src/app/landingPages/service/service-routing.module.ts b/src/app/landingPages/service/service-routing.module.ts new file mode 100644 index 0000000..b3f753a --- /dev/null +++ b/src/app/landingPages/service/service-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { OpenaireServiceComponent } from './service.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireServiceComponent, canActivate: [FreeGuard], data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class ServiceRoutingModule { } diff --git a/src/app/landingPages/service/service.component.ts b/src/app/landingPages/service/service.component.ts new file mode 100644 index 0000000..02d1802 --- /dev/null +++ b/src/app/landingPages/service/service.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-dataprovider', + template: ``, + }) +export class OpenaireServiceComponent{ +} diff --git a/src/app/landingPages/software/libSoftware.module.ts b/src/app/landingPages/software/libSoftware.module.ts new file mode 100644 index 0000000..18553aa --- /dev/null +++ b/src/app/landingPages/software/libSoftware.module.ts @@ -0,0 +1,15 @@ +import {NgModule} from '@angular/core'; +import {ResultLandingModule} from "../../openaireLibrary/landingPages/result/resultLanding.module"; + +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {OpenaireSoftwareComponent} from './software.component'; +import {SoftwareRoutingModule} from './software-routing.module'; + +@NgModule({ + imports: [ResultLandingModule, SoftwareRoutingModule], + declarations:[OpenaireSoftwareComponent], + providers:[FreeGuard, PreviousRouteRecorder], + exports:[OpenaireSoftwareComponent] +}) +export class LibSoftwareModule { } diff --git a/src/app/landingPages/software/software-routing.module.ts b/src/app/landingPages/software/software-routing.module.ts new file mode 100644 index 0000000..7af66cd --- /dev/null +++ b/src/app/landingPages/software/software-routing.module.ts @@ -0,0 +1,15 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireSoftwareComponent} from './software.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSoftwareComponent, canActivate: [FreeGuard],canDeactivate: [PreviousRouteRecorder] } + ]) +] +}) +export class SoftwareRoutingModule { } diff --git a/src/app/landingPages/software/software.component.ts b/src/app/landingPages/software/software.component.ts new file mode 100644 index 0000000..408862f --- /dev/null +++ b/src/app/landingPages/software/software.component.ts @@ -0,0 +1,8 @@ +import {Component} from '@angular/core'; + +@Component({ + selector: 'openaire-software', + template: ``, + }) +export class OpenaireSoftwareComponent{ +} diff --git a/src/app/login/libUser.module.ts b/src/app/login/libUser.module.ts new file mode 100644 index 0000000..b1040ce --- /dev/null +++ b/src/app/login/libUser.module.ts @@ -0,0 +1,23 @@ +import { NgModule} from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import {OpenaireUserComponent } from './user.component'; +import { UserRoutingModule } from './user-routing.module'; +import { UserModule} from '../openaireLibrary/login/user.module'; + +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + UserRoutingModule, UserModule + + ], + providers:[PreviousRouteRecorder], + declarations: [ +OpenaireUserComponent + +] +}) +export class LibUserModule { } diff --git a/src/app/login/user-routing.module.ts b/src/app/login/user-routing.module.ts new file mode 100644 index 0000000..1a8ad90 --- /dev/null +++ b/src/app/login/user-routing.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import {OpenaireUserComponent } from './user.component'; +import {PreviousRouteRecorder} from '../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireUserComponent, canDeactivate: [PreviousRouteRecorder]}, + + ]) + ] +}) +export class UserRoutingModule { } diff --git a/src/app/login/user.component.ts b/src/app/login/user.component.ts new file mode 100644 index 0000000..76d7038 --- /dev/null +++ b/src/app/login/user.component.ts @@ -0,0 +1,11 @@ +import {Component, ElementRef} from '@angular/core'; +import {Observable} from 'rxjs'; + +@Component({ + selector: 'openaire-user', + template: `` + }) + +export class OpenaireUserComponent { + +} diff --git a/src/app/openaireLibrary b/src/app/openaireLibrary new file mode 160000 index 0000000..9b2524c --- /dev/null +++ b/src/app/openaireLibrary @@ -0,0 +1 @@ +Subproject commit 9b2524c1c72972b593654081e1d917ca8a1a7909 diff --git a/src/app/reload/libReload.module.ts b/src/app/reload/libReload.module.ts new file mode 100644 index 0000000..d982aaa --- /dev/null +++ b/src/app/reload/libReload.module.ts @@ -0,0 +1,23 @@ +import { NgModule} from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { RouterModule } from '@angular/router'; + + import{ReloadModule} from '../openaireLibrary/reload/reload.module'; + + +@NgModule({ + imports: [ + CommonModule, FormsModule, RouterModule, ReloadModule + ], + declarations: [ + + ], + providers:[ + + ], + exports: [ + + ] +}) +export class LibReloadModule { } diff --git a/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts b/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts new file mode 100644 index 0000000..1f53f4f --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchDataProviders-routing.module.ts @@ -0,0 +1,18 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireAdvancedSearchDataProvidersComponent} from './advancedSearchDataProviders.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireAdvancedSearchDataProvidersComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class AdvancedSearchDataProvidersRoutingModule { } diff --git a/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts b/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts new file mode 100644 index 0000000..273155e --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchDataProviders.component.ts @@ -0,0 +1,24 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + + +@Component({ + selector: 'openaire-advanced-search-dataprovider', + template: ` + + + + ` +}) + +export class OpenaireAdvancedSearchDataProvidersComponent { + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts b/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts new file mode 100644 index 0000000..cae770e --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchDataProviders.module.ts @@ -0,0 +1,25 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; + +import {AdvancedSearchDataProvidersRoutingModule} from './advancedSearchDataProviders-routing.module'; +import {OpenaireAdvancedSearchDataProvidersComponent} from './advancedSearchDataProviders.component'; + +import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + AdvancedSearchDataProvidersRoutingModule, + SearchDataProvidersModule + + ], + declarations: [ + OpenaireAdvancedSearchDataProvidersComponent + ], + providers:[], + exports: [ + OpenaireAdvancedSearchDataProvidersComponent + ] +}) +export class LibAdvancedSearchDataProvidersModule { } diff --git a/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts b/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts new file mode 100644 index 0000000..d46cc46 --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchOrganizations-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireAdvancedSearchOrganizationsComponent} from './advancedSearchOrganizations.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireAdvancedSearchOrganizationsComponent , data: { + redirect: properties.errorLink + },canDeactivate: [PreviousRouteRecorder]} + + ]) + ] +}) +export class AdvancedSearchOrganizationsRoutingModule { } diff --git a/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts b/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts new file mode 100644 index 0000000..669edfc --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchOrganizations.component.ts @@ -0,0 +1,23 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + + +@Component({ + selector: 'openaire-advanced-search-organizations', + template: ` + + + + ` +}) + +export class OpenaireAdvancedSearchOrganizationsComponent { + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts b/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts new file mode 100644 index 0000000..6999c82 --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchOrganizations.module.ts @@ -0,0 +1,23 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {AdvancedSearchOrganizationsRoutingModule} from './advancedSearchOrganizations-routing.module'; +import {OpenaireAdvancedSearchOrganizationsComponent} from './advancedSearchOrganizations.component'; +import {SearchOrganizationsModule} from "../../openaireLibrary/searchPages/searchOrganizations.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchOrganizationsModule, + AdvancedSearchOrganizationsRoutingModule + + ], + declarations: [ + OpenaireAdvancedSearchOrganizationsComponent + ], + providers:[], + exports: [ + OpenaireAdvancedSearchOrganizationsComponent + ] +}) +export class LibAdvancedSearchOrganizationsModule { } diff --git a/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts b/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts new file mode 100644 index 0000000..fb8875a --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchProjects-routing.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import{OpenaireAdvancedSearchProjectsComponent} from './advancedSearchProjects.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireAdvancedSearchProjectsComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class AdvancedSearchProjectsRoutingModule { } diff --git a/src/app/searchPages/advanced/advancedSearchProjects.component.ts b/src/app/searchPages/advanced/advancedSearchProjects.component.ts new file mode 100644 index 0000000..8dcc913 --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchProjects.component.ts @@ -0,0 +1,22 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-advanced-search-projects', + template: ` + + + + ` + }) + +export class OpenaireAdvancedSearchProjectsComponent { + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/advanced/advancedSearchProjects.module.ts b/src/app/searchPages/advanced/advancedSearchProjects.module.ts new file mode 100644 index 0000000..11b0e61 --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchProjects.module.ts @@ -0,0 +1,23 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {AdvancedSearchProjectsRoutingModule} from './advancedSearchProjects-routing.module'; +import {OpenaireAdvancedSearchProjectsComponent} from './advancedSearchProjects.component'; +import {SearchProjectsModule} from "../../openaireLibrary/searchPages/searchProjects.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchProjectsModule, + AdvancedSearchProjectsRoutingModule + + ], + declarations: [ + OpenaireAdvancedSearchProjectsComponent + ], + providers:[], + exports: [ + OpenaireAdvancedSearchProjectsComponent + ] +}) +export class LibAdvancedSearchProjectsModule { } diff --git a/src/app/searchPages/advanced/advancedSearchServices-routing.module.ts b/src/app/searchPages/advanced/advancedSearchServices-routing.module.ts new file mode 100644 index 0000000..b6b37ae --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchServices-routing.module.ts @@ -0,0 +1,18 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireAdvancedSearchServicesComponent} from './advancedSearchServices.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireAdvancedSearchServicesComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class AdvancedSearchServicesRoutingModule { } diff --git a/src/app/searchPages/advanced/advancedSearchServices.component.ts b/src/app/searchPages/advanced/advancedSearchServices.component.ts new file mode 100644 index 0000000..e2932bb --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchServices.component.ts @@ -0,0 +1,26 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {OpenaireEntities} from "../../openaireLibrary/utils/properties/searchFields"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + + +@Component({ + selector: 'openaire-advanced-search-service', + template: ` + + + ` +}) + +export class OpenaireAdvancedSearchServicesComponent { + properties: EnvProperties; + public openaireEntities = OpenaireEntities; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/advanced/advancedSearchServices.module.ts b/src/app/searchPages/advanced/advancedSearchServices.module.ts new file mode 100644 index 0000000..88dbd1e --- /dev/null +++ b/src/app/searchPages/advanced/advancedSearchServices.module.ts @@ -0,0 +1,25 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; + +import {OpenaireAdvancedSearchServicesComponent} from './advancedSearchServices.component'; + +import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module"; +import {AdvancedSearchServicesRoutingModule} from "./advancedSearchServices-routing.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + AdvancedSearchServicesRoutingModule, + SearchDataProvidersModule + + ], + declarations: [ + OpenaireAdvancedSearchServicesComponent + ], + providers:[], + exports: [ + OpenaireAdvancedSearchServicesComponent + ] +}) +export class LibAdvancedSearchServicesModule { } diff --git a/src/app/searchPages/advanced/searchResearchResults-routing.module.ts b/src/app/searchPages/advanced/searchResearchResults-routing.module.ts new file mode 100644 index 0000000..f2a372d --- /dev/null +++ b/src/app/searchPages/advanced/searchResearchResults-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import{OpenaireSearchResearchResultsComponent} from './searchResearchResults.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchResearchResultsComponent, data: { + redirect: properties.errorLink, community : 'openaire' + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class SearchResearchResultsRoutingModule { } diff --git a/src/app/searchPages/advanced/searchResearchResults.component.ts b/src/app/searchPages/advanced/searchResearchResults.component.ts new file mode 100644 index 0000000..c62e7fd --- /dev/null +++ b/src/app/searchPages/advanced/searchResearchResults.component.ts @@ -0,0 +1,22 @@ +import {Component, Input} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-results', + template: ` + + ` + +}) +export class OpenaireSearchResearchResultsComponent { + @Input() searchLink: string = "/search/advanced/research-results"; + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/advanced/searchResearchResults.module.ts b/src/app/searchPages/advanced/searchResearchResults.module.ts new file mode 100644 index 0000000..9462486 --- /dev/null +++ b/src/app/searchPages/advanced/searchResearchResults.module.ts @@ -0,0 +1,25 @@ +import { NgModule} from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import{ SearchResearchResultsRoutingModule} from './searchResearchResults-routing.module'; +import{OpenaireSearchResearchResultsComponent} from './searchResearchResults.component'; + +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {SearchResearchResultsModule} from "../../openaireLibrary/searchPages/searchResearchResults.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchResearchResultsRoutingModule, SearchResearchResultsModule + + ], + declarations: [ + OpenaireSearchResearchResultsComponent + ], + providers:[PreviousRouteRecorder], + exports: [ + OpenaireSearchResearchResultsComponent + ] +}) +export class OpenaireAdvancedSearchResearchResultsModule { } diff --git a/src/app/searchPages/find/libSearch.module.ts b/src/app/searchPages/find/libSearch.module.ts new file mode 100644 index 0000000..77216de --- /dev/null +++ b/src/app/searchPages/find/libSearch.module.ts @@ -0,0 +1,14 @@ +import {NgModule} from '@angular/core'; + +import {OpenaireSearchComponent} from './search.component'; +import {MainSearchRoutingModule} from './mainSearch-routing.module'; +import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard"; +import {SearchAllModule} from "../../openaireLibrary/searchPages/find/searchAll.module"; + +@NgModule({ + imports: [ MainSearchRoutingModule, SearchAllModule], + declarations:[OpenaireSearchComponent], + exports:[OpenaireSearchComponent], + providers: [ PreviousRouteRecorder] +}) +export class LibMainSearchModule { } diff --git a/src/app/searchPages/find/mainSearch-routing.module.ts b/src/app/searchPages/find/mainSearch-routing.module.ts new file mode 100644 index 0000000..82cc678 --- /dev/null +++ b/src/app/searchPages/find/mainSearch-routing.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import{OpenaireSearchComponent} from './search.component'; +import {PreviousRouteRecorder} from "../../openaireLibrary/utils/piwik/previousRouteRecorder.guard"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchComponent,canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class MainSearchRoutingModule { } diff --git a/src/app/searchPages/find/search.component.ts b/src/app/searchPages/find/search.component.ts new file mode 100644 index 0000000..892084c --- /dev/null +++ b/src/app/searchPages/find/search.component.ts @@ -0,0 +1,13 @@ +import {Component} from '@angular/core'; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-find', + template: ` + + `, + }) +export class OpenaireSearchComponent{ + public searchForm: SearchForm = {class: 'search-form', dark: true}; +} diff --git a/src/app/searchPages/simple/searchDataProviders-routing.module.ts b/src/app/searchPages/simple/searchDataProviders-routing.module.ts new file mode 100644 index 0000000..055279f --- /dev/null +++ b/src/app/searchPages/simple/searchDataProviders-routing.module.ts @@ -0,0 +1,20 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireSearchDataprovidersComponent} from './searchDataproviders.component'; +import {FreeGuard} from '../../openaireLibrary/login/freeGuard.guard'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchDataprovidersComponent,data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class SearchDataProvidersRoutingModule { } diff --git a/src/app/searchPages/simple/searchDataProviders.module.ts b/src/app/searchPages/simple/searchDataProviders.module.ts new file mode 100644 index 0000000..6b13ace --- /dev/null +++ b/src/app/searchPages/simple/searchDataProviders.module.ts @@ -0,0 +1,23 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {OpenaireSearchDataprovidersComponent} from './searchDataproviders.component'; +import {SearchDataProvidersRoutingModule} from './searchDataProviders-routing.module'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, +SearchDataProvidersModule, SearchDataProvidersRoutingModule + + ], + declarations: [ + OpenaireSearchDataprovidersComponent + ], + providers:[PreviousRouteRecorder], + exports: [ + OpenaireSearchDataprovidersComponent + ] +}) +export class LibSearchDataProvidersModule { } diff --git a/src/app/searchPages/simple/searchDataproviders.component.ts b/src/app/searchPages/simple/searchDataproviders.component.ts new file mode 100644 index 0000000..ecef3b8 --- /dev/null +++ b/src/app/searchPages/simple/searchDataproviders.component.ts @@ -0,0 +1,19 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-dataproviders', + template: ` + + ` +}) +export class OpenaireSearchDataprovidersComponent { + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/simple/searchOrganizations-routing.module.ts b/src/app/searchPages/simple/searchOrganizations-routing.module.ts new file mode 100644 index 0000000..38b457a --- /dev/null +++ b/src/app/searchPages/simple/searchOrganizations-routing.module.ts @@ -0,0 +1,18 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; +import {OpenaireSearchOrganizationsComponent} from './searchOrganizations.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchOrganizationsComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class SearchOrganizationsRoutingModule { } diff --git a/src/app/searchPages/simple/searchOrganizations.component.ts b/src/app/searchPages/simple/searchOrganizations.component.ts new file mode 100644 index 0000000..3a81d73 --- /dev/null +++ b/src/app/searchPages/simple/searchOrganizations.component.ts @@ -0,0 +1,19 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-organizations', + template: ` + + ` +}) +export class OpenaireSearchOrganizationsComponent { + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/simple/searchOrganizations.module.ts b/src/app/searchPages/simple/searchOrganizations.module.ts new file mode 100644 index 0000000..6c6dc7a --- /dev/null +++ b/src/app/searchPages/simple/searchOrganizations.module.ts @@ -0,0 +1,26 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; + +import {SearchOrganizationsRoutingModule} from './searchOrganizations-routing.module'; +import {OpenaireSearchOrganizationsComponent} from './searchOrganizations.component'; + +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {SearchOrganizationsModule} from "../../openaireLibrary/searchPages/searchOrganizations.module"; + + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchOrganizationsRoutingModule, SearchOrganizationsModule + + ], + declarations: [ + OpenaireSearchOrganizationsComponent + ], + providers:[PreviousRouteRecorder], + exports: [ + OpenaireSearchOrganizationsComponent + ] +}) +export class LibSearchOrganizationsModule { } diff --git a/src/app/searchPages/simple/searchProjects-routing.module.ts b/src/app/searchPages/simple/searchProjects-routing.module.ts new file mode 100644 index 0000000..0282cb8 --- /dev/null +++ b/src/app/searchPages/simple/searchProjects-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireSearchProjectsComponent} from './searchProjects.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchProjectsComponent, data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class SearchProjectsRoutingModule { } diff --git a/src/app/searchPages/simple/searchProjects.component.ts b/src/app/searchPages/simple/searchProjects.component.ts new file mode 100644 index 0000000..b7c9d31 --- /dev/null +++ b/src/app/searchPages/simple/searchProjects.component.ts @@ -0,0 +1,19 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-projects', + template: ` + + ` +}) +export class OpenaireSearchProjectsComponent { + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/simple/searchProjects.module.ts b/src/app/searchPages/simple/searchProjects.module.ts new file mode 100644 index 0000000..8c7fa82 --- /dev/null +++ b/src/app/searchPages/simple/searchProjects.module.ts @@ -0,0 +1,24 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; + +import {SearchProjectsRoutingModule} from './searchProjects-routing.module'; +import {OpenaireSearchProjectsComponent} from './searchProjects.component'; + +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {SearchProjectsModule} from "../../openaireLibrary/searchPages/searchProjects.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, SearchProjectsRoutingModule, SearchProjectsModule + + ], + declarations: [ + OpenaireSearchProjectsComponent + ], + providers:[PreviousRouteRecorder], + exports: [ + OpenaireSearchProjectsComponent + ] +}) +export class LibSearchProjectsModule { } diff --git a/src/app/searchPages/simple/searchResearchResults-routing.module.ts b/src/app/searchPages/simple/searchResearchResults-routing.module.ts new file mode 100644 index 0000000..215f5f5 --- /dev/null +++ b/src/app/searchPages/simple/searchResearchResults-routing.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import{OpenaireSearchResearchResultsComponent} from './searchResearchResults.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchResearchResultsComponent, data: { + redirect: properties.errorLink, community : 'openaire' + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class SearchResearchResultsRoutingModule { } diff --git a/src/app/searchPages/simple/searchResearchResults.component.ts b/src/app/searchPages/simple/searchResearchResults.component.ts new file mode 100644 index 0000000..71238a5 --- /dev/null +++ b/src/app/searchPages/simple/searchResearchResults.component.ts @@ -0,0 +1,21 @@ +import {Component, Input} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-results', + template: ` + + ` +}) +export class OpenaireSearchResearchResultsComponent { + @Input() searchLink: string = "/search/research-results"; + properties: EnvProperties; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/simple/searchResearchResults.module.ts b/src/app/searchPages/simple/searchResearchResults.module.ts new file mode 100644 index 0000000..b1d52c7 --- /dev/null +++ b/src/app/searchPages/simple/searchResearchResults.module.ts @@ -0,0 +1,25 @@ +import { NgModule} from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import{ SearchResearchResultsRoutingModule} from './searchResearchResults-routing.module'; +import{OpenaireSearchResearchResultsComponent} from './searchResearchResults.component'; + +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {SearchResearchResultsModule} from "../../openaireLibrary/searchPages/searchResearchResults.module"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchResearchResultsRoutingModule, SearchResearchResultsModule + + ], + declarations: [ + OpenaireSearchResearchResultsComponent + ], + providers:[PreviousRouteRecorder], + exports: [ + OpenaireSearchResearchResultsComponent + ] +}) +export class OpenaireSearchResearchResultsModule { } diff --git a/src/app/searchPages/simple/searchServices-routing.module.ts b/src/app/searchPages/simple/searchServices-routing.module.ts new file mode 100644 index 0000000..6439c79 --- /dev/null +++ b/src/app/searchPages/simple/searchServices-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule} from '@angular/router'; + +import {OpenaireSearchServicesComponent} from './searchServices.component'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {properties} from "../../../environments/environment"; + + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: OpenaireSearchServicesComponent,data: { + redirect: properties.errorLink + }, canDeactivate: [PreviousRouteRecorder] } + + ]) + ] +}) +export class SearchServicesRoutingModule { } diff --git a/src/app/searchPages/simple/searchServices.component.ts b/src/app/searchPages/simple/searchServices.component.ts new file mode 100644 index 0000000..0e569f5 --- /dev/null +++ b/src/app/searchPages/simple/searchServices.component.ts @@ -0,0 +1,24 @@ +import {Component} from '@angular/core'; +import {properties} from "../../../environments/environment"; +import {EnvProperties} from "../../openaireLibrary/utils/properties/env-properties"; +import {OpenaireEntities} from "../../openaireLibrary/utils/properties/searchFields"; +import {SearchForm} from "../../openaireLibrary/searchPages/searchUtils/newSearchPage.component"; + +@Component({ + selector: 'openaire-search-services', + template: ` + + + ` +}) +export class OpenaireSearchServicesComponent { + properties: EnvProperties; + public openaireEntities = OpenaireEntities; + public searchForm: SearchForm = {class: 'search-form', dark: true}; + constructor ( ) {} + ngOnInit() { + this.properties = properties; + } +} diff --git a/src/app/searchPages/simple/searchServices.module.ts b/src/app/searchPages/simple/searchServices.module.ts new file mode 100644 index 0000000..9e6c4ee --- /dev/null +++ b/src/app/searchPages/simple/searchServices.module.ts @@ -0,0 +1,23 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {FormsModule} from '@angular/forms'; +import {SearchServicesRoutingModule} from './searchServices-routing.module'; +import {PreviousRouteRecorder} from '../../openaireLibrary/utils/piwik/previousRouteRecorder.guard'; +import {SearchDataProvidersModule} from "../../openaireLibrary/searchPages/searchDataProviders.module"; +import {OpenaireSearchServicesComponent} from "./searchServices.component"; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + SearchDataProvidersModule, SearchServicesRoutingModule + + ], + declarations: [ + OpenaireSearchServicesComponent + ], + providers:[PreviousRouteRecorder], + exports: [ + OpenaireSearchServicesComponent + ] +}) +export class LibSearchServicesModule { } diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts new file mode 100644 index 0000000..a5d38d7 --- /dev/null +++ b/src/app/shared/shared.module.ts @@ -0,0 +1,45 @@ +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 { + return { + ngModule: SharedModule, + }; + } +} diff --git a/src/app/utils/aggregators.ts b/src/app/utils/aggregators.ts new file mode 100644 index 0000000..68009c8 --- /dev/null +++ b/src/app/utils/aggregators.ts @@ -0,0 +1,65 @@ +import {SearchCustomFilter} from "../openaireLibrary/searchPages/searchUtils/searchUtils.class"; +import {Portal} from "../openaireLibrary/utils/entities/adminTool/portal"; + +export class AggregatorInfo { + menuId: string; + title: string; + logoUrl: string; + fieldName: string; //Country + queryFieldName: string; //country + valueId: string; //gr + valueName: string; // Greece + graphSectionTitle: string; + graphSectionText: string; + enableLogin: boolean; + customCss:string; + showHeaderAlways:boolean; + + constructor(menuId: string, title: string, logoUrl: string, fieldName: string, queryFieldName: string, valueId: string, + valueName: string, graphSectionTitle: string = null, graphSectionText:string = null, enableLogin:boolean = true, showHeaderAlways:boolean = true, customCss:string = "" ) { + this.menuId = menuId; + this.title = title; + this.logoUrl = logoUrl; + this.fieldName = fieldName; + this.queryFieldName = queryFieldName; + this.valueId = valueId; + this.valueName = valueName; + this.graphSectionTitle = graphSectionTitle; + this.graphSectionText = graphSectionText; + this.enableLogin = enableLogin; + this.showHeaderAlways = showHeaderAlways; + this.customCss = customCss; + } +} + +export class PortalAggregators { + static eoscInfo: AggregatorInfo = + new AggregatorInfo("eosc", "Eosc Explore", "https://marketplace.eosc-portal.eu/packs/media/images/eosc-logo-mono-65a4962b88cf1caa9e35838e33022ca8.png", + null, null, null, null,null,null ,false,false, + ` + + + `); + static disabled = { + pages: ["/participate/deposit/search", "/participate/deposit/learn-how","/participate/claim", "/participate/direct-claim", "/myclaims","/claims", "/develop", + "/search/find/datasources"], + entities: ["datasource"] + }; + + public static getSearchCustomFilterByAggregator(): SearchCustomFilter { + // let filter:SearchCustomFilter = new SearchCustomFilter(PortalAggregators.eoscInfo.fieldName, PortalAggregators.eoscInfo.queryFieldName, PortalAggregators.eoscInfo.valueId, PortalAggregators.eoscInfo.valueName); + // filter.promptToAddFilter = false; + // filter.isHiddenFilter = true; + // console.log(PortalAggregators.eoscInfo.fieldName); + // console.log(filter); + // return filter; + return null; + } + + public static getCommunityInfo(): any { + return Portal.getMockCommunityInfo(PortalAggregators.eoscInfo.menuId, PortalAggregators.eoscInfo.title, PortalAggregators.disabled.entities,PortalAggregators.disabled.pages); + } +} + + + diff --git a/src/assets/aggregator-custom.css b/src/assets/aggregator-custom.css new file mode 100644 index 0000000..066c78c --- /dev/null +++ b/src/assets/aggregator-custom.css @@ -0,0 +1,105 @@ +:root { + --portal-main-color: #313179; + --portal-main-contrast: white; + --portal-dark-color: #4687E6; + --openaire-main-color: #313179; + + --explore-portal-color: #D95F2D; + --provide-portal-color: #37C7E9; + --monitor-portal-color: #9ABB55; + --connect-portal-color: #EBB13E; + --develop-portal-color: #DA65AB; + + --explore-portal-lower-tone: #a0462c; + --provide-portal-lower-tone: #3A8FA3; + --monitor-portal-lower-tone: #7c9144; + --connect-portal-lower-tone: #b48536; + --develop-portal-lower-tone: #9f4e7e; +} + + +.tm-toolbar .uk-subnav-line .custom-explore-li { + background:var(--portal-main-color) !important; +} + +.mainPageSearchForm{ + background-image: /*linear-gradient(rgba(255, 255, 255, 0.5),rgba(255, 255, 255, 0.5)),*/ url('home.jpg'); + +} + +.mainPageBottomInfo{ + background: linear-gradient( rgba(255, 255, 255, 0.5),rgba(255, 255, 255, 0.5)), url('home.jpg'); + background-attachment: scroll, scroll; + background-size: auto auto, auto auto; + background-size: cover; + background-attachment: fixed; + box-sizing: border-box; + min-height: calc(100vh - 412.767px); +} +.box-links .uk-card-header:hover { + text-decoration: underline; + text-decoration-color: currentcolor; + text-decoration-color: #90929D; +} + +.searchForm, .generalSearchForm, +.publicationsSearchForm, +.projectsSearchForm, .projectsTableSearchForm, +.organizationsSearchForm, +.datasetsSearchForm, +.softwareSearchForm, +.orpsSearchForm, +.datasourcesSearchForm, .compatibleDatasourcesSearchForm, .compatibleDatasourcesTableSearchForm, .datasourcesTableSearchForm, + .journalsSearchForm, .journalsTableSearchForm, +.entityRegistriesSearchForm, .entityRegistriesTableSearchForm { + + background: url('./Εxplore-sub.jpg') right !important; + +} + +.ask-explore.uk-grid-divider > :not(.uk-first-column)::before { + border-left: 1px solid var(--portal-main-color) ; +} + +.questions .tm-child-list-divider > ul > li:nth-child(n+2), .questions .uk-list-divider > li:nth-child(n+2) { + border-top: 1px solid #c5c5c5; +} + +.questions { + font-size: 15px; + font-weight: bold; + color: #4687E6; +} + +.uk-card-explore { + background-color: var(--portal-main-color); + color: #fff !important; +} + +.uk-card-explore .uk-h3 { + color: #fff !important; +} + +.uk-card-explore .uk-h6 a { + color: #fff !important; + text-decoration: underline; +} + +.uk-card-explore .uk-h5 { + color: #fff !important; + text-transform: uppercase; + font-size: 15px; + font-weight: bolder; +} + +.emphasis { + color: #000; + font-size: 17px; + font-weight: bold; +} + +.portal-color.emphasis { + color: #37C7E9; + font-size: 60px; + font-weight: 300; +} diff --git a/src/assets/arrow.svg b/src/assets/arrow.svg new file mode 100644 index 0000000..903449c --- /dev/null +++ b/src/assets/arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/common-assets b/src/assets/common-assets new file mode 160000 index 0000000..031329d --- /dev/null +++ b/src/assets/common-assets @@ -0,0 +1 @@ +Subproject commit 031329d5ca890663a0911e3dac5649eb5c00c601 diff --git a/src/assets/eosc-custom.less b/src/assets/eosc-custom.less new file mode 100644 index 0000000..595cc0e --- /dev/null +++ b/src/assets/eosc-custom.less @@ -0,0 +1,173 @@ +/* EOSC */ +//@eosc-color: #3D4DB6; +//@eosc-light-color: #E80000; +//@eosc-dark-color: #AD0000; +//@eosc-secondary-color: #AD0000; +//@eosc-default-background: #F2F2F2; +// +////@global-primary-gradient: linear-gradient(104deg, @eosc-dark-color 0%, @eosc-light-color 100%); +//@global-primary-gradient: @eosc-light-color; +// +///* Button */ +//@button-primary-background: @eosc-color; +//@inverse-button-primary-background: @eosc-color; +//@button-primary-hover-background: @eosc-secondary-color; +//@button-primary-active-background: @eosc-secondary-color; +// +///* Background */ +//@background-primary-background: @eosc-color; +//@background-primary-background-gradient: none; +// +///* Text */ +//@text-primary-color: @eosc-color; +// +///* Label */ +//@label-secondary-color: @eosc-color; +// +///* General */ +//@general-tab-featured-tab: @eosc-color; +// +///* Landing */ +//@landing-portal-color: @eosc-color; +// +//.search-form { +// background-color: rgba(61,77, 182); +//} + +@font-url: e("/assets/media/fonts/inter/static/"); + +/* Inter */ + +@font-face { font-family: "inter"; font-style: normal; font-weight: 100; src: url("@{font-url}Inter-Thin-thin.ttf") format('truetype'); font-display: swap} +@font-face { font-family: "inter"; font-style: normal; font-weight: 300; src: url("@{font-url}Inter-Light.ttf") format('truetype'); font-display: swap} +@font-face { font-family: "inter"; font-style: normal; font-weight: 400; src: url("@{font-url}Inter-Regular.ttf") format('truetype'); font-display: swap} +@font-face { font-family: "inter"; font-style: normal; font-weight: 600; src: url("@{font-url}Inter-SemiBold.ttf") format('truetype'); font-display: swap} +@font-face { font-family: "inter"; font-style: normal; font-weight: 700; src: url("@{font-url}Inter-Bold.ttf") format('truetype'); font-display: swap} +@font-face { font-family: "inter"; font-style: normal; font-weight: 900; src: url("@{font-url}Inter-Black.ttf") format('truetype'); font-display: swap} + + +@global-font-family: 'Inter', sans-serif; + +@eosc-color: #010F87; +@eosc-light-color: #3D4DB6; +@eosc-dark-color: #000745; +//@eosc-secondary-color: #2255A4; +@eosc-secondary-color: #000745; +@eosc-default-background: #F2F2F2; + +@primary-color: @eosc-color; +@primary-light-color: @eosc-light-color; +@primary-dark-color: @eosc-dark-color; +@secondary-color: @eosc-secondary-color; + +@global-link-color: @eosc-color; + +@global-primary-background: @eosc-color; +@global-secondary-background: @eosc-secondary-color; + +@general-search-form-background: @eosc-color; +@base-body-background: @eosc-default-background; +//@global-header-height: 120px; +//.hook-search-misc() { +// .search-input { +// --search-input-border-radius: 8px; +// --search-input-icon-padding-vertical: 5px; +// --search-input-icon-color: @global-primary-background; +// } +//} +//.input-wrapper { +// &.search { +// --input-padding-vertical: 5px !important; +// } +//} + +//.image-front-topbar, .search-form, #main-menu .uk-navbar-container, #main-menu-small .uk-navbar-container { +.eosc-explore-back-search-bar { + //background: @global-primary-background; + //background: #000 url(https://search.marketplace.eosc-portal.eu/top-bar-bg.d5173dd5fee84543.jpg) no-repeat !important; + background: #000 url(top-bar.svg) no-repeat !important; + position: relative; + height: 60px; +} + +#searchImage{ + background: url('https://marketplace.eosc-portal.eu/packs/media/images/eosc-logo-mono-65a4962b88cf1caa9e35838e33022ca8.png') no-repeat center left; + width: 203px; + height: 69px; + background-size: 203px 79px; +} + +.search-results-container { + background-color: white; + border-radius: 25px; +} + +.uk-button-primary { + background-image: none; +} +// +//.contentbox { +// display: block; +// position: relative; +//} +// +//.contentbox > div { +// width: 58%; +// display: flex; +// flex-direction: column; +// justify-content: center; +//} +// +//.contentbox > div > div { +// width: 90%; +//} +// +//aside { +// background: transparent; +// position: absolute; +// top: -25px; +// right: -100px; +// width: 68%; +// +// display: block; +//} +// +//.contentbox img { +// max-width: 100%; +// min-width: 45%; +// height: auto; +//} +// +//@media (max-width: 576px) { +// .contentbox { +// display: flex; +// flex-direction: column-reverse; +// } +//} +// +//@media (max-width: 991px) { +// .contentbox { +// flex-direction: column; +// align-items: normal; +// } +//} +// +//@media (max-width: 1120px) { +// .contentbox > div { +// width: 100%; +// } +//} +// +//@media (max-width: 576px) { +// .contentbox > div > div { +// width: 100%; +// } +//} +// +//@media (max-width: 576px) { +// .contentbox aside { +// position: relative; +// width: 100%; +// right: auto; +// } +//} \ No newline at end of file diff --git a/src/assets/graph.svg b/src/assets/graph.svg new file mode 100644 index 0000000..d94ad1a --- /dev/null +++ b/src/assets/graph.svg @@ -0,0 +1 @@ +graph \ No newline at end of file diff --git a/src/assets/home.jpg b/src/assets/home.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b0fae78178e1ec67c3afaf626cae3632af50d773 GIT binary patch literal 181662 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
    #`%W#uo4b5$zbuGG`FRxL)G{buE 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