+ !statisticsDisplay.entities[entity].numbers.map['total'][showIn] && !statisticsDisplay.entities[entity].numbers.map['project'][showIn] &&
+ !statisticsDisplay.entities[entity].numbers.map['open'][showIn] && !statisticsDisplay.entities[entity].numbers.map['closed'][showIn] &&
+ !statisticsDisplay.entities[entity].numbers.map['embargo'][showIn] && !statisticsDisplay.entities[entity].numbers.map['restricted'][showIn]"
+ class="uk-alert uk-alert-primary">
No graphs available
- {{statisticsSum[entity].projects|number}}
-
+ {{statisticsSum[entity].projects|number}}
+
- Total linked projects
-
+ Total linked projects
+
+ class="uk-section tm-middle uk-container uk-margin-large-top ">
diff --git a/src/app/community/community.component.ts b/src/app/community/community.component.ts
index 517f078..cc9fccd 100644
--- a/src/app/community/community.component.ts
+++ b/src/app/community/community.component.ts
@@ -29,20 +29,20 @@ import {OpenaireEntities} from '../openaireLibrary/utils/properties/searchFields
@Component({
selector: 'community',
templateUrl: 'community.component.html',
- styles: [
+ styles: [
+ `
+ #mytabs .uk-tab::before {
+ border-bottom: none;
+ }
+ #mytabs::before {
+ content: "";
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ border-bottom: 1px solid #eaeaea;
+ }
`
- #mytabs .uk-tab::before {
- border-bottom: none;
- }
- #mytabs::before {
- content: "";
- position: absolute;
- bottom: 0;
- left: 0;
- right: 0;
- border-bottom: 1px solid #eaeaea;
- }
- `
]
})
@@ -86,13 +86,18 @@ export class CommunityComponent {
public thresholdDescription: number = 500;
public descriptionDiff: number = 100;
- page = 1;
- size = 5;
+ page = 1;
+ size = 5;
subscribers: number = 0;
subs: Subscription[] = [];
+ displayedAllSubjects = [];
+ displayedSubjects = [];
+ displayedSdg = [];
+ displayedFos = [];
+
@ViewChild(StatisticsForDashboardComponent) statistics: StatisticsForDashboardComponent = null;
public activeTab = "summary";
public show: string = 'overview';
@@ -110,7 +115,7 @@ export class CommunityComponent {
selectedEntity = 'result';
selectedEntitySimpleUrl;
selectedEntityAdvancedUrl;
- resultTypes: Filter = {
+ resultTypes: Filter = {
values: [],
filterId: "type",
countSelectedValues: 0,
@@ -120,7 +125,7 @@ export class CommunityComponent {
title: "Type",
filterOperator: "or"
};
- showPublications: boolean = false;
+ showPublications: boolean = false;
showDatasets: boolean = false;
showSoftware: boolean = false;
showOrp: boolean = false;
@@ -135,9 +140,9 @@ export class CommunityComponent {
filterId: "resultbestaccessright",
value: "Open Access"
};
- disableSelect: boolean = true;
- openaireEntities= OpenaireEntities;
- piwikSiteId;
+ disableSelect: boolean = true;
+ openaireEntities= OpenaireEntities;
+ piwikSiteId;
constructor(
private element: ElementRef,
@@ -156,9 +161,9 @@ export class CommunityComponent {
private _zenodoCommunitieService: ZenodoCommunitiesService,
private seoService: SEOService,
private userManagementService: UserManagementService,
- private _renderer2: Renderer2,
- private cdr: ChangeDetectorRef,
- @Inject(DOCUMENT) private _document: Document) {
+ private _renderer2: Renderer2,
+ private cdr: ChangeDetectorRef,
+ @Inject(DOCUMENT) private _document: Document) {
var description = "OpenAIRE - Connect, Community Dashboard, research community";
var title = "OpenAIRE - Connect";
@@ -192,6 +197,18 @@ export class CommunityComponent {
community => {
this.community = community;
if(community && !ConnectHelper.isPrivate(community, this.user)) {
+ this.displayedSubjects = community.subjects;
+ this.displayedSdg = community.sdg;
+ this.displayedFos = community.fos;
+ this.displayedSubjects.forEach(element => {
+ this.displayedAllSubjects.push({value: element, type: 'resultsubject'});
+ });
+ this.displayedSdg.forEach(element => {
+ this.displayedAllSubjects.push({value: element, type: 'sdg'});
+ });
+ this.displayedFos.forEach(element => {
+ this.displayedAllSubjects.push({value: element, type: 'fos'});
+ });
if (community.description != null && (community.description.length - this.thresholdDescription <= this.descriptionDiff)) {
this.thresholdDescription = community.description.length;
}
@@ -204,12 +221,12 @@ export class CommunityComponent {
this._meta.updateTag({content: community.title}, "property='og:title'");
this._title.setTitle(community.title);
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
- this.subs.push(this.config.communityInformationState.subscribe(portal => {
- if(portal && portal.piwik) {
- this.piwikSiteId = portal.piwik;
- this.subs.push(this._piwikService.trackView(this.properties, community.title, this.piwikSiteId).subscribe());
- }
- }));
+ this.subs.push(this.config.communityInformationState.subscribe(portal => {
+ if(portal && portal.piwik) {
+ this.piwikSiteId = portal.piwik;
+ this.subs.push(this._piwikService.trackView(this.properties, community.title, this.piwikSiteId).subscribe());
+ }
+ }));
}
if (this.community.zenodoCommunity) {
this.subs.push(this._zenodoCommunitieService.getZenodoCommunityById(this.properties, this.properties.zenodoCommunities + this.community.zenodoCommunity, null).subscribe(
@@ -283,47 +300,47 @@ export class CommunityComponent {
this.handleError("Error getting community with id: " + this.communityId, error);
}
));
- 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"];
- if (this.showPublications) {
- this.resultTypes.values.push({
- name: this.openaireEntities.PUBLICATIONS,
- id: "publications",
- selected: false,
- number: 0
- });
- }
- if (this.showDatasets) {
- this.resultTypes.values.push({
- name: this.openaireEntities.DATASETS,
- id: "datasets",
- selected: false,
- number: 0
- });
- }
- if (this.showSoftware) {
- this.resultTypes.values.push({
- name: this.openaireEntities.SOFTWARE,
- id: "software",
- selected: false,
- number: 0
- });
- }
- if (this.showOrp) {
- this.resultTypes.values.push({name: this.openaireEntities.OTHER, id: "other", selected: false, number: 0});
- }
- }
- }));
+ 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"];
+ if (this.showPublications) {
+ this.resultTypes.values.push({
+ name: this.openaireEntities.PUBLICATIONS,
+ id: "publications",
+ selected: false,
+ number: 0
+ });
+ }
+ if (this.showDatasets) {
+ this.resultTypes.values.push({
+ name: this.openaireEntities.DATASETS,
+ id: "datasets",
+ selected: false,
+ number: 0
+ });
+ }
+ if (this.showSoftware) {
+ this.resultTypes.values.push({
+ name: this.openaireEntities.SOFTWARE,
+ id: "software",
+ selected: false,
+ number: 0
+ });
+ }
+ if (this.showOrp) {
+ this.resultTypes.values.push({name: this.openaireEntities.OTHER, id: "other", selected: false, number: 0});
+ }
+ }
+ }));
}
private searchPublications(page: number, size: number) {
@@ -385,7 +402,7 @@ export class CommunityComponent {
)
) {
this.fetchFeaturedDatasets.getAllResultsForCommunity("dataset", this.communityId, page, size, this.properties, "enermaps::selection");
- // console.log(this.fetchFeaturedDatasets);
+ // console.log(this.fetchFeaturedDatasets);
}
this.reloadFeaturedDatasets = false;
}
@@ -522,9 +539,9 @@ export class CommunityComponent {
return tooltipContent;
}
- public buildContentProvidersTooltip(): string {
+ public buildContentProvidersTooltip(): string {
let tooltipContent: string = "";
-
+
if (this.contentProviderTotal != null && this.contentProviderTotal > 0 && this.isEntityEnabled('datasource') && this.isRouteEnabled(this.searchLinkToDataProviders)) {
tooltipContent += "
Content Providers";
}
@@ -541,7 +558,7 @@ export class CommunityComponent {
tooltipContent += "
Zenodo is a catch-all repository for OpenAIRE.";
tooltipContent += "
A Zenodo Community is created and curated by Zenodo users.
";
tooltipContent += "
";
-
+
return tooltipContent;
}
@@ -643,24 +660,24 @@ export class CommunityComponent {
this.activeTab = 'mapping';
} else if (activeTabId == 'enermaps') {
this.show = 'enermaps';
- this.activeTab = 'enermaps';
+ this.activeTab = 'enermaps';
this.searchFeaturedDatasets(1, this.fetchFeaturedDatasets.searchUtils.totalResults);
} else if (activeTabId == 'twitter') {
- this.show = 'twitter';
- this.activeTab = 'twitter';
- }
+ this.show = 'twitter';
+ this.activeTab = 'twitter';
+ }
}
}
isPrivate(){
return ConnectHelper.isPrivate(this.community, this.user);
}
- disableSelectChange(event: boolean) {
+ disableSelectChange(event: boolean) {
this.disableSelect = event;
this.cdr.detectChanges();
}
- public updatePage(event) {
+ public updatePage(event) {
this.page = event.value;
}
}
diff --git a/src/app/subjects/subjects.component.ts b/src/app/subjects/subjects.component.ts
index 421d22e..2ee6942 100644
--- a/src/app/subjects/subjects.component.ts
+++ b/src/app/subjects/subjects.component.ts
@@ -18,112 +18,330 @@ import {Subscriber, Subscription} from "rxjs";
-
-
-
-
- Subjects
-
-
0">
- 0"
- [texts]="pageContents['top']">
-
-
-
-
-
- 1" class="uk-margin-large-top uk-grid uk-child-width-1-4@m" uk-grid>
-
-
-
-
-
-
-
-
-
{{groupedSubjects[index].group}}
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+ Subjects
+
+
0">
+ 0"
+ [texts]="pageContents['top']">
+
+
+
+
0 || displayedSdg?.length > 0 || displayedFos?.length > 0">
+
+
+ -
+
+
+
+
1" class="uk-margin-large-top uk-grid uk-child-width-1-4@m" uk-grid>
+
+
+
+
+
+
+
{{groupedAllSubjects[indexAll].group}}
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
1" class="uk-margin-large-top uk-grid uk-child-width-1-4@m" uk-grid>
+
+
+
+
+
+
+
{{groupedSubjects[indexSubjects]?.group}}
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
1" class="uk-margin-large-top uk-grid uk-child-width-1-4@m" uk-grid>
+
+
+
+
+
+
+
{{groupedSdg[indexSdg].group}}
+
+
+
+
+
+
+
+
+
+
+
+ -
+
+
+
+
1" class="uk-margin-large-top uk-grid uk-child-width-1-4@m" uk-grid>
+
+
+
+
+
+
+
{{groupedFos[indexFos].group}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
`
})
export class SubjectsComponent {
- public subjects: string[];
- public communityId = null;
- public showLoading = true;
-
- public properties: EnvProperties = properties;
- public pageContents = null;
- public divContents = null;
- public groupedSubjects = [];
- public index: number = 0;
- public subjectsLimit: number = 6;
- public viewAll: boolean = false;
- public maxCharacters: number = 25;
- public subjectsColumns = [];
-
- public url: string = null;
- public pageTitle: string = "Subjects";
-
- public breadcrumbs: Breadcrumb[] = [{name: 'Home', route: '/'}, {name: 'About - Subjects'}];
-
+ properties: EnvProperties = properties;
+ breadcrumbs: Breadcrumb[] = [{name: 'Home', route: '/'}, {name: 'About - Subjects'}];
+ pageContents = null;
+ divContents = null;
+ url: string = null;
+ pageTitle: string = "Subjects";
+ communityId = null;
+ showLoading = true;
subs: Subscription[] = [];
-
+
+ displayedAllSubjects = [];
+ displayedSubjects = [];
+ displayedSdg = [];
+ displayedFos = [];
+ groupedAllSubjects = [];
+ groupedSubjects = [];
+ groupedSdg = [];
+ groupedFos = [];
+ subjectsColumns = [];
+ subjectsLimit: number = 6;
+ maxCharacters: number = 25;
+ activeTab: 'all' | 'freeText' | 'sdg' | 'fos' = 'all';
+ indexAll: number = 0;
+ indexSubjects: number = 0;
+ indexSdg: number = 0;
+ indexFos: number = 0;
+
+ viewAll: boolean = false;
+
constructor(private route: ActivatedRoute,
private communityService: CommunityService,
private _router: Router,
@@ -147,18 +365,20 @@ export class SubjectsComponent {
if (this.properties.enablePiwikTrack && (typeof document !== 'undefined')) {
this.subs.push(this._piwikService.trackView(this.properties, this.pageTitle, PiwikHelper.getSiteId(this.communityId)).subscribe());
}
- //this.getDivContents();
this.getPageContents();
- this.subjects = community.subjects;
- this.subjects.sort((a,b) => {
- if(!a || a.toLocaleUpperCase() < b.toLocaleUpperCase()) {
- return -1;
- } else if (!b || a.toLocaleUpperCase() > b.toLocaleUpperCase()) {
- return 1;
- }
- return 0;
- });
- this.groupSubjects();
+ this.displayedSubjects = community.subjects;
+ this.displayedSdg = community.sdg;
+ this.displayedFos = community.fos;
+ this.displayedSubjects.forEach(element => {
+ this.displayedAllSubjects.push({value: element, type: 'resultsubject'});
+ });
+ this.displayedSdg.forEach(element => {
+ this.displayedAllSubjects.push({value: element, type: 'sdg'});
+ });
+ this.displayedFos.forEach(element => {
+ this.displayedAllSubjects.push({value: element, type: 'fos'});
+ });
+ this.groupSubjects(this.displayedAllSubjects, 'all');
this.showLoading = false;
}
}));
@@ -182,51 +402,111 @@ export class SubjectsComponent {
}));
}
- private getDivContents() {
- this.subs.push(this.helper.getDivHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
- this.divContents = contents;
- }));
+ public groupSubjects(subjects: string[], type: string) {
+ if(subjects.length === 0) {
+ return [];
+ }
+ if(type === 'all') {
+ subjects.sort((a, b) => a['value'].localeCompare(b['value']));
+ this.indexAll = 0;
+ this.activeTab = 'all';
+ this.groupedAllSubjects = Object.values(
+ subjects.reduce((acc, subject) => {
+ let firstLetter = subject['value'][0].toLocaleUpperCase();
+ if(!acc[firstLetter]) {
+ acc[firstLetter] = {group: firstLetter, data: [subject]};
+ } else {
+ acc[firstLetter].data.push(subject);
+ }
+ return acc;
+ },{})
+ )
+ if(subjects.length > 1) {
+ this.groupedAllSubjects.unshift({group: 'All', data: subjects});
+ }
+ }
+ if(type === 'freeText') {
+ subjects.sort((a, b) => a.localeCompare(b));
+ this.indexSubjects = 0;
+ this.activeTab = 'freeText';
+ this.groupedSubjects = Object.values(
+ subjects.reduce((acc, subject) => {
+ let firstLetter = subject[0].toLocaleUpperCase();
+ if(!acc[firstLetter]) {
+ acc[firstLetter] = {group: firstLetter, data: [subject]};
+ } else {
+ acc[firstLetter].data.push(subject);
+ }
+ return acc;
+ },{})
+ )
+ if(subjects.length > 1) {
+ this.groupedSubjects.unshift({group: 'All', data: subjects});
+ }
+ }
+ if(type === 'sdg') {
+ subjects.sort((a, b) => a.localeCompare(b));
+ this.indexSdg = 0;
+ this.activeTab = 'sdg';
+ this.groupedSdg = Object.values(
+ subjects.reduce((acc, subject) => {
+ let firstLetter = subject[0].toLocaleUpperCase();
+ if(!acc[firstLetter]) {
+ acc[firstLetter] = {group: firstLetter, data: [subject]};
+ } else {
+ acc[firstLetter].data.push(subject);
+ }
+ return acc;
+ },{})
+ )
+ if(subjects.length > 1) {
+ this.groupedSdg.unshift({group: 'All', data: subjects});
+ }
+ }
+ if(type === 'fos') {
+ subjects.sort((a, b) => a.localeCompare(b));
+ this.indexFos = 0;
+ this.activeTab = 'fos';
+ this.groupedFos = Object.values(
+ subjects.reduce((acc, subject) => {
+ let key = subject.substring(0,2).toLocaleUpperCase();
+ if(!acc[key]) {
+ acc[key] = {group: key, data: [subject]};
+ } else {
+ acc[key].data.push(subject);
+ }
+ return acc;
+ },{})
+ )
+ if(subjects.length > 1) {
+ this.groupedFos.unshift({group: 'All', data: subjects});
+ }
+ }
}
- // private sortSubjects(a, b) {
+ public changeDisplayedSubjects(i, group) {
+ this.subjectsColumns = [];
+ if(this.activeTab === 'all') {
+ this.indexAll = i;
+ } else if(this.activeTab === 'freeText') {
+ this.indexSubjects = i;
+ } else if(this.activeTab === 'sdg') {
+ this.indexSdg = i;
+ } else if(this.activeTab === 'fos') {
+ this.indexFos = i;
+ }
+ if(group.data.length > this.subjectsLimit && group.group != 'All') {
+ this.divideSubjects(group);
+ }
+ }
- // }
-
- private groupSubjects() {
- if(this.subjects.length === 0) {
- return [];
- }
- this.groupedSubjects = Object.values(
- this.subjects.reduce((acc, subject) => {
- let firstLetter = subject[0].toLocaleUpperCase();
- if(!acc[firstLetter]) {
- acc[firstLetter] = {group: firstLetter, data: [subject]};
- } else {
- acc[firstLetter].data.push(subject);
- }
- return acc;
- },{})
- )
- if(this.subjects.length > 1) {
- this.groupedSubjects.unshift({group: 'All', data: this.subjects});
- }
- }
-
- public changeDisplayedSubjects(i, group) {
- this.subjectsColumns = [];
- this.index = i;
- if(group.data.length > this.subjectsLimit && group.group != 'All') {
- this.divideSubjects(group);
- }
- }
-
- public divideSubjects(group) {
- let columns = [];
- for(let i = 0; i < (group.data.length / this.subjectsLimit); i++) {
- columns.push(group.data.slice(i * this.subjectsLimit, ((i + 1) * this.subjectsLimit)));
- }
- this.subjectsColumns = columns;
- }
+ public divideSubjects(group) {
+ let columns = [];
+ for(let i = 0; i < (group.data.length / this.subjectsLimit); i++) {
+ columns.push(group.data.slice(i * this.subjectsLimit, ((i + 1) * this.subjectsLimit)));
+ }
+ this.subjectsColumns = columns;
+ }
private updateDescription(description: string) {
this._meta.updateTag({content: description}, "name='description'");