Merge on-push-strategy branch into develop (on push strategy in result-preview component, i.e. search result cards) #39
|
@ -38,6 +38,12 @@ export class ClaimProject {
|
||||||
public fundingLevel0: string;
|
public fundingLevel0: string;
|
||||||
public url: string;
|
public url: string;
|
||||||
}
|
}
|
||||||
|
export class ClaimOrganization {
|
||||||
|
public name: string;
|
||||||
|
// public shortName: string;
|
||||||
|
public url: string;
|
||||||
|
// public country: string;
|
||||||
|
}
|
||||||
|
|
||||||
export class ClaimContext {
|
export class ClaimContext {
|
||||||
public community: string;
|
public community: string;
|
||||||
|
@ -72,6 +78,7 @@ export class ClaimEntity {
|
||||||
result: ClaimResult;
|
result: ClaimResult;
|
||||||
project: ClaimProject;
|
project: ClaimProject;
|
||||||
context: ClaimContext;
|
context: ClaimContext;
|
||||||
|
organization: ClaimOrganization;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
this.warningMessages = [];
|
this.warningMessages = [];
|
||||||
|
@ -117,7 +124,12 @@ export class ClaimDBContext {
|
||||||
title: string;
|
title: string;
|
||||||
openaireId: string;
|
openaireId: string;
|
||||||
}
|
}
|
||||||
|
export class ClaimDBOrganization {
|
||||||
|
openaireId: string;
|
||||||
|
name: string;
|
||||||
|
shortName: string;
|
||||||
|
country: string;
|
||||||
|
}
|
||||||
export class ClaimDBProject {
|
export class ClaimDBProject {
|
||||||
openaireId: string;
|
openaireId: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
export class ClaimsProperties{
|
||||||
|
ALLOW_ORGANIZATION_LINKING:boolean = false;
|
||||||
|
INLINE_ENTITY = {
|
||||||
|
show: true,
|
||||||
|
guideText : null
|
||||||
|
}
|
||||||
|
BASKET ={
|
||||||
|
source_title: "Source",
|
||||||
|
target_title: "Link source to"
|
||||||
|
}
|
||||||
|
METADATA_PREVIEW ={
|
||||||
|
source_title: "Source",
|
||||||
|
target_title: "Link to",
|
||||||
|
edit_source_title: "Edit",
|
||||||
|
edit_target_title: "Edit",
|
||||||
|
edit_target_icon: "edit"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other"></schema2jsonld>
|
<schema2jsonld *ngIf="url" [URL]="url" [name]="pageTitle" type="other"></schema2jsonld>
|
||||||
<div class="uk-grid">
|
<div class="uk-grid">
|
||||||
<div class="uk-width-expand uk-position-relative">
|
<div class="uk-width-expand uk-position-relative uk-margin-small-top">
|
||||||
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
|
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
|
||||||
[texts]="pageContents['top']"></helper>
|
[texts]="pageContents['top']"></helper>
|
||||||
<div *ngIf="filterForm" [id]="actions?'page_content_actions':null" [class.uk-blur-background]="actions" [attr.uk-sticky]="(actions)?'media: @m':null" [attr.offset]="offset">
|
<div *ngIf="filterForm" [id]="actions?'page_content_actions':null" [class.uk-blur-background]="actions" [attr.uk-sticky]="(actions)?'media: @m':null" [attr.offset]="offset">
|
||||||
<div [class.uk-padding-small]="actions" class="uk-padding-remove-vertical">
|
<div [class.uk-padding-small]="actions" class="uk-padding-remove-vertical">
|
||||||
<div class="uk-section-xsmall">
|
|
||||||
<div class="uk-flex uk-flex-right@m uk-flex-center uk-flex-wrap uk-flex-middle">
|
<div class="uk-flex uk-flex-right@m uk-flex-center uk-flex-wrap uk-flex-middle">
|
||||||
<div search-input [disabled]="loading" [searchControl]="filterForm.controls.keyword" searchInputClass="outer"
|
<div search-input [disabled]="loading" [searchControl]="filterForm.controls.keyword" searchInputClass="outer"
|
||||||
placeholder="Search links" class="uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1"
|
placeholder="Search links" class="uk-width-1-3@xl uk-width-2-5@l uk-width-1-2@m uk-width-1-1"
|
||||||
|
@ -13,13 +13,15 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div [class.uk-padding]="actions" class="uk-padding-remove-vertical">
|
<div [class.uk-padding]="actions" class="uk-padding-remove-vertical">
|
||||||
<div class="uk-margin-medium-top">
|
<div class="uk-margin-small-top">
|
||||||
<results-and-pages [type]="resultsNum !== 1?'Links':'Link'" [page]="page" [pageSize]="size" [hasSearch]="true" [searchTerm]="keyword"
|
<results-and-pages [type]="resultsNum !== 1?'Links':'Link'" [page]="page" [pageSize]="size" [hasSearch]="true" [searchTerm]="keyword"
|
||||||
[totalResults]="resultsNum" customClasses="uk-margin-remove"></results-and-pages>
|
[totalResults]="resultsNum" customClasses="uk-margin-remove"></results-and-pages>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-grid uk-flex-middle uk-margin-medium-top" uk-grid>
|
<div class="uk-grid uk-flex-middle uk-margin-small-top" uk-grid>
|
||||||
|
<div *ngIf="fetchBy != 'User' && properties.environment == 'development'" >
|
||||||
|
<input [(ngModel)]="mine" [checked]="mine" (ngModelChange)="goTo(1)" type="checkbox" class="uk-checkbox"> Mine
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<dropdown-filter #dropdownFilter dropdownClass="uk-width-medium uk-padding-small"
|
<dropdown-filter #dropdownFilter dropdownClass="uk-width-medium uk-padding-small"
|
||||||
name="Type of Entity" [disabled]="loading" [count]="entities.length">
|
name="Type of Entity" [disabled]="loading" [count]="entities.length">
|
||||||
|
@ -43,6 +45,7 @@
|
||||||
type="select" [options]="sortOptions">
|
type="select" [options]="sortOptions">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="uk-width-expand@l uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center">
|
<div class="uk-width-expand@l uk-width-1-1 uk-flex uk-flex-right@m uk-flex-center">
|
||||||
<paging-no-load [currentPage]="page" [totalResults]="resultsNum" [size]="size"
|
<paging-no-load [currentPage]="page" [totalResults]="resultsNum" [size]="size"
|
||||||
[loading]="false" (pageChange)="pageChange($event)"></paging-no-load>
|
[loading]="false" (pageChange)="pageChange($event)"></paging-no-load>
|
||||||
|
|
|
@ -40,7 +40,7 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
page: number = 1;
|
page: number = 1;
|
||||||
size: number = 50;
|
size: number = 50;
|
||||||
keyword: string; // the keyword string to give to the request as parameter
|
keyword: string; // the keyword string to give to the request as parameter
|
||||||
types = ["All", "Project", "Context", "Result", "User"];
|
types = ["All", "Project", "Context", "Result", "User", "Organization"];
|
||||||
loading: boolean = false;
|
loading: boolean = false;
|
||||||
@Input() fetchBy: string;
|
@Input() fetchBy: string;
|
||||||
@Input() fetchId: string;
|
@Input() fetchId: string;
|
||||||
|
@ -53,6 +53,7 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
public filterForm: FormGroup;
|
public filterForm: FormGroup;
|
||||||
public entities: string[] = [];
|
public entities: string[] = [];
|
||||||
selected = [];
|
selected = [];
|
||||||
|
mine = false;
|
||||||
|
|
||||||
allOptions: Option[] = [
|
allOptions: Option[] = [
|
||||||
{label: OpenaireEntities.PUBLICATIONS, value: "publication"},
|
{label: OpenaireEntities.PUBLICATIONS, value: "publication"},
|
||||||
|
@ -133,6 +134,7 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
this.fetchId = this.fetchId ? this.fetchId : '';
|
this.fetchId = this.fetchId ? this.fetchId : '';
|
||||||
}
|
}
|
||||||
let page = (params['page'] === undefined) ? 1 : +params['page'];
|
let page = (params['page'] === undefined) ? 1 : +params['page'];
|
||||||
|
this.mine = (params['mine'] == 'true' ? true:false);
|
||||||
this.keyword = (params['keyword'] ? params['keyword'] : "");
|
this.keyword = (params['keyword'] ? params['keyword'] : "");
|
||||||
this.filterForm.get('keyword').setValue(this.keyword);
|
this.filterForm.get('keyword').setValue(this.keyword);
|
||||||
this.page = (page <= 0) ? 1 : page;
|
this.page = (page <= 0) ? 1 : page;
|
||||||
|
@ -186,6 +188,16 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
this.handleErrors(err, "Error getting claims for project with id: " + this.fetchId);
|
this.handleErrors(err, "Error getting claims for project with id: " + this.fetchId);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
} else if (this.fetchBy == "Organization") {
|
||||||
|
this.subResults = this._claimService.getClaimsByOrganization(this.size, this.page, this.fetchId, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL, this.mine).subscribe(
|
||||||
|
data => {
|
||||||
|
this.manageAPIData(data);
|
||||||
|
this.loading = false;
|
||||||
|
},
|
||||||
|
err => {
|
||||||
|
this.handleErrors(err, "Error getting claims for project with id: " + this.fetchId);
|
||||||
|
}
|
||||||
|
);
|
||||||
} else if (this.fetchBy == "User") {
|
} else if (this.fetchBy == "User") {
|
||||||
this.subResults = this._claimService.getClaimsByUser(this.size, this.page, this.fetchId, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL).subscribe(
|
this.subResults = this._claimService.getClaimsByUser(this.size, this.page, this.fetchId, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL).subscribe(
|
||||||
data => {
|
data => {
|
||||||
|
@ -209,7 +221,7 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else if (this.fetchBy == "Context") {
|
} else if (this.fetchBy == "Context") {
|
||||||
this.subResults = this._claimService.getClaimsBycontext(this.size, this.page, this.fetchId, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL).subscribe(
|
this.subResults = this._claimService.getClaimsBycontext(this.size, this.page, this.fetchId, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL, this.mine).subscribe(
|
||||||
data => {
|
data => {
|
||||||
this.manageAPIData(data);
|
this.manageAPIData(data);
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
@ -220,7 +232,7 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
this.subResults = this._claimService.getClaims(this.size, this.page, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL).subscribe(
|
this.subResults = this._claimService.getClaims(this.size, this.page, this.keyword, this.filterForm.get("sort").value.sort, this.filterForm.get("sort").value.descending, types, this.properties.claimsAPIURL, this.mine).subscribe(
|
||||||
data => {
|
data => {
|
||||||
this.manageAPIData(data);
|
this.manageAPIData(data);
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
@ -259,15 +271,8 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
types += (types.length > 0 ? ',' : '') + type;
|
types += (types.length > 0 ? ',' : '') + type;
|
||||||
}
|
}
|
||||||
params += (this.entities.length > 0) ? (params.length > 0 ? '&' : '') + "types=" + types : "";
|
params += (this.entities.length > 0) ? (params.length > 0 ? '&' : '') + "types=" + types : "";
|
||||||
if (this.isAdmin) {
|
|
||||||
params += (this.fetchBy == 'All' ? "" : (params.length > 0 ? '&' : '') + "fetchBy=" + this.fetchBy);
|
|
||||||
params += (this.fetchId == '' ? "" : (params.length > 0 ? '&' : '') + "fetchId=" + this.fetchId);
|
|
||||||
}
|
|
||||||
params += (this.filterForm.get("sort").value.sort == 'date' && this.filterForm.get("sort").value.descending ? "" : (params.length > 0 ? '&' : '') + "sort=" + this.filterForm.get("sort").value.sort + "-" + this.filterForm.get("sort").value.descending);
|
params += (this.filterForm.get("sort").value.sort == 'date' && this.filterForm.get("sort").value.descending ? "" : (params.length > 0 ? '&' : '') + "sort=" + this.filterForm.get("sort").value.sort + "-" + this.filterForm.get("sort").value.descending);
|
||||||
params += (this.keyword == '' ? "" : (params.length > 0 ? '&' : '') + "keyword=" + this.keyword);
|
params += (this.keyword == '' ? "" : (params.length > 0 ? '&' : '') + "keyword=" + this.keyword);
|
||||||
if (this.communityId != null) {
|
|
||||||
params += "&communityId=" + this.communityId;
|
|
||||||
}
|
|
||||||
return params;
|
return params;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import {Component, Input} from '@angular/core';
|
import {Component, Input} from '@angular/core';
|
||||||
import {EnvProperties} from '../../../utils/properties/env-properties';
|
import {EnvProperties} from '../../../utils/properties/env-properties';
|
||||||
import {ClaimDBContext, ClaimDBProject, ClaimDBResult} from "../claimHelper.class";
|
import {ClaimDBContext, ClaimDBOrganization, ClaimDBProject, ClaimDBResult} from "../claimHelper.class";
|
||||||
import {OpenaireEntities} from "../../../utils/properties/searchFields";
|
import {OpenaireEntities} from "../../../utils/properties/searchFields";
|
||||||
import {StringUtils} from "../../../utils/string-utils.class";
|
import {StringUtils} from "../../../utils/string-utils.class";
|
||||||
|
|
||||||
|
@ -26,6 +26,10 @@ import {StringUtils} from "../../../utils/string-utils.class";
|
||||||
<project-title [project]="entity" [searchLink]=properties.searchLinkToProject
|
<project-title [project]="entity" [searchLink]=properties.searchLinkToProject
|
||||||
[externalPortalUrl]=externalPortalUrl></project-title>
|
[externalPortalUrl]=externalPortalUrl></project-title>
|
||||||
</div>
|
</div>
|
||||||
|
<div *ngIf="type == 'organization'" [attr.uk-tooptip]="getEntityName(type)">
|
||||||
|
<span class="uk-text-meta uk-text-small uk-margin-small-right uk-text-nowrap">Link to:</span>
|
||||||
|
<organization-title [organization]="entity"></organization-title>
|
||||||
|
</div>
|
||||||
<div *ngIf="type == 'context'">
|
<div *ngIf="type == 'context'">
|
||||||
<span class="uk-text-meta uk-text-small uk-margin-small-right uk-text-nowrap">Link to:</span>
|
<span class="uk-text-meta uk-text-small uk-margin-small-right uk-text-nowrap">Link to:</span>
|
||||||
<h6 class="uk-h6 uk-margin-remove">
|
<h6 class="uk-h6 uk-margin-remove">
|
||||||
|
@ -36,7 +40,7 @@ import {StringUtils} from "../../../utils/string-utils.class";
|
||||||
})
|
})
|
||||||
|
|
||||||
export class ClaimEntityFormatter {
|
export class ClaimEntityFormatter {
|
||||||
@Input() entity: ClaimDBResult | ClaimDBContext | ClaimDBProject;
|
@Input() entity: ClaimDBResult | ClaimDBContext | ClaimDBProject | ClaimDBOrganization;
|
||||||
@Input() type: string;
|
@Input() type: string;
|
||||||
@Input() properties: EnvProperties;
|
@Input() properties: EnvProperties;
|
||||||
@Input() externalPortalUrl: string = null;
|
@Input() externalPortalUrl: string = null;
|
||||||
|
|
|
@ -5,18 +5,19 @@ import { RouterModule } from '@angular/router';
|
||||||
import {ProjectTitleFormatter} from './projectTitleFormatter.component';
|
import {ProjectTitleFormatter} from './projectTitleFormatter.component';
|
||||||
import {PublicationTitleFormatter} from './publicationTitleFormatter.component';
|
import {PublicationTitleFormatter} from './publicationTitleFormatter.component';
|
||||||
import {ClaimEntityFormatter} from './claimEntityFormatter.component';
|
import {ClaimEntityFormatter} from './claimEntityFormatter.component';
|
||||||
|
import {OrganizationTitleFormatterComponent} from "./organizationTitleFormatter.component";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, RouterModule
|
CommonModule, RouterModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
ProjectTitleFormatter, PublicationTitleFormatter, ClaimEntityFormatter
|
ProjectTitleFormatter, PublicationTitleFormatter, ClaimEntityFormatter, OrganizationTitleFormatterComponent
|
||||||
|
|
||||||
],
|
],
|
||||||
providers: [ ],
|
providers: [ ],
|
||||||
exports: [
|
exports: [
|
||||||
ProjectTitleFormatter, PublicationTitleFormatter, ClaimEntityFormatter
|
ProjectTitleFormatter, PublicationTitleFormatter, ClaimEntityFormatter, OrganizationTitleFormatterComponent
|
||||||
|
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
import {Component, Input} from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'organization-title',
|
||||||
|
template: `
|
||||||
|
<h6 *ngIf="organization" class="uk-margin-remove multi-line-ellipsis lines-2">
|
||||||
|
<p class="uk-margin-remove">
|
||||||
|
{{(organization.shortName ? ('[' + organization.shortName + '] ') : '')}}{{organization.name}}
|
||||||
|
</p>
|
||||||
|
</h6>
|
||||||
|
`
|
||||||
|
})
|
||||||
|
|
||||||
|
export class OrganizationTitleFormatterComponent {
|
||||||
|
@Input() organization: any;
|
||||||
|
public url: string;
|
||||||
|
|
||||||
|
}
|
|
@ -10,10 +10,10 @@ import {properties} from "../../../../../environments/environment";
|
||||||
<ng-container>
|
<ng-container>
|
||||||
<h6 class="uk-margin-remove multi-line-ellipsis lines-2">
|
<h6 class="uk-margin-remove multi-line-ellipsis lines-2">
|
||||||
<p class="uk-margin-remove">
|
<p class="uk-margin-remove">
|
||||||
<a *ngIf="externalPortalUrl" [href]="externalPortalUrl + projectUrl + '?projectId='+project['openaireId']" class="uk-link uk-link-heading">
|
<a *ngIf="externalPortalUrl" [href]="externalPortalUrl + projectUrl + '?projectId='+project['openaireId']" class="uk-link uk-link-heading" [class.uk-disabled]="project.name == 'unidentified'">
|
||||||
{{(project['acronym'] ? ('[' + project['acronym'] + '] ') : '')}}{{project['name']}}
|
{{(project['acronym'] ? ('[' + project['acronym'] + '] ') : '')}}{{project['name']}}
|
||||||
</a>
|
</a>
|
||||||
<a *ngIf="!externalPortalUrl" [routerLink]="projectUrl" [queryParams]="routerHelper.createQueryParam('projectId',project['openaireId'])" class="uk-link uk-link-heading">
|
<a *ngIf="!externalPortalUrl" [routerLink]="projectUrl" [queryParams]="routerHelper.createQueryParam('projectId',project['openaireId'])" class="uk-link uk-link-heading" [class.uk-disabled]="project.name == 'unidentified'">
|
||||||
{{(project['acronym'] ? ('[' + project['acronym'] + '] ') : '')}}{{project['name']}}
|
{{(project['acronym'] ? ('[' + project['acronym'] + '] ') : '')}}{{project['name']}}
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -12,8 +12,8 @@ export class ClaimsService {
|
||||||
private getClaimRequest(size : number, page : number, url :string, fromCache:boolean):any {
|
private getClaimRequest(size : number, page : number, url :string, fromCache:boolean):any {
|
||||||
return this.http.get(url, CustomOptions.getAuthOptionsWithBody());
|
return this.http.get(url, CustomOptions.getAuthOptionsWithBody());
|
||||||
}
|
}
|
||||||
getClaims( size : number, page : number, keyword:string, sortby: string, descending: boolean, types: string, apiUrl:string):any {
|
getClaims( size : number, page : number, keyword:string, sortby: string, descending: boolean, types: string, apiUrl:string, mine:boolean):any {
|
||||||
let url = apiUrl +"claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types);
|
let url = apiUrl +"claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types) + (mine?"&mine=true":"") + (mine?"&mine=true":"");
|
||||||
return this.getClaimRequest(size,page,url,true);
|
return this.getClaimRequest(size,page,url,true);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ export class ClaimsService {
|
||||||
return this.getClaimRequest(size,page,url,false);
|
return this.getClaimRequest(size,page,url,false);
|
||||||
|
|
||||||
}
|
}
|
||||||
getClaimsBycontext( size : number, page : number, contextId:string, keyword:string, sortby: string, descending: boolean, types: string , apiUrl:string):any {
|
getClaimsBycontext( size : number, page : number, contextId:string, keyword:string, sortby: string, descending: boolean, types: string , apiUrl:string, mine:boolean):any {
|
||||||
//console.info('ClaimsService: getClaims for context : '+contextId);
|
//console.info('ClaimsService: getClaims for context : '+contextId);
|
||||||
let url = apiUrl +"contexts/"+contextId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types);
|
let url = apiUrl +"contexts/"+contextId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types);
|
||||||
return this.getClaimRequest(size,page,url,true);
|
return this.getClaimRequest(size,page,url,true);
|
||||||
|
@ -40,6 +40,10 @@ export class ClaimsService {
|
||||||
let url = apiUrl +"projects/"+projectId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types);
|
let url = apiUrl +"projects/"+projectId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types);
|
||||||
return this.getClaimRequest(size,page,url,true);
|
return this.getClaimRequest(size,page,url,true);
|
||||||
}
|
}
|
||||||
|
getClaimsByOrganization( size : number, page : number, organizationId:string, keyword:string, sortby: string, descending: boolean, types: string, apiUrl:string, mine:boolean):any {
|
||||||
|
let url = apiUrl +"organizations/"+organizationId+"/claims"+"?offset="+(size*(page-1) + "&limit="+size)+"&keyword="+keyword+"&sortby="+sortby+"&descending="+descending+(types.length>0?"&"+types:types) + (mine?"&mine=true":"");
|
||||||
|
return this.getClaimRequest(size,page,url,true);
|
||||||
|
}
|
||||||
|
|
||||||
deleteClaimById(claimId:string , apiUrl:string):any{
|
deleteClaimById(claimId:string , apiUrl:string):any{
|
||||||
//console.warn('Trying to delete claim with id : '+claimId);
|
//console.warn('Trying to delete claim with id : '+claimId);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<linking-generic *ngIf="validInput" [localStoragePrefix]="localStoragePrefix" [results]="results" [sources]="sources"
|
<linking-generic *ngIf="validInput" [localStoragePrefix]="localStoragePrefix" [results]="results" [sources]="sources"
|
||||||
[communityId]="communityId" [inlineEntity]="inlineEntity" [showOptions]="showOptions"
|
[communityId]="communityId" [inlineEntity]="inlineEntity" [showOptions]="showOptions"
|
||||||
pageTitle="Direct Linking">
|
pageTitle="Direct Linking" [claimsProperties]="claimsProperties">
|
||||||
</linking-generic>
|
</linking-generic>
|
||||||
|
|
||||||
<div *ngIf="validInput== false" id="tm-main" class=" uk-section uk-padding-remove-top tm-middle">
|
<div *ngIf="validInput== false" id="tm-main" class=" uk-section uk-padding-remove-top tm-middle">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import {Component, Input, ViewChild} from '@angular/core';
|
import {Component, Input, ViewChild} from '@angular/core';
|
||||||
import {ActivatedRoute, Router} from '@angular/router';
|
import {ActivatedRoute, Router} from '@angular/router';
|
||||||
import {EnvProperties} from '../../utils/properties/env-properties';
|
import {EnvProperties} from '../../utils/properties/env-properties';
|
||||||
import {ClaimEntity, ClaimProject, ShowOptions} from '../claim-utils/claimHelper.class';
|
import {ClaimEntity, ClaimOrganization, ClaimProject, ShowOptions} from '../claim-utils/claimHelper.class';
|
||||||
import {EntitiesSearchService} from '../../utils/entitiesAutoComplete/entitySearch.service';
|
import {EntitiesSearchService} from '../../utils/entitiesAutoComplete/entitySearch.service';
|
||||||
import {SearchResearchResultsService} from '../../services/searchResearchResults.service';
|
import {SearchResearchResultsService} from '../../services/searchResearchResults.service';
|
||||||
import {LinkingGenericComponent} from "../linking/linkingGeneric.component";
|
import {LinkingGenericComponent} from "../linking/linkingGeneric.component";
|
||||||
|
@ -11,6 +11,7 @@ import {properties} from "../../../../environments/environment";
|
||||||
import {OpenaireEntities} from "../../utils/properties/searchFields";
|
import {OpenaireEntities} from "../../utils/properties/searchFields";
|
||||||
import {StringUtils} from "../../utils/string-utils.class";
|
import {StringUtils} from "../../utils/string-utils.class";
|
||||||
import {ClaimProjectsSearchFormComponent} from "../claim-utils/claimProjectSearchForm.component";
|
import {ClaimProjectsSearchFormComponent} from "../claim-utils/claimProjectSearchForm.component";
|
||||||
|
import {ClaimsProperties} from "../claim-utils/claims.properties";
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -24,18 +25,20 @@ export class DirectLinkingComponent {
|
||||||
|
|
||||||
// linkType: string = "project"; // link type (selected in home page) : project, context, software, etc
|
// linkType: string = "project"; // link type (selected in home page) : project, context, software, etc
|
||||||
/* url Parameters for inline linking */
|
/* url Parameters for inline linking */
|
||||||
id: string = null; //entity id
|
@Input() id: string = null; //entity id
|
||||||
type: string = null; // entity type (publication or dataset)
|
type: string = null; // entity type (publication or dataset)
|
||||||
// linkTo: string = null; // entity type (project or context or entity)
|
// linkTo: string = null; // entity type (project or context or entity)
|
||||||
// linkToEntities: string[] = [];
|
// linkToEntities: string[] = [];
|
||||||
showOptions:ShowOptions = new ShowOptions();
|
showOptions:ShowOptions = new ShowOptions();
|
||||||
validEntityTypes = ["dataset", "publication", "software", "other", "project", "context"];
|
validEntityTypes = ["dataset", "publication", "software", "other", "project", "context", "organization"];
|
||||||
sources: ClaimEntity[] = [];
|
sources: ClaimEntity[] = [];
|
||||||
inlineEntity: ClaimEntity = null;
|
inlineEntity: ClaimEntity = null;
|
||||||
validInput: boolean = null;//'true;
|
validInput: boolean = null;//'true;
|
||||||
properties: EnvProperties;
|
properties: EnvProperties;
|
||||||
@Input() communityId: string = null;
|
@Input() communityId: string = null;
|
||||||
localStoragePrefix: string = "";
|
localStoragePrefix: string = "";
|
||||||
|
@Input() organizationClaim: boolean = false;
|
||||||
|
@Input() claimsProperties:ClaimsProperties = new ClaimsProperties();
|
||||||
constructor(private _router: Router, private route: ActivatedRoute,private entitySearch:EntitiesSearchService,
|
constructor(private _router: Router, private route: ActivatedRoute,private entitySearch:EntitiesSearchService,
|
||||||
private _searchResearchResultsService: SearchResearchResultsService) {}
|
private _searchResearchResultsService: SearchResearchResultsService) {}
|
||||||
subscriptions = [];
|
subscriptions = [];
|
||||||
|
@ -48,11 +51,18 @@ export class DirectLinkingComponent {
|
||||||
}
|
}
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
|
/* if(!this.claimsProperties){
|
||||||
|
this.claimsProperties = new ClaimsProperties();
|
||||||
|
}*/
|
||||||
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
||||||
|
if(this.organizationClaim){
|
||||||
|
this.type = "organization";
|
||||||
|
this.showOptions.linkTo = "result";
|
||||||
|
}else {
|
||||||
this.id = params['id'];
|
this.id = params['id'];
|
||||||
this.type = params['type'];
|
this.type = params['type'];
|
||||||
this.showOptions.linkTo = params['linkTo'];
|
this.showOptions.linkTo = params['linkTo'];
|
||||||
|
}
|
||||||
if (this.type != null && this.showOptions.linkTo != null) {
|
if (this.type != null && this.showOptions.linkTo != null) {
|
||||||
this.type = (this.validEntityTypes.indexOf(this.type) != -1) ? this.type : 'publication';
|
this.type = (this.validEntityTypes.indexOf(this.type) != -1) ? this.type : 'publication';
|
||||||
this.showOptions.linkTo = (this.validEntityTypes.indexOf(this.showOptions.linkTo) != -1 || this.showOptions.linkTo == "result") ? this.showOptions.linkTo : 'project';
|
this.showOptions.linkTo = (this.validEntityTypes.indexOf(this.showOptions.linkTo) != -1 || this.showOptions.linkTo == "result") ? this.showOptions.linkTo : 'project';
|
||||||
|
@ -68,6 +78,8 @@ export class DirectLinkingComponent {
|
||||||
if (this.type == "project") {
|
if (this.type == "project") {
|
||||||
// this.linkType = "project";
|
// this.linkType = "project";
|
||||||
this.getProjectById(this.id);
|
this.getProjectById(this.id);
|
||||||
|
} else if (this.type == "organization") {
|
||||||
|
this.getOrganizationById(this.id);
|
||||||
} else if (this.type == "publication") {
|
} else if (this.type == "publication") {
|
||||||
this.getResearchResultById("publication", this.id);
|
this.getResearchResultById("publication", this.id);
|
||||||
} else if (this.type == "dataset") {
|
} else if (this.type == "dataset") {
|
||||||
|
@ -81,7 +93,7 @@ export class DirectLinkingComponent {
|
||||||
}
|
}
|
||||||
//set which entities it is allowed to link to.
|
//set which entities it is allowed to link to.
|
||||||
// add first the
|
// add first the
|
||||||
if(this.type == "project"){
|
if(this.type == "project" || this.type == "organization"){
|
||||||
this.showOptions.linkToEntities = ["result"];
|
this.showOptions.linkToEntities = ["result"];
|
||||||
this.showOptions.linkTo = "result";
|
this.showOptions.linkTo = "result";
|
||||||
}else{
|
}else{
|
||||||
|
@ -103,16 +115,19 @@ export class DirectLinkingComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
}));
|
}));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
isValidInput(result: ClaimEntity) {
|
isValidInput(result: ClaimEntity) {
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
return false;
|
return false;
|
||||||
} else if (this.type == "project" && this.showOptions.linkTo != "result") {
|
} else if (this.type == "organization" && !this.claimsProperties.ALLOW_ORGANIZATION_LINKING) {
|
||||||
|
return false;
|
||||||
|
} else if ((this.type == "project" || this.type == "organization") && this.showOptions.linkTo != "result") {
|
||||||
return false;
|
return false;
|
||||||
} else if (["dataset", "publication", "software", "other"].indexOf(this.type) != -1 && (["project", "context", "result"].indexOf(this.showOptions.linkTo) == -1)) {
|
} else if (["dataset", "publication", "software", "other"].indexOf(this.type) != -1 && (["project", "context", "result"].indexOf(this.showOptions.linkTo) == -1)) {
|
||||||
return false;
|
return false;
|
||||||
} else if (["project", "dataset", "publication", "software", "other"].indexOf(this.type) == -1) {
|
} else if (["project", "dataset", "publication", "software", "other", "organization"].indexOf(this.type) == -1) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
@ -130,6 +145,17 @@ export class DirectLinkingComponent {
|
||||||
this.handleError("Error getting project by id: " + id, err);
|
this.handleError("Error getting project by id: " + id, err);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
getOrganizationById(id: string) {
|
||||||
|
this.subscriptions.push(this.entitySearch.fetchByType(id,"organization", this.properties).subscribe(
|
||||||
|
data => {
|
||||||
|
this.createClaimEntity(data, "organization");
|
||||||
|
},
|
||||||
|
err => {
|
||||||
|
this.validInput = this.isValidInput(null);
|
||||||
|
//console.log("An error occured")
|
||||||
|
this.handleError("Error getting project by id: " + id, err);
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
getResearchResultById(resultType: string, id: string) {
|
getResearchResultById(resultType: string, id: string) {
|
||||||
this.subscriptions.push(this._searchResearchResultsService.searchById(resultType, id, this.properties).subscribe(data => {
|
this.subscriptions.push(this._searchResearchResultsService.searchById(resultType, id, this.properties).subscribe(data => {
|
||||||
|
@ -162,6 +188,16 @@ export class DirectLinkingComponent {
|
||||||
entity.project.jurisdiction = project.jurisdiction;
|
entity.project.jurisdiction = project.jurisdiction;
|
||||||
entity.project.startDate = project.startDate;
|
entity.project.startDate = project.startDate;
|
||||||
this.inlineEntity = entity;
|
this.inlineEntity = entity;
|
||||||
|
}else if(type =="organization"){
|
||||||
|
let organization = data[0];
|
||||||
|
let entity:ClaimEntity = new ClaimEntity();
|
||||||
|
entity.id = organization.id;
|
||||||
|
entity.type = "organization";
|
||||||
|
entity.title = organization.label;
|
||||||
|
entity.organization = new ClaimOrganization();
|
||||||
|
// entity.organization.url = properties.searchLinkToOrganization + entity.id;
|
||||||
|
entity.organization.name = organization.label;
|
||||||
|
this.inlineEntity = entity;
|
||||||
}else{
|
}else{
|
||||||
results = ClaimResultSearchFormComponent.openaire2ClaimResults(data, this.properties);
|
results = ClaimResultSearchFormComponent.openaire2ClaimResults(data, this.properties);
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,7 +176,7 @@ export class ClaimInsertComponent {
|
||||||
"id": entity.id,
|
"id": entity.id,
|
||||||
"record": ClaimInsertComponent.createDirectClaim(entity, this.sources, idSuffix)
|
"record": ClaimInsertComponent.createDirectClaim(entity, this.sources, idSuffix)
|
||||||
});
|
});
|
||||||
} else if (this.inlineEntity) {
|
} else if (this.inlineEntity && this.inlineEntity.type != "organization") {
|
||||||
directclaims.push({
|
directclaims.push({
|
||||||
"id": entity.id,
|
"id": entity.id,
|
||||||
"record": ClaimInsertComponent.createDirectClaim(entity, [this.inlineEntity], idSuffix)
|
"record": ClaimInsertComponent.createDirectClaim(entity, [this.inlineEntity], idSuffix)
|
||||||
|
@ -193,6 +193,8 @@ export class ClaimInsertComponent {
|
||||||
claims.push(ClaimInsertComponent.createContextClaim(result, entity, user.email, dashboard, idSuffix));
|
claims.push(ClaimInsertComponent.createContextClaim(result, entity, user.email, dashboard, idSuffix));
|
||||||
} else if (entity.project) {
|
} else if (entity.project) {
|
||||||
claims.push(ClaimInsertComponent.createProjectClaim(result, entity, user.email, dashboard, idSuffix));
|
claims.push(ClaimInsertComponent.createProjectClaim(result, entity, user.email, dashboard, idSuffix));
|
||||||
|
/* } else if (entity.organization) {
|
||||||
|
claims.push(ClaimInsertComponent.createOrganizationClaim(result, entity, user.email, dashboard, idSuffix));*/
|
||||||
}
|
}
|
||||||
this.infoToLog.push([ result.title?result.title: result.id, entity.title?entity.title:entity.id]);
|
this.infoToLog.push([ result.title?result.title: result.id, entity.title?entity.title:entity.id]);
|
||||||
|
|
||||||
|
@ -212,6 +214,10 @@ export class ClaimInsertComponent {
|
||||||
if (entity.result) {
|
if (entity.result) {
|
||||||
claims.push(ClaimInsertComponent.createProjectClaim(entity, this.inlineEntity, user.email, dashboard, idSuffix));
|
claims.push(ClaimInsertComponent.createProjectClaim(entity, this.inlineEntity, user.email, dashboard, idSuffix));
|
||||||
}
|
}
|
||||||
|
} else if (this.inlineEntity.organization) {
|
||||||
|
if (entity.result) {
|
||||||
|
claims.push(ClaimInsertComponent.createOrganizationClaim(entity, this.inlineEntity, user.email, dashboard, idSuffix));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,8 +391,13 @@ export class ClaimInsertComponent {
|
||||||
localStorage.removeItem(this.localStoragePrefix + "results");
|
localStorage.removeItem(this.localStoragePrefix + "results");
|
||||||
localStorage.removeItem(this.localStoragePrefix + "claimsJob");
|
localStorage.removeItem(this.localStoragePrefix + "claimsJob");
|
||||||
localStorage.removeItem(this.localStoragePrefix + "feedRecordsJob");
|
localStorage.removeItem(this.localStoragePrefix + "feedRecordsJob");
|
||||||
|
if(this.properties.myClaimsLink && this.properties.myClaimsLink.indexOf(".") == -1) {
|
||||||
this._router.navigate([this.properties.myClaimsLink], {queryParams: this.params});
|
this._router.navigate([this.properties.myClaimsLink], {queryParams: this.params});
|
||||||
|
}else if(this.properties.myClaimsLink && this.properties.myClaimsLink.indexOf(".") != -1) {
|
||||||
|
this._router.navigate([this.properties.myClaimsLink], {relativeTo: this.route});
|
||||||
|
}else{
|
||||||
|
this._router.navigate(["/"]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,6 +437,23 @@ export class ClaimInsertComponent {
|
||||||
idSuffix : idSuffix
|
idSuffix : idSuffix
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
private static createOrganizationClaim(resultEntity: ClaimEntity, organizationEntity: ClaimEntity, user: any, dashboard:string, idSuffix:string): ClaimRecord2Insert {
|
||||||
|
return {
|
||||||
|
claimedBy: user,
|
||||||
|
sourceId: organizationEntity.id,
|
||||||
|
sourceType: "organization",
|
||||||
|
sourceCollectedFrom: "openaire",
|
||||||
|
sourceAccessRights: "OPEN",
|
||||||
|
sourceEmbargoEndDate: "",
|
||||||
|
targetId: resultEntity.id,
|
||||||
|
targetType: resultEntity.type,
|
||||||
|
targetCollectedFrom: resultEntity.result.source,
|
||||||
|
targetAccessRights: resultEntity.result.accessRights,
|
||||||
|
targetEmbargoEndDate: ClaimInsertComponent.getEmbargoEndDate(resultEntity),
|
||||||
|
claimedInDashboard : dashboard,
|
||||||
|
idSuffix : idSuffix
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private static createResultClaim(inlineResult: ClaimEntity, resultEntity: ClaimEntity, user: string, dashboard:string, idSuffix:string): ClaimRecord2Insert {
|
private static createResultClaim(inlineResult: ClaimEntity, resultEntity: ClaimEntity, user: string, dashboard:string, idSuffix:string): ClaimRecord2Insert {
|
||||||
|
|
||||||
|
|
|
@ -67,18 +67,19 @@
|
||||||
[results]="results" [sources]="sources"
|
[results]="results" [sources]="sources"
|
||||||
[localStoragePrefix]="localStoragePrefix" [inlineEntity]="inlineEntity"
|
[localStoragePrefix]="localStoragePrefix" [inlineEntity]="inlineEntity"
|
||||||
[showOptions]="showOptions" [properties]=properties [pageContents]="pageContents"
|
[showOptions]="showOptions" [properties]=properties [pageContents]="pageContents"
|
||||||
[defaultColors]="!communityId" [communityId]="communityId"
|
[defaultColors]="!communityId" [communityId]="communityId" [claimsProperties]="claimsProperties"
|
||||||
>
|
>
|
||||||
</metadata-preview>
|
</metadata-preview>
|
||||||
<div id="tm-main" class="uk-section uk-padding-remove-top" *ngIf="showOptions.show != 'claim'">
|
<div id="tm-main" class="uk-section uk-padding-remove-top" *ngIf="showOptions.show != 'claim'">
|
||||||
<div>
|
<div>
|
||||||
<schema2jsonld *ngIf="url" [URL]="url" name="Link your {{openaireEntities.RESULTS}}" type="other"></schema2jsonld>
|
<schema2jsonld *ngIf="url" [URL]="url" name="Link your {{openaireEntities.RESULTS}}" type="other"></schema2jsonld>
|
||||||
<div class="uk-container uk-container-large">
|
<div class="uk-container uk-container-large">
|
||||||
<div *ngIf="properties" class="uk-section uk-padding-remove-top">
|
<div *ngIf="properties && claimsProperties" class="uk-section uk-padding-remove-top">
|
||||||
<div class="uk-container uk-container-large">
|
<div class="uk-container uk-container-large">
|
||||||
<div class="uk-grid basketContainer" *ngIf="showOptions.show!='claim'" uk-grid>
|
<div class="uk-grid basketContainer" *ngIf="showOptions.show!='claim'" uk-grid>
|
||||||
<div class="uk-width-2-3@m uk-position-z-index uk-flex-first@m uk-flex-last uk-margin-medium-top">
|
<div class="uk-width-2-3@m uk-position-z-index uk-flex-first@m uk-flex-last uk-margin-medium-top">
|
||||||
<h2 *ngIf="inlineEntity" class="uk-text-center">Link source to</h2>
|
<h2 *ngIf="inlineEntity && claimsProperties.INLINE_ENTITY.show" class="uk-text-center">Link source to</h2>
|
||||||
|
<div *ngIf="inlineEntity && claimsProperties.INLINE_ENTITY.guideText" class="uk-text-center">{{claimsProperties.INLINE_ENTITY.guideText}}</div>
|
||||||
<div *ngIf="showOptions.show=='source'">
|
<div *ngIf="showOptions.show=='source'">
|
||||||
<claim-result-search-form [selectedResults]="sources" [properties]=properties
|
<claim-result-search-form [selectedResults]="sources" [properties]=properties
|
||||||
[localStoragePrefix]="localStoragePrefix+'sources'"
|
[localStoragePrefix]="localStoragePrefix+'sources'"
|
||||||
|
@ -115,16 +116,16 @@
|
||||||
<div class="uk-card-body uk-padding-small">
|
<div class="uk-card-body uk-padding-small">
|
||||||
<div>
|
<div>
|
||||||
<ng-container *ngIf="inlineEntity">
|
<ng-container *ngIf="inlineEntity">
|
||||||
<div class="uk-margin-small-bottom">
|
<div *ngIf="claimsProperties.INLINE_ENTITY.show" class="uk-margin-small-bottom">
|
||||||
<div class="uk-text-emphasis uk-text-bolder">Source</div>
|
<div class="uk-text-emphasis uk-text-bolder">{{claimsProperties.BASKET.source_title}}</div>
|
||||||
<claim-selected-results [results]="[inlineEntity]"
|
<claim-selected-results [results]="[inlineEntity]"
|
||||||
[localStoragePrefix]="localStoragePrefix+'sources'" class=""
|
[localStoragePrefix]="localStoragePrefix+'sources'" class=""
|
||||||
[enableRemove]="false" type="source">
|
[enableRemove]="false" type="source">
|
||||||
</claim-selected-results>
|
</claim-selected-results>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-padding-small uk-padding-remove-horizontal"><hr class="uk-margin-remove"/></div>
|
<div *ngIf="claimsProperties.INLINE_ENTITY.show" class="uk-padding-small uk-padding-remove-horizontal"><hr class="uk-margin-remove"/></div>
|
||||||
<div class="uk-margin-small-top">
|
<div class="uk-margin-small-top">
|
||||||
<div class="uk-text-emphasis uk-text-bolder">Link source to <span *ngIf="results.length> 0">({{(results.length) | number}})</span></div>
|
<div class="uk-text-emphasis uk-text-bolder">{{claimsProperties.BASKET.target_title}} <span *ngIf="results.length> 0">({{(results.length) | number}})</span></div>
|
||||||
<ng-container *ngTemplateOutlet="destinations_basket"></ng-container>
|
<ng-container *ngTemplateOutlet="destinations_basket"></ng-container>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
|
@ -18,6 +18,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
import {LoginErrorCodes} from "../../login/utils/guardHelper.class";
|
import {LoginErrorCodes} from "../../login/utils/guardHelper.class";
|
||||||
import {UserManagementService} from "../../services/user-management.service";
|
import {UserManagementService} from "../../services/user-management.service";
|
||||||
|
import {ClaimsProperties} from "../claim-utils/claims.properties";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'linking-generic',
|
selector: 'linking-generic',
|
||||||
|
@ -49,7 +50,7 @@ export class LinkingGenericComponent {
|
||||||
public pageContents = null;
|
public pageContents = null;
|
||||||
@Input() breadcrumbs: Breadcrumb[] = [];
|
@Input() breadcrumbs: Breadcrumb[] = [];
|
||||||
public routerHelper: RouterHelper = new RouterHelper();
|
public routerHelper: RouterHelper = new RouterHelper();
|
||||||
|
@Input() claimsProperties:ClaimsProperties = new ClaimsProperties();
|
||||||
constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService,
|
constructor (private _router: Router, private route: ActivatedRoute, private entitySearch:EntitiesSearchService,
|
||||||
private _meta: Meta, private _title: Title, private _piwikService:PiwikService,
|
private _meta: Meta, private _title: Title, private _piwikService:PiwikService,
|
||||||
private seoService: SEOService, private helper: HelperService, private cdr: ChangeDetectorRef,
|
private seoService: SEOService, private helper: HelperService, private cdr: ChangeDetectorRef,
|
||||||
|
@ -58,6 +59,9 @@ export class LinkingGenericComponent {
|
||||||
subscriptions = [];
|
subscriptions = [];
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
/* if(!this.claimsProperties){
|
||||||
|
this.claimsProperties = new ClaimsProperties();
|
||||||
|
}*/
|
||||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||||
if (!user) {
|
if (!user) {
|
||||||
this.saveStateAndRedirectLogin();
|
this.saveStateAndRedirectLogin();
|
||||||
|
|
|
@ -12,6 +12,9 @@ import {ClaimEntity} from '../../claim-utils/claimHelper.class';
|
||||||
<span *ngIf="entity.project" class="material-icons uk-text-small uk-text-meta">
|
<span *ngIf="entity.project" class="material-icons uk-text-small uk-text-meta">
|
||||||
assignment_turned_in
|
assignment_turned_in
|
||||||
</span>
|
</span>
|
||||||
|
<span *ngIf="entity.organization" class="material-icons uk-text-small uk-text-meta">
|
||||||
|
account_balance
|
||||||
|
</span>
|
||||||
<span *ngIf="entity.type=='community'" class="material-icons uk-text-small uk-text-meta" style="margin-right: 2px;">
|
<span *ngIf="entity.type=='community'" class="material-icons uk-text-small uk-text-meta" style="margin-right: 2px;">
|
||||||
people
|
people
|
||||||
</span>
|
</span>
|
||||||
|
@ -46,6 +49,9 @@ import {ClaimEntity} from '../../claim-utils/claimHelper.class';
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
|
<span *ngIf="entity.type=='organization' && entity.organization">
|
||||||
|
{{sliceString(entity.title)}}
|
||||||
|
</span>
|
||||||
<span *ngIf="entity.type=='community' && entity.context">
|
<span *ngIf="entity.type=='community' && entity.context">
|
||||||
<span *ngIf=" entity.context.community != entity.context.concept.label">
|
<span *ngIf=" entity.context.community != entity.context.concept.label">
|
||||||
{{entity.context.community }} > {{entity.context.category}} >
|
{{entity.context.community }} > {{entity.context.category}} >
|
||||||
|
|
|
@ -6,15 +6,14 @@
|
||||||
<div class="uk-width-expand">
|
<div class="uk-width-expand">
|
||||||
<div class="uk-card uk-card-default">
|
<div class="uk-card uk-card-default">
|
||||||
<div class="uk-card-body">
|
<div class="uk-card-body">
|
||||||
<div class="uk-grid uk-grid-divider uk-child-width-1-2@m uk-child-width-1-1@s" uk-grid>
|
<div class="uk-grid uk-grid-divider uk-child-width-1-1@s" uk-grid [class.uk-child-width-1-2@m] = "claimsProperties.INLINE_ENTITY.show" >
|
||||||
<!-- Sources-->
|
<!-- Sources-->
|
||||||
<div>
|
<div *ngIf="claimsProperties.INLINE_ENTITY.show">
|
||||||
<div class=" uk-margin uk-animation-toggle">
|
<div class=" uk-margin uk-animation-toggle">
|
||||||
<span class="uk-h6 "> SOURCES ({{sources.length + (inlineEntity ? 1 : 0) | number}})
|
<span class="uk-h6 "> {{claimsProperties.METADATA_PREVIEW.source_title}} ({{sources.length + (inlineEntity ? 1 : 0) | number}})
|
||||||
</span>
|
</span>
|
||||||
<a *ngIf="!inlineEntity" class="uk-float-right uk-text-small" (click)="showOptions.showSource() "> <span
|
<a *ngIf="!inlineEntity" class="uk-float-right uk-text-small" (click)="showOptions.showSource() "> <span
|
||||||
uk-icon="pencil" class="uk-margin-xsmall-right"></span>Edit
|
uk-icon="pencil" class="uk-margin-xsmall-right"></span>{{claimsProperties.METADATA_PREVIEW.edit_source_title}}</a>
|
||||||
sources</a>
|
|
||||||
</div>
|
</div>
|
||||||
<ul *ngIf="inlineEntity" class="uk-list uk-animation-fade uk-list-divider">
|
<ul *ngIf="inlineEntity" class="uk-list uk-animation-fade uk-list-divider">
|
||||||
<li>
|
<li>
|
||||||
|
@ -153,13 +152,15 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- Results-->
|
<!-- Results-->
|
||||||
<div class=" ">
|
<div class=" ">
|
||||||
<div class=" uk-margin ">
|
<div class=" uk-margin uk-grid">
|
||||||
<span class=" uk-h6 "> LINK TO ({{results.length | number}})</span>
|
<span class=" uk-h6 uk-width-expand"> {{claimsProperties.METADATA_PREVIEW.target_title}} ({{results.length | number}})</span>
|
||||||
|
|
||||||
|
<div class="uk-width-auto uk-flex">
|
||||||
|
|
||||||
<a class="uk-float-right uk-text-small" (click)="showOptions.showLinkTo()"> <span
|
<icon [name]="claimsProperties.METADATA_PREVIEW.edit_target_icon" [flex]="true"></icon>
|
||||||
uk-icon="pencil" class="uk-margin-xsmall-right"></span>Edit
|
<a class=" uk-margin-left-xsmall uk-text-small" (click)="showOptions.showLinkTo()">
|
||||||
entities</a>
|
{{claimsProperties.METADATA_PREVIEW.edit_target_title}}</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="results.length == 0">
|
<div *ngIf="results.length == 0">
|
||||||
<div class="uk-alert dangerBorder no-selected-message uk-text-center">
|
<div class="uk-alert dangerBorder no-selected-message uk-text-center">
|
||||||
|
|
|
@ -4,6 +4,7 @@ import {ClaimEntity, ClaimsErrorMessage, Message, ShowOptions} from '../../claim
|
||||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
import {EnvProperties} from "../../../utils/properties/env-properties";
|
||||||
import {Dates} from "../../../utils/string-utils.class";
|
import {Dates} from "../../../utils/string-utils.class";
|
||||||
import {HelperFunctions} from "../../../utils/HelperFunctions.class";
|
import {HelperFunctions} from "../../../utils/HelperFunctions.class";
|
||||||
|
import {ClaimsProperties} from "../../claim-utils/claims.properties";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'metadata-preview',
|
selector: 'metadata-preview',
|
||||||
|
@ -28,6 +29,7 @@ export class MetadataPreviewComponent {
|
||||||
@ViewChild(AlertModal) alertApplyAll;
|
@ViewChild(AlertModal) alertApplyAll;
|
||||||
@Input() localStoragePrefix: string = "";
|
@Input() localStoragePrefix: string = "";
|
||||||
@Input() communityId:string= null;
|
@Input() communityId:string= null;
|
||||||
|
@Input() claimsProperties:ClaimsProperties;
|
||||||
errors:ClaimsErrorMessage[] = [];
|
errors:ClaimsErrorMessage[] = [];
|
||||||
warnings:Message[] = [];
|
warnings:Message[] = [];
|
||||||
public commonAccessRights = "OPEN"; // for access rights- changes when user apply a change to every entity
|
public commonAccessRights = "OPEN"; // for access rights- changes when user apply a change to every entity
|
||||||
|
|
|
@ -11,6 +11,7 @@ import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatSelectModule } from '@angular/material/select';
|
import { MatSelectModule } from '@angular/material/select';
|
||||||
import {HelperModule} from "../../../utils/helper/helper.module";
|
import {HelperModule} from "../../../utils/helper/helper.module";
|
||||||
import {SelectedPublicationsModule} from "./selectedResults.module";
|
import {SelectedPublicationsModule} from "./selectedResults.module";
|
||||||
|
import {IconsModule} from "../../../utils/icons/icons.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -19,7 +20,7 @@ import {SelectedPublicationsModule} from "./selectedResults.module";
|
||||||
ClaimEntitiesMetadataModule,
|
ClaimEntitiesMetadataModule,
|
||||||
InsertClaimsModule,
|
InsertClaimsModule,
|
||||||
MatDatepickerModule, MatNativeDateModule, MatFormFieldModule, MatInputModule, MatSelectModule,
|
MatDatepickerModule, MatNativeDateModule, MatFormFieldModule, MatInputModule, MatSelectModule,
|
||||||
HelperModule, SelectedPublicationsModule
|
HelperModule, SelectedPublicationsModule, IconsModule
|
||||||
],
|
],
|
||||||
declarations: [MetadataPreviewComponent],
|
declarations: [MetadataPreviewComponent],
|
||||||
exports:[MetadataPreviewComponent]
|
exports:[MetadataPreviewComponent]
|
||||||
|
|
|
@ -372,8 +372,10 @@ export class MenuComponent implements OnInit {
|
||||||
}
|
}
|
||||||
|
|
||||||
public valueChange() {
|
public valueChange() {
|
||||||
|
this.elements.disable();
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
this.elements.init();
|
this.elements.init();
|
||||||
|
this.elements.enable();
|
||||||
}
|
}
|
||||||
|
|
||||||
public get displayMenuItems() {
|
public get displayMenuItems() {
|
||||||
|
|
|
@ -36,9 +36,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="fos?.length" class="uk-container uk-container-large uk-section" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
|
||||||
|
<div *ngIf="fos?.length" id="levels" class="uk-container uk-container-large uk-section"
|
||||||
|
uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||||
<div class="uk-visible@m">
|
<div class="uk-visible@m">
|
||||||
<div uk-sticky="offset: 50;" class="uk-sticky uk-background-default uk-padding uk-padding-remove-bottom uk-padding-remove-horizontal">
|
<div id="keyword_search" uk-sticky="offset: 50;" class="uk-sticky uk-background-default uk-padding uk-padding-remove-bottom uk-padding-remove-horizontal">
|
||||||
<div class="uk-flex uk-flex-right uk-margin-small-bottom">
|
<div class="uk-flex uk-flex-right uk-margin-small-bottom">
|
||||||
<div search-input [searchControl]="keywordControl" [options]="fosOptions" iconPosition="left" placeholder="Write a key word to filter the content"
|
<div search-input [searchControl]="keywordControl" [options]="fosOptions" iconPosition="left" placeholder="Write a key word to filter the content"
|
||||||
searchInputClass="border-bottom" class="uk-width-large"></div>
|
searchInputClass="border-bottom" class="uk-width-large"></div>
|
||||||
|
@ -53,7 +55,25 @@
|
||||||
<ul *ngIf="!keyword" class="uk-tab uk-tab-left">
|
<ul *ngIf="!keyword" class="uk-tab uk-tab-left">
|
||||||
<li *ngFor="let item of fos; index as i" [class.uk-active]="activeSection === item.id"
|
<li *ngFor="let item of fos; index as i" [class.uk-active]="activeSection === item.id"
|
||||||
class="uk-margin-small-bottom uk-text-capitalize">
|
class="uk-margin-small-bottom uk-text-capitalize">
|
||||||
<a routerLink="./" [fragment]="item.id">{{item.id}}</a>
|
<a (click)="selectedParentLevels=[]" routerLink="./" [fragment]="item.id">
|
||||||
|
<div>
|
||||||
|
{{item.id}}
|
||||||
|
<ng-container *ngIf="selectedParentLevels.length > 0 && selectedParentLevels[0].id==item.id">
|
||||||
|
<div class="uk-margin-left uk-margin-xsmall-top">
|
||||||
|
<span class="uk-flex uk-flex-middle">
|
||||||
|
<icon [flex]="true" ratio="1" name="subdirectory_arrow_right"></icon>
|
||||||
|
{{selectedParentLevels[1].id}}
|
||||||
|
</span>
|
||||||
|
<div class="uk-margin-left uk-margin-xsmall-top">
|
||||||
|
<span class="uk-flex uk-flex-middle">
|
||||||
|
<icon [flex]="true" ratio="1" name="subdirectory_arrow_right"></icon>
|
||||||
|
{{selectedParentLevels[2].label}}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul *ngIf="keyword?.length" class="uk-tab uk-tab-left">
|
<ul *ngIf="keyword?.length" class="uk-tab uk-tab-left">
|
||||||
|
@ -91,7 +111,34 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-width-expand@m">
|
<div class="uk-width-expand@m">
|
||||||
<ng-container *ngIf="!keyword">
|
<div *ngIf="!keyword && selectedParentLevels.length > 0" [id]="selectedParentLevels[0].id+'||'+selectedParentLevels[1].code+'||'+selectedParentLevels[2].code">
|
||||||
|
<a (click)="backClicked();"
|
||||||
|
class="uk-button-link uk-flex uk-flex-middle uk-margin-bottom">
|
||||||
|
<icon name="arrow_back" visuallyHidden="back" flex="true" ratio="1"></icon>
|
||||||
|
<span class="uk-margin-small-left">Back</span>
|
||||||
|
</a>
|
||||||
|
<div>
|
||||||
|
<h2 class="uk-h4 uk-text-capitalize uk-margin-remove">
|
||||||
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(selectedParentLevels[2])"
|
||||||
|
class="uk-link-text">
|
||||||
|
{{selectedParentLevels[2].label}}
|
||||||
|
</a>
|
||||||
|
</h2>
|
||||||
|
<div class="uk-grid uk-child-width-1-3 uk-margin-large-top uk-margin-xlarge-bottom" uk-grid="masonry: false">
|
||||||
|
<div *ngFor="let level4 of selectedParentLevels[2].children">
|
||||||
|
<div class="uk-text-capitalize">
|
||||||
|
<h3 class="uk-h6 uk-margin-small-bottom">
|
||||||
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(level4)"
|
||||||
|
class="uk-link-text">
|
||||||
|
{{level4.label}}
|
||||||
|
</a>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ng-container *ngIf="!keyword && selectedParentLevels.length == 0">
|
||||||
<div [id]="item.id" *ngFor="let item of fos; index as i">
|
<div [id]="item.id" *ngFor="let item of fos; index as i">
|
||||||
<div class="uk-text-capitalize">
|
<div class="uk-text-capitalize">
|
||||||
<h2 class="uk-h4 uk-margin-remove">
|
<h2 class="uk-h4 uk-margin-remove">
|
||||||
|
@ -110,11 +157,50 @@
|
||||||
{{child.id}}
|
{{child.id}}
|
||||||
</a>
|
</a>
|
||||||
</h3>
|
</h3>
|
||||||
<div *ngFor="let subChild of child.children" style="margin-bottom: 5px;">
|
<!-- class="parent uk-transition-toggle" tabindex="0"-->
|
||||||
|
<div *ngFor="let subChild of child.children; let i=index" style="margin-bottom: 7px;"
|
||||||
|
class="uk-flex uk-flex-middle uk-flex-between uk-transition-toggle" tabindex="0">
|
||||||
|
<!-- <span class="uk-flex uk-flex-between">-->
|
||||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subChild)"
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subChild)"
|
||||||
class="uk-link-text">
|
class="uk-link-text uk-width-expand">
|
||||||
{{searchFieldsHelper.getFosParameter() == 'foslabel' ? subChild.label : subChild.id}}
|
{{searchFieldsHelper.getFosParameter() == 'foslabel' ? subChild.label : subChild.id}}
|
||||||
</a>
|
</a>
|
||||||
|
<span *ngIf="properties.environment == 'development' && subChild.children?.length > 0" (click)="moreClicked(item, child, subChild)"
|
||||||
|
class="uk-transition-fade uk-width-auto uk-flex uk-flex-middle uk-margin-left label4 uk-text-small uk-text-meta">
|
||||||
|
<!-- <a class="view-more-less-link uk-link-text uk-text-lowercase">-->
|
||||||
|
<!-- +{{subChild.children.length}} more-->
|
||||||
|
<!--<!– <icon [flex]="true" ratio="1" name="chevron_right"></icon>–>-->
|
||||||
|
<!-- </a>-->
|
||||||
|
|
||||||
|
<icon [flex]="true" ratio="0.7" name="subdirectory_arrow_right"></icon>
|
||||||
|
<a class="uk-link-text uk-text-lowercase">
|
||||||
|
more
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<!-- <div *ngIf="subChild.children?.length > 0" (click)="selectedParentLevels=[item, child, subChild]"-->
|
||||||
|
<!-- class="uk-flex uk-flex-middle uk-margin-left label4 uk-text-small uk-text-meta">-->
|
||||||
|
<!-- <a class="uk-link-text">{{subChild.children.length}} Subcategories</a>-->
|
||||||
|
<!-- <icon [flex]="true" ratio="1" name="chevron_right"></icon>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
|
||||||
|
<!-- <span *ngIf="subChild?.children?.length > 0" (click)="fosAccordions.set(subChild.id, !fosAccordions.get(subChild.id))" class="uk-accordion-title uk-padding-remove"></span>-->
|
||||||
|
<!-- </span>-->
|
||||||
|
<!-- <div *ngIf="fosAccordions.get(subChild.id)" class="uk-margin-left">-->
|
||||||
|
<!-- <div *ngFor="let level4 of subChild.children" style="margin-bottom: 7px;">-->
|
||||||
|
<!-- <a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(level4)"-->
|
||||||
|
<!-- class="label4 uk-text-small uk-text-meta">-->
|
||||||
|
<!-- {{searchFieldsHelper.getFosParameter() == 'foslabel' ? level4.label : level4.id}}-->
|
||||||
|
<!-- </a>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
|
||||||
|
<!-- uk-transition-slide-top-->
|
||||||
|
<!-- <div *ngIf="subChild.children?.length > 0" class="uk-transition-slide-top">-->
|
||||||
|
<!-- <div class="child">-->
|
||||||
|
<!-- <a class="uk-link uk-margin-left">{{subChild.children.length}} Subcategories ></a>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -137,10 +223,16 @@
|
||||||
class="uk-link-text" [innerHTML]="highlightKeyword(subItem.id)">
|
class="uk-link-text" [innerHTML]="highlightKeyword(subItem.id)">
|
||||||
</a>
|
</a>
|
||||||
</h3>
|
</h3>
|
||||||
<div *ngFor="let subSubItem of subItem.children" style="margin-bottom: 5px;">
|
<div *ngFor="let subSubItem of subItem.children" style="margin-bottom: 7px;">
|
||||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subSubItem)"
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subSubItem)"
|
||||||
class="uk-link-text" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? subSubItem.label : subSubItem.id)">
|
class="uk-link-text" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? subSubItem.label : subSubItem.id)">
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<div *ngFor="let level4 of subSubItem?.children" class="uk-margin-left">
|
||||||
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(level4)"
|
||||||
|
class="uk-text-small uk-text-meta uk-margin-xsmall-bottom" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? level4.label : level4.id)">
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -16,6 +16,7 @@ import {debounceTime, distinctUntilChanged} from "rxjs/operators";
|
||||||
import Timeout = NodeJS.Timeout;
|
import Timeout = NodeJS.Timeout;
|
||||||
import {ISVocabulariesService} from "../utils/staticAutoComplete/ISVocabularies.service";
|
import {ISVocabulariesService} from "../utils/staticAutoComplete/ISVocabularies.service";
|
||||||
import {SearchFields} from "../utils/properties/searchFields";
|
import {SearchFields} from "../utils/properties/searchFields";
|
||||||
|
import {HelperFunctions} from "../utils/HelperFunctions.class";
|
||||||
|
|
||||||
declare var UIkit;
|
declare var UIkit;
|
||||||
|
|
||||||
|
@ -28,6 +29,8 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
public url: string = null;
|
public url: string = null;
|
||||||
public pageTitle: string = "OpenAIRE | Fields of Science";
|
public pageTitle: string = "OpenAIRE | Fields of Science";
|
||||||
public pageDescription: string = "We have integrated a Field-of-Science (FoS) taxonomy into our dataset to organize and discover research more effectively. Using the full capabilities of the OpenAIRE Graph (full-texts, citations, references, venues) we apply AI and bring forward any multidisciplinarity potential.";
|
public pageDescription: string = "We have integrated a Field-of-Science (FoS) taxonomy into our dataset to organize and discover research more effectively. Using the full capabilities of the OpenAIRE Graph (full-texts, citations, references, venues) we apply AI and bring forward any multidisciplinarity potential.";
|
||||||
|
public scrollPos = 0;
|
||||||
|
public selectedParentLevels = [];
|
||||||
public fos: any[] = [];
|
public fos: any[] = [];
|
||||||
public fosOptions: string[] = [];
|
public fosOptions: string[] = [];
|
||||||
public activeSection: string;
|
public activeSection: string;
|
||||||
|
@ -82,21 +85,43 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
item.classList.remove('uk-active');
|
item.classList.remove('uk-active');
|
||||||
});
|
});
|
||||||
if (this.route.snapshot.fragment) {
|
if (this.route.snapshot.fragment) {
|
||||||
this.activeSection = this.route.snapshot.fragment;
|
let splitFragment = this.route.snapshot.fragment.split("||");
|
||||||
let i = this.fos.findIndex(item => item.id == this.route.snapshot.fragment);
|
this.activeSection = this.route.snapshot.fragment.split("||")[0];
|
||||||
|
let i = this.fos.findIndex(item => (item.id == this.route.snapshot.fragment || this.route.snapshot.fragment.startsWith(item.id+"||")));
|
||||||
|
if(i <0 || i>this.fos.length-1) {
|
||||||
|
this._router.navigate(['./'], {fragment: "", relativeTo: this.route, state: {disableScroll: true}});
|
||||||
|
} else {
|
||||||
|
if (splitFragment.length > 1) {
|
||||||
|
let level1 = this.fos[i];
|
||||||
|
let level2 = null;
|
||||||
|
let level3 = null;
|
||||||
|
if (level1.children) {
|
||||||
|
level2 = level1.children.find(item => item.code == splitFragment[1]);
|
||||||
|
if (level2 && level2.children) {
|
||||||
|
level3 = level2.children.find(item => item.code == splitFragment[2]);
|
||||||
|
this.selectedParentLevels = [this.fos[i], level2, level3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!level2 || !level3) {
|
||||||
|
this._router.navigate(['./'], {fragment: level1.id, relativeTo: this.route, state: {disableScroll: true}});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
slider.show(i);
|
slider.show(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.activeSection = this.fos[0].id;
|
this.activeSection = this.fos[0].id;
|
||||||
}
|
}
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
this.subscriptions.push(this.route.fragment.subscribe(fragment => {
|
this.subscriptions.push(this.route.fragment.subscribe(fragment => {
|
||||||
if(fragment) {
|
if(fragment) {
|
||||||
this.activeSection = fragment;
|
this.activeSection = fragment.split("||")[0];
|
||||||
if(this.tabs) {
|
if(this.tabs) {
|
||||||
let slider = UIkit.slider(this.tabs.nativeElement);
|
let slider = UIkit.slider(this.tabs.nativeElement);
|
||||||
let i = this.fos.findIndex(item => item.id == fragment);
|
let i = this.fos.findIndex(item => (item.id == fragment || fragment.startsWith(item.id+"||")));
|
||||||
slider.show(i);
|
slider.show(i);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -105,6 +130,9 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
}));
|
}));
|
||||||
this.keywordControl = this.fb.control('');
|
this.keywordControl = this.fb.control('');
|
||||||
this.subscriptions.push(this.keywordControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(value => {
|
this.subscriptions.push(this.keywordControl.valueChanges.pipe(debounceTime(500), distinctUntilChanged()).subscribe(value => {
|
||||||
|
if(this.keyword !== undefined || value) {
|
||||||
|
this.selectedParentLevels = [];
|
||||||
|
}
|
||||||
this.keyword = value;
|
this.keyword = value;
|
||||||
this.findMatches(this.keyword);
|
this.findMatches(this.keyword);
|
||||||
if (typeof IntersectionObserver !== 'undefined') {
|
if (typeof IntersectionObserver !== 'undefined') {
|
||||||
|
@ -154,11 +182,16 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
this.fos.forEach(fos => {
|
this.fos.forEach(fos => {
|
||||||
this.fosOptions.push(fos.id);
|
this.fosOptions.push(fos.id);
|
||||||
if(fos.children) {
|
if(fos.children) {
|
||||||
fos.children.forEach(child => {
|
fos.children.forEach(l2 => {
|
||||||
this.fosOptions.push(child.id);
|
this.fosOptions.push(l2.id);
|
||||||
if(child.children) {
|
if(l2.children) {
|
||||||
child.children.forEach(child2 => {
|
l2.children.forEach(l3 => {
|
||||||
this.fosOptions.push(child2.id);
|
this.fosOptions.push(l3.id);
|
||||||
|
if(l3.children) {
|
||||||
|
l3.children.forEach(l4 => {
|
||||||
|
this.fosOptions.push(l4.id);
|
||||||
|
})
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -170,19 +203,29 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
this.viewResults = JSON.parse(JSON.stringify(this.fos));
|
this.viewResults = JSON.parse(JSON.stringify(this.fos));
|
||||||
let matchLevel1: boolean = false;
|
let matchLevel1: boolean = false;
|
||||||
let matchLevel2: boolean = false;
|
let matchLevel2: boolean = false;
|
||||||
|
let matchLevel3: boolean = false;
|
||||||
// 1st level search
|
// 1st level search
|
||||||
if(this.viewResults.length) {
|
if(this.viewResults.length) {
|
||||||
this.viewResults = this.viewResults.filter(item => {
|
this.viewResults = this.viewResults.filter(item => {
|
||||||
matchLevel1 = !!item.id.includes(value?.toLowerCase());
|
matchLevel1 = !!item.id.includes(value?.toLowerCase());
|
||||||
// // 2nd level search
|
// 2nd level search
|
||||||
if(item.children?.length && !matchLevel1) {
|
if(item.children?.length && !matchLevel1) {
|
||||||
item.children = item.children.filter(subItem => {
|
item.children = item.children.filter(subItem => {
|
||||||
matchLevel2 = !!subItem.id.includes(value?.toLowerCase());
|
matchLevel2 = !!subItem.id.includes(value?.toLowerCase());
|
||||||
// 3rd level search
|
// 3rd level search
|
||||||
if(subItem.children?.length && !matchLevel2) {
|
if(subItem.children?.length && !matchLevel2) {
|
||||||
subItem.children = subItem.children.filter(subSubItem => subSubItem.id.includes(value?.toLowerCase()));
|
subItem.children = subItem.children.filter(subSubItem => {
|
||||||
|
matchLevel3 = subSubItem.id.includes(value?.toLowerCase());
|
||||||
|
// 4th level search
|
||||||
|
if(subSubItem.children?.length && !matchLevel3) {
|
||||||
|
subSubItem.children = subSubItem.children.filter(level4Item => {
|
||||||
|
return level4Item.id.toLowerCase().includes(value?.toLowerCase())
|
||||||
|
});
|
||||||
}
|
}
|
||||||
return subItem.children?.length > 0 || matchLevel2;
|
return subSubItem.children?.length > 0 || matchLevel3;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return subItem.children?.length > 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return item.children?.length > 0;
|
return item.children?.length > 0;
|
||||||
|
@ -191,7 +234,7 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
}
|
}
|
||||||
|
|
||||||
highlightKeyword(name) {
|
highlightKeyword(name) {
|
||||||
if(name.includes(this.keyword.toLowerCase())) {
|
if(name.toLowerCase().includes(this.keyword.toLowerCase())) {
|
||||||
return name.replace(new RegExp(this.keyword, "gi"), (matchedValue) => `<mark class="highlighted">${matchedValue}</mark>`);
|
return name.replace(new RegExp(this.keyword, "gi"), (matchedValue) => `<mark class="highlighted">${matchedValue}</mark>`);
|
||||||
} else {
|
} else {
|
||||||
return name;
|
return name;
|
||||||
|
@ -221,4 +264,41 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
// return {'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)};
|
// return {'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)};
|
||||||
return (this.searchFieldsHelper.getFosParameter() == 'foslabel' ? ({'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)}) : ({'fos': this.urlEncodeAndQuote(fos.id)}));
|
return (this.searchFieldsHelper.getFosParameter() == 'foslabel' ? ({'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)}) : ({'fos': this.urlEncodeAndQuote(fos.id)}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public backClicked() {
|
||||||
|
let id = this.selectedParentLevels[0].id;
|
||||||
|
this.selectedParentLevels=[];
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
|
||||||
|
if(this.scrollPos) {
|
||||||
|
HelperFunctions.scrollTo(0, this.scrollPos);
|
||||||
|
this._router.navigate(['./'], {fragment: id, relativeTo: this.route, state: {disableScroll: true}});
|
||||||
|
} else {
|
||||||
|
this._router.navigate(['./'], {
|
||||||
|
fragment: id,
|
||||||
|
relativeTo: this.route,
|
||||||
|
state: {disableScroll: false, behavior: 'auto'}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
if (typeof IntersectionObserver !== 'undefined') {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.setObserver();
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public moreClicked(level1, level2, level3) {
|
||||||
|
this.scrollPos = window.scrollY;
|
||||||
|
|
||||||
|
if(this.observer) {
|
||||||
|
this.observer.disconnect();
|
||||||
|
}
|
||||||
|
this.selectedParentLevels=[level1, level2, level3];
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
this._router.navigate(['./'],
|
||||||
|
{fragment: this.selectedParentLevels[0].id+"||"+this.selectedParentLevels[1].code+"||"+this.selectedParentLevels[2].code,
|
||||||
|
relativeTo: this.route, state: {disableScroll: false, behavior: 'auto'}});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,8 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="properties.environment != 'production' && isMobile && (usedBy == 'landing') && availableOn[0].fulltext" class="uk-width-1-1"><hr></div><div *ngIf="availableOn[0].downloadUrl" [ngClass]="isMobile ? 'uk-width-1-1' : ''">
|
<div *ngIf="isMobile && (usedBy == 'landing') && availableOn[0].fulltext" class="uk-width-1-1"><hr></div>
|
||||||
|
<div *ngIf="availableOn[0].downloadUrl" [ngClass]="isMobile ? 'uk-width-1-1' : ''">
|
||||||
<div class="uk-flex uk-flex-middle" [ngClass]="isMobile ? ((usedBy == 'landing') ? 'uk-padding-small uk-padding-remove-horizontal' : '') : ''">
|
<div class="uk-flex uk-flex-middle" [ngClass]="isMobile ? ((usedBy == 'landing') ? 'uk-padding-small uk-padding-remove-horizontal' : '') : ''">
|
||||||
<span [class]="'uk-margin-xsmall-right ' + (availableOn[0].accessRightIcon == 'open_access' ? 'open-access' : 'closed-access')"
|
<span [class]="'uk-margin-xsmall-right ' + (availableOn[0].accessRightIcon == 'open_access' ? 'open-access' : 'closed-access')"
|
||||||
uk-tooltip [title]="getAccessLabel(availableOn[0].accessRight)">
|
uk-tooltip [title]="getAccessLabel(availableOn[0].accessRight)">
|
||||||
|
|
|
@ -665,6 +665,9 @@ export class ParsingFunctions {
|
||||||
}
|
}
|
||||||
|
|
||||||
if(properties.environment != "production" && classifiedSubjects != null) {
|
if(properties.environment != "production" && classifiedSubjects != null) {
|
||||||
|
if (subjects == undefined) {
|
||||||
|
subjects = new Array<string>();
|
||||||
|
}
|
||||||
for (let classified of classifiedSubjects.keys()) {
|
for (let classified of classifiedSubjects.keys()) {
|
||||||
subjects = subjects.concat(classifiedSubjects.get(classified));
|
subjects = subjects.concat(classifiedSubjects.get(classified));
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,10 +222,6 @@
|
||||||
[queryParams]="{view: 'RESTRICTED'}"
|
[queryParams]="{view: 'RESTRICTED'}"
|
||||||
(click)="hide(element)">Restricted view</a>
|
(click)="hide(element)">Restricted view</a>
|
||||||
</li>
|
</li>
|
||||||
<!--<li class="disabled"><a class="uk-disabled uk-text-muted"
|
|
||||||
uk-tooltip="Note: available only in administration dashboard"
|
|
||||||
(click)="hide(element)">Private view</a>
|
|
||||||
</li>-->
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -242,18 +242,30 @@ export class TopicComponent extends StakeholderBaseComponent implements OnInit,
|
||||||
}
|
}
|
||||||
|
|
||||||
topicChanged(callback: Function, save: boolean = false) {
|
topicChanged(callback: Function, save: boolean = false) {
|
||||||
|
if(this.topics && save) {
|
||||||
|
this.topics.disable();
|
||||||
|
}
|
||||||
|
if(this.categories) {
|
||||||
|
this.categories.disable();
|
||||||
|
}
|
||||||
|
if(this.subCategories) {
|
||||||
|
this.subCategories.disable();
|
||||||
|
}
|
||||||
if(callback) {
|
if(callback) {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
if(this.topics && save) {
|
if(this.topics && save) {
|
||||||
this.topics.init();
|
this.topics.init();
|
||||||
|
this.topics.enable();
|
||||||
}
|
}
|
||||||
if(this.categories) {
|
if(this.categories) {
|
||||||
this.categories.init();
|
this.categories.init();
|
||||||
|
this.categories.enable();
|
||||||
}
|
}
|
||||||
if(this.subCategories) {
|
if(this.subCategories) {
|
||||||
this.subCategories.init();
|
this.subCategories.init();
|
||||||
|
this.subCategories.enable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -378,15 +390,23 @@ export class TopicComponent extends StakeholderBaseComponent implements OnInit,
|
||||||
}
|
}
|
||||||
|
|
||||||
categoryChanged(callback: Function, save: boolean = false) {
|
categoryChanged(callback: Function, save: boolean = false) {
|
||||||
|
if(this.categories && save) {
|
||||||
|
this.categories.disable();
|
||||||
|
}
|
||||||
|
if(this.subCategories) {
|
||||||
|
this.subCategories.disable();
|
||||||
|
}
|
||||||
if(callback) {
|
if(callback) {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
if(this.categories && save) {
|
if(this.categories && save) {
|
||||||
this.categories.init();
|
this.categories.init();
|
||||||
|
this.categories.enable();
|
||||||
}
|
}
|
||||||
if(this.subCategories) {
|
if(this.subCategories) {
|
||||||
this.subCategories.init();
|
this.subCategories.init();
|
||||||
|
this.subCategories.enable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -512,12 +532,16 @@ export class TopicComponent extends StakeholderBaseComponent implements OnInit,
|
||||||
}
|
}
|
||||||
|
|
||||||
subCategoryChanged(callback: Function, save: boolean = false) {
|
subCategoryChanged(callback: Function, save: boolean = false) {
|
||||||
|
if(this.subCategories && save) {
|
||||||
|
this.subCategories.disable();
|
||||||
|
}
|
||||||
if(callback) {
|
if(callback) {
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
if(this.subCategories && save) {
|
if(this.subCategories && save) {
|
||||||
this.subCategories.init();
|
this.subCategories.init();
|
||||||
|
this.subCategories.enable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,12 @@ import {
|
||||||
IndicatorPathType,
|
IndicatorPathType,
|
||||||
IndicatorType,
|
IndicatorType,
|
||||||
SourceType,
|
SourceType,
|
||||||
Stakeholder, SubCategory,
|
Stakeholder,
|
||||||
Topic,
|
|
||||||
Visibility,
|
Visibility,
|
||||||
} from "../../monitor/entities/stakeholder";
|
} from "../../monitor/entities/stakeholder";
|
||||||
import {AbstractControl, ValidatorFn, Validators} from "@angular/forms";
|
import {AbstractControl, ValidatorFn, Validators} from "@angular/forms";
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
import {Session} from "../../login/utils/helper.class";
|
import {Session} from "../../login/utils/helper.class";
|
||||||
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
|
||||||
import {properties} from "src/environments/environment";
|
import {properties} from "src/environments/environment";
|
||||||
|
|
||||||
class Roles {
|
class Roles {
|
||||||
|
@ -41,6 +39,11 @@ class Entities {
|
||||||
researchers = 'Researchers';
|
researchers = 'Researchers';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface OAIndicator {
|
||||||
|
numerator: IndicatorPath;
|
||||||
|
denominator: IndicatorPath;
|
||||||
|
}
|
||||||
|
|
||||||
export class StakeholderConfiguration {
|
export class StakeholderConfiguration {
|
||||||
public static ROLES: Roles = new Roles();
|
public static ROLES: Roles = new Roles();
|
||||||
public static ENTITIES: Entities = new Entities();
|
public static ENTITIES: Entities = new Entities();
|
||||||
|
@ -63,6 +66,7 @@ export class StakeholderConfiguration {
|
||||||
public static CACHE_INDICATORS: boolean = true;
|
public static CACHE_INDICATORS: boolean = true;
|
||||||
public static NUMBER_MULTI_INDICATOR_PATHS = false;
|
public static NUMBER_MULTI_INDICATOR_PATHS = false;
|
||||||
public static CHART_MULTI_INDICATOR_PATHS = true;
|
public static CHART_MULTI_INDICATOR_PATHS = true;
|
||||||
|
public static openAccess: Map<string, OAIndicator> = new Map();
|
||||||
}
|
}
|
||||||
|
|
||||||
export class StakeholderUtils {
|
export class StakeholderUtils {
|
||||||
|
@ -102,6 +106,10 @@ export class StakeholderUtils {
|
||||||
return StakeholderConfiguration.CHART_MULTI_INDICATOR_PATHS;
|
return StakeholderConfiguration.CHART_MULTI_INDICATOR_PATHS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get openAccess(): Map<string, OAIndicator> {
|
||||||
|
return StakeholderConfiguration.openAccess;
|
||||||
|
}
|
||||||
|
|
||||||
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string>(this.visibilities.map(option => [option.value, option.icon]));
|
visibilityIcon: Map<Visibility, string> = new Map<Visibility, string>(this.visibilities.map(option => [option.value, option.icon]));
|
||||||
|
|
||||||
defaultValue(options: Option[]) {
|
defaultValue(options: Option[]) {
|
||||||
|
|
|
@ -207,7 +207,7 @@ export class IndicatorPath {
|
||||||
type: IndicatorPathType;
|
type: IndicatorPathType;
|
||||||
source: SourceType;
|
source: SourceType;
|
||||||
url: string;
|
url: string;
|
||||||
safeResourceUrl: SafeResourceUrl; // initialize on front end
|
safeResourceUrl?: SafeResourceUrl; // initialize on front end
|
||||||
jsonPath: string[];
|
jsonPath: string[];
|
||||||
chartObject: string;
|
chartObject: string;
|
||||||
parameters: any;
|
parameters: any;
|
||||||
|
|
|
@ -95,7 +95,7 @@ export class OrganizationService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(organization['pid'] && properties.environment != "production") {
|
if(organization['pid']) {
|
||||||
this.organizationInfo.identifiers = this.parsingFunctions.parseIdentifiers(organization['pid']);
|
this.organizationInfo.identifiers = this.parsingFunctions.parseIdentifiers(organization['pid']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,11 +100,14 @@ export class SearchOrganizationsService {
|
||||||
|
|
||||||
result['title'] = {"name": '', "accessMode": ''};
|
result['title'] = {"name": '', "accessMode": ''};
|
||||||
|
|
||||||
if(resData.legalshortname) {
|
if(resData.legalname) {
|
||||||
result['title'].name = StringUtils.HTMLToString(String(resData.legalshortname));
|
|
||||||
}
|
|
||||||
if(!result['title'].name || result['title'].name == '') {
|
|
||||||
result['title'].name = StringUtils.HTMLToString(String(resData.legalname));
|
result['title'].name = StringUtils.HTMLToString(String(resData.legalname));
|
||||||
|
} else {
|
||||||
|
result['title'].name = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(resData.legalshortname) {
|
||||||
|
result['acronym'] = StringUtils.HTMLToString(String(resData.legalshortname));
|
||||||
}
|
}
|
||||||
|
|
||||||
//result['title'].url = OpenaireProperties.getsearchLinkToOrganization();
|
//result['title'].url = OpenaireProperties.getsearchLinkToOrganization();
|
||||||
|
@ -175,7 +178,7 @@ export class SearchOrganizationsService {
|
||||||
result.country = resData.country.classname;
|
result.country = resData.country.classname;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(resData['pid'] && properties.environment != "production") {
|
if(resData['pid']) {
|
||||||
result.identifiers = this.parsingFunctions.parseIdentifiers(resData['pid']);
|
result.identifiers = this.parsingFunctions.parseIdentifiers(resData['pid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
import {ActivatedRouteSnapshot, BaseRouteReuseStrategy} from "@angular/router";
|
||||||
|
|
||||||
|
export class CustomRouteReuseStrategy extends BaseRouteReuseStrategy {
|
||||||
|
shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {
|
||||||
|
return future.routeConfig === curr.routeConfig || (!!future.routeConfig?.component && future.routeConfig?.component === curr.routeConfig?.component)
|
||||||
|
}
|
||||||
|
}
|
|
@ -108,6 +108,20 @@ export class Composer {
|
||||||
return email;
|
return email;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static composeEmailForDevelopPersonalInfo(user: User): Email {
|
||||||
|
let email: Email = new Email();
|
||||||
|
email.subject = "Welcome to The OpenAIRE API mailing list";
|
||||||
|
email.body = "<div style='font-size:" + this.noteBodySize + "'>"
|
||||||
|
+ "<p>Dear " + user.fullname + ",</p>"
|
||||||
|
+ "<p>As a user of the OpenAIRE APIs, you are a member of the openaire-api mailing list. " +
|
||||||
|
" We will use this list to inform you of relevant news and updates. If you wish to unsubscribe, " +
|
||||||
|
" please send an email to the list admin at <a href='mailto:gbikas@openaire.eu'>gbikas@openaire.eu</a> " +
|
||||||
|
" and <a href='mailto:stefania.amodeo@openaire.eu'>stefania.amodeo@openaire.eu</a>.</p>"
|
||||||
|
+ "<p>The OpenAIRE Graph team</p>";
|
||||||
|
email.recipients = [user.email];
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
public static composeEmailForDevelop(contactForm: any, admins: any, user: User): Email {
|
public static composeEmailForDevelop(contactForm: any, admins: any, user: User): Email {
|
||||||
let email: Email = new Email();
|
let email: Email = new Email();
|
||||||
email.subject = "OpenAIRE - Develop [" + properties.environment.toUpperCase() + "]";
|
email.subject = "OpenAIRE - Develop [" + properties.environment.toUpperCase() + "]";
|
||||||
|
|
|
@ -24,6 +24,7 @@ export class SmoothScroll {
|
||||||
} else if (event instanceof NavigationEnd) {
|
} else if (event instanceof NavigationEnd) {
|
||||||
let headerOffset = (this.layoutService.isMobileValue?0:Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-height'))) + 35;
|
let headerOffset = (this.layoutService.isMobileValue?0:Number.parseInt(getComputedStyle(document.documentElement).getPropertyValue('--header-height'))) + 35;
|
||||||
if(!this.router.getCurrentNavigation().extras?.state?.disableScroll) {
|
if(!this.router.getCurrentNavigation().extras?.state?.disableScroll) {
|
||||||
|
let behavior = this.router.getCurrentNavigation().extras?.state?.behavior ? this.router.getCurrentNavigation().extras?.state?.behavior : "smooth";
|
||||||
if (this.interval) {
|
if (this.interval) {
|
||||||
clearInterval(this.interval);
|
clearInterval(this.interval);
|
||||||
}
|
}
|
||||||
|
@ -48,7 +49,7 @@ export class SmoothScroll {
|
||||||
} else {
|
} else {
|
||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
const y = element.getBoundingClientRect().top + window.scrollY + yOffset;
|
const y = element.getBoundingClientRect().top + window.scrollY + yOffset;
|
||||||
window.scrollTo({top: y, behavior: 'smooth'});
|
window.scrollTo({top: y, behavior: behavior});
|
||||||
}
|
}
|
||||||
}, 50);
|
}, 50);
|
||||||
}
|
}
|
||||||
|
@ -58,7 +59,7 @@ export class SmoothScroll {
|
||||||
}, 100);
|
}, 100);
|
||||||
} else {
|
} else {
|
||||||
setTimeout( () => {
|
setTimeout( () => {
|
||||||
window.scrollTo({top: 0, behavior: 'smooth'});
|
window.scrollTo({top: 0, behavior: behavior});
|
||||||
}, 0);
|
}, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,13 +30,14 @@ export class TransitionGroupComponent implements AfterViewInit, OnDestroy {
|
||||||
@Input()
|
@Input()
|
||||||
public id: string;
|
public id: string;
|
||||||
public size: number;
|
public size: number;
|
||||||
|
private disabled: boolean = false;
|
||||||
private subscription: Subscription;
|
private subscription: Subscription;
|
||||||
|
|
||||||
constructor(public element: ElementRef) {}
|
constructor(public element: ElementRef) {}
|
||||||
|
|
||||||
ngAfterViewInit() {
|
ngAfterViewInit() {
|
||||||
this.subscription = this.items.changes.subscribe(items => {
|
this.subscription = this.items.changes.subscribe(items => {
|
||||||
if(items.length === this.size) {
|
if(items.length === this.size && !this.disabled) {
|
||||||
items.forEach(item => item.prevPos = item.newPos || item.prevPos);
|
items.forEach(item => item.prevPos = item.newPos || item.prevPos);
|
||||||
items.forEach(this.runCallback);
|
items.forEach(this.runCallback);
|
||||||
this.refreshPosition('newPos');
|
this.refreshPosition('newPos');
|
||||||
|
@ -126,17 +127,17 @@ export class TransitionGroupComponent implements AfterViewInit, OnDestroy {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable transition
|
* Enable transition
|
||||||
* @deprecated
|
*
|
||||||
* */
|
* */
|
||||||
enable() {
|
enable() {
|
||||||
console.debug('Deprecated')
|
this.disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable transition
|
* Disable transition
|
||||||
* @deprecated
|
*
|
||||||
* */
|
* */
|
||||||
disable() {
|
disable() {
|
||||||
console.debug('Deprecated')
|
this.disabled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue