diff --git a/portal-2/README.md b/portal-2/README.md index 340849e8..87547810 100644 --- a/portal-2/README.md +++ b/portal-2/README.md @@ -53,14 +53,17 @@ constructor(element: ElementRef, renderer: Renderer) { } ``` - The application runs XHR requests on the server & once again on the Client-side (when the application bootstraps) - - Use a [UniversalCache](https://github.com/angular/universal-starter/blob/master/src/+app/shared/api.service.ts#L47-L71) instead of regular Http, to save certain requests so they aren't re-ran again on the Client. + - Use a [UniversalCache](https://github.com/angular/universal-starter/blob/master/src/%2Bapp/shared/model/model.service.ts#L34-L50) instead of regular Http, to save certain requests so they aren't re-ran again on the Client. ([Example useage here](https://github.com/angular/universal-starter/blob/cc71e2d5b2d783f2bb52eebd1b5c6fa0ba23f08a/src/%2Bapp/%2Bhome/home.component.ts#L22-L24)) - Know the difference between attributes and properties in relation to the DOM. - Keep your directives stateless as much as possible. For stateful directives, you may need to provide an attribute that reflects the corresponding property with an initial string value such as url in img tag. For our native `` element the src attribute is reflected as the src property of the element type HTMLImageElement. ### Brotli Compression Support -To enable Brotli compression for server response with fallback for gzip replace the following code from src/server.aot.ts - +To enable Brotli compression for server response with fallback for gzip. Install the following packages +``` +npm install --save-dev iltorb accepts @types/accepts express-interceptor memory-cache @types/memory-cache +``` +and replace the following code from src/server.aot.ts. ``` import * as compression from 'compression'; @@ -99,8 +102,11 @@ app.use(interceptor((req, res)=>({ } } else { const { output, encoding } = mcache.get(key); - res.setHeader('Content-Encoding', encoding); - send(output); + if(encodings.has(encoding)){ + res.setHeader('Content-Encoding', encoding); + send(output); + return; + } } send(output); } diff --git a/portal-2/package.json b/portal-2/package.json index 11bcd2c1..408753b3 100644 --- a/portal-2/package.json +++ b/portal-2/package.json @@ -77,21 +77,16 @@ "@types/express": "^4.0.32", "@types/express-serve-static-core": "^4.0.33", "@types/hammerjs": "^2.0.32", - "@types/memory-cache": "0.0.29", "@types/mime": "0.0.28", "@types/node": "^6.0.38", "@types/serve-static": "^1.7.27", "@types/webfontloader": "^1.6.27", "@ngtools/webpack": "~1.1.7", - "accepts": "^1.3.3", "angular2-template-loader": "^0.4.0", "awesome-typescript-loader": "^2.2.4", "cookie-parser": "^1.4.3", - "express-interceptor": "^1.2.0", - "iltorb": "^1.0.13", "imports-loader": "^0.6.5", "json-loader": "^0.5.4", - "memory-cache": "^0.1.6", "nodemon": "^1.10.0", "raw-loader": "^0.5.1", "reflect-metadata": "0.1.8", diff --git a/portal-2/src/app/app-routing.module.ts b/portal-2/src/app/app-routing.module.ts index bd7c54b0..88c82374 100644 --- a/portal-2/src/app/app-routing.module.ts +++ b/portal-2/src/app/app-routing.module.ts @@ -1,10 +1,144 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; +export function getPublicationModule() { + return System.import('./landingPages/publication/publication.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'PublicationModuleNgFactory' : 'PublicationModule')]); +} +export function getDatasetModule() { + return System.import('./landingPages/dataset/dataset.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'DatasetModuleNgFactory' : 'DatasetModule')]); +} +export function getPersonModule() { + return System.import('./landingPages/person/person.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'PersonModuleNgFactory' : 'PersonModule')]); +} +export function getProjectModule() { + return System.import('./landingPages/project/project.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'ProjectModuleNgFactory' : 'ProjectModule')]); +} +export function getOrganizationModule() { + return System.import('./landingPages/organization/organization.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'OrganizationModuleNgFactory' : 'OrganizationModule')]); +} +export function getDepositDatasetsModule() { + return System.import('./deposit/datasets/depositDatasets.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'DepositDatasetsModuleNgFactory' : 'DepositDatasetsModule')]); +} +export function getDepositDatasetsResultsModule() { + return System.import('./deposit/datasets/depositDatasetsResults.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'DepositDatasetsResultsModuleNgFactory' : 'DepositDatasetsResultsModule')]); +} + +export function getDepositPublicationsModule() { + return System.import('./deposit/publications/depositPublications.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'DepositPublicationsModuleNgFactory' : 'DepositPublicationsModule')]); +} +export function getDepositPublicationsResultsModule() { + return System.import('./deposit/publications/depositPublicationsResults.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'DepositPublicationsResultsModuleNgFactory' : 'DepositPublicationsResultsModule')]); +} +export function getDataProviderModule() { + return System.import('./landingPages/dataProvider/dataProvider.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'DataProviderModuleNgFactory' : 'DataProviderModule')]); +} +export function getMainSearchModule() { + return System.import('./searchPages/find/mainSearch.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'MainSearchModuleNgFactory' : 'MainSearchModule')]); +} +export function getSearchPublicationsModule() { + return System.import('./searchPages/simple/searchPublications.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'SearchPublicationsModuleNgFactory' : 'SearchPublicationsModule')]); +} +export function getSearchDatasetsModule() { + return System.import('./searchPages/simple/searchDatasets.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'SearchDatasetsModuleNgFactory' : 'SearchDatasetsModule')]); +} +export function getSearchProjectsModule() { + return System.import('./searchPages/simple/searchProjects.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'SearchProjectsModuleNgFactory' : 'SearchProjectsModule')]); +} +export function getSearchOrganizationsModule() { + return System.import('./searchPages/simple/searchOrganizations.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'SearchOrganizationsModuleNgFactory' : 'SearchOrganizationsModule')]); +} +export function getSearchDataProvidersModule() { + return System.import('./searchPages/simple/searchDataProviders.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'SearchDataProvidersModuleNgFactory' : 'SearchDataProvidersModule')]); +} +export function getSearchPeopleModule() { + return System.import('./searchPages/simple/searchPeople.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'SearchPeopleModuleNgFactory' : 'SearchPeopleModule')]); +} +export function getCompatibleDataProvidersModule() { + return System.import('./searchPages/dataProviders/compatibleDataProviders.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'CompatibleDataProvidersModuleNgFactory' : 'CompatibleDataProvidersModule')]); +} +export function getEntityRegistriesModule() { + return System.import('./searchPages/dataProviders/entityRegistries.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'EntityRegistriesModuleNgFactory' : 'EntityRegistriesModule')]); +} +export function getAdvancedSearchPublicationsModule() { + return System.import('./searchPages/advanced/advancedSearchPublications.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'AdvancedSearchPublicationsModuleNgFactory' : 'AdvancedSearchPublicationsModule')]); +} +export function getAdvancedSearchDatasetsModule() { + return System.import('./searchPages/advanced/advancedSearchDatasets.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'AdvancedSearchDatasetsModuleNgFactory' : 'AdvancedSearchDatasetsModule')]); +} +export function getAdvancedSearchOrganizationsModule() { + return System.import('./searchPages/advanced/advancedSearchOrganizations.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'AdvancedSearchOrganizationsModuleNgFactory' : 'AdvancedSearchOrganizationsModule')]); +} +export function getAdvancedSearchDataProvidersModule() { + return System.import('./searchPages/advanced/advancedSearchDataProviders.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'AdvancedSearchDataProvidersModuleNgFactory' : 'AdvancedSearchDataProvidersModule')]); +} +export function getAdvancedSearchProjectsModule() { + return System.import('./searchPages/advanced/advancedSearchProjects.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'AdvancedSearchProjectsModuleNgFactory' : 'AdvancedSearchProjectsModule')]); +} +export function getAdvancedSearchPeopleModule() { + return System.import('./searchPages/advanced/advancedSearchPeople.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'AdvancedSearchPeopleModuleNgFactory' : 'AdvancedSearchPeopleModule')]); +} +export function gethtmlProjectReportModule() { + return System.import('./landingPages/htmlProjectReport/htmlProjectReport.module' + (process.env.AOT ? '.ngfactory' : '')) + .then(mod => mod[(process.env.AOT ? 'HtmlProjectReportModuleNgFactory' : 'HtmlProjectReportModule')]); +} + @NgModule({ imports: [ RouterModule.forChild([ - { path: '', redirectTo: '/search/find', pathMatch: 'full' } + { path: '', redirectTo: '/search/find', pathMatch: 'full' }, + { path: 'search/publication', loadChildren: getPublicationModule }, + { path: 'search/dataset', loadChildren: getDatasetModule }, + { path: 'search/person', loadChildren: getPersonModule }, + { path: 'search/organization', loadChildren: getOrganizationModule }, + { path: 'search/project', loadChildren: getProjectModule }, + { path: 'search/dataprovider', loadChildren: getDataProviderModule }, + { path: 'deposit-datasets', loadChildren: getDepositDatasetsModule }, + { path: 'deposit-datasets-result', loadChildren: getDepositDatasetsResultsModule }, + { path: 'deposit-publications', loadChildren: getDepositPublicationsModule }, + { path: 'deposit-publications-result', loadChildren: getDepositPublicationsResultsModule }, + { path: 'search/find', loadChildren: getMainSearchModule }, + { path: 'search/find/publications', loadChildren: getSearchPublicationsModule }, + { path: 'search/find/datasets', loadChildren: getSearchDatasetsModule }, + { path: 'search/find/projects', loadChildren: getSearchProjectsModule }, + { path: 'search/find/dataproviders', loadChildren: getSearchDataProvidersModule }, + { path: 'search/find/organizations', loadChildren: getSearchOrganizationsModule }, + { path: 'search/find/people', loadChildren: getSearchPeopleModule }, + { path: 'search/data-providers', loadChildren: getCompatibleDataProvidersModule }, + { path: 'search/entity-registries', loadChildren: getEntityRegistriesModule }, + { path: 'search/advanced/publications', loadChildren: getAdvancedSearchPublicationsModule }, + { path: 'search/advanced/datasets', loadChildren: getAdvancedSearchDatasetsModule }, + { path: 'search/advanced/organizations', loadChildren: getAdvancedSearchOrganizationsModule }, + { path: 'search/advanced/dataproviders', loadChildren: getAdvancedSearchDataProvidersModule }, + { path: 'search/advanced/projects', loadChildren: getAdvancedSearchProjectsModule }, + { path: 'search/advanced/people', loadChildren: getAdvancedSearchPeopleModule }, + { path: 'project-report', loadChildren: gethtmlProjectReportModule } + + ]) ], }) diff --git a/portal-2/src/app/app.module.ts b/portal-2/src/app/app.module.ts index 0ddfbcd5..63b94bb5 100755 --- a/portal-2/src/app/app.module.ts +++ b/portal-2/src/app/app.module.ts @@ -1,4 +1,3 @@ -//import {MaterialModule} from '@angular/material'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; @@ -8,35 +7,20 @@ import { SharedModule } from './shared/shared.module'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent, XLargeDirective } from './app.component'; -// custom modules:: -import {SearchModule} from './searchPages/search.module'; -import {DepoditModule} from './deposit/deposit.module'; -import {LandingModule} from './landingPages/landing.module'; import {SharedComponentsModule} from './sharedComponents/sharedComponents.module'; //navbar -import {UtilsModule} from './utils/utils.module'; -import {TestModule} from './test/test.module'; -import { HomeModule } from './home/home.module'; import { ErrorModule } from './error/error.module'; +import { CacheService } from './shared/cache.service'; -import {ServicesModule} from './services/services.module'; @NgModule({ declarations: [ AppComponent, XLargeDirective ], imports: [ - //MaterialModule.forRoot(), SharedModule, - HomeModule, - SearchModule, - DepoditModule, - LandingModule, + SharedComponentsModule, - UtilsModule, - ServicesModule, - TestModule, - HomeModule, AppRoutingModule, ErrorModule - ], exports:[] + ], exports:[], providers:[CacheService] }) export class AppModule { } diff --git a/portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts b/portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts new file mode 100644 index 00000000..d976262c --- /dev/null +++ b/portal-2/src/app/deposit/datasets/depositDatasets-routing.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { DepositDatasetsComponent } from './depositDatasets.component'; +import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: DepositDatasetsComponent } + + ]) + ] +}) +export class DepositDatasetsRoutingModule { } diff --git a/portal-2/src/app/deposit/depositDatasets.component.ts b/portal-2/src/app/deposit/datasets/depositDatasets.component.ts similarity index 99% rename from portal-2/src/app/deposit/depositDatasets.component.ts rename to portal-2/src/app/deposit/datasets/depositDatasets.component.ts index 1b2194e9..489e60d9 100644 --- a/portal-2/src/app/deposit/depositDatasets.component.ts +++ b/portal-2/src/app/deposit/datasets/depositDatasets.component.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; - + @Component({ selector: 'deposit-datasets', template: ` diff --git a/portal-2/src/app/deposit/datasets/depositDatasets.module.ts b/portal-2/src/app/deposit/datasets/depositDatasets.module.ts new file mode 100644 index 00000000..ae2630a4 --- /dev/null +++ b/portal-2/src/app/deposit/datasets/depositDatasets.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { DepositDatasetsComponent } from './depositDatasets.component'; +import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; + +import {DepositDatasetsRoutingModule} from './depositDatasets-routing.module'; +import {DepoditModule} from '../deposit.module'; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + DepoditModule, + DepositDatasetsRoutingModule + ], + declarations: [ + + DepositDatasetsComponent, + + ], + exports: [ + DepositDatasetsComponent, + ], + providers: [ + ] +}) +export class DepositDatasetsModule { } diff --git a/portal-2/src/app/deposit/depositDatasetsResult.component.ts b/portal-2/src/app/deposit/datasets/depositDatasetsResult.component.ts similarity index 100% rename from portal-2/src/app/deposit/depositDatasetsResult.component.ts rename to portal-2/src/app/deposit/datasets/depositDatasetsResult.component.ts diff --git a/portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts b/portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts new file mode 100644 index 00000000..8356b40a --- /dev/null +++ b/portal-2/src/app/deposit/datasets/depositDatasetsResults-routing.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; + +@NgModule({ + imports: [ + RouterModule.forChild([ + { path: '', component: DepositDatasetsResultComponent } + + ]) + ] +}) +export class DepositDatasetsResultsRoutingModule { } diff --git a/portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts b/portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts new file mode 100644 index 00000000..428e7327 --- /dev/null +++ b/portal-2/src/app/deposit/datasets/depositDatasetsResults.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; + +import {DepositDatasetsResultsRoutingModule} from './depositDatasetsResults-routing.module'; +import {DepoditModule} from '../deposit.module'; + +@NgModule({ + imports: [ + CommonModule, FormsModule, + DepoditModule, + DepositDatasetsResultsRoutingModule + ], + declarations: [ + + DepositDatasetsResultComponent, + + ], + exports: [ + DepositDatasetsResultComponent, + ], + providers: [ + ] +}) +export class DepositDatasetsResultsModule { } diff --git a/portal-2/src/app/deposit/deposit-routing.module.ts b/portal-2/src/app/deposit/deposit-routing.module.ts deleted file mode 100644 index 0db66c1f..00000000 --- a/portal-2/src/app/deposit/deposit-routing.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule } from '@angular/router'; - -import { DepositPublicationsComponent } from './depositPublications.component'; -import { DepositDatasetsComponent } from './depositDatasets.component'; -import { DepositPublicationsResultComponent } from './depositPublicationsResult.component'; -import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; - -@NgModule({ - imports: [ - RouterModule.forChild([ - { path: 'deposit-publications', component: DepositPublicationsComponent }, - { path: 'deposit-datasets', component: DepositDatasetsComponent }, - { path: 'deposit-publications-result', component: DepositPublicationsResultComponent} , - { path: 'deposit-datasets-result', component: DepositDatasetsResultComponent }, - - ]) - ] -}) -export class DepositRoutingModule { } diff --git a/portal-2/src/app/deposit/deposit.component.ts b/portal-2/src/app/deposit/deposit.component.ts index 3e182db8..ff085191 100644 --- a/portal-2/src/app/deposit/deposit.component.ts +++ b/portal-2/src/app/deposit/deposit.component.ts @@ -3,7 +3,6 @@ import {Observable} from 'rxjs/Observable'; import { Router } from '@angular/router'; import {OpenaireProperties, ErrorCodes} from '../utils/properties/openaireProperties'; -import {SearchOrganizationsService} from '../services/searchOrganizations.service'; @Component({ selector: 'deposit', @@ -64,7 +63,7 @@ export class DepositComponent { public selectedId: string = ""; public warningMessage: string = ""; - constructor (private _router: Router, private _searchOrganizationsService: SearchOrganizationsService) { + constructor (private _router: Router) { this.openAccess = OpenaireProperties.getOpenAccess(); this.openAccessRepo = OpenaireProperties.getOpenAccessRepo(); diff --git a/portal-2/src/app/deposit/deposit.module.ts b/portal-2/src/app/deposit/deposit.module.ts index 8dd7495a..eef2e6c4 100644 --- a/portal-2/src/app/deposit/deposit.module.ts +++ b/portal-2/src/app/deposit/deposit.module.ts @@ -1,41 +1,30 @@ +/* Common Component of deposit for both datasets & ppublications*/ + import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; -import { UtilsModule} from '../utils/utils.module' - import { DepositComponent } from './deposit.component'; import { DepositResultComponent } from './depositResult.component'; -import { DepositPublicationsComponent } from './depositPublications.component'; -import { DepositPublicationsResultComponent } from './depositPublicationsResult.component'; -import { DepositDatasetsComponent } from './depositDatasets.component'; -import { DepositDatasetsResultComponent } from './depositDatasetsResult.component'; +import {EntitiesAutocompleteModule} from '../utils/entitiesAutoComplete/entitiesAutoComplete.module'; +import {DataProvidersServiceModule} from '../services/dataProvidersService.module'; +import {OrganizationServiceModule} from '../services/organizationService.module'; -import {ServicesModule} from '../services/services.module'; -import {SearchModule} from '../searchPages/search.module'; -import {DepositRoutingModule} from './deposit-routing.module'; - -//helpers - -@NgModule({ + @NgModule({ imports: [ CommonModule, FormsModule, - UtilsModule, - ServicesModule, - SearchModule, - DepositRoutingModule + EntitiesAutocompleteModule, + DataProvidersServiceModule, + OrganizationServiceModule ], declarations: [ DepositComponent, - DepositResultComponent, - DepositPublicationsComponent, - DepositPublicationsResultComponent, - DepositDatasetsComponent, - DepositDatasetsResultComponent + DepositResultComponent ], exports: [ - //DepositComponent + DepositComponent, + DepositResultComponent ], providers: [ ] diff --git a/portal-2/src/app/deposit/depositResult.component.ts b/portal-2/src/app/deposit/depositResult.component.ts index 0a6f1e17..fed7733c 100644 --- a/portal-2/src/app/deposit/depositResult.component.ts +++ b/portal-2/src/app/deposit/depositResult.component.ts @@ -3,9 +3,8 @@ import {Observable} from 'rxjs/Observable'; import {OpenaireProperties, ErrorCodes} from '../utils/properties/openaireProperties'; import { Router } from '@angular/router'; import { ActivatedRoute } from '@angular/router'; -import { SearchDataprovidersComponent } from '../searchPages/simple/searchDataproviders.component'; +import { FetchDataproviders } from '../utils/fetchEntitiesClasses/fetchDataproviders.class'; import { SearchDataprovidersService } from '../services/searchDataproviders.service'; -import { SearchResultComponent } from '../searchPages/searchUtils/searchResult.component'; import {OrganizationService} from '../services/organization.service'; @@ -17,13 +16,15 @@ import {OrganizationService} from '../services/organization.service';
Please use the information/contacts shown below to deposit your {{requestFor}}.
- - -Please use the information/contacts shown below to deposit your {{requestFor}}.
+ + + +The results below are discovered through our pilot algorithms. Let us know how we are doing!
- -The results below are discovered through our pilot algorithms. Let us know how we are doing!
- -The results below are discovered through our pilot algorithms. Let us know how we are doing!
- -The results below are discovered through our pilot algorithms. Let us know how we are doing!
- -The results below are discovered through our pilot algorithms. Let us know how we are doing! @@ -27,7 +26,7 @@ import {OpenaireProperties} from '../../utils/properties/openaireProperties';
-
The results below are discovered through our pilot algorithms.
Let us know how we are doing!
@@ -120,36 +111,37 @@ import {OpenaireProperties} from '../../utils/properties/openaireProperties';
Funders in Data Providers Publications
Projects with most Publications
Projects with most Research Data
-Projects with most Research Data
+The results below are discovered through our pilot algorithms. Let us know how we are doing! @@ -214,15 +206,18 @@ import {OpenaireProperties} from '../../utils/properties/openaireProperties';
Funders in Data Providers Publications
Projects with most Publications
Projects with most Research Data
The results below are discovered through our pilot algorithms. Let us know how we are doing!
- -