Merge branch 'develop' into plugins-functionality
This commit is contained in:
commit
2bb981c489
|
@ -8,29 +8,39 @@ import { properties } from "../../environments/environment";
|
||||||
export class CacheInterceptorService implements HttpInterceptor {
|
export class CacheInterceptorService implements HttpInterceptor {
|
||||||
cachingRequests = [
|
cachingRequests = [
|
||||||
// Remove 2 following lines when bug with hidden refine filters is solved.
|
// Remove 2 following lines when bug with hidden refine filters is solved.
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=relfundinglevel0_id&fields=relproject&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&fields=country&&fq=resultbestaccessright exact \"Open Access\"&type=results&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=relfundinglevel0_id&fields=relproject&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&fq=resultbestaccessright exact \"Open Access\"&type=results&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=funder&fields=fundinglevel0_id&fields=projectstartyear&fields=projectendyear&fields=projectoamandatepublications&&type=projects&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=funder&fields=fundinglevel0_id&fields=projectstartyear&fields=projectendyear&fields=projectoamandatepublications&&type=projects&page=0&size=0",
|
||||||
|
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=results&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=results&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=relfundinglevel0_id&fields=relproject&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&fields=country&&fq=resultbestaccessright%20exact%20%22Open%20Access%22&fq=relfunder%20exact%20%22ec__________%3A%3AEC%7C%7CEuropean%20Commission%7C%7CEC%22&type=results&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=relfundinglevel0_id&fields=relproject&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&fq=resultbestaccessright%20exact%20%22Open%20Access%22&fq=relfunder%20exact%20%22ec__________%3A%3AEC%7C%7CEuropean%20Commission%7C%7CEC%22&type=results&page=0&size=0",
|
||||||
|
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=publications&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=publications&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=datasets&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=datasets&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=software&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=software&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=other&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&type=other&page=0&size=0",
|
||||||
|
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&fq=resultbestaccessright%20exact%20%22Open%20Access%22&type=results&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&fq=resultbestaccessright%20exact%20%22Open%20Access%22&type=results&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=resultbestaccessright&fields=instancetypename&fields=fos&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&fq=resultbestaccessright exact \"Open Access\"&type=results&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=instancetypename&fields=foslabel&fields=relfunder&fields=sdg&fields=country&fields=resultlanguagename&fields=resulthostingdatasource&fields=community&&fq=resultbestaccessright exact \"Open Access\"&type=results&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=funder&fields=projectstartyear&fields=projectendyear&fields=projectoamandatepublications&&type=projects&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=funder&fields=projectoamandatepublications&fields=projectstartyear&fields=projectendyear&&type=projects&page=0&size=0",
|
||||||
"/resources2/?format=json&refine=true&fields=eoscdatasourcetype&fields=datasourceodlanguages&fields=datasourceodcontenttypes&fields=datasourcecompatibilityname&fields=country&fields=collectedfromname&fields=datasourcethematic&fields=datasourcejurisdiction&&type=datasources&page=0&size=0",
|
"/resources2/?format=json&refine=true&fields=eoscdatasourcetype&fields=datasourceodlanguages&fields=datasourceodcontenttypes&fields=datasourcecompatibilityname&fields=country&fields=collectedfromname&fields=datasourcethematic&fields=datasourcejurisdiction&&type=datasources&page=0&size=0",
|
||||||
"/resources2/?format=json&query= ( (reldatasourcecompatibilityid exact driver or reldatasourcecompatibilityid exact driver-openaire2.0 or reldatasourcecompatibilityid exact openaire2.0 or reldatasourcecompatibilityid exact openaire3.0 or reldatasourcecompatibilityid exact openaire4.0 or reldatasourcecompatibilityid exact openaire-cris_1.1 or reldatasourcecompatibilityid exact openaire2.0_data or reldatasourcecompatibilityid exact hostedBy or relproject=*) ) &refine=true&fields=country&&type=organizations&page=0&size=0",
|
// "/resources2/?format=json&query= ( (reldatasourcecompatibilityid exact driver or reldatasourcecompatibilityid exact driver-openaire2.0 or reldatasourcecompatibilityid exact openaire2.0 or reldatasourcecompatibilityid exact openaire3.0 or reldatasourcecompatibilityid exact openaire4.0 or reldatasourcecompatibilityid exact openaire-cris_1.1 or reldatasourcecompatibilityid exact openaire2.0_data or reldatasourcecompatibilityid exact hostedBy or relproject=*) ) &refine=true&fields=country&&type=organizations&page=0&size=0",
|
||||||
|
"/resources2/?format=json&refine=true&fields=country&&type=organizations&fq=(reldatasourcecompatibilityid exact driver or reldatasourcecompatibilityid exact driver-openaire2.0 or reldatasourcecompatibilityid exact openaire2.0 or reldatasourcecompatibilityid exact openaire3.0 or reldatasourcecompatibilityid exact openaire4.0 or reldatasourcecompatibilityid exact openaire-cris_1.1 or reldatasourcecompatibilityid exact openaire2.0_data or reldatasourcecompatibilityid exact hostedBy or relproject=*)&page=0&size=0&minRef=true",
|
||||||
|
|
||||||
"/projects/?format=json&refine=true&page=1&size=0&fields=funder",
|
"/resources2/?format=json&size=0&type=organizations&fq=(reldatasourcecompatibilityid exact driver or reldatasourcecompatibilityid exact driver-openaire2.0 or reldatasourcecompatibilityid exact openaire2.0 or reldatasourcecompatibilityid exact openaire3.0 or reldatasourcecompatibilityid exact openaire4.0 or reldatasourcecompatibilityid exact openaire-cris_1.1 or reldatasourcecompatibilityid exact openaire2.0_data or reldatasourcecompatibilityid exact hostedBy or relproject=*)",
|
||||||
|
|
||||||
|
// "/projects/?format=json&refine=true&page=1&size=0&fields=funder",
|
||||||
|
"/projects/?fields=funder&sf=funder&format=json&size=0",
|
||||||
|
"/results/?fields=relfunder&sf=relfunder&format=json&size=0",
|
||||||
|
|
||||||
"/resources/?format=json&query=( oaftype exact datasource and (eoscdatasourcetype exact \"Journal Archive\" or eoscdatasourcetype exact \"Repository\"))&refine=true&fields=datasourcetypename&fields=country&fields=datasourceodsubjects&fields=datasourceodcontenttypes&fields=datasourcecompatibilityname&fields=datasourcethematic&fields=datasourcejurisdiction&&type=datasources&page=0&size=0",
|
"/resources/?format=json&query=( oaftype exact datasource and (eoscdatasourcetype exact \"Journal Archive\" or eoscdatasourcetype exact \"Repository\"))&refine=true&fields=datasourcetypename&fields=country&fields=datasourceodsubjects&fields=datasourceodcontenttypes&fields=datasourcecompatibilityname&fields=datasourcethematic&fields=datasourcejurisdiction&&type=datasources&page=0&size=0",
|
||||||
|
|
||||||
"/search/v2/api/datasources/count?format=json", "/search/v2/api/publications/count?format=json", "/search/v2/api/datasets/count?format=json", "/search/v2/api/software/count?format=json", "/search/v2/api/other/count?format=json",
|
"/search/v2/api/datasources/count?format=json", "/search/v2/api/publications/count?format=json", "/search/v2/api/datasets/count?format=json", "/search/v2/api/software/count?format=json", "/search/v2/api/other/count?format=json",
|
||||||
"relresulttype%3Dpublication"
|
"relresulttype%3Dpublication",
|
||||||
|
|
||||||
|
"/resources2/?format=json&size=0&type=projects",
|
||||||
|
"/resources2/?format=json&size=0&type=datasources",
|
||||||
|
"/resources2/?format=json&size=0&type=results",
|
||||||
|
"/resources2/?format=json&size=0&type=results&fq=resultbestaccessright%20exact%20%22Open%20Access%22"
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +63,8 @@ export class CacheInterceptorService implements HttpInterceptor {
|
||||||
if (!properties.useLongCache) {
|
if (!properties.useLongCache) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(url.indexOf("refine=true") !== -1 || url.indexOf("/count?format=json") !== -1 || url.indexOf("relresulttype%3Dpublication") !== -1) {
|
if(url.indexOf("sf=") !== -1 || url.indexOf("refine=true") !== -1 || url.indexOf("/count?format=json") !== -1 || url.indexOf("relresulttype%3Dpublication") !== -1 ||
|
||||||
|
(url.indexOf("?format=json&size=0&type=") !== -1 && url.indexOf("query=") == -1)) {
|
||||||
return this.cachingRequests.some(partUrl => (url.indexOf(partUrl) !== -1));
|
return this.cachingRequests.some(partUrl => (url.indexOf(partUrl) !== -1));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<div class="uk-flex uk-flex-center uk-flex-left@m">
|
||||||
<div *ngIf="showOptions && showOptions.linkToEntities.length > 0" class="uk-width-xlarge@l uk-width-large" [ngClass]="centerAlign ? 'uk-align-center':''">
|
<div *ngIf="showOptions && showOptions.linkToEntities.length > 0" class="uk-width-xlarge@l uk-width-large" [ngClass]="centerAlign ? 'uk-align-center':''">
|
||||||
<advanced-search-input (searchEmitter)="search(true)">
|
<advanced-search-input (searchEmitter)="search(true)">
|
||||||
<div input type="select" [(value)]="showOptions.show" placeholder="Type" hint="Select..."
|
<div input type="select" [(value)]="showOptions.show" placeholder="Type" hint="Select..."
|
||||||
|
@ -10,6 +11,7 @@
|
||||||
<div search-input [(value)]="keyword" [placeholder]="'Search for ' + openaireEntities.RESULTS.toLowerCase() + '...'"
|
<div search-input [(value)]="keyword" [placeholder]="'Search for ' + openaireEntities.RESULTS.toLowerCase() + '...'"
|
||||||
[searchInputClass]="'inner background'" (searchEmitter)="search(true)"></div>
|
[searchInputClass]="'inner background'" (searchEmitter)="search(true)"></div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
<div *ngIf="!showSearchResults">
|
<div *ngIf="!showSearchResults">
|
||||||
<div class="uk-text-center uk-text-large uk-text-meta uk-margin-large-top">
|
<div class="uk-text-center uk-text-large uk-text-meta uk-margin-large-top">
|
||||||
No {{showOptions?openaireEntities.RESULTS.toLowerCase() :'sources'}} yet...<br>Use the searchbar to find and link
|
No {{showOptions?openaireEntities.RESULTS.toLowerCase() :'sources'}} yet...<br>Use the searchbar to find and link
|
||||||
|
|
|
@ -865,7 +865,7 @@ export class ClaimResultSearchFormComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
filter.countAllValues = filter.values.length;
|
||||||
}
|
}
|
||||||
return filters;
|
return filters;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
<div class="uk-width-expand">
|
<div class="uk-width-expand">
|
||||||
<div class="uk-margin-bottom">
|
<div class="uk-margin-bottom">
|
||||||
<claim-entity [entity]="claim.target" [type]="claim.targetType" [properties]=properties
|
<claim-entity [entity]="claim.target" [type]="claim.targetType" [properties]=properties
|
||||||
[externalPortalUrl]=externalPortalUrl [source]="true"></claim-entity>
|
[externalPortalUrl]=externalPortalUrl [source]="true" [linkAvailable]="isClaimAvailable(claim)"></claim-entity>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-margin-bottom">
|
<div class="uk-margin-bottom">
|
||||||
<span *ngIf="isClaimAvailable(claim) else notAvailable" class="uk-label uk-label-success"
|
<span *ngIf="isClaimAvailable(claim) else notAvailable" class="uk-label uk-label-success"
|
||||||
|
|
|
@ -111,9 +111,11 @@ export class DisplayClaimsComponent implements OnInit, OnDestroy {
|
||||||
this.updateUrl(this.url);
|
this.updateUrl(this.url);
|
||||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||||
|
|
||||||
|
if(properties.adminToolsPortalType !== "explore") {
|
||||||
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
|
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
|
||||||
this.pageContents = contents;
|
this.pageContents = contents;
|
||||||
}));
|
}));
|
||||||
|
}
|
||||||
this.subscriptions.push(this.indexInfoService.getLastIndexDate(this.properties).subscribe(res => {
|
this.subscriptions.push(this.indexInfoService.getLastIndexDate(this.properties).subscribe(res => {
|
||||||
this.lastIndexDate = res;
|
this.lastIndexDate = res;
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -17,7 +17,6 @@ import {HelperModule} from '../../../utils/helper/helper.module';
|
||||||
import {Schema2jsonldModule} from '../../../sharedComponents/schema2jsonld/schema2jsonld.module';
|
import {Schema2jsonldModule} from '../../../sharedComponents/schema2jsonld/schema2jsonld.module';
|
||||||
import { SEOServiceModule } from '../../../sharedComponents/SEO/SEOService.module';
|
import { SEOServiceModule } from '../../../sharedComponents/SEO/SEOService.module';
|
||||||
import {IndexInfoServiceModule} from "../../../utils/indexInfoService.module";
|
import {IndexInfoServiceModule} from "../../../utils/indexInfoService.module";
|
||||||
import {PiwikServiceModule} from "../../../utils/piwik/piwikService.module";
|
|
||||||
import {SearchInputModule} from '../../../sharedComponents/search-input/search-input.module';
|
import {SearchInputModule} from '../../../sharedComponents/search-input/search-input.module';
|
||||||
import {InputModule} from '../../../sharedComponents/input/input.module';
|
import {InputModule} from '../../../sharedComponents/input/input.module';
|
||||||
import {LoadingModule} from '../../../utils/loading/loading.module';
|
import {LoadingModule} from '../../../utils/loading/loading.module';
|
||||||
|
@ -30,7 +29,7 @@ import {link} from "../../../utils/icons/icons";
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule, RouterModule, ClaimServiceModule, LoadingModalModule, AlertModalModule,
|
CommonModule, FormsModule, RouterModule, ClaimServiceModule, LoadingModalModule, AlertModalModule,
|
||||||
ClaimEntityFormatterModule, PagingModule, HelperModule, Schema2jsonldModule, SEOServiceModule, PiwikServiceModule,
|
ClaimEntityFormatterModule, PagingModule, HelperModule, Schema2jsonldModule, SEOServiceModule,
|
||||||
IndexInfoServiceModule, MatSelectModule, SearchInputModule, MatAutocompleteModule, MatChipsModule, MatFormFieldModule, MatSlideToggleModule, InputModule, LoadingModule, NoLoadPaging, IconsModule, DropdownFilterModule
|
IndexInfoServiceModule, MatSelectModule, SearchInputModule, MatAutocompleteModule, MatChipsModule, MatFormFieldModule, MatSlideToggleModule, InputModule, LoadingModule, NoLoadPaging, IconsModule, DropdownFilterModule
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
|
@ -18,7 +18,7 @@ import {StringUtils} from "../../../utils/string-utils.class";
|
||||||
<div class="uk-flex">
|
<div class="uk-flex">
|
||||||
<span *ngIf="!source" class="uk-text-meta uk-margin-small-right uk-text-large uk-text-nowrap">Link to:</span>
|
<span *ngIf="!source" class="uk-text-meta uk-margin-small-right uk-text-large uk-text-nowrap">Link to:</span>
|
||||||
<publication-title [entity]="entity" param="id"
|
<publication-title [entity]="entity" param="id"
|
||||||
path="/search/result" [externalPortalUrl]=externalPortalUrl></publication-title>
|
path="/search/result" [externalPortalUrl]=externalPortalUrl [linkAvailable]="linkAvailable"></publication-title>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="type == 'project'" [attr.uk-tooptip]="getEntityName(type)"
|
<div *ngIf="type == 'project'" [attr.uk-tooptip]="getEntityName(type)"
|
||||||
|
@ -40,6 +40,7 @@ export class ClaimEntityFormatter {
|
||||||
@Input() properties: EnvProperties;
|
@Input() properties: EnvProperties;
|
||||||
@Input() externalPortalUrl: string = null;
|
@Input() externalPortalUrl: string = null;
|
||||||
@Input() source: boolean = true;
|
@Input() source: boolean = true;
|
||||||
|
@Input() linkAvailable: boolean = true;
|
||||||
public openAIREEntities = OpenaireEntities;
|
public openAIREEntities = OpenaireEntities;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
|
@ -10,8 +10,8 @@ import {RouterHelper} from '../../../utils/routerHelper.class';
|
||||||
<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" [queryParams]="routerHelper.createQueryParam(param,entity.openaireId)"
|
<a *ngIf="!externalPortalUrl" [queryParams]="routerHelper.createQueryParam(param,entity.openaireId)"
|
||||||
[routerLink]="path" class="uk-link uk-link-heading">{{entity.title?entity.title:"[No title available]"}}</a>
|
[routerLink]="path" class="uk-link uk-link-heading" [class.uk-disabled]="!linkAvailable">{{entity.title?entity.title:"[No title available]"}}</a>
|
||||||
<a *ngIf="externalPortalUrl" [href]="externalPortalUrl + path+'?'+param+'='+entity.openaireId" class="uk-link uk-link-heading custom-external">{{entity.title?entity.title:"[No title available]"}}</a>
|
<a *ngIf="externalPortalUrl" [href]="externalPortalUrl + path+'?'+param+'='+entity.openaireId" class="uk-link uk-link-heading custom-external" [class.uk-disabled]="!linkAvailable">{{entity.title?entity.title:"[No title available]"}}</a>
|
||||||
</p>
|
</p>
|
||||||
</h6>
|
</h6>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@ -23,5 +23,6 @@ export class PublicationTitleFormatter {
|
||||||
@Input() path: string;
|
@Input() path: string;
|
||||||
@Input() entity: any;
|
@Input() entity: any;
|
||||||
@Input() externalPortalUrl: string = null;
|
@Input() externalPortalUrl: string = null;
|
||||||
|
@Input() linkAvailable: boolean = true;
|
||||||
public routerHelper: RouterHelper = new RouterHelper();
|
public routerHelper: RouterHelper = new RouterHelper();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,10 +25,34 @@ export class SearchOrcidService {
|
||||||
.pipe(map(res => res['person']))
|
.pipe(map(res => res['person']))
|
||||||
.pipe(map(res => [res['name']['given-names'],
|
.pipe(map(res => [res['name']['given-names'],
|
||||||
res['name']['family-name'],
|
res['name']['family-name'],
|
||||||
res['name']]))
|
res['name'], res['name']['institution-name']]))
|
||||||
|
|
||||||
.pipe(map(res => SearchOrcidService.parseOrcidAuthor(res, authorIds, authors, addId)));
|
.pipe(map(res => SearchOrcidService.parseOrcidAuthor(res, authorIds, authors, addId)));
|
||||||
}
|
}
|
||||||
|
searchOrcidSingleAuthor(term: string, properties: EnvProperties, addId): any {
|
||||||
|
|
||||||
|
//var headers = new Headers();
|
||||||
|
//headers.append('Accept', 'application/orcid+json');
|
||||||
|
let headers = new HttpHeaders({'Accept': 'application/orcid+json'});
|
||||||
|
|
||||||
|
let url ="https://pub.orcid.org/v3.0/expanded-search/?q=orcid:" + term + '&start=0&rows=50';
|
||||||
|
return this.http.get(url, {headers: headers})
|
||||||
|
.pipe(map(res => res['expanded-result']))
|
||||||
|
.pipe(map(res => {
|
||||||
|
if(res) {
|
||||||
|
for (let auth_result of res) {
|
||||||
|
const author = {};
|
||||||
|
author['id'] = auth_result['orcid-id'];
|
||||||
|
author['authorGivenName'] = auth_result['given-names'];
|
||||||
|
author['authorFamilyName'] = auth_result['family-names'];
|
||||||
|
author['institutions'] = auth_result['institution-name'];
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}));
|
||||||
|
}
|
||||||
searchOrcidAuthors(term: string,
|
searchOrcidAuthors(term: string,
|
||||||
properties: EnvProperties): any {
|
properties: EnvProperties): any {
|
||||||
|
|
||||||
|
@ -45,6 +69,34 @@ export class SearchOrcidService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
searchOrcidAuthorsNew(term: string,
|
||||||
|
properties: EnvProperties, size = 10): any {
|
||||||
|
let headers = new HttpHeaders({'Accept': 'application/orcid+json'});
|
||||||
|
// let url = properties.searchOrcidURL+'search?defType=edismax&q='+term+'&qf=given-name^1.0+family-name^2.0+other-names^1.0+credit-name^1.0&start=0&rows=10';
|
||||||
|
let url = /*properties.searchOrcidURL +*/ 'https://pub.orcid.org/v3.0/expanded-search?q=' + StringUtils.URIEncode('{!edismax qf="given-and-family-names^50.0 family-name^10.0 given-names^10.0 credit-name^10.0 other-names^5.0 text^1.0" pf="given-and-family-names^50.0" bq="current-institution-affiliation-name:[* TO *]^100.0 past-institution-affiliation-name:[* TO *]^70" mm=1}') + term + '&start=0&rows=' + size;
|
||||||
|
// given-and-family-names^50.0 family-name^10.0 given-names^10.0 credit-name^10.0 other-names^5.0 text^1.0" pf="given-and-family-names^50.0" bq="current-institution-affiliation-name:[* TO *]^100.0 past-institution-affiliation-name:[* TO *]^70" mm=1}
|
||||||
|
// https://pub.orcid.org/v3.0/expanded-search/?q=%7B!edismax%20qf%3D%22given-and-family-names%5E50.0%20family-name%5E10.0%20given-names%5E10.0%20credit-name%5E10.0%20other-names%5E5.0%20text%5E1.0%22%20pf%3D%22given-and-family-names%5E50.0%22%20bq%3D%22current-institution-affiliation-name%3A%5B*%20TO%20*%5D%5E100.0%20past-institution-affiliation-name%3A%5B*%20TO%20*%5D%5E70%22%20mm%3D1%7Dpaolo%20manghi&start=0&rows=50
|
||||||
|
|
||||||
|
//q={!edismax qf="given-and-family-names^50.0 family-name^10.0 given-names^5.0 credit-name^10.0 other-names^5.0 text^1.0" pf="given-and-family-names^50.0" mm=1}alessia bardi&start=0&rows=10
|
||||||
|
let key = url;
|
||||||
|
return this.http.get(url, {headers: headers})
|
||||||
|
.pipe(map(res => res['expanded-result']))
|
||||||
|
.pipe(map(res => {
|
||||||
|
let authors = [];
|
||||||
|
if(res) {
|
||||||
|
for (let auth_result of res) {
|
||||||
|
const author = {};
|
||||||
|
author['id'] = auth_result['orcid-id'];
|
||||||
|
author['authorGivenName'] = auth_result['given-names'];
|
||||||
|
author['authorFamilyName'] = auth_result['family-names'];
|
||||||
|
author['institutions'] = auth_result['institution-name'];
|
||||||
|
authors.push(author);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return authors;
|
||||||
|
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
searchOrcidPublications(id: string, properties: EnvProperties, parse: boolean = false): any {
|
searchOrcidPublications(id: string, properties: EnvProperties, parse: boolean = false): any {
|
||||||
let headers = new HttpHeaders({'Accept': 'application/orcid+json'});
|
let headers = new HttpHeaders({'Accept': 'application/orcid+json'});
|
||||||
|
@ -56,6 +108,7 @@ export class SearchOrcidService {
|
||||||
|
|
||||||
|
|
||||||
static parseOrcidAuthor(data: any, authorIds: string[], authors, addId): any {
|
static parseOrcidAuthor(data: any, authorIds: string[], authors, addId): any {
|
||||||
|
console.log(data)
|
||||||
if (data[2] != null) {
|
if (data[2] != null) {
|
||||||
if (addId) {
|
if (addId) {
|
||||||
authorIds.push(data[2].path);
|
authorIds.push(data[2].path);
|
||||||
|
@ -72,7 +125,12 @@ export class SearchOrcidService {
|
||||||
} else {
|
} else {
|
||||||
author['authorFamilyName'] = "";
|
author['authorFamilyName'] = "";
|
||||||
}
|
}
|
||||||
|
if (data[3] != null) {
|
||||||
|
author['institution'] = data[3];
|
||||||
|
}
|
||||||
|
console.log(author['institution'])
|
||||||
authors.push(author);
|
authors.push(author);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { NgModule} from '@angular/core';
|
||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { FormsModule } from '@angular/forms';
|
||||||
|
import {SearchOrcidService} from "./searchOrcid.service";
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
CommonModule, FormsModule
|
||||||
|
],
|
||||||
|
declarations: [
|
||||||
|
],
|
||||||
|
providers:[
|
||||||
|
SearchOrcidService
|
||||||
|
],
|
||||||
|
exports: [
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class SearchOrcidServiceModule { }
|
|
@ -37,7 +37,6 @@ export class ClaimsAdminComponent {
|
||||||
@Input() isConnect: boolean = false;
|
@Input() isConnect: boolean = false;
|
||||||
@Input() externalPortalUrl: string;
|
@Input() externalPortalUrl: string;
|
||||||
@Input() claimsInfoURL: string;
|
@Input() claimsInfoURL: string;
|
||||||
@Input() userInfoURL: string;
|
|
||||||
public user: User = null;
|
public user: User = null;
|
||||||
sub;
|
sub;
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,6 @@ import { NgModule } from '@angular/core';
|
||||||
import { SharedModule } from '../../../openaireLibrary/shared/shared.module';
|
import { SharedModule } from '../../../openaireLibrary/shared/shared.module';
|
||||||
import { ClaimsAdminComponent } from './claimsAdmin.component';
|
import { ClaimsAdminComponent } from './claimsAdmin.component';
|
||||||
import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module';
|
import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module';
|
||||||
import { AdminLoginGuard} from'../../login/adminLoginGuard.guard';
|
|
||||||
import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard';
|
|
||||||
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -13,7 +10,7 @@ import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
|
||||||
DisplayClaimsModule
|
DisplayClaimsModule
|
||||||
|
|
||||||
],
|
],
|
||||||
providers:[AdminLoginGuard, PreviousRouteRecorder,IsRouteEnabled],
|
providers:[],
|
||||||
declarations: [
|
declarations: [
|
||||||
ClaimsAdminComponent
|
ClaimsAdminComponent
|
||||||
],
|
],
|
||||||
|
|
|
@ -29,7 +29,7 @@ export class DirectLinkingComponent {
|
||||||
// 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", "orp", "project", "context"];
|
validEntityTypes = ["dataset", "publication", "software", "other", "project", "context"];
|
||||||
sources: ClaimEntity[] = [];
|
sources: ClaimEntity[] = [];
|
||||||
inlineEntity: ClaimEntity = null;
|
inlineEntity: ClaimEntity = null;
|
||||||
validInput: boolean = null;//'true;
|
validInput: boolean = null;//'true;
|
||||||
|
@ -74,7 +74,7 @@ export class DirectLinkingComponent {
|
||||||
this.getResearchResultById("dataset", this.id);
|
this.getResearchResultById("dataset", this.id);
|
||||||
} else if (this.type == "software") {
|
} else if (this.type == "software") {
|
||||||
this.getResearchResultById("software", this.id);
|
this.getResearchResultById("software", this.id);
|
||||||
} else if (this.type == "orp") {
|
} else if (this.type == "other") {
|
||||||
this.getResearchResultById("other", this.id);
|
this.getResearchResultById("other", this.id);
|
||||||
} else {
|
} else {
|
||||||
this.validInput = this.isValidInput(null);
|
this.validInput = this.isValidInput(null);
|
||||||
|
@ -110,9 +110,9 @@ export class DirectLinkingComponent {
|
||||||
return false;
|
return false;
|
||||||
} else if (this.type == "project" && this.showOptions.linkTo != "result") {
|
} else if (this.type == "project" && this.showOptions.linkTo != "result") {
|
||||||
return false;
|
return false;
|
||||||
} else if (["dataset", "publication", "software", "orp"].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", "orp"].indexOf(this.type) == -1) {
|
} else if (["project", "dataset", "publication", "software", "other"].indexOf(this.type) == -1) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -5,9 +5,6 @@ import { DirectLinkingComponent } from './directLinking.component';
|
||||||
|
|
||||||
import {EntitySearchServiceModule} from '../../utils/entitiesAutoComplete/entitySearchService.module';
|
import {EntitySearchServiceModule} from '../../utils/entitiesAutoComplete/entitySearchService.module';
|
||||||
import {SearchResearchResultsServiceModule} from '../../services/searchResearchResultsService.module';
|
import {SearchResearchResultsServiceModule} from '../../services/searchResearchResultsService.module';
|
||||||
import {LoginGuard} from'../../login/loginGuard.guard';
|
|
||||||
import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard';
|
|
||||||
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
|
|
||||||
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
|
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
|
||||||
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
|
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
|
||||||
import {LinkingGenericModule} from '../linking/linkingGeneric.module';
|
import {LinkingGenericModule} from '../linking/linkingGeneric.module';
|
||||||
|
@ -18,7 +15,7 @@ import {LinkingGenericModule} from '../linking/linkingGeneric.module';
|
||||||
EntitySearchServiceModule, SearchResearchResultsServiceModule,
|
EntitySearchServiceModule, SearchResearchResultsServiceModule,
|
||||||
Schema2jsonldModule, SEOServiceModule, LinkingGenericModule
|
Schema2jsonldModule, SEOServiceModule, LinkingGenericModule
|
||||||
],
|
],
|
||||||
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
|
providers:[],
|
||||||
declarations: [
|
declarations: [
|
||||||
DirectLinkingComponent
|
DirectLinkingComponent
|
||||||
], exports:[DirectLinkingComponent]
|
], exports:[DirectLinkingComponent]
|
||||||
|
|
|
@ -271,10 +271,15 @@ export class BulkClaimComponent {
|
||||||
err => {
|
err => {
|
||||||
// console.log(err);
|
// console.log(err);
|
||||||
BulkClaimComponent.handleError("Error getting crossref by DOIs: " + id, err);
|
BulkClaimComponent.handleError("Error getting crossref by DOIs: " + id, err);
|
||||||
|
|
||||||
|
if(err.status == 404) {
|
||||||
|
this.searchInDatacite(id, accessMode, date, row);
|
||||||
|
} else {
|
||||||
this.notFoundIds.push(id);
|
this.notFoundIds.push(id);
|
||||||
this.notFoundIdsRow.push(row);
|
this.notFoundIdsRow.push(row);
|
||||||
this.endOfFetching();
|
this.endOfFetching();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import {
|
||||||
import {UserManagementService} from "../../../services/user-management.service";
|
import {UserManagementService} from "../../../services/user-management.service";
|
||||||
import {Subscriber, timer} from "rxjs";
|
import {Subscriber, timer} from "rxjs";
|
||||||
import {map} from "rxjs/operators";
|
import {map} from "rxjs/operators";
|
||||||
|
import {LogService} from "../../../utils/log/log.service";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'claim-insert',
|
selector: 'claim-insert',
|
||||||
|
@ -59,7 +60,7 @@ import {map} from "rxjs/operators";
|
||||||
})
|
})
|
||||||
export class ClaimInsertComponent {
|
export class ClaimInsertComponent {
|
||||||
constructor(private claimService: ClaimsService, private _router: Router, private route: ActivatedRoute,
|
constructor(private claimService: ClaimsService, private _router: Router, private route: ActivatedRoute,
|
||||||
private userManagementService: UserManagementService) {
|
private userManagementService: UserManagementService, private _logService: LogService) {
|
||||||
}
|
}
|
||||||
subscriptions = [];
|
subscriptions = [];
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
|
@ -127,6 +128,7 @@ export class ClaimInsertComponent {
|
||||||
public feedRecordsJob;
|
public feedRecordsJob;
|
||||||
public claims2Insert;
|
public claims2Insert;
|
||||||
public records2Insert
|
public records2Insert
|
||||||
|
infoToLog = [];
|
||||||
public insert() {
|
public insert() {
|
||||||
this.confirmOpen();
|
this.confirmOpen();
|
||||||
}
|
}
|
||||||
|
@ -145,6 +147,7 @@ export class ClaimInsertComponent {
|
||||||
this.errorInClaims = [];
|
this.errorInClaims = [];
|
||||||
this.insertedRecords = [];
|
this.insertedRecords = [];
|
||||||
this.errorInRecords = [];
|
this.errorInRecords = [];
|
||||||
|
this.infoToLog = [];
|
||||||
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
this.subscriptions.push(this.userManagementService.getUserInfo().subscribe(user => {
|
||||||
if (!user) {
|
if (!user) {
|
||||||
this.saveAndNavigate();
|
this.saveAndNavigate();
|
||||||
|
@ -190,10 +193,11 @@ export class ClaimInsertComponent {
|
||||||
} else if (entity.project) {
|
} else if (entity.project) {
|
||||||
claims.push(ClaimInsertComponent.createProjectClaim(result, entity, user.email, dashboard));
|
claims.push(ClaimInsertComponent.createProjectClaim(result, entity, user.email, dashboard));
|
||||||
}
|
}
|
||||||
|
this.infoToLog.push([ result.title?result.title: result.id, entity.title?entity.title:entity.id]);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (this.inlineEntity) {
|
if (this.inlineEntity) {
|
||||||
|
this.infoToLog.push([ this.inlineEntity.title?this.inlineEntity.title: this.inlineEntity.id, entity.title?entity.title:entity.id]);
|
||||||
if (this.inlineEntity.result) {
|
if (this.inlineEntity.result) {
|
||||||
if (entity.result) {
|
if (entity.result) {
|
||||||
|
|
||||||
|
@ -256,6 +260,12 @@ export class ClaimInsertComponent {
|
||||||
data => {
|
data => {
|
||||||
this.claims2Insert = claims.length;
|
this.claims2Insert = claims.length;
|
||||||
this.claimsJob = data.data;
|
this.claimsJob = data.data;
|
||||||
|
if(this.properties.logServiceUrl) {
|
||||||
|
for(let info of this.infoToLog) {
|
||||||
|
this.subscriptions.push(this._logService.logLink(this.properties, info[0],info[1]).subscribe(res => {
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
this.saveLocalStorage();
|
this.saveLocalStorage();
|
||||||
let timerSubscription = timer(0, 10000).pipe(
|
let timerSubscription = timer(0, 10000).pipe(
|
||||||
map(() => {
|
map(() => {
|
||||||
|
@ -375,7 +385,7 @@ export class ClaimInsertComponent {
|
||||||
localStorage.removeItem(this.localStoragePrefix + "claimsJob");
|
localStorage.removeItem(this.localStoragePrefix + "claimsJob");
|
||||||
localStorage.removeItem(this.localStoragePrefix + "feedRecordsJob");
|
localStorage.removeItem(this.localStoragePrefix + "feedRecordsJob");
|
||||||
|
|
||||||
this._router.navigate(['/myclaims'], {queryParams: this.params});
|
this._router.navigate([this.properties.myClaimsLink], {queryParams: this.params});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -557,8 +567,8 @@ export class ClaimInsertComponent {
|
||||||
getStatus(){
|
getStatus(){
|
||||||
if(this.feedRecordsJob && ! (this.feedRecordsJob.status == "COMPLETE" || this.feedRecordsJob.status == "ERROR") ) {
|
if(this.feedRecordsJob && ! (this.feedRecordsJob.status == "COMPLETE" || this.feedRecordsJob.status == "ERROR") ) {
|
||||||
this.subscriptions.push(this.claimService.getStatus(this.feedRecordsJob.id, this.properties.claimsAPIURL).subscribe(data => {
|
this.subscriptions.push(this.claimService.getStatus(this.feedRecordsJob.id, this.properties.claimsAPIURL).subscribe(data => {
|
||||||
console.log("feed", data);
|
|
||||||
this.feedRecordsJob = data.data;
|
this.feedRecordsJob = data.data;
|
||||||
|
// console.log("feed", this.feedRecordsJob.status);
|
||||||
if (this.feedRecordsJob.status == "COMPLETE" || data.data.status == "ERROR") {
|
if (this.feedRecordsJob.status == "COMPLETE" || data.data.status == "ERROR") {
|
||||||
this.insertedRecords = this.feedRecordsJob.insertedIds;
|
this.insertedRecords = this.feedRecordsJob.insertedIds;
|
||||||
this.errorInRecords = this.feedRecordsJob.errorInClaims;
|
this.errorInRecords = this.feedRecordsJob.errorInClaims;
|
||||||
|
@ -577,9 +587,9 @@ export class ClaimInsertComponent {
|
||||||
}
|
}
|
||||||
if(this.claimsJob) {
|
if(this.claimsJob) {
|
||||||
this.subscriptions.push(this.claimService.getStatus(this.claimsJob.id, this.properties.claimsAPIURL).subscribe(data => {
|
this.subscriptions.push(this.claimService.getStatus(this.claimsJob.id, this.properties.claimsAPIURL).subscribe(data => {
|
||||||
console.log("claim", data);
|
|
||||||
this.claimsJob = data.data;
|
this.claimsJob = data.data;
|
||||||
if ((this.claimsJob.status == "COMPLETE" || data.data.status == "ERROR") && ( !this.feedRecordsJob || !(this.feedRecordsJob.status == "COMPLETE" || data.data.status == "ERROR")) ) {
|
// console.log("claim: ", this.claimsJob.status, this.feedRecordsJob.status?this.feedRecordsJob.status:" no feed job");
|
||||||
|
if ((this.claimsJob.status == "COMPLETE" || data.data.status == "ERROR") && ( !this.feedRecordsJob || (this.feedRecordsJob.status == "COMPLETE" || data.data.status == "ERROR")) ) {
|
||||||
this.insertedClaims = this.claimsJob.insertedIds;
|
this.insertedClaims = this.claimsJob.insertedIds;
|
||||||
this.errorInClaims = this.claimsJob.errorInClaims;
|
this.errorInClaims = this.claimsJob.errorInClaims;
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,11 @@ import {LoadingModalModule} from '../../../utils/modal/loadingModal.module';
|
||||||
import {ClaimInsertComponent} from './insertClaim.component';
|
import {ClaimInsertComponent} from './insertClaim.component';
|
||||||
import {ClaimServiceModule} from '../../claim-utils/service/claimsService.module';
|
import {ClaimServiceModule} from '../../claim-utils/service/claimsService.module';
|
||||||
import {IconsModule} from "../../../utils/icons/icons.module";
|
import {IconsModule} from "../../../utils/icons/icons.module";
|
||||||
|
import {LogServiceModule} from "../../../utils/log/LogService.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
SharedModule, AlertModalModule, LoadingModalModule, ClaimServiceModule, IconsModule
|
SharedModule, AlertModalModule, LoadingModalModule, ClaimServiceModule, IconsModule, LogServiceModule
|
||||||
],
|
],
|
||||||
declarations: [ClaimInsertComponent],
|
declarations: [ClaimInsertComponent],
|
||||||
exports:[ ClaimInsertComponent]
|
exports:[ ClaimInsertComponent]
|
||||||
|
|
|
@ -73,11 +73,11 @@
|
||||||
<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]="((showOptions.show == 'claim')?'':' uk-margin-top ')+' 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" class="uk-section uk-padding-remove-top">
|
||||||
<div [class]="((showOptions.show == 'claim')?'':' uk-margin-top ')+' 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 uk-position-z-index">
|
<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" class="uk-text-center">Link source to</h2>
|
||||||
<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
|
||||||
|
@ -109,11 +109,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Basket-->
|
<!-- Basket-->
|
||||||
<div *ngIf="showOptions.show != 'claim'" class="uk-width-1-3">
|
<div *ngIf="showOptions.show != 'claim'" class="uk-width-1-3@m uk-flex-last@m uk-flex-first uk-margin-medium-top">
|
||||||
<div id="basket" uk-sticky="offset: 220; end: !*; media: @m" style="z-index: 0!important;">
|
<div id="basket" uk-sticky="offset: 220; end: !*; media: @m" style="z-index: 0!important;">
|
||||||
<div class="uk-card uk-card-default linkingBasket">
|
<div class="uk-card uk-card-default linkingBasket">
|
||||||
<div class="uk-card-body uk-padding-small">
|
<div class="uk-card-body uk-padding-small">
|
||||||
<div class="uk-margin-right">
|
<div>
|
||||||
<ng-container *ngIf="inlineEntity">
|
<ng-container *ngIf="inlineEntity">
|
||||||
<div class="uk-margin-small-bottom">
|
<div class="uk-margin-small-bottom">
|
||||||
<div class="uk-text-emphasis uk-text-bolder">Source</div>
|
<div class="uk-text-emphasis uk-text-bolder">Source</div>
|
||||||
|
@ -145,7 +145,7 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div *ngIf="showOptions.basketShowSources">
|
<div *ngIf="showOptions.basketShowSources">
|
||||||
<div class="uk-height-medium uk-overflow-auto">
|
<div class="uk-height-max-medium uk-overflow-auto uk-padding uk-padding-remove-left uk-padding-remove-vertical">
|
||||||
<div *ngIf="showOptions.show == 'source'" class="uk-padding-small uk-padding-remove-horizontal" style="min-height:17px;">
|
<div *ngIf="showOptions.show == 'source'" class="uk-padding-small uk-padding-remove-horizontal" style="min-height:17px;">
|
||||||
<start-over *ngIf="showOptions.show == 'source' && sources.length> 0"
|
<start-over *ngIf="showOptions.show == 'source' && sources.length> 0"
|
||||||
[results]="sources"
|
[results]="sources"
|
||||||
|
@ -173,7 +173,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="showOptions.basketShowLinksTo">
|
<div *ngIf="showOptions.basketShowLinksTo">
|
||||||
<div class="uk-height-medium uk-overflow-auto">
|
<div class="uk-height-max-medium uk-overflow-auto uk-padding uk-padding-remove-left uk-padding-remove-vertical">
|
||||||
<ng-container *ngTemplateOutlet="destinations_basket"></ng-container>
|
<ng-container *ngTemplateOutlet="destinations_basket"></ng-container>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -87,9 +87,11 @@ export class LinkingGenericComponent {
|
||||||
|
|
||||||
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
this.subscriptions.push(this._piwikService.trackView(this.properties, this.pageTitle).subscribe());
|
||||||
|
|
||||||
|
if(properties.adminToolsPortalType !== "explore") {
|
||||||
this.helper.getPageHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
|
this.helper.getPageHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
|
||||||
this.pageContents = contents;
|
this.pageContents = contents;
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if( typeof localStorage !== 'undefined') {
|
if( typeof localStorage !== 'undefined') {
|
||||||
|
@ -164,19 +166,19 @@ export class LinkingGenericComponent {
|
||||||
stepHasChanged(stepId){
|
stepHasChanged(stepId){
|
||||||
|
|
||||||
if(stepId == 'source'){
|
if(stepId == 'source'){
|
||||||
console.log("show source")
|
// console.log("show source")
|
||||||
this.showOptions.showSource();
|
this.showOptions.showSource();
|
||||||
}else if(stepId == 'target'){
|
}else if(stepId == 'target'){
|
||||||
console.log("show target")
|
// console.log("show target")
|
||||||
this.showOptions.show = this.showOptions.linkTo;
|
this.showOptions.show = this.showOptions.linkTo;
|
||||||
this.showOptions.showLinkTo();
|
this.showOptions.showLinkTo();
|
||||||
}else if(stepId == 'claim'){
|
}else if(stepId == 'claim'){
|
||||||
console.log("show target")
|
// console.log("show target")
|
||||||
this.showOptions.show = 'claim';
|
this.showOptions.show = 'claim';
|
||||||
}
|
}
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
HelperFunctions.scroll(true);
|
HelperFunctions.scroll(true);
|
||||||
console.log('stepHasChanged', stepId, this.showOptions.show)
|
// console.log('stepHasChanged', stepId, this.showOptions.show)
|
||||||
}
|
}
|
||||||
|
|
||||||
stepStatus(stepId){
|
stepStatus(stepId){
|
||||||
|
|
|
@ -7,20 +7,16 @@ import {SelectedContextsModule} from './selected/selectedContexts.module';
|
||||||
import {SelectedPublicationsModule} from './selected/selectedResults.module';
|
import {SelectedPublicationsModule} from './selected/selectedResults.module';
|
||||||
import {LinkingGenericComponent} from './linkingGeneric.component';
|
import {LinkingGenericComponent} from './linkingGeneric.component';
|
||||||
import {StartOverModule} from '../claim-utils/startOver.module';
|
import {StartOverModule} from '../claim-utils/startOver.module';
|
||||||
import {LoginGuard} from '../../login/loginGuard.guard';
|
|
||||||
import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard';
|
|
||||||
import {ClaimContextSearchFormModule} from '../claim-utils/claimContextSearchForm.module';
|
import {ClaimContextSearchFormModule} from '../claim-utils/claimContextSearchForm.module';
|
||||||
import {ClaimProjectsSearchFormModule} from '../claim-utils/claimProjectSearchForm.module';
|
import {ClaimProjectsSearchFormModule} from '../claim-utils/claimProjectSearchForm.module';
|
||||||
import {BulkClaimModule} from './bulkClaim/bulkClaim.module';
|
import {BulkClaimModule} from './bulkClaim/bulkClaim.module';
|
||||||
import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module';
|
import {ClaimResultSearchFormModule} from '../claim-utils/claimResultSearchForm.module';
|
||||||
import {HelperModule} from '../../utils/helper/helper.module';
|
import {HelperModule} from '../../utils/helper/helper.module';
|
||||||
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
|
|
||||||
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
|
import {Schema2jsonldModule} from '../../sharedComponents/schema2jsonld/schema2jsonld.module';
|
||||||
import {SEOServiceModule} from '../../sharedComponents/SEO/SEOService.module';
|
import {SEOServiceModule} from '../../sharedComponents/SEO/SEOService.module';
|
||||||
import {MetadataPreviewModule} from './selected/metadataPreview.module';
|
import {MetadataPreviewModule} from './selected/metadataPreview.module';
|
||||||
import {ClaimEntitiesMetadataModule} from "./selected/ClaimEntitiesMetadata.module";
|
import {ClaimEntitiesMetadataModule} from "./selected/ClaimEntitiesMetadata.module";
|
||||||
import {AlertModalModule} from '../../utils/modal/alertModal.module';
|
import {AlertModalModule} from '../../utils/modal/alertModal.module';
|
||||||
import {PiwikServiceModule} from "../../utils/piwik/piwikService.module";
|
|
||||||
import {BreadcrumbsModule} from "../../utils/breadcrumbs/breadcrumbs.module";
|
import {BreadcrumbsModule} from "../../utils/breadcrumbs/breadcrumbs.module";
|
||||||
import {StepperModule} from "../../sharedComponents/stepper/stepper.module";
|
import {StepperModule} from "../../sharedComponents/stepper/stepper.module";
|
||||||
import {IconsModule} from "../../utils/icons/icons.module";
|
import {IconsModule} from "../../utils/icons/icons.module";
|
||||||
|
@ -34,10 +30,9 @@ import {link} from "../../utils/icons/icons";
|
||||||
StartOverModule,
|
StartOverModule,
|
||||||
ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule,
|
ClaimContextSearchFormModule, ClaimProjectsSearchFormModule, BulkClaimModule, ClaimResultSearchFormModule,
|
||||||
HelperModule, Schema2jsonldModule, SEOServiceModule, MetadataPreviewModule, ClaimEntitiesMetadataModule, AlertModalModule,
|
HelperModule, Schema2jsonldModule, SEOServiceModule, MetadataPreviewModule, ClaimEntitiesMetadataModule, AlertModalModule,
|
||||||
PiwikServiceModule,
|
|
||||||
MatSelectModule, BreadcrumbsModule, StepperModule, IconsModule
|
MatSelectModule, BreadcrumbsModule, StepperModule, IconsModule
|
||||||
],
|
],
|
||||||
providers: [LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
|
providers: [],
|
||||||
declarations: [
|
declarations: [
|
||||||
LinkingGenericComponent
|
LinkingGenericComponent
|
||||||
], exports: [
|
], exports: [
|
||||||
|
|
|
@ -30,7 +30,6 @@ import {Subscriber} from "rxjs";
|
||||||
export class MyClaimsComponent {
|
export class MyClaimsComponent {
|
||||||
@Input() claimsInfoURL: string;
|
@Input() claimsInfoURL: string;
|
||||||
@Input() communityId:string;
|
@Input() communityId:string;
|
||||||
@Input() userInfoURL: string;
|
|
||||||
public user: User = null;
|
public user: User = null;
|
||||||
|
|
||||||
constructor(private userManagementService: UserManagementService, private _router: Router) {}
|
constructor(private userManagementService: UserManagementService, private _router: Router) {}
|
||||||
|
|
|
@ -3,9 +3,6 @@ import { NgModule } from '@angular/core';
|
||||||
import { SharedModule } from '../../../openaireLibrary/shared/shared.module';
|
import { SharedModule } from '../../../openaireLibrary/shared/shared.module';
|
||||||
import { MyClaimsComponent } from './myClaims.component';
|
import { MyClaimsComponent } from './myClaims.component';
|
||||||
import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module';
|
import {DisplayClaimsModule} from '../claim-utils/displayClaims/displayClaims.module';
|
||||||
import {LoginGuard} from'../../login/loginGuard.guard';
|
|
||||||
import {PreviousRouteRecorder} from '../../utils/piwik/previousRouteRecorder.guard';
|
|
||||||
import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -13,7 +10,7 @@ import {IsRouteEnabled} from '../../error/isRouteEnabled.guard';
|
||||||
DisplayClaimsModule
|
DisplayClaimsModule
|
||||||
|
|
||||||
],
|
],
|
||||||
providers:[LoginGuard, PreviousRouteRecorder, IsRouteEnabled],
|
providers:[],
|
||||||
declarations: [
|
declarations: [
|
||||||
MyClaimsComponent
|
MyClaimsComponent
|
||||||
], exports: [MyClaimsComponent]
|
], exports: [MyClaimsComponent]
|
||||||
|
|
|
@ -6,6 +6,9 @@ import {CommunityInfo} from "./community/communityInfo";
|
||||||
export class ConnectHelper {
|
export class ConnectHelper {
|
||||||
|
|
||||||
public static getCommunityFromDomain(domain: string): string{
|
public static getCommunityFromDomain(domain: string): string{
|
||||||
|
if(properties.dashboard === 'irish') {
|
||||||
|
return properties.adminToolsCommunity;
|
||||||
|
}
|
||||||
if(properties.environment == "development" &&
|
if(properties.environment == "development" &&
|
||||||
(properties.adminToolsPortalType == "connect" || properties.adminToolsPortalType == "community"
|
(properties.adminToolsPortalType == "connect" || properties.adminToolsPortalType == "community"
|
||||||
|| properties.adminToolsPortalType == "aggregator" || properties.adminToolsPortalType == "eosc")) {
|
|| properties.adminToolsPortalType == "aggregator" || properties.adminToolsPortalType == "eosc")) {
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
|
|
||||||
<div *ngIf="!hidden" class="">
|
|
||||||
<div *ngIf="showSaveResetButtons" class="uk-article-title custom-article-title">
|
|
||||||
User Email Preferences for Claims Notifications
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="userValidMessage.length > 0" class = "uk-alert uk-alert-danger uk-animation-fade" role="alert">
|
|
||||||
{{userValidMessage}}
|
|
||||||
</div>
|
|
||||||
<div *ngIf="savedMessage.length > 0" class="uk-alert uk-alert-success uk-animation-fade" role="alert">
|
|
||||||
{{savedMessage}}
|
|
||||||
</div>
|
|
||||||
<errorMessages [status]="[status]" [type]="'notification preferences'"></errorMessages>
|
|
||||||
|
|
||||||
|
|
||||||
<div *ngFor="let notification of notifications; let i=index" >
|
|
||||||
<!-- <div class="uk-accordion-title">Email preferences for {{preferencesFor}}: <strong>{{notification.openaireName}}</strong></div>-->
|
|
||||||
<!-- <div class="uk-accordion-content">-->
|
|
||||||
<form class="uk-form-horizontal"><!-- [formGroup]="myForm"-->
|
|
||||||
<!--[ngClass]="{'has-error':!myForm.controls.notify.valid && myForm.controls.notify.dirty}"-->
|
|
||||||
<div class="uk-margin uk-grid">
|
|
||||||
<div class=" inherit-color uk-width-medium"
|
|
||||||
title="Get e-mail notification when there are new user links related your community">Notify
|
|
||||||
for new user links:</div>
|
|
||||||
|
|
||||||
<mat-slide-toggle [checked]="notification.notify"
|
|
||||||
(change)="($event.source.checked = notification.notify);changeNotify(notification, !notification.notify, i)"></mat-slide-toggle>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="notification.notify" [class]="notification.notify ? 'uk-margin' :
|
|
||||||
'uk-margin cursor-not-allowed'">
|
|
||||||
<div class="uk-form-label inherit-color">Frequency:</div>
|
|
||||||
<div class="uk-form-controls">
|
|
||||||
<select [class]="notification.notify ? 'uk-select' : 'uk-select uk-disabled'" id="form-horizontal-select"
|
|
||||||
[(ngModel)]="notification.frequency" (ngModelChange)="changeFrequency(i)" name="select_frequency">
|
|
||||||
<option [ngValue]="24" >Daily</option>
|
|
||||||
<option [ngValue]="48" >Every two days</option>
|
|
||||||
<option [ngValue]="168">Weekly</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div *ngIf="showSaveResetButtons" class="uk-float-right">
|
|
||||||
<button type="submit" class="uk-button uk-button-primary" (click)="saveNotification(i)">Save Changes</button>
|
|
||||||
<button type="submit" class="uk-button" (click)="restoreNotification(i)">Reset</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</form>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<!-- </div>-->
|
|
||||||
<!-- </ul>-->
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
|
@ -1,259 +0,0 @@
|
||||||
import {Component, Input} from '@angular/core';
|
|
||||||
import {Location} from '@angular/common';
|
|
||||||
import {ActivatedRoute, Router} from '@angular/router';
|
|
||||||
import {Session} from '../../login/utils/helper.class';
|
|
||||||
import {EnvProperties} from '../../utils/properties/env-properties';
|
|
||||||
import {MailPrefsService} from './mailPrefs.service';
|
|
||||||
import {ConnectHelper} from '../connectHelper';
|
|
||||||
import {ErrorCodes} from '../../utils/properties/errorCodes';
|
|
||||||
import {ErrorMessagesComponent} from '../../utils/errorMessages.component';
|
|
||||||
import {LoginErrorCodes} from '../../login/utils/guardHelper.class';
|
|
||||||
import {properties} from "../../../../environments/environment";
|
|
||||||
import {Subscriber} from "rxjs";
|
|
||||||
|
|
||||||
declare var UIkit: any;
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'mailPrefs',
|
|
||||||
templateUrl: 'mailPrefs.component.html',
|
|
||||||
providers:[MailPrefsService]
|
|
||||||
|
|
||||||
})
|
|
||||||
export class MailPrefsComponent {
|
|
||||||
properties:EnvProperties;
|
|
||||||
subscriptions = [];
|
|
||||||
@Input() communityId: string;
|
|
||||||
public preferencesFor: string = "community";
|
|
||||||
public status: number;
|
|
||||||
|
|
||||||
public notifications = [];
|
|
||||||
public initialNotifications = [];
|
|
||||||
public prefsChanged = {};
|
|
||||||
public hidden: boolean = true;
|
|
||||||
|
|
||||||
//public showForbiddenMessage:boolean = false;
|
|
||||||
public userValidMessage:string = "";
|
|
||||||
public savedMessage: string = "";
|
|
||||||
|
|
||||||
private errorCodes: ErrorCodes;
|
|
||||||
private errorMessages: ErrorMessagesComponent;
|
|
||||||
|
|
||||||
@Input() showSaveResetButtons: boolean = true;
|
|
||||||
|
|
||||||
constructor (private _mailPrefsService: MailPrefsService, private route: ActivatedRoute, private _router:Router, private location: Location) {
|
|
||||||
this.errorCodes = new ErrorCodes();
|
|
||||||
this.errorMessages = new ErrorMessagesComponent();
|
|
||||||
this.status = this.errorCodes.LOADING;
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
this.properties = properties;
|
|
||||||
this.subscriptions.push(this.route.params.subscribe(params => {
|
|
||||||
this.hidden = true;
|
|
||||||
console.debug(this.communityId);
|
|
||||||
if(!this.communityId){
|
|
||||||
this.communityId = ConnectHelper.getCommunityFromDomain(this.properties.domain);
|
|
||||||
}
|
|
||||||
if(!this.communityId) {
|
|
||||||
this.communityId = params['community'];
|
|
||||||
}
|
|
||||||
console.debug(this.communityId, params)
|
|
||||||
this.getEmailPreferences();
|
|
||||||
}));
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
getEmailPreferences() {
|
|
||||||
if(!Session.isLoggedIn()){
|
|
||||||
//this.userValidMessage = "User session has expired. Please login again.";
|
|
||||||
if(this.showSaveResetButtons) {
|
|
||||||
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.status = this.errorCodes.LOADING;
|
|
||||||
this.savedMessage = "";
|
|
||||||
|
|
||||||
if(this.communityId && this.communityId != "openaire") {
|
|
||||||
this.preferencesFor = "community";
|
|
||||||
this.subscriptions.push(this._mailPrefsService.getUserEmailPreferencesForCommunity(this.communityId, this.properties.claimsAPIURL).subscribe(
|
|
||||||
data => {
|
|
||||||
if(data.code == "204") {
|
|
||||||
this.status = this.errorCodes.NONE;
|
|
||||||
this.initialNotifications = [{notify: true, frequency:24, openaireId: this.communityId}];
|
|
||||||
} else {
|
|
||||||
this.initialNotifications = data.data;
|
|
||||||
}
|
|
||||||
this.notifications = JSON.parse(JSON.stringify( this.initialNotifications ));
|
|
||||||
|
|
||||||
this.status = this.errorCodes.DONE;
|
|
||||||
this.hidden = false;
|
|
||||||
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
this.hidden = false;
|
|
||||||
this.handleErrors(err);
|
|
||||||
this.handleError("Error getting user email preferences for community with id: "+this.communityId, err);
|
|
||||||
}
|
|
||||||
));
|
|
||||||
} else {
|
|
||||||
this.preferencesFor = "project";
|
|
||||||
this.subscriptions.push(this._mailPrefsService.getUserEmailPreferencesForOpenaire(this.properties.claimsAPIURL).subscribe(
|
|
||||||
data => {
|
|
||||||
|
|
||||||
if(data.code == "204") {
|
|
||||||
this.status = this.errorCodes.NONE;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
this.initialNotifications = data.data;
|
|
||||||
this.notifications = JSON.parse(JSON.stringify( this.initialNotifications ));
|
|
||||||
//this.notifications = this.initialNotifications.map(x => Object.assign({}, x));
|
|
||||||
//this.notifications = this.initialNotifications;
|
|
||||||
|
|
||||||
this.status = this.errorCodes.DONE;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
//console.info(err);
|
|
||||||
this.handleErrors(err);
|
|
||||||
this.handleError("Error getting user email preferences for openaire", err);
|
|
||||||
}
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
changeNotify(notification: any, checked: boolean, index: number) {
|
|
||||||
if(!Session.isLoggedIn()){
|
|
||||||
//this.userValidMessage = "User session has expired. Please login again.";
|
|
||||||
if(this.showSaveResetButtons) {
|
|
||||||
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.savedMessage = "";
|
|
||||||
this.status = this.errorCodes.DONE;
|
|
||||||
notification.notify = checked;
|
|
||||||
this.prefsChanged[index] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
changeFrequency(index: number) {
|
|
||||||
if(!Session.isLoggedIn()){
|
|
||||||
//this.userValidMessage = "User session has expired. Please login again.";
|
|
||||||
if(this.showSaveResetButtons) {
|
|
||||||
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.savedMessage = "";
|
|
||||||
this.status = this.errorCodes.DONE;
|
|
||||||
if(this.initialNotifications[index].frequency != this.notifications[index].frequency) {
|
|
||||||
this.prefsChanged[index] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
saveNotification(index: number) {
|
|
||||||
if(this.notifications.length > 0 && this.initialNotifications.length > 0) {
|
|
||||||
if(!Session.isLoggedIn()){
|
|
||||||
//this.userValidMessage = "User session has expired. Please login again.";
|
|
||||||
if(this.showSaveResetButtons) {
|
|
||||||
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(JSON.stringify(this.notifications[index]) != JSON.stringify(this.initialNotifications[index])) {
|
|
||||||
|
|
||||||
this.status = this.errorCodes.LOADING;
|
|
||||||
this.savedMessage = "";
|
|
||||||
|
|
||||||
this.subscriptions.push(this._mailPrefsService.saveUserEmailPreferences(this.notifications[index], this.properties.claimsAPIURL).subscribe(
|
|
||||||
data => {
|
|
||||||
this.initialNotifications[index] = JSON.parse(JSON.stringify( this.notifications[index] ));
|
|
||||||
|
|
||||||
this.status = this.errorCodes.DONE;
|
|
||||||
|
|
||||||
/*UIkit.notification({
|
|
||||||
message : '<strong>Your email preferences for '+this.notifications[index].openaireName+' have been successfully changed<strong>',
|
|
||||||
status : 'success',
|
|
||||||
timeout : 3000,
|
|
||||||
pos : 'top-center'
|
|
||||||
});*/
|
|
||||||
this.savedMessage = "Notification settings for claims saved!";
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
//console.log(err);
|
|
||||||
this.handleError("Error saving user email preferences: "+JSON.stringify(this.notifications[index]), err);
|
|
||||||
this.status = this.errorCodes.NOT_SAVED;
|
|
||||||
}
|
|
||||||
));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/*UIkit.notification({
|
|
||||||
message : '<strong>No changes selected for '+this.notifications[index].openaireName+' email preferences<strong>',
|
|
||||||
status : 'primary',
|
|
||||||
timeout : 3000,
|
|
||||||
pos : 'top-center'
|
|
||||||
});*/
|
|
||||||
this.savedMessage = "Notification settings for claims saved!";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
restoreNotification(index: number) {
|
|
||||||
if(!Session.isLoggedIn()){
|
|
||||||
//this.userValidMessage = "User session has expired. Please login again.";
|
|
||||||
if(this.showSaveResetButtons) {
|
|
||||||
this._router.navigate(['/user-info'], { queryParams: { "errorCode": LoginErrorCodes.NOT_VALID, "redirectUrl": this._router.url} });
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(this.notifications.length > 0 && this.initialNotifications.length > 0) {
|
|
||||||
this.status = this.errorCodes.LOADING;
|
|
||||||
this.savedMessage = "";
|
|
||||||
this.notifications[index] = JSON.parse(JSON.stringify( this.initialNotifications[index] ));
|
|
||||||
this.status = this.errorCodes.DONE;
|
|
||||||
this.prefsChanged[index] = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
prefsChanged(index: number) : boolean {
|
|
||||||
if(this.notifications.length > 0 && this.initialNotifications.length > 0) {
|
|
||||||
if(JSON.stringify(this.notifications[index]) != JSON.stringify(this.initialNotifications[index])) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if (subscription instanceof Subscriber) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
handleErrors(err){
|
|
||||||
//this.showErrorMessage = true;
|
|
||||||
//try{
|
|
||||||
var code = "";
|
|
||||||
if(!err.status) {
|
|
||||||
var error = err.json();
|
|
||||||
code = error.code;
|
|
||||||
} else {
|
|
||||||
code = err.status;
|
|
||||||
}
|
|
||||||
this.status = this.errorMessages.getErrorCode(code);
|
|
||||||
}
|
|
||||||
|
|
||||||
private handleError(message: string, error) {
|
|
||||||
console.error("User mail notification preferences Page (for claims): "+message, error);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//}catch (e) {
|
|
||||||
//console.log("Couldn't parse answer as json")
|
|
||||||
//this.showErrorMessage = true;
|
|
||||||
//}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
import { NgModule} from '@angular/core';
|
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { RouterModule } from '@angular/router';
|
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
||||||
|
|
||||||
import { MailPrefsComponent } from './mailPrefs.component';
|
|
||||||
import { MailPrefsService } from './mailPrefs.service';
|
|
||||||
import {ErrorMessagesModule} from '../../utils/errorMessages.module';
|
|
||||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
CommonModule, RouterModule, FormsModule, ReactiveFormsModule, ErrorMessagesModule, MatSlideToggleModule
|
|
||||||
],
|
|
||||||
declarations: [
|
|
||||||
MailPrefsComponent
|
|
||||||
],
|
|
||||||
providers:[MailPrefsService],
|
|
||||||
exports: [
|
|
||||||
MailPrefsComponent
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class MailPrefsModule { }
|
|
|
@ -15,9 +15,10 @@ import {LoadingModule} from "../../utils/loading/loading.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
ClassesRoutingModule,
|
||||||
CommonModule, RouterModule, FormsModule,
|
CommonModule, RouterModule, FormsModule,
|
||||||
AlertModalModule, ReactiveFormsModule, AdminToolServiceModule, InputModule,
|
AlertModalModule, ReactiveFormsModule, AdminToolServiceModule, InputModule,
|
||||||
AdminTabsModule, PageContentModule, ClassesRoutingModule, SearchInputModule, IconsModule, LoadingModule
|
AdminTabsModule, PageContentModule, SearchInputModule, IconsModule, LoadingModule
|
||||||
],
|
],
|
||||||
declarations: [DivIdsComponent],
|
declarations: [DivIdsComponent],
|
||||||
exports: [DivIdsComponent]
|
exports: [DivIdsComponent]
|
||||||
|
|
|
@ -16,9 +16,10 @@ import {PageContentModule} from '../sharedComponents/page-content/page-content.m
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
ClassHelpContentFormRoutingModule,
|
||||||
CommonModule, FormsModule, RouterModule,
|
CommonModule, FormsModule, RouterModule,
|
||||||
SafeHtmlPipeModule, CKEditorModule,
|
SafeHtmlPipeModule, CKEditorModule,
|
||||||
AlertModalModule, ReactiveFormsModule, ClassHelpContentFormRoutingModule, AdminToolServiceModule, InputModule, MatSlideToggleModule, IconsModule, LoadingModule, PageContentModule
|
AlertModalModule, ReactiveFormsModule, AdminToolServiceModule, InputModule, MatSlideToggleModule, IconsModule, LoadingModule, PageContentModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
ClassContentFormComponent
|
ClassContentFormComponent
|
||||||
|
|
|
@ -19,8 +19,9 @@ import {PageContentModule} from '../sharedComponents/page-content/page-content.m
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
ClassHelpContentsRoutingModule,
|
||||||
CommonModule, RouterModule, FormsModule, SafeHtmlPipeModule,
|
CommonModule, RouterModule, FormsModule, SafeHtmlPipeModule,
|
||||||
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, AdminToolServiceModule, InputModule, ClassHelpContentsRoutingModule,
|
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, AdminToolServiceModule, InputModule,
|
||||||
SearchInputModule, IconsModule, LoadingModule, HTMLToStringPipeModule, PageContentModule
|
SearchInputModule, IconsModule, LoadingModule, HTMLToStringPipeModule, PageContentModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
|
|
|
@ -17,8 +17,9 @@ import {LogoUrlPipeModule} from "../../utils/pipes/logoUrlPipe.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
EntitiesRoutingModule,
|
||||||
CommonModule, RouterModule, FormsModule, AdminToolServiceModule,
|
CommonModule, RouterModule, FormsModule, AdminToolServiceModule,
|
||||||
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, InputModule, PageContentModule, AdminTabsModule, EntitiesRoutingModule, SearchInputModule, IconsModule, LoadingModule, LogoUrlPipeModule
|
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, InputModule, PageContentModule, AdminTabsModule, SearchInputModule, IconsModule, LoadingModule, LogoUrlPipeModule
|
||||||
],
|
],
|
||||||
declarations: [EntitiesComponent],
|
declarations: [EntitiesComponent],
|
||||||
exports: [EntitiesComponent]
|
exports: [EntitiesComponent]
|
||||||
|
|
|
@ -16,9 +16,10 @@ import {MatSlideToggleModule} from "@angular/material/slide-toggle";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
PageHelpContentFormRoutingModule,
|
||||||
CommonModule, FormsModule, RouterModule,
|
CommonModule, FormsModule, RouterModule,
|
||||||
SafeHtmlPipeModule, CKEditorModule,
|
SafeHtmlPipeModule, CKEditorModule,
|
||||||
AlertModalModule, ReactiveFormsModule, PageHelpContentFormRoutingModule, AdminToolServiceModule, InputModule, IconsModule, PageContentModule, LoadingModule, MatSlideToggleModule
|
AlertModalModule, ReactiveFormsModule, AdminToolServiceModule, InputModule, IconsModule, PageContentModule, LoadingModule, MatSlideToggleModule
|
||||||
],
|
],
|
||||||
declarations: [PageContentFormComponent],
|
declarations: [PageContentFormComponent],
|
||||||
exports: [PageContentFormComponent]
|
exports: [PageContentFormComponent]
|
||||||
|
|
|
@ -17,8 +17,9 @@ import {HTMLToStringPipeModule} from '../../utils/pipes/HTMLToStringPipe.module'
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
PageHelpContentsRoutingModule,
|
||||||
CommonModule, RouterModule, FormsModule, SafeHtmlPipeModule,
|
CommonModule, RouterModule, FormsModule, SafeHtmlPipeModule,
|
||||||
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, AdminToolServiceModule, InputModule, PageHelpContentsRoutingModule, PageContentModule,
|
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, AdminToolServiceModule, InputModule, PageContentModule,
|
||||||
SearchInputModule, IconsModule, LoadingModule, HTMLToStringPipeModule
|
SearchInputModule, IconsModule, LoadingModule, HTMLToStringPipeModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
|
|
|
@ -18,8 +18,9 @@ import {LogoUrlPipeModule} from '../../utils/pipes/logoUrlPipe.module';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
MenuRoutingModule,
|
||||||
CommonModule, RouterModule, FormsModule, AdminToolServiceModule,
|
CommonModule, RouterModule, FormsModule, AdminToolServiceModule,
|
||||||
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, InputModule, PageContentModule, AdminTabsModule, MenuRoutingModule, SearchInputModule, IconsModule, LoadingModule,
|
AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, InputModule, PageContentModule, AdminTabsModule, SearchInputModule, IconsModule, LoadingModule,
|
||||||
TransitionGroupModule, LogoUrlPipeModule
|
TransitionGroupModule, LogoUrlPipeModule
|
||||||
],
|
],
|
||||||
declarations: [MenuComponent],
|
declarations: [MenuComponent],
|
||||||
|
|
|
@ -20,8 +20,9 @@ import {LogoUrlPipeModule} from "../../utils/pipes/logoUrlPipe.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
PagesRoutingModule,
|
||||||
CommonModule, RouterModule, FormsModule, AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, AdminToolServiceModule, InputModule,
|
CommonModule, RouterModule, FormsModule, AlertModalModule, ReactiveFormsModule, MatSlideToggleModule, AdminToolServiceModule, InputModule,
|
||||||
MatAutocompleteModule, MatFormFieldModule, MatChipsModule, AdminTabsModule, PageContentModule, PagesRoutingModule, SearchInputModule, IconsModule, LoadingModule, LogoUrlPipeModule
|
MatAutocompleteModule, MatFormFieldModule, MatChipsModule, AdminTabsModule, PageContentModule, SearchInputModule, IconsModule, LoadingModule, LogoUrlPipeModule
|
||||||
],
|
],
|
||||||
declarations: [PagesComponent],
|
declarations: [PagesComponent],
|
||||||
exports: [PagesComponent]
|
exports: [PagesComponent]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import {Option} from "../../sharedComponents/input/input.component";
|
import {Option} from "../../sharedComponents/input/input.component";
|
||||||
import {StakeholderEntities} from "../../monitor/entities/stakeholder";
|
import {StakeholderConfiguration} from "../../monitor-admin/utils/indicator-utils";
|
||||||
|
|
||||||
export class PortalUtils {
|
export class PortalUtils {
|
||||||
|
|
||||||
|
@ -8,10 +8,11 @@ export class PortalUtils{
|
||||||
{value: 'connect', label: 'Connect portal'},
|
{value: 'connect', label: 'Connect portal'},
|
||||||
{value: 'monitor', label: 'Monitor portal'},
|
{value: 'monitor', label: 'Monitor portal'},
|
||||||
{value: 'community', label: 'Community Gateway'},
|
{value: 'community', label: 'Community Gateway'},
|
||||||
{value: 'funder', label: StakeholderEntities.FUNDER + ' Dashboard'},
|
{value: 'funder', label: StakeholderConfiguration.ENTITIES.funder + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
{value: 'ri', label: StakeholderEntities.RI + ' Dashboard'},
|
{value: 'ri', label: StakeholderConfiguration.ENTITIES.ri + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
{value: 'organization', label: StakeholderEntities.ORGANIZATION + ' Dashboard'},
|
{value: 'organization', label: StakeholderConfiguration.ENTITIES.organization + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
{value: 'project', label: StakeholderEntities.PROJECT + ' Dashboard'}
|
{value: 'project', label: StakeholderConfiguration.ENTITIES.project + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
|
{value: 'country', label: StakeholderConfiguration.ENTITIES.country + ' ' + StakeholderConfiguration.ENTITIES.stakeholder},
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,9 +15,10 @@ import {LoadingModule} from "../../utils/loading/loading.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
PortalsRoutingModule,
|
||||||
CommonModule, FormsModule, AlertModalModule,
|
CommonModule, FormsModule, AlertModalModule,
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
RouterModule, AdminToolServiceModule, InputModule, AdminTabsModule, PageContentModule, PortalsRoutingModule, IconsModule, SearchInputModule, LoadingModule
|
RouterModule, AdminToolServiceModule, InputModule, AdminTabsModule, PageContentModule, IconsModule, SearchInputModule, LoadingModule
|
||||||
],
|
],
|
||||||
declarations: [PortalsComponent],
|
declarations: [PortalsComponent],
|
||||||
exports: [PortalsComponent]
|
exports: [PortalsComponent]
|
||||||
|
|
|
@ -83,7 +83,11 @@ export class LayoutService {
|
||||||
* Add hasStickyHeaderOnMobile: true in order to activate uk-sticky in header of mobile/tablet devices.
|
* Add hasStickyHeaderOnMobile: true in order to activate uk-sticky in header of mobile/tablet devices.
|
||||||
* */
|
* */
|
||||||
private hasStickyHeaderOnMobileSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
private hasStickyHeaderOnMobileSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
|
||||||
|
/**
|
||||||
|
* Add a class in root element of the html. (For different theme apply)
|
||||||
|
* Handle it manually in the component, it doesn't use data
|
||||||
|
* */
|
||||||
|
private rootClassSubject: BehaviorSubject<string> = new BehaviorSubject<string>(null);
|
||||||
private subscriptions: any[] = [];
|
private subscriptions: any[] = [];
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
|
@ -329,4 +333,14 @@ export class LayoutService {
|
||||||
setHasStickyHeaderOnMobile(value: boolean) {
|
setHasStickyHeaderOnMobile(value: boolean) {
|
||||||
this.hasStickyHeaderOnMobileSubject.next(value);
|
this.hasStickyHeaderOnMobileSubject.next(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get rootClass(): Observable<string> {
|
||||||
|
return this.rootClassSubject.asObservable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setRootClass(value: string = null): void {
|
||||||
|
if(this.rootClassSubject.value != value) {
|
||||||
|
this.rootClassSubject.next(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
[class.hide-on-close]="backItem.icon">{{backItem.title}}</span>
|
[class.hide-on-close]="backItem.icon">{{backItem.title}}</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<div *ngIf="logoURL" id="sidebar_logo" class="uk-margin-top">
|
||||||
|
<img [src]="logoURL">
|
||||||
|
</div>
|
||||||
<div *ngIf="items.length > 0" class="menu_section uk-margin-large-top" [class.mobile]="mobile" style="min-height: 30vh">
|
<div *ngIf="items.length > 0" class="menu_section uk-margin-large-top" [class.mobile]="mobile" style="min-height: 30vh">
|
||||||
<ul #nav class="uk-list uk-nav" [class.uk-list-large]="mobile"
|
<ul #nav class="uk-list uk-nav" [class.uk-list-large]="mobile"
|
||||||
[class.uk-nav-default]="!mobile" [class.uk-nav-primary]="mobile" uk-nav="duration: 400">
|
[class.uk-nav-default]="!mobile" [class.uk-nav-primary]="mobile" uk-nav="duration: 400">
|
||||||
|
|
|
@ -28,6 +28,7 @@ export class SideBarComponent implements OnInit, AfterViewInit, OnDestroy, OnCha
|
||||||
@Input() activeSubItem: string = '';
|
@Input() activeSubItem: string = '';
|
||||||
@Input() backItem: MenuItem = null;
|
@Input() backItem: MenuItem = null;
|
||||||
@Input() queryParamsHandling;
|
@Input() queryParamsHandling;
|
||||||
|
@Input() logoURL: string;
|
||||||
@ViewChild("nav") nav: ElementRef;
|
@ViewChild("nav") nav: ElementRef;
|
||||||
@ViewChild("sidebar_offcanvas") sidebar_offcanvas: ElementRef;
|
@ViewChild("sidebar_offcanvas") sidebar_offcanvas: ElementRef;
|
||||||
public offset: number;
|
public offset: number;
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
import {ChangeDetectorRef, Directive, OnInit} from "@angular/core";
|
||||||
|
import {BaseComponent} from "../../../sharedComponents/base/base.component";
|
||||||
|
import {MenuItem} from "../../../sharedComponents/menu";
|
||||||
|
import {LayoutService} from "./layout.service";
|
||||||
|
|
||||||
|
@Directive()
|
||||||
|
export class SidebarBaseComponent extends BaseComponent implements OnInit {
|
||||||
|
hasSidebar: boolean = false;
|
||||||
|
hasInternalSidebar: boolean = false;
|
||||||
|
hasAdminMenu: boolean = false;
|
||||||
|
/**
|
||||||
|
* Menu Items
|
||||||
|
* */
|
||||||
|
sideBarItems: MenuItem[] = [];
|
||||||
|
adminMenuItems: MenuItem[] = [];
|
||||||
|
backItem: MenuItem = null;
|
||||||
|
|
||||||
|
protected layoutService: LayoutService;
|
||||||
|
protected cdr: ChangeDetectorRef;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.subscriptions.push(this.layoutService.hasSidebar.subscribe(hasSidebar => {
|
||||||
|
this.hasSidebar = hasSidebar;
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
}));
|
||||||
|
this.subscriptions.push(this.layoutService.hasInternalSidebar.subscribe(hasInternalSidebar => {
|
||||||
|
this.hasInternalSidebar = hasInternalSidebar;
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
}));
|
||||||
|
this.subscriptions.push(this.layoutService.hasAdminMenu.subscribe(hasAdminMenu => {
|
||||||
|
this.hasAdminMenu = hasAdminMenu;
|
||||||
|
this.cdr.detectChanges();
|
||||||
|
}));
|
||||||
|
this.layoutService.setOpen(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public get open() {
|
||||||
|
return this.layoutService.open;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get hover() {
|
||||||
|
return this.layoutService.hover;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,14 +8,7 @@ import {
|
||||||
SimpleChanges,
|
SimpleChanges,
|
||||||
ViewChild
|
ViewChild
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import {
|
import {UntypedFormArray, UntypedFormBuilder, UntypedFormGroup, ValidatorFn, Validators} from '@angular/forms';
|
||||||
UntypedFormArray,
|
|
||||||
UntypedFormBuilder,
|
|
||||||
UntypedFormControl,
|
|
||||||
UntypedFormGroup,
|
|
||||||
ValidatorFn,
|
|
||||||
Validators
|
|
||||||
} from '@angular/forms';
|
|
||||||
import {AlertModal} from "../../../utils/modal/alert";
|
import {AlertModal} from "../../../utils/modal/alert";
|
||||||
import {UserRegistryService} from "../../../services/user-registry.service";
|
import {UserRegistryService} from "../../../services/user-registry.service";
|
||||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
import {EnvProperties} from "../../../utils/properties/env-properties";
|
||||||
|
@ -29,7 +22,6 @@ import {forkJoin, of, Subscription} from "rxjs";
|
||||||
import {NotificationHandler} from "../../../utils/notification-handler";
|
import {NotificationHandler} from "../../../utils/notification-handler";
|
||||||
import {ClearCacheService} from "../../../services/clear-cache.service";
|
import {ClearCacheService} from "../../../services/clear-cache.service";
|
||||||
import {catchError, map, tap} from "rxjs/operators";
|
import {catchError, map, tap} from "rxjs/operators";
|
||||||
import notification = CKEDITOR.plugins.notification;
|
|
||||||
import {InputComponent} from "../../../sharedComponents/input/input.component";
|
import {InputComponent} from "../../../sharedComponents/input/input.component";
|
||||||
|
|
||||||
class InvitationResponse {
|
class InvitationResponse {
|
||||||
|
@ -148,9 +140,8 @@ export class RoleUsersComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
updateLists() {
|
updateLists() {
|
||||||
this.loadActive = true;
|
this.loadActive = true;
|
||||||
this.loadPending = true;
|
this.loadPending = true;
|
||||||
this.subs.push(this.userRegistryService.getActive(this.type, this.id, this.role).subscribe(users => {
|
this.subs.push(this.userRegistryService.getActive(this.type, this.id, this.role, true).subscribe(users => {
|
||||||
this.active = users;
|
this.active = users;
|
||||||
// users.forEach(user => this.active.push(user));
|
|
||||||
this.filterActiveBySearch(this.filterForm.value.active);
|
this.filterActiveBySearch(this.filterForm.value.active);
|
||||||
this.loadActive = false;
|
this.loadActive = false;
|
||||||
this.exists = true;
|
this.exists = true;
|
||||||
|
@ -162,7 +153,7 @@ export class RoleUsersComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
}
|
}
|
||||||
this.loadActive = false;
|
this.loadActive = false;
|
||||||
}));
|
}));
|
||||||
this.subs.push(this.userRegistryService.getPending(this.type, this.id, this.role).subscribe(users => {
|
this.subs.push(this.userRegistryService.getPending(this.type, this.id, this.role, true).subscribe(users => {
|
||||||
this.pending = users;
|
this.pending = users;
|
||||||
this.filterPendingBySearch(this.filterForm.value.pending);
|
this.filterPendingBySearch(this.filterForm.value.pending);
|
||||||
this.loadPending = false;
|
this.loadPending = false;
|
||||||
|
@ -214,8 +205,8 @@ export class RoleUsersComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
this.createRoleModal.okButtonLeft = false;
|
this.createRoleModal.okButtonLeft = false;
|
||||||
this.createRoleModal.okButtonText = 'Create';
|
this.createRoleModal.okButtonText = 'Create';
|
||||||
this.roleFb = this.fb.group({
|
this.roleFb = this.fb.group({
|
||||||
name: this.fb.control(Role.mapType(this.type) + '.' + this.id, Validators.required),
|
name: this.fb.control(Role.roleName(this.type, this.id), Validators.required),
|
||||||
description: this.fb.control(Role.mapType(this.type) + ' ' + this.id, Validators.required)
|
description: this.fb.control(Role.roleName(this.type, this.id), Validators.required)
|
||||||
});
|
});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.roleFb.get('name').disable();
|
this.roleFb.get('name').disable();
|
||||||
|
@ -285,7 +276,7 @@ export class RoleUsersComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
if (!this.pending.includes(response.email)) {
|
if (!this.pending.includes(response.email)) {
|
||||||
this.pending.push(response.email);
|
this.pending.push(response.email);
|
||||||
}
|
}
|
||||||
if(this.notificationFn) {
|
if(this.notificationFn && properties.notificationsAPIURL) {
|
||||||
return this.notificationService.sendNotification(this.notificationFn(this.name, response.email, this.role, response.invitation)).pipe(map(notification => {
|
return this.notificationService.sendNotification(this.notificationFn(this.name, response.email, this.role, response.invitation)).pipe(map(notification => {
|
||||||
return notification;
|
return notification;
|
||||||
}), tap(() => {
|
}), tap(() => {
|
||||||
|
|
|
@ -105,7 +105,7 @@ export class SubscribersComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
|
|
||||||
updateList() {
|
updateList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.subs.push( this.userRegistryService.getActive(this.type, this.id, 'member').subscribe(users => {
|
this.subs.push( this.userRegistryService.getActive(this.type, this.id, 'member', true).subscribe(users => {
|
||||||
this.subscribers = users;
|
this.subscribers = users;
|
||||||
this.filterBySearch(this.filterForm.value.keyword);
|
this.filterBySearch(this.filterForm.value.keyword);
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
@ -141,8 +141,8 @@ export class SubscribersComponent implements OnInit, OnDestroy, OnChanges {
|
||||||
this.createRoleModal.okButtonLeft = false;
|
this.createRoleModal.okButtonLeft = false;
|
||||||
this.createRoleModal.okButtonText = 'create';
|
this.createRoleModal.okButtonText = 'create';
|
||||||
this.roleFb = this.fb.group({
|
this.roleFb = this.fb.group({
|
||||||
name: this.fb.control(Role.mapType(this.type) + '.' + this.id, Validators.required),
|
name: this.fb.control(Role.roleName(this.type, this.id), Validators.required),
|
||||||
description: this.fb.control(Role.mapType(this.type) + ' ' + this.id, Validators.required)
|
description: this.fb.control(Role.roleName(this.type, this.id), Validators.required)
|
||||||
});
|
});
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.roleFb.get('name').disable();
|
this.roleFb.get('name').disable();
|
||||||
|
|
|
@ -15,7 +15,7 @@ import {FullScreenModalComponent} from '../utils/modal/full-screen-modal/full-sc
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'deposit-first-page',
|
selector: 'deposit-first-page',
|
||||||
template: `
|
template: `
|
||||||
<div class="deposit">
|
<div>
|
||||||
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
<div class="uk-container uk-container-large uk-section uk-section-small uk-padding-remove-bottom">
|
||||||
<div class="uk-padding-small uk-padding-remove-horizontal">
|
<div class="uk-padding-small uk-padding-remove-horizontal">
|
||||||
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>
|
||||||
|
|
|
@ -5,7 +5,6 @@ import { CommonModule } from '@angular/common';
|
||||||
import { FormsModule } from '@angular/forms';
|
import { FormsModule } from '@angular/forms';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import {PiwikServiceModule} from '../utils/piwik/piwikService.module';
|
|
||||||
import {HelperModule} from '../utils/helper/helper.module';
|
import {HelperModule} from '../utils/helper/helper.module';
|
||||||
import {Schema2jsonldModule} from '../sharedComponents/schema2jsonld/schema2jsonld.module';
|
import {Schema2jsonldModule} from '../sharedComponents/schema2jsonld/schema2jsonld.module';
|
||||||
import { SEOServiceModule } from '../sharedComponents/SEO/SEOService.module';
|
import { SEOServiceModule } from '../sharedComponents/SEO/SEOService.module';
|
||||||
|
@ -18,7 +17,6 @@ import {FullScreenModalModule} from '../utils/modal/full-screen-modal/full-scree
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule,
|
CommonModule, FormsModule,
|
||||||
RouterModule,
|
RouterModule,
|
||||||
PiwikServiceModule,
|
|
||||||
HelperModule,
|
HelperModule,
|
||||||
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, SearchInputModule,
|
Schema2jsonldModule, SEOServiceModule, BreadcrumbsModule, SearchInputModule,
|
||||||
FullScreenModalModule
|
FullScreenModalModule
|
||||||
|
|
|
@ -9,7 +9,6 @@ import {SearchResultsModule } from '../searchPages/searchUtils/searchResults.mod
|
||||||
|
|
||||||
import {DataProvidersServiceModule} from '../services/dataProvidersService.module';
|
import {DataProvidersServiceModule} from '../services/dataProvidersService.module';
|
||||||
import {SearchFormModule} from '../searchPages/searchUtils/searchForm.module';
|
import {SearchFormModule} from '../searchPages/searchUtils/searchForm.module';
|
||||||
import {IsRouteEnabled} from '../error/isRouteEnabled.guard';
|
|
||||||
import {SearchDataProvidersModule} from "../searchPages/searchDataProviders.module";
|
import {SearchDataProvidersModule} from "../searchPages/searchDataProviders.module";
|
||||||
import {BreadcrumbsModule} from "../utils/breadcrumbs/breadcrumbs.module";
|
import {BreadcrumbsModule} from "../utils/breadcrumbs/breadcrumbs.module";
|
||||||
import {SearchInputModule} from "../sharedComponents/search-input/search-input.module";
|
import {SearchInputModule} from "../sharedComponents/search-input/search-input.module";
|
||||||
|
@ -25,7 +24,7 @@ import {SearchInputModule} from "../sharedComponents/search-input/search-input.m
|
||||||
declarations: [
|
declarations: [
|
||||||
SearchDataprovidersToDepositComponent
|
SearchDataprovidersToDepositComponent
|
||||||
],
|
],
|
||||||
providers:[ IsRouteEnabled],
|
providers:[],
|
||||||
exports: [
|
exports: [
|
||||||
SearchDataprovidersToDepositComponent
|
SearchDataprovidersToDepositComponent
|
||||||
]
|
]
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<li *ngFor="let result of results">
|
<li *ngFor="let result of results">
|
||||||
<result-preview [properties]="properties" [showOrganizations]="true"
|
<result-preview [properties]="properties" [showOrganizations]="true"
|
||||||
[showSubjects]="true" [result]="getResultPreview(result)" [promoteWebsiteURL]="true"
|
[showSubjects]="true" [result]="getResultPreview(result)" [promoteWebsiteURL]="true"
|
||||||
[isCard]="true" deposit="true">
|
[isCard]="true" deposit="true" [isMobile]="isMobile">
|
||||||
</result-preview>
|
</result-preview>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -19,6 +19,7 @@ export class SearchResultsInDepositComponent {
|
||||||
@Input() status: number;
|
@Input() status: number;
|
||||||
@Input() type: string;
|
@Input() type: string;
|
||||||
@Input() properties:EnvProperties;
|
@Input() properties:EnvProperties;
|
||||||
|
@Input() isMobile: boolean = false;
|
||||||
|
|
||||||
|
|
||||||
public urlParam: string;
|
public urlParam: string;
|
||||||
|
|
|
@ -11,7 +11,7 @@ import * as url from "url";
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ErrorInterceptorService implements HttpInterceptor {
|
export class ErrorInterceptorService implements HttpInterceptor {
|
||||||
|
|
||||||
private static UNAUTHORIZED_WHITELIST = [properties.userInfoUrl, properties.orcidAPIURL, properties.registryUrl? (properties.registryUrl + 'verification/'):null, properties.eoscDataTransferAPI].filter(value => !!value);
|
private static UNAUTHORIZED_WHITELIST = [properties.orcidAPIURL, properties.registryUrl? (properties.registryUrl + 'verification/'):null, properties.eoscDataTransferAPI].filter(value => !!value);
|
||||||
private url: string = null;
|
private url: string = null;
|
||||||
|
|
||||||
constructor(private router: Router) {
|
constructor(private router: Router) {
|
||||||
|
|
|
@ -6,7 +6,9 @@ import {ConfigurationService} from '../utils/configuration/configuration.service
|
||||||
import {ConnectHelper} from '../connect/connectHelper';
|
import {ConnectHelper} from '../connect/connectHelper';
|
||||||
import {properties} from "../../../environments/environment";
|
import {properties} from "../../../environments/environment";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable({
|
||||||
|
providedIn: 'root'
|
||||||
|
})
|
||||||
export class IsRouteEnabled {
|
export class IsRouteEnabled {
|
||||||
|
|
||||||
constructor(private router: Router,
|
constructor(private router: Router,
|
||||||
|
|
|
@ -7,9 +7,9 @@
|
||||||
<div 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-container uk-container-large uk-section" uk-scrollspy="target: [uk-scrollspy-class]; cls: uk-animation-slide-bottom-medium; delay: 200">
|
||||||
<div class="uk-grid uk-grid-large uk-grid-stack uk-padding-small" uk-grid>
|
<div class="uk-grid uk-grid-large uk-grid-stack uk-padding-small" uk-grid>
|
||||||
<div class="uk-width-3-5@m uk-width-1-1@s uk-flex uk-flex-column uk-flex-center">
|
<div class="uk-width-3-5@m uk-width-1-1@s uk-flex uk-flex-column uk-flex-center">
|
||||||
<span class="uk-align-left uk-margin-remove-bottom">
|
<!-- <span class="uk-align-left uk-margin-remove-bottom">-->
|
||||||
<span uk-scrollspy-class class="uk-text-large" style="color: #EEB204">Beta</span>
|
<!-- <span uk-scrollspy-class class="uk-text-large" style="color: #EEB204">Beta</span>-->
|
||||||
</span>
|
<!-- </span>-->
|
||||||
<div style="max-width: 600px;">
|
<div style="max-width: 600px;">
|
||||||
<h1 uk-scrollspy-class class="uk-h1 uk-margin-remove-top">
|
<h1 uk-scrollspy-class class="uk-h1 uk-margin-remove-top">
|
||||||
<span>Fields of Science <span class="uk-text-primary">.</span></span>
|
<span>Fields of Science <span class="uk-text-primary">.</span></span>
|
||||||
|
@ -113,7 +113,7 @@
|
||||||
<div *ngFor="let subChild of child.children" style="margin-bottom: 5px;">
|
<div *ngFor="let subChild of child.children" style="margin-bottom: 5px;">
|
||||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subChild)"
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subChild)"
|
||||||
class="uk-link-text">
|
class="uk-link-text">
|
||||||
{{subChild.label}}
|
{{searchFieldsHelper.getFosParameter() == 'foslabel' ? subChild.label : subChild.id}}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -139,7 +139,7 @@
|
||||||
</h3>
|
</h3>
|
||||||
<div *ngFor="let subSubItem of subItem.children" style="margin-bottom: 5px;">
|
<div *ngFor="let subSubItem of subItem.children" style="margin-bottom: 5px;">
|
||||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subSubItem)"
|
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subSubItem)"
|
||||||
class="uk-link-text" [innerHTML]="highlightKeyword(subSubItem.label)">
|
class="uk-link-text" [innerHTML]="highlightKeyword(searchFieldsHelper.getFosParameter() == 'foslabel' ? subSubItem.label : subSubItem.id)">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -15,6 +15,7 @@ import {PiwikService} from "../utils/piwik/piwik.service";
|
||||||
import {debounceTime, distinctUntilChanged} from "rxjs/operators";
|
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";
|
||||||
|
|
||||||
declare var UIkit;
|
declare var UIkit;
|
||||||
|
|
||||||
|
@ -46,6 +47,7 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
private timeout: Timeout;
|
private timeout: Timeout;
|
||||||
@ViewChild('tabs') tabs: ElementRef;
|
@ViewChild('tabs') tabs: ElementRef;
|
||||||
public sliderInit: boolean = false;
|
public sliderInit: boolean = false;
|
||||||
|
private searchFieldsHelper: SearchFields = new SearchFields();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private vocabulariesService: ISVocabulariesService,
|
private vocabulariesService: ISVocabulariesService,
|
||||||
|
@ -217,6 +219,6 @@ export class FosComponent implements OnInit, OnDestroy {
|
||||||
|
|
||||||
public buildFosQueryParam(fos) {
|
public buildFosQueryParam(fos) {
|
||||||
// return {'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)};
|
// return {'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)};
|
||||||
return (properties.environment !== 'production' ? ({'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)}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,13 +2,11 @@ import {CommonModule} from "@angular/common";
|
||||||
import {NgModule} from "@angular/core";
|
import {NgModule} from "@angular/core";
|
||||||
import {FormsModule} from "@angular/forms";
|
import {FormsModule} from "@angular/forms";
|
||||||
import {RouterModule} from "@angular/router";
|
import {RouterModule} from "@angular/router";
|
||||||
import {PreviousRouteRecorder} from "../utils/piwik/previousRouteRecorder.guard";
|
|
||||||
import {IconsModule} from "../utils/icons/icons.module";
|
import {IconsModule} from "../utils/icons/icons.module";
|
||||||
import {BreadcrumbsModule} from "../utils/breadcrumbs/breadcrumbs.module";
|
import {BreadcrumbsModule} from "../utils/breadcrumbs/breadcrumbs.module";
|
||||||
import {Schema2jsonldModule} from "../sharedComponents/schema2jsonld/schema2jsonld.module";
|
import {Schema2jsonldModule} from "../sharedComponents/schema2jsonld/schema2jsonld.module";
|
||||||
import {SearchInputModule} from "../sharedComponents/search-input/search-input.module";
|
import {SearchInputModule} from "../sharedComponents/search-input/search-input.module";
|
||||||
import {SEOServiceModule} from "../sharedComponents/SEO/SEOService.module";
|
import {SEOServiceModule} from "../sharedComponents/SEO/SEOService.module";
|
||||||
import {PiwikService} from "../utils/piwik/piwik.service";
|
|
||||||
|
|
||||||
import {FosRoutingModule} from './fos-routing.module';
|
import {FosRoutingModule} from './fos-routing.module';
|
||||||
import {FosComponent} from './fos.component';
|
import {FosComponent} from './fos.component';
|
||||||
|
@ -22,9 +20,7 @@ import {FosComponent} from './fos.component';
|
||||||
declarations: [
|
declarations: [
|
||||||
FosComponent
|
FosComponent
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [],
|
||||||
PreviousRouteRecorder, PiwikService
|
|
||||||
],
|
|
||||||
exports: [
|
exports: [
|
||||||
FosComponent
|
FosComponent
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,225 +0,0 @@
|
||||||
import {
|
|
||||||
Component,
|
|
||||||
ElementRef,
|
|
||||||
EventEmitter,
|
|
||||||
HostListener,
|
|
||||||
Input,
|
|
||||||
OnDestroy,
|
|
||||||
OnInit,
|
|
||||||
Output,
|
|
||||||
ViewChild
|
|
||||||
} from "@angular/core";
|
|
||||||
import {Annotation, AnnotationService} from "./annotation.service";
|
|
||||||
import {ResultLandingInfo} from "../../utils/entities/resultLandingInfo";
|
|
||||||
import {EnvProperties} from "../../utils/properties/env-properties";
|
|
||||||
import {properties} from "../../../../environments/environment";
|
|
||||||
import {UserManagementService} from "../../services/user-management.service";
|
|
||||||
import {COOKIE, Session, User} from "../../login/utils/helper.class";
|
|
||||||
import {Subscriber} from "rxjs";
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'b2note',
|
|
||||||
template: `
|
|
||||||
<div *ngIf="annotations && annotations.length > 0" class="sideInfoTitle uk-margin-small-bottom">Annotations</div>
|
|
||||||
<div class="b2note">
|
|
||||||
<form #form ngNoForm *ngIf="pid && isLoggedIn"
|
|
||||||
[action]="properties.b2noteAPIURL + 'widget'"
|
|
||||||
method="post"
|
|
||||||
target="b2note_iframe"
|
|
||||||
class="uk-padding-small uk-padding-remove-vertical">
|
|
||||||
<!--URL of the annotated record-->
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
name="recordurl_tofeed"
|
|
||||||
[value]="url">
|
|
||||||
<!--PID of the annotated record-->
|
|
||||||
<input
|
|
||||||
type="hidden"
|
|
||||||
name="pid_tofeed"
|
|
||||||
[value]="pid">
|
|
||||||
</form>
|
|
||||||
<loading *ngIf="loading" class="uk-margin-medium-top"></loading>
|
|
||||||
<ul *ngIf="annotations && !loading" class="uk-list uk-list-divider">
|
|
||||||
<li *ngFor="let annotation of annotations.slice(0, visibleAnnotations); let i=index" uk-grid
|
|
||||||
class="uk-flex uk-flex-top uk-margin-remove-left">
|
|
||||||
<div [ngClass]="annotation.type" class="type">{{annotation.type}}</div>
|
|
||||||
<div [class.uk-width-1-3]="annotation.targets"
|
|
||||||
[class.uk-width-1-6@s]="annotation.targets">{{annotation.text}}</div>
|
|
||||||
<ul class="uk-width-expand uk-list uk-margin-remove-top" *ngIf="annotation.targets">
|
|
||||||
<li *ngFor="let target of annotation.targets.slice(0, annotation.targetSize)">
|
|
||||||
<a *ngIf="target.url" [href]="target.url" target="_blank">{{target.id}}</a>
|
|
||||||
<a *ngIf="!target.url" routerLink="/search/result"
|
|
||||||
[queryParams]="searchPid(target.id)">{{target.id}}</a>
|
|
||||||
</li>
|
|
||||||
<li *ngIf="annotation.targetSize < annotation.targets.length"><a
|
|
||||||
(click)="open(i)">+ {{annotation.targets.length - annotation.targetSize}}
|
|
||||||
more</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<div *ngIf="visibleAnnotations < annotations.length" class="uk-margin-medium-top uk-text-center">
|
|
||||||
<button class="uk-button uk-button-primary"
|
|
||||||
(click)="visibleAnnotations = (visibleAnnotations + annotationSize)">Load More
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div [class.uk-hidden]="!visible">
|
|
||||||
<div class="widget-container" cdkDrag>
|
|
||||||
<button type="button" class="close" aria-label="Close" (click)="toggleAnnotation($event)">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
<iframe #iframe id="b2note_iframe" name="b2note_iframe" class="b2note-iframe">
|
|
||||||
</iframe>
|
|
||||||
</div>
|
|
||||||
</div>`,
|
|
||||||
styleUrls: ['annotation.css']
|
|
||||||
})
|
|
||||||
export class AnnotationComponent implements OnInit, OnDestroy {
|
|
||||||
|
|
||||||
@Input()
|
|
||||||
public landingInfo: ResultLandingInfo = null;
|
|
||||||
@Input()
|
|
||||||
public id: string = null;
|
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
public url: string = null;
|
|
||||||
public pid: string = null;
|
|
||||||
public keywords: string[] = [];
|
|
||||||
public visible: boolean = false;
|
|
||||||
public annotations: Annotation[] = [];
|
|
||||||
public annotationSize: number = 10;
|
|
||||||
public isLoggedIn: boolean = Session.isLoggedIn();
|
|
||||||
public visibleAnnotations: number;
|
|
||||||
public loading: boolean = false;
|
|
||||||
public submitted: boolean = false;
|
|
||||||
@Output()
|
|
||||||
public pidEmitter: EventEmitter<string> = new EventEmitter<string>();
|
|
||||||
@ViewChild('iframe') iframe: ElementRef;
|
|
||||||
@ViewChild('form') form: ElementRef;
|
|
||||||
private subscriptions: any[] = [];
|
|
||||||
|
|
||||||
constructor(private annotationService: AnnotationService) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@HostListener('window:message', ['$event'])
|
|
||||||
public onChange(event) {
|
|
||||||
if (this.properties.b2noteAPIURL.includes(event.origin)) {
|
|
||||||
if (event.data === "B2NOTE loaded") {
|
|
||||||
let token = COOKIE.getCookie('AccessToken');
|
|
||||||
this.iframe.nativeElement.contentWindow.postMessage({token: token}, this.properties.b2noteAPIURL);
|
|
||||||
} else {
|
|
||||||
this.getAnnotations();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit(): void {
|
|
||||||
this.visibleAnnotations = this.annotationSize;
|
|
||||||
if (typeof window !== "undefined") {
|
|
||||||
let id = this.id;
|
|
||||||
this.url = window.location.href;
|
|
||||||
if (this.landingInfo.deletedByInferenceIds) {
|
|
||||||
id = this.landingInfo.deletedByInferenceIds[0];
|
|
||||||
this.url = this.url.replace(this.id, id);
|
|
||||||
}
|
|
||||||
if (this.landingInfo.identifiers && this.landingInfo.identifiers.size > 0) {
|
|
||||||
if (this.landingInfo.identifiers.get('doi')) {
|
|
||||||
this.pid = this.landingInfo.identifiers.get('doi')[0];
|
|
||||||
} else {
|
|
||||||
const key: string = this.landingInfo.identifiers.keys().next().value;
|
|
||||||
if (key) {
|
|
||||||
this.pid = this.landingInfo.identifiers.get(key)[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.pid) {
|
|
||||||
this.getAnnotations();
|
|
||||||
}
|
|
||||||
this.pidEmitter.emit(this.pid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public get enabled(): boolean {
|
|
||||||
return this.pid && this.isLoggedIn;
|
|
||||||
}
|
|
||||||
|
|
||||||
private clearSubscriptions() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if (subscription instanceof Subscriber) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.subscriptions = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
private getAnnotations() {
|
|
||||||
if (!this.annotations || this.annotations.length === 0) {
|
|
||||||
this.loading = true;
|
|
||||||
}
|
|
||||||
this.subscriptions.push(this.annotationService.getAllAnnotations(this.pid).subscribe(annotations => {
|
|
||||||
this.annotations.forEach((annotation, index) => {
|
|
||||||
if (!annotations.find(element => element.type === annotation.type && element.text === annotation.text)) {
|
|
||||||
this.annotations.splice(index, 1);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
annotations.forEach(annotation => {
|
|
||||||
if (!this.annotations.find(element => element.type === annotation.type && element.text === annotation.text)) {
|
|
||||||
annotation.targetSize = 3;
|
|
||||||
this.annotationService.getAnnotationTargets(annotation.text, annotation.type).subscribe(targets => {
|
|
||||||
annotation.targets = targets.filter(target => target.id !== this.pid);
|
|
||||||
});
|
|
||||||
this.annotations.push(annotation);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.annotations = this.sort(this.annotations);
|
|
||||||
this.loading = false;
|
|
||||||
}, error => {
|
|
||||||
this.loading = false;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public sort(annotations: Annotation[]): Annotation[] {
|
|
||||||
return annotations.sort((a, b) => {
|
|
||||||
if (a.type === b.type) {
|
|
||||||
return 1;
|
|
||||||
} else if (a.type === 'semantic') {
|
|
||||||
return -1;
|
|
||||||
} else if (b.type === 'semantic') {
|
|
||||||
return 1;
|
|
||||||
} else if (a.type === 'keyword') {
|
|
||||||
return -1;
|
|
||||||
} else if (b.type === 'keyword') {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public searchPid(pid: string): { [k: string]: any; } {
|
|
||||||
return {
|
|
||||||
pid: pid
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.clearSubscriptions();
|
|
||||||
}
|
|
||||||
|
|
||||||
toggleAnnotation(event) {
|
|
||||||
if (this.visible) {
|
|
||||||
event.preventDefault();
|
|
||||||
} else if(!this.submitted) {
|
|
||||||
this.form.nativeElement.submit();
|
|
||||||
this.submitted = true;
|
|
||||||
}
|
|
||||||
this.visible = !this.visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
open(i: number) {
|
|
||||||
this.annotations.forEach((annotation, index) => {
|
|
||||||
if (index != i) {
|
|
||||||
annotation.targetSize = 3;
|
|
||||||
} else {
|
|
||||||
annotation.targetSize = annotation.targets.length
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,41 +0,0 @@
|
||||||
.widget-container {
|
|
||||||
position: fixed;
|
|
||||||
left: 50%;
|
|
||||||
top: 50%;
|
|
||||||
z-index: 1000;
|
|
||||||
padding: 19px;
|
|
||||||
margin-left: -167px;
|
|
||||||
margin-top: -311px;
|
|
||||||
box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2),
|
|
||||||
0 2px 2px 0 rgba(0, 0, 0, 0.14),
|
|
||||||
0 1px 5px 0 rgba(0, 0, 0, 0.12);
|
|
||||||
border: 1px solid #e3e3e3;
|
|
||||||
border-radius: 4px;
|
|
||||||
outline: 0;
|
|
||||||
min-height: 20px;
|
|
||||||
background-color: #f5f5f5;
|
|
||||||
cursor: move;
|
|
||||||
}
|
|
||||||
|
|
||||||
.widget-container:hover, .widget-container:active{
|
|
||||||
box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
|
|
||||||
0 8px 10px 1px rgba(0, 0, 0, 0.14),
|
|
||||||
0 3px 14px 2px rgba(0, 0, 0, 0.12);
|
|
||||||
}
|
|
||||||
|
|
||||||
.close {
|
|
||||||
float: right;
|
|
||||||
padding: 0;
|
|
||||||
cursor: pointer;
|
|
||||||
background: transparent;
|
|
||||||
border: 0;
|
|
||||||
font-size: 21px;
|
|
||||||
font-weight: bold;
|
|
||||||
opacity: 0.2;
|
|
||||||
}
|
|
||||||
|
|
||||||
.b2note-iframe {
|
|
||||||
width: 100%;
|
|
||||||
height: 600px;
|
|
||||||
border: 1px solid #dddddd;
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
import {NgModule} from "@angular/core";
|
|
||||||
import {AnnotationComponent} from "./annotation.component";
|
|
||||||
import {CommonModule} from "@angular/common";
|
|
||||||
import {DragDropModule} from "@angular/cdk/drag-drop";
|
|
||||||
import {RouterModule} from "@angular/router";
|
|
||||||
import {LoadingModule} from "../../utils/loading/loading.module";
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [CommonModule, DragDropModule, RouterModule, LoadingModule],
|
|
||||||
declarations: [AnnotationComponent],
|
|
||||||
exports: [AnnotationComponent]
|
|
||||||
})
|
|
||||||
export class AnnotationModule {}
|
|
|
@ -1,95 +0,0 @@
|
||||||
import {Injectable} from "@angular/core";
|
|
||||||
import {HttpClient} from "@angular/common/http";
|
|
||||||
import {Observable} from "rxjs";
|
|
||||||
import {EnvProperties} from "../../utils/properties/env-properties";
|
|
||||||
import {map} from "rxjs/operators";
|
|
||||||
import {properties} from "../../../../environments/environment";
|
|
||||||
|
|
||||||
export interface AnnotationTarget {
|
|
||||||
id: string;
|
|
||||||
url: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Annotation {
|
|
||||||
text: string;
|
|
||||||
type: 'semantic' | 'keyword' | 'comment';
|
|
||||||
targets?: AnnotationTarget[];
|
|
||||||
targetSize?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Injectable({
|
|
||||||
providedIn: "root"
|
|
||||||
})
|
|
||||||
export class AnnotationService {
|
|
||||||
|
|
||||||
api = 'api/';
|
|
||||||
|
|
||||||
constructor(private http: HttpClient) {
|
|
||||||
}
|
|
||||||
|
|
||||||
getAllAnnotations(source: string): Observable<Annotation[]> {
|
|
||||||
let url = properties.b2noteAPIURL + this.api + 'annotations?target-id[]=' + encodeURIComponent(source);
|
|
||||||
return this.http.get<Annotation[]>(url).pipe(map((response: any[]) => {
|
|
||||||
return this.parseAnnotations(response);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
getAnnotationTargets(value: string, type: 'semantic' | 'keyword' | 'comment'): Observable<AnnotationTarget[]> {
|
|
||||||
let url = properties.b2noteAPIURL + this.api + 'annotations?value=' + encodeURIComponent(value) + '&type[]=' + type;
|
|
||||||
return this.http.get<AnnotationTarget[]>(url).pipe(map((response: any[]) => {
|
|
||||||
return this.parseAnnotationTargets(response);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
private parseAnnotations(response: any[]): Annotation[] {
|
|
||||||
let annotations: Annotation[] = [];
|
|
||||||
if (response && response.length > 0) {
|
|
||||||
response.forEach(value => {
|
|
||||||
if (value.visibility === 'public') {
|
|
||||||
let body = value.body;
|
|
||||||
if (body.type === 'TextualBody') {
|
|
||||||
if (body.purpose === 'tagging') {
|
|
||||||
annotations.push({
|
|
||||||
text: body.value,
|
|
||||||
type: "keyword"
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
annotations.push({
|
|
||||||
text: body.value,
|
|
||||||
type: "comment"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let items = body.items;
|
|
||||||
let text: string = null;
|
|
||||||
items.forEach(item => {
|
|
||||||
if (item.type === 'TextualBody') {
|
|
||||||
text = item.value;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
annotations.push({
|
|
||||||
text: text,
|
|
||||||
type: "semantic"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return annotations;
|
|
||||||
}
|
|
||||||
|
|
||||||
private parseAnnotationTargets(response: any[]): AnnotationTarget[] {
|
|
||||||
let targets: AnnotationTarget[] = [];
|
|
||||||
if (response && response.length > 0) {
|
|
||||||
response.forEach(value => {
|
|
||||||
if (value.visibility === 'public') {
|
|
||||||
targets.push({
|
|
||||||
id: value.target.id,
|
|
||||||
url: value.target.source
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return targets;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreviousRouteRecorder } from "../../utils/piwik/previousRouteRecorder.guard";
|
||||||
|
import { DataProviderComponent } from "./dataProvider.component";
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
RouterModule.forChild([{ path: '', component: DataProviderComponent, canDeactivate: [PreviousRouteRecorder] }])
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class DataProviderRoutingModule { }
|
|
@ -1,3 +1,8 @@
|
||||||
|
<!-- schema.org-->
|
||||||
|
<schema2jsonld *ngIf="dataProviderInfo"
|
||||||
|
[data]=dataProviderInfo [URL]="canonicalUrl" type="datasource"
|
||||||
|
[otherURL]="(dataProviderInfo.provenance)?provenanceUrls:null"></schema2jsonld>
|
||||||
|
|
||||||
<!-- Desktop view -->
|
<!-- Desktop view -->
|
||||||
<div class="uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
<div class="uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
||||||
<div *ngIf="!isMobile" class="tm-main">
|
<div *ngIf="!isMobile" class="tm-main">
|
||||||
|
@ -95,11 +100,7 @@
|
||||||
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
||||||
<div class="uk-grid uk-grid-small" uk-grid>
|
<div class="uk-grid uk-grid-small" uk-grid>
|
||||||
<div class="uk-width-expand">
|
<div class="uk-width-expand">
|
||||||
<!-- schema.org-->
|
|
||||||
<schema2jsonld [data]=dataProviderInfo
|
|
||||||
[URL]="canonicalUrl"
|
|
||||||
type="datasource"
|
|
||||||
[otherURL]="(dataProviderInfo.provenance)?provenanceUrls:null"></schema2jsonld>
|
|
||||||
<!-- Actions for mobile viewport -->
|
<!-- Actions for mobile viewport -->
|
||||||
<div class="uk-flex uk-flex-right uk-margin-medium-bottom uk-hidden@s">
|
<div class="uk-flex uk-flex-right uk-margin-medium-bottom uk-hidden@s">
|
||||||
<div>
|
<div>
|
||||||
|
@ -188,7 +189,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="dataProviderInfo && hasMetrics" class="uk-width-1-1 uk-width-medium@s">
|
<div *ngIf="dataProviderInfo && hasMetrics" class="uk-width-1-1 uk-width-medium@s">
|
||||||
<div class="landing-metrics-card uk-text-small uk-flex uk-padding-small">
|
<div class="landing-metrics-card uk-text-small uk-flex uk-padding-small">
|
||||||
<div class="uk-width-expand uk-flex uk-flex-middle">
|
<div class="uk-width-expand uk-flex uk-flex-top">
|
||||||
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-grid uk-height-match="target: > div > .cell">
|
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-grid uk-height-match="target: > div > .cell">
|
||||||
<div>
|
<div>
|
||||||
<ng-container>
|
<ng-container>
|
||||||
|
|
|
@ -206,8 +206,10 @@ export class DataProviderComponent {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
if(properties.adminToolsPortalType !== "explore") {
|
||||||
//this.getDivContents();
|
//this.getDivContents();
|
||||||
this.getPageContents();
|
this.getPageContents();
|
||||||
|
}
|
||||||
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
||||||
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
||||||
this.subscriptions.push(this.route.queryParams.subscribe(data => {
|
this.subscriptions.push(this.route.queryParams.subscribe(data => {
|
||||||
|
@ -394,8 +396,8 @@ export class DataProviderComponent {
|
||||||
this.updateUrl(this.canonicalUrl);
|
this.updateUrl(this.canonicalUrl);
|
||||||
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
||||||
if (typeof document !== 'undefined') {
|
if (typeof document !== 'undefined') {
|
||||||
this.getDataProviderAggregationStatus(this.dataProviderInfo.originalId);
|
// this.getDataProviderAggregationStatus(this.dataProviderInfo.originalId);
|
||||||
// this.getCollectedFulltexts();
|
this.getCollectedFulltexts();
|
||||||
this.countResultsWithFundingInfo();
|
this.countResultsWithFundingInfo();
|
||||||
} else {
|
} else {
|
||||||
this.aggregationStatusIsInitialized = true;
|
this.aggregationStatusIsInitialized = true;
|
||||||
|
@ -454,34 +456,34 @@ export class DataProviderComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private getDataProviderAggregationStatus(originalId: string) {
|
// private getDataProviderAggregationStatus(originalId: string) {
|
||||||
this.subscriptions.push(this._dataproviderService.getDataproviderAggregationStatus(originalId, this.properties).subscribe(
|
// this.subscriptions.push(this._dataproviderService.getDataproviderAggregationStatus(originalId, this.properties).subscribe(
|
||||||
data => {
|
// data => {
|
||||||
this.dataProviderInfo.aggregationStatus = data;
|
// this.dataProviderInfo.aggregationStatus = data;
|
||||||
this.aggregationStatusIsInitialized = true;
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
//console.log(err);
|
|
||||||
this.aggregationStatusIsInitialized = true;
|
|
||||||
this.handleError("Error getting "+this.getTypeName()+" aggregation status for id: " + this.datasourceId, err);
|
|
||||||
}
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
// private getCollectedFulltexts() {
|
|
||||||
// this.subscriptions.push(this._dataproviderService.getCollectedFulltexts(this.datasourceId).subscribe(
|
|
||||||
// (data: string) => {
|
|
||||||
// this.dataProviderInfo.aggregationStatus = {"fulltexts": data};
|
|
||||||
// this.aggregationStatusIsInitialized = true;
|
// this.aggregationStatusIsInitialized = true;
|
||||||
// },
|
// },
|
||||||
// err => {
|
// err => {
|
||||||
// //console.log(err);
|
// //console.log(err);
|
||||||
// this.aggregationStatusIsInitialized = true;
|
// this.aggregationStatusIsInitialized = true;
|
||||||
// this.handleError("Error getting "+this.getTypeName()+" collected fulltexts for id: " + this.datasourceId, err);
|
// this.handleError("Error getting "+this.getTypeName()+" aggregation status for id: " + this.datasourceId, err);
|
||||||
// }
|
// }
|
||||||
// ));
|
// ));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
private getCollectedFulltexts() {
|
||||||
|
this.subscriptions.push(this._dataproviderService.getCollectedFulltexts(this.datasourceId).subscribe(
|
||||||
|
(data: string) => {
|
||||||
|
this.dataProviderInfo.aggregationStatus = {"fulltexts": data};
|
||||||
|
this.aggregationStatusIsInitialized = true;
|
||||||
|
},
|
||||||
|
err => {
|
||||||
|
//console.log(err);
|
||||||
|
this.aggregationStatusIsInitialized = true;
|
||||||
|
this.handleError("Error getting "+this.getTypeName()+" collected fulltexts for id: " + this.datasourceId, err);
|
||||||
|
}
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
private countResultsWithFundingInfo() {
|
private countResultsWithFundingInfo() {
|
||||||
this.subscriptions.push(this._searchResearchResultsService.countCollectedResultsWithFundingInfo(this.datasourceId).subscribe(
|
this.subscriptions.push(this._searchResearchResultsService.countCollectedResultsWithFundingInfo(this.datasourceId).subscribe(
|
||||||
fundedContent => {
|
fundedContent => {
|
||||||
|
|
|
@ -36,10 +36,12 @@ import {ResultLandingUtilsModule} from "../landing-utils/resultLandingUtils.modu
|
||||||
import {FullScreenModalModule} from '../../utils/modal/full-screen-modal/full-screen-modal.module';
|
import {FullScreenModalModule} from '../../utils/modal/full-screen-modal/full-screen-modal.module';
|
||||||
import {SafeHtmlPipeModule} from '../../utils/pipes/safeHTMLPipe.module';
|
import {SafeHtmlPipeModule} from '../../utils/pipes/safeHTMLPipe.module';
|
||||||
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
||||||
|
import {DataProviderRoutingModule} from "./dataProvider-routing.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports:
|
imports:
|
||||||
[CommonModule, FormsModule, RouterModule,
|
[CommonModule, FormsModule, RouterModule,
|
||||||
|
DataProviderRoutingModule,
|
||||||
IFrameModule, ErrorMessagesModule, LandingModule,
|
IFrameModule, ErrorMessagesModule, LandingModule,
|
||||||
DataProvidersServiceModule, ProjectsServiceModule, SearchResearchResultsServiceModule,
|
DataProvidersServiceModule, ProjectsServiceModule, SearchResearchResultsServiceModule,
|
||||||
PagingModule, Schema2jsonldModule, SEOServiceModule, ShowPublisherModule, HelperModule,
|
PagingModule, Schema2jsonldModule, SEOServiceModule, ShowPublisherModule, HelperModule,
|
||||||
|
|
|
@ -83,10 +83,10 @@ export class DataProviderService {
|
||||||
.pipe(map(res => this.parseDataproviderAggregationStatus(res)));
|
.pipe(map(res => this.parseDataproviderAggregationStatus(res)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// getCollectedFulltexts(datasourceId: string) {
|
getCollectedFulltexts(datasourceId: string) {
|
||||||
// return this.http.get(properties.pdfStatisticsAPIURL+"/api/stats/getNumberOfPayloadsForDatasource?datasourceId="+datasourceId)
|
return this.http.get(properties.pdfStatisticsAPIURL+"/stats/getNumberOfPayloadsForDatasource?datasourceId="+datasourceId)
|
||||||
// .pipe(map(res => res))
|
.pipe(map(res => res))
|
||||||
// }
|
}
|
||||||
|
|
||||||
private handleError (error: HttpErrorResponse) {
|
private handleError (error: HttpErrorResponse) {
|
||||||
// in a real world app, we may send the error to some remote logging infrastructure
|
// in a real world app, we may send the error to some remote logging infrastructure
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
<landing-header *ngIf="resultLandingInfo" [properties]="properties" [title]="title"
|
<landing-header *ngIf="resultLandingInfo" [properties]="properties" [title]="title"
|
||||||
[subTitle]="resultLandingInfo.subtitle" [underCuration]="resultLandingInfo.underCurationMessage"
|
[subTitle]="resultLandingInfo.subtitle" [underCuration]="resultLandingInfo.underCurationMessage"
|
||||||
[entityType]="entityType" [types]="resultLandingInfo.types"
|
[entityType]="entityType" [types]="resultLandingInfo.types"
|
||||||
[year]="resultLandingInfo.date" [embargoEndDate]="resultLandingInfo.embargoEndDate">
|
[year]="resultLandingInfo.date" [embargoEndDate]="resultLandingInfo.embargoEndDate"
|
||||||
|
[publiclyFunded]="resultLandingInfo.publiclyFunded" [projects]="resultLandingInfo.fundedByProjects">
|
||||||
</landing-header>
|
</landing-header>
|
||||||
<landing-header *ngIf="organizationInfo" [properties]="properties" [title]="title"
|
<landing-header *ngIf="organizationInfo" [properties]="properties" [title]="title"
|
||||||
[subTitle]="(organizationInfo.name && organizationInfo.title.name !== organizationInfo.name)?organizationInfo.name:null"
|
[subTitle]="(organizationInfo.name && organizationInfo.title.name !== organizationInfo.name)?organizationInfo.name:null"
|
||||||
|
|
|
@ -1,302 +0,0 @@
|
||||||
import {Component, Input} from '@angular/core';
|
|
||||||
import {ActivatedRoute, Router} from '@angular/router';
|
|
||||||
import {Meta, Title} from '@angular/platform-browser';
|
|
||||||
|
|
||||||
import {EnvProperties} from '../../utils/properties/env-properties';
|
|
||||||
|
|
||||||
import {HtmlProjectReportService} from './htmlProjectReport.service';
|
|
||||||
import {ProjectService} from '../project/project.service';
|
|
||||||
import {PiwikService} from '../../utils/piwik/piwik.service';
|
|
||||||
import {SEOService} from '../../sharedComponents/SEO/SEO.service';
|
|
||||||
import {HelperService} from "../../utils/helper/helper.service";
|
|
||||||
import {Subscriber} from "rxjs";
|
|
||||||
import {properties} from "../../../../environments/environment";
|
|
||||||
|
|
||||||
declare var UIkit: any;
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'htmlProjectReport',
|
|
||||||
template: `
|
|
||||||
<div id="tm-main" class=" uk-section uk-padding-remove-top tm-middle">
|
|
||||||
<div uk-grid>
|
|
||||||
<div class="tm-main uk-width-1-1@s uk-width-1-1@m uk-width-1-1@l uk-row-first ">
|
|
||||||
<helper *ngIf="pageContents && pageContents['top'] && pageContents['top'].length > 0"
|
|
||||||
[texts]="pageContents['top']" styleName="uk-width-1-1"></helper>
|
|
||||||
<div class="uk-container uk-margin-top uk-width-1-1">
|
|
||||||
<div *ngIf="warningMessage" class="uk-alert uk-alert-warning" role="alert">{{warningMessage}}</div>
|
|
||||||
<div [style.display]="showLoading ? 'inline' : 'none'"
|
|
||||||
class="uk-animation-fade uk-margin-large-top uk-width-1-1" role="alert"><span
|
|
||||||
class="loading-gif uk-align-center"></span></div>
|
|
||||||
|
|
||||||
<div *ngIf="!showLoading && !warningMessage">
|
|
||||||
<div *ngIf="header1" class="uk-h4 uk-text-bold ">{{header1}}</div>
|
|
||||||
<div *ngIf="header1 || htmlResult" class=" ">{{header2}}</div>
|
|
||||||
|
|
||||||
<div class="uk-clearfix uk-margin-bottom">
|
|
||||||
<button *ngIf="htmlResult" class="uk-icon-clipboard uk-button uk-button-primary clipBtn uk-float-right"
|
|
||||||
(click)="copied()">
|
|
||||||
Copy to clipboard
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<!--div class="uk-panel-scrollable custom-html-table-height" *ngIf="htmlResult" id="clipboard" [innerHTML]="htmlResult"></div-->
|
|
||||||
<div class="uk-overflow-auto custom-html-table-height" *ngIf="htmlResult" id="clipboard"
|
|
||||||
[innerHTML]="htmlResult"></div>
|
|
||||||
|
|
||||||
<div *ngIf="errorMessage" class="uk-alert uk-alert-danger" role="alert">{{errorMessage}}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
|
|
||||||
[texts]="pageContents['bottom']" styleName="uk-width-1-1"></helper>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
`
|
|
||||||
})
|
|
||||||
export class HtmlProjectReportComponent {
|
|
||||||
@Input() communityId = null;
|
|
||||||
private projectId: string;
|
|
||||||
private totalResults: number = 10;
|
|
||||||
private resultsType: string = "publication";
|
|
||||||
|
|
||||||
public header1: string = "";
|
|
||||||
public header2: string = "";
|
|
||||||
public htmlResult: string = "";
|
|
||||||
|
|
||||||
subscriptions = [];
|
|
||||||
|
|
||||||
public warningMessage: string = "";
|
|
||||||
public errorMessage: string = "";
|
|
||||||
public showLoading: boolean = true;
|
|
||||||
properties: EnvProperties;
|
|
||||||
public pageContents = null;
|
|
||||||
public divContents = null;
|
|
||||||
|
|
||||||
constructor(private route: ActivatedRoute,
|
|
||||||
private htmlService: HtmlProjectReportService,
|
|
||||||
private _piwikService: PiwikService,
|
|
||||||
private _projectService: ProjectService,
|
|
||||||
private _meta: Meta,
|
|
||||||
private _title: Title,
|
|
||||||
private _router: Router,
|
|
||||||
private helper: HelperService,
|
|
||||||
private seoService: SEOService) {
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
|
|
||||||
this.properties = properties;
|
|
||||||
//this.getDivContents();
|
|
||||||
this.getPageContents();
|
|
||||||
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
|
||||||
this.seoService.createLinkForCanonicalURL(this.properties.domain + this.properties.baseLink + this._router.url);
|
|
||||||
|
|
||||||
|
|
||||||
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
|
||||||
this.projectId = params['projectId'];
|
|
||||||
|
|
||||||
if (params['size'] == parseInt(params['size'], 10)) {
|
|
||||||
this.totalResults = params['size'];
|
|
||||||
} else {
|
|
||||||
this.showLoading = false;
|
|
||||||
this.warningMessage = "Requested size is not an integer";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (params['type'] && (params['type'] == "publication" || params['type'] == "dataset" || params['type'] == "software" || params['type'] == "other")) {
|
|
||||||
if (params['type'] == "publication") {
|
|
||||||
this.resultsType = 'publication';
|
|
||||||
} else if (params['type'] == "dataset") {
|
|
||||||
this.resultsType = 'research data';
|
|
||||||
} else if (params['type'] == "software") {
|
|
||||||
this.resultsType = 'software';
|
|
||||||
} else if (params['type'] == "other") {
|
|
||||||
this.resultsType = "other research product";
|
|
||||||
}
|
|
||||||
|
|
||||||
var title = "Project's " + this.resultsType + " report";
|
|
||||||
var description = "project, project " + this.resultsType + " report, funding, open access, publications, research data, software, other research products";
|
|
||||||
this.updateTitle(title);
|
|
||||||
this.updateDescription(description);
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
|
||||||
this.showLoading = false;
|
|
||||||
this.warningMessage = "Requested type should be publication or research data or software or other research product";
|
|
||||||
}
|
|
||||||
|
|
||||||
//showLoading is true if no warnings
|
|
||||||
if (this.showLoading) {
|
|
||||||
if (this.projectId) {
|
|
||||||
this.createHeaders();
|
|
||||||
} else {
|
|
||||||
this.showLoading = false;
|
|
||||||
this.warningMessage = "No valid project id";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
private getPageContents() {
|
|
||||||
if(this.communityId) {
|
|
||||||
this.subscriptions.push(this.helper.getPageHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
|
|
||||||
this.pageContents = contents;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private getDivContents() {
|
|
||||||
if(this.communityId) {
|
|
||||||
this.subscriptions.push(this.helper.getDivHelpContents(this.properties, this.communityId, this._router.url).subscribe(contents => {
|
|
||||||
this.divContents = contents;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if (subscription instanceof Subscriber) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private createHeaders() {
|
|
||||||
this.subscriptions.push(this._projectService.getHTMLInfo(this.projectId, this.properties).subscribe(
|
|
||||||
data => {
|
|
||||||
this.createHeader1(data);
|
|
||||||
if (data.acronym) {
|
|
||||||
this.updateTitle(data.acronym + " " + this.resultsType + " report");
|
|
||||||
} else if (data.title) {
|
|
||||||
this.updateTitle(data.title + " " + this.resultsType + " report");
|
|
||||||
}
|
|
||||||
this.subscriptions.push(this._piwikService.trackView(this.properties, ((data.acronym) ? data.acronym : data.title) + " " + this.resultsType + " report").subscribe());
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
this.handleError("Error getting html information for project id: " + this.projectId, err);
|
|
||||||
//console.log(err);
|
|
||||||
this.createClipboard();
|
|
||||||
}
|
|
||||||
));
|
|
||||||
|
|
||||||
if (this.resultsType == "publication") {
|
|
||||||
this.header2 += this.totalResults.toLocaleString('en-US') + " publications";
|
|
||||||
} else if (this.resultsType == "research data") {
|
|
||||||
this.header2 += this.totalResults.toLocaleString('en-US') + " research data";
|
|
||||||
} else if (this.resultsType == "software") {
|
|
||||||
this.header2 += this.totalResults.toLocaleString('en-US') + " software";
|
|
||||||
} else if (this.resultsType == "other research product") {
|
|
||||||
this.header2 += this.totalResults.toLocaleString('en-US') + " other";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private createClipboard() {
|
|
||||||
let intro: string = '<!doctype html>';
|
|
||||||
intro += '<html lang="en-gb" dir="ltr" vocab="http://schema.org/">';
|
|
||||||
intro += '<head>';
|
|
||||||
intro += '<title>' + this.header1 + '</title>'
|
|
||||||
intro += '</head>';
|
|
||||||
|
|
||||||
if (typeof window !== 'undefined') {
|
|
||||||
this.subscriptions.push(this.htmlService.getHTML(this.projectId, this.resultsType, this.properties.csvAPIURL).subscribe(
|
|
||||||
data => {
|
|
||||||
//let body: string = intro+'<body><h1>'+this.header1+'</h1><h2>'+this.header2+'</h2>'+data+'</body></html>';
|
|
||||||
let body: string = intro + '<body><h1>' + this.header1 + '</h1><h2>' + this.header2 + '</h2>';
|
|
||||||
body += "<table><thead><tr> <th>Title</th><th>Authors</th><th>Publication Year</th><th>DOI</th><th>Permanent Identifier</th><th>Publication type</th><th>Journal</th><th>Project Name (GA Number)</th><th>Access Mode</th></tr></thead><tbody>" + data + "</tbody></table>";
|
|
||||||
body += '</body></html>';
|
|
||||||
|
|
||||||
//this.htmlResult = data;
|
|
||||||
this.htmlResult = "<table><thead><tr> <th>Title</th><th>Authors</th><th>Publication Year</th><th>DOI</th><th>Permanent Identifier</th><th>Publication type</th><th>Journal</th><th>Project Name (GA Number)</th><th>Access Mode</th></tr></thead><tbody>" + data + "</tbody></table>";
|
|
||||||
|
|
||||||
let clipboard;
|
|
||||||
let Clipboard;
|
|
||||||
Clipboard = require('clipboard');
|
|
||||||
clipboard = new Clipboard('.clipBtn', {
|
|
||||||
/*target: function(trigger) {
|
|
||||||
return document.getElementById("clipboard");
|
|
||||||
}*/
|
|
||||||
text: function (trigger) {
|
|
||||||
return body;//document.getElementById("clipboard").getAttribute('innerHTML');//"aaaa"+tmp+"oo";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.showLoading = false;
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
//console.log(err);
|
|
||||||
this.handleError("Error getting html for id: " + this.projectId, err);
|
|
||||||
|
|
||||||
this.errorMessage = 'Service not available';
|
|
||||||
this.showLoading = false;
|
|
||||||
}
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
createHeader1(data: { "title": string, "acronym": string, "callIdentifier": string }) {
|
|
||||||
if (this.resultsType == "publication") {
|
|
||||||
this.header1 += "Publications";
|
|
||||||
} else if (this.resultsType == "research data") {
|
|
||||||
this.header1 += "Research Data";
|
|
||||||
} else if (this.resultsType == "software") {
|
|
||||||
this.header1 += "Software";
|
|
||||||
} else if (this.resultsType == "other research product") {
|
|
||||||
this.header1 += "Other Research Products";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data != undefined) {
|
|
||||||
if (data.title != undefined && data.title != "") {
|
|
||||||
this.header1 += data.title;
|
|
||||||
}
|
|
||||||
if ((data.title != undefined && data.title != "") &&
|
|
||||||
((data.acronym != undefined && data.acronym != "") ||
|
|
||||||
(data.callIdentifier != undefined && data.callIdentifier != ""))) {
|
|
||||||
this.header1 += "(";
|
|
||||||
}
|
|
||||||
if (data.acronym != undefined && data.acronym != "") {
|
|
||||||
this.header1 += data.acronym + " - ";
|
|
||||||
}
|
|
||||||
if (data.callIdentifier != undefined && data.callIdentifier != "") {
|
|
||||||
this.header1 += data.callIdentifier;
|
|
||||||
}
|
|
||||||
if ((data.title != undefined && data.title != "") &&
|
|
||||||
((data.acronym != undefined && data.acronym != "") ||
|
|
||||||
(data.callIdentifier != undefined && data.callIdentifier != ""))) {
|
|
||||||
this.header1 += ")";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.createClipboard();
|
|
||||||
}
|
|
||||||
|
|
||||||
public copied() {
|
|
||||||
UIkit.notification({
|
|
||||||
message: '<strong>Raw html is copied. Please paste it on an html file.<strong>',
|
|
||||||
status: 'success',
|
|
||||||
timeout: 3000,
|
|
||||||
pos: 'top-center'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private updateDescription(description: string) {
|
|
||||||
this._meta.updateTag({content: description}, "name='description'");
|
|
||||||
this._meta.updateTag({content: description}, "property='og:description'");
|
|
||||||
}
|
|
||||||
|
|
||||||
private updateTitle(title: string) {
|
|
||||||
var _prefix = "";
|
|
||||||
if(!this.communityId) {
|
|
||||||
_prefix = "OpenAIRE | ";
|
|
||||||
}
|
|
||||||
var _title = _prefix + ((title.length > 50) ? title.substring(0, 50) : title);
|
|
||||||
this._title.setTitle(_title);
|
|
||||||
this._meta.updateTag({content: _title}, "property='og:title'");
|
|
||||||
}
|
|
||||||
|
|
||||||
private updateUrl(url: string) {
|
|
||||||
this._meta.updateTag({content: url}, "property='og:url'");
|
|
||||||
}
|
|
||||||
|
|
||||||
private handleError(message: string, error) {
|
|
||||||
console.error("Html Project Report Page: " + message, error);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
//import {MaterialModule} from '@angular/material';
|
|
||||||
import { NgModule} from '@angular/core';
|
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { FormsModule } from '@angular/forms';
|
|
||||||
import { ProjectServiceModule} from '../project/projectService.module';
|
|
||||||
|
|
||||||
|
|
||||||
import {HtmlProjectReportService} from './htmlProjectReport.service';
|
|
||||||
import {HtmlProjectReportComponent} from './htmlProjectReport.component';
|
|
||||||
import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
|
|
||||||
import { SEOServiceModule } from '../../sharedComponents/SEO/SEOService.module';
|
|
||||||
import {HelperModule} from "../../utils/helper/helper.module";
|
|
||||||
import {RouterModule} from '@angular/router';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
CommonModule, FormsModule, ProjectServiceModule, PiwikServiceModule, SEOServiceModule, HelperModule,
|
|
||||||
RouterModule
|
|
||||||
],
|
|
||||||
declarations: [
|
|
||||||
HtmlProjectReportComponent
|
|
||||||
],
|
|
||||||
providers:[
|
|
||||||
HtmlProjectReportService
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
HtmlProjectReportComponent
|
|
||||||
]
|
|
||||||
})
|
|
||||||
export class HtmlProjectReportModule { }
|
|
|
@ -14,7 +14,15 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<div class="uk-flex uk-flex-middle"
|
<div class="uk-flex uk-flex-middle"
|
||||||
[ngClass]="isMobile ? ('uk-flex-column ' + (!(usedBy == 'landing') ? 'uk-margin-left uk-margin-xsmall-bottom' : '')) : 'uk-grid uk-grid-small uk-child-width-auto'"
|
[ngClass]="isMobile ? ('uk-flex-column ' + (!(usedBy == 'landing') ? 'uk-margin-left uk-margin-xsmall-bottom' : '')) : 'uk-grid uk-grid-small uk-child-width-auto'"
|
||||||
[attr.uk-grid]="!isMobile ? '' : null">
|
[attr.uk-grid]="!isMobile ? '' : null">
|
||||||
<div *ngIf="properties.environment != 'production' && availableOn[0].fulltext" class="uk-flex uk-flex-middle"
|
|
||||||
|
<ng-container *ngIf="inModal">
|
||||||
|
<div class="uk-text-small uk-height-max-small uk-overflow-auto">
|
||||||
|
<ng-container *ngTemplateOutlet="availableOnList"></ng-container>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container *ngIf="!inModal">
|
||||||
|
<div *ngIf="availableOn[0].fulltext" class="uk-flex uk-flex-middle"
|
||||||
[ngClass]="isMobile ? 'uk-width-1-1' : 'uk-text-bolder'">
|
[ngClass]="isMobile ? 'uk-width-1-1' : 'uk-text-bolder'">
|
||||||
<a [href]="availableOn[0].fulltext" target="_blank"
|
<a [href]="availableOn[0].fulltext" target="_blank"
|
||||||
class="uk-flex uk-flex-middle uk-button-link"
|
class="uk-flex uk-flex-middle uk-button-link"
|
||||||
|
@ -24,15 +32,15 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<span class="uk-margin-xsmall-left">Full-Text</span>
|
<span class="uk-margin-xsmall-left">Full-Text</span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<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 *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 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)">
|
||||||
<icon [name]="availableOn[0].accessRightIcon" [flex]="true" [ratio]="(isMobile && usedBy == 'landing') ? 1 : 0.8"></icon>
|
<icon [name]="availableOn[0].accessRightIcon" [flex]="true" [ratio]="(isMobile && usedBy == 'landing') ? 1 : 0.8"></icon>
|
||||||
</span>
|
</span>
|
||||||
<ng-container *ngIf="!isMobile">
|
<ng-container *ngIf="!isMobile">
|
||||||
<a uk-tooltip="Source" target="_blank"
|
<a target="_blank"
|
||||||
class="uk-flex uk-flex-middle uk-flex-center uk-button-link uk-text-bolder">
|
class="uk-flex uk-flex-middle uk-flex-center uk-button-link uk-text-bolder">
|
||||||
<span>{{sliceString(availableOn[0].downloadNames.join("; "), 20)}}</span>
|
<span>{{sliceString(availableOn[0].downloadNames.join("; "), 20)}}</span>
|
||||||
<span>
|
<span>
|
||||||
|
@ -65,27 +73,32 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-template #availableOnList>
|
<ng-template #availableOnList>
|
||||||
<div *ngFor="let instance of availableOn let i=index" class="download-drop-item uk-flex uk-flex-top">
|
<div *ngFor="let instance of availableOn let i=index" class="download-drop-item uk-flex uk-flex-top"
|
||||||
|
[ngClass]="inModal ? 'uk-margin-small-bottom' : ''">
|
||||||
<span
|
<span
|
||||||
[class]="'uk-margin-small-right ' + (instance.accessRightIcon == 'open_access' ? 'open-access' : 'closed-access')"
|
[class]="'uk-margin-small-right ' + (instance.accessRightIcon == 'open_access' ? 'open-access' : 'closed-access')"
|
||||||
uk-tooltip [title]="getAccessLabel(instance.accessRight)">
|
uk-tooltip [title]="getAccessLabel(instance.accessRight)">
|
||||||
<icon [name]="instance.accessRightIcon" [flex]="true"></icon>
|
<icon [name]="instance.accessRightIcon" [flex]="true" [ratio]="inModal ? 0.8 : 1"></icon>
|
||||||
</span>
|
</span>
|
||||||
<div class="uk-width-expand uk-padding-small uk-padding-remove-left uk-padding-remove-vertical">
|
<div class="uk-padding-small uk-padding-remove-left uk-padding-remove-vertical"
|
||||||
|
[ngClass]="inModal ? 'uk-grid' : 'uk-width-expand'">
|
||||||
<span class="uk-text-emphasis">
|
<span class="uk-text-emphasis">
|
||||||
<a *ngIf="instance.downloadUrl" [href]="instance.downloadUrl" target="_blank"
|
<a *ngIf="instance.downloadUrl" [href]="instance.downloadUrl" target="_blank"
|
||||||
class="title uk-link-text uk-text-bold custom-external uk-display-inline-block">
|
class="title uk-link-text uk-text-bold custom-external uk-display-inline-block">
|
||||||
{{instance.downloadNames.join("; ")}}
|
{{instance.downloadNames.join("; ")}}
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
<div *ngIf="instance.types?.length > 0 || instance.years?.length > 0" class="uk-text-meta">
|
<div *ngIf="instance.types?.length > 0 || instance.years?.length > 0 || instance.peerReviewed" class="uk-text-meta">
|
||||||
<span *ngIf="instance.types?.length > 0" class="uk-text-capitalize">{{instance.types.join(" . ")}}</span>
|
<span *ngIf="instance.types?.length > 0" class="uk-text-capitalize">{{instance.types.join(" . ")}}</span>
|
||||||
<span *ngIf="instance.types?.length > 0 && instance.years?.length > 0"> . </span>
|
<span *ngIf="instance.types?.length > 0 && instance.years?.length > 0"> . </span>
|
||||||
<span *ngIf="instance.years?.length > 0">{{instance.years.join(" . ")}}</span>
|
<span *ngIf="instance.years?.length > 0">{{instance.years.join(" . ")}}</span>
|
||||||
|
<span *ngIf="(instance.types?.length > 0 || instance.years?.length > 0) && instance.peerReviewed"> . </span>
|
||||||
|
<span *ngIf="instance.peerReviewed">Peer-reviewed</span>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="instance.license" class="uk-text-meta uk-text-truncate" uk-tooltip [title]="instance.license">
|
<div *ngIf="instance.license" class="uk-text-meta uk-text-truncate" uk-tooltip [title]="instance.license">
|
||||||
License:
|
License:
|
||||||
|
@ -95,7 +108,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
</a>
|
</a>
|
||||||
<ng-template #elseBlock> {{instance.license}}</ng-template>
|
<ng-template #elseBlock> {{instance.license}}</ng-template>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="properties.environment != 'production' && instance.fulltext" class="uk-text-meta uk-text-truncate" uk-tooltip [title]="instance.fulltext">
|
<div *ngIf="instance.fulltext" class="uk-text-meta uk-text-truncate" uk-tooltip [title]="instance.fulltext">
|
||||||
Full-Text:
|
Full-Text:
|
||||||
<a *ngIf="isUrl(instance.fulltext); else elseBlock"
|
<a *ngIf="isUrl(instance.fulltext); else elseBlock"
|
||||||
[href]="instance.fulltext" target="_blank" class="custom-external uk-link-text">
|
[href]="instance.fulltext" target="_blank" class="custom-external uk-link-text">
|
||||||
|
@ -118,6 +131,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
|
|
||||||
export class AvailableOnComponent {
|
export class AvailableOnComponent {
|
||||||
@Input() isMobile: boolean = false;
|
@Input() isMobile: boolean = false;
|
||||||
|
@Input() inModal: boolean = false;
|
||||||
@Input() usedBy: "search" | "landing" = "search";
|
@Input() usedBy: "search" | "landing" = "search";
|
||||||
@Input() prevPath: string = "";
|
@Input() prevPath: string = "";
|
||||||
@Input() availableOn: HostedByCollectedFrom[];
|
@Input() availableOn: HostedByCollectedFrom[];
|
||||||
|
|
|
@ -31,22 +31,20 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<!-- types -->
|
<!-- types -->
|
||||||
<span *ngIf="entityType" class="uk-flex-inline uk-flex-middle uk-flex-wrap"
|
<span *ngIf="entityType" class="uk-flex-inline uk-flex-middle uk-flex-wrap"
|
||||||
[class.other-separator]="types && removeUnknown(types, true).length > 0">
|
[class.other-separator]="types && removeUnknown(types, true).length > 0">
|
||||||
<span class="uk-margin-xsmall-right">
|
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'publication'" name="description" type="outlined"
|
<icon *ngIf="entityType.toLowerCase() == 'publication'" name="description" type="outlined"
|
||||||
[flex]="true" [ratio]="0.8"></icon>
|
[flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'research data'" name="database" type="outlined"
|
<icon *ngIf="entityType.toLowerCase() == 'research data'" name="database" type="outlined"
|
||||||
[flex]="true" [ratio]="0.8"></icon>
|
[flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'research software'" name="integration_instructions"
|
<icon *ngIf="entityType.toLowerCase() == 'research software'" name="integration_instructions"
|
||||||
type="outlined" [flex]="true" [ratio]="0.8"></icon>
|
type="outlined" [flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'other research product'" name="apps" type="outlined"
|
<icon *ngIf="entityType.toLowerCase() == 'other research product'" name="apps" type="outlined"
|
||||||
[flex]="true" [ratio]="0.8"></icon>
|
[flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'project'" name="assignment_turned_in" type="outlined"
|
<icon *ngIf="entityType.toLowerCase() == 'project'" name="assignment_turned_in" type="outlined"
|
||||||
[flex]="true" [ratio]="0.8"></icon>
|
[flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'data source'" name="note_add" type="outlined"
|
<icon *ngIf="entityType.toLowerCase() == 'data source'" name="note_add" type="outlined"
|
||||||
[flex]="true" [ratio]="0.8"></icon>
|
[flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
<icon *ngIf="entityType.toLowerCase() == 'organization'" name="corporate_fare" type="outlined"
|
<icon *ngIf="entityType.toLowerCase() == 'organization'" name="corporate_fare" type="outlined"
|
||||||
[flex]="true" [ratio]="0.8"></icon>
|
[flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||||
</span>
|
|
||||||
<u class="uk-text-capitalize uk-text-bolder">{{entityType}}</u>
|
<u class="uk-text-capitalize uk-text-bolder">{{entityType}}</u>
|
||||||
<span *ngIf="types && removeUnknown(types, true).length > 0">
|
<span *ngIf="types && removeUnknown(types, true).length > 0">
|
||||||
<icon name="keyboard_double_arrow_right" [flex]="true" [ratio]="0.8"></icon>
|
<icon name="keyboard_double_arrow_right" [flex]="true" [ratio]="0.8"></icon>
|
||||||
|
@ -120,8 +118,9 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<showPublisher *ngIf="publisher || journal" [publisher]="publisher" [journal]="journal"
|
<showPublisher *ngIf="publisher || journal" [publisher]="publisher" [journal]="journal"
|
||||||
[properties]="properties"></showPublisher>
|
[properties]="properties"></showPublisher>
|
||||||
<!-- data provider labels -->
|
<!-- data provider labels -->
|
||||||
<ng-container *ngIf="compatibility && !(compatibility.info == 'not available' && type == 'service')">
|
<span *ngIf="compatibility && !(compatibility.info == 'not available' && type == 'service')">
|
||||||
<span uk-tooltip title="Compatibility">
|
<span class="uk-text-meta uk-margin-xsmall-right">Compatibility:</span>
|
||||||
|
<span>
|
||||||
<a *ngIf="compatibility.id"
|
<a *ngIf="compatibility.id"
|
||||||
[queryParams]="addEoscPrevInParams({datasourceId: compatibility.id})" routerLinkActive="router-link-active"
|
[queryParams]="addEoscPrevInParams({datasourceId: compatibility.id})" routerLinkActive="router-link-active"
|
||||||
[routerLink]="properties.searchLinkToDataProvider.split('?')[0]">
|
[routerLink]="properties.searchLinkToDataProvider.split('?')[0]">
|
||||||
|
@ -139,10 +138,11 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
{{compatibility.name}}
|
{{compatibility.name}}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</ng-container>
|
</span>
|
||||||
<ng-container *ngIf="compatibilityString">
|
<span *ngIf="compatibilityString">
|
||||||
<span uk-tooltip title="Compatibility">{{compatibilityString}}</span>
|
<span class="uk-text-meta uk-margin-xsmall-right">Compatibility:</span>
|
||||||
</ng-container>
|
<span>{{compatibilityString}}</span>
|
||||||
|
</span>
|
||||||
<ng-container
|
<ng-container
|
||||||
*ngIf="aggregationStatus && aggregationStatus.fulltexts && aggregationStatus.fulltexts > 0">
|
*ngIf="aggregationStatus && aggregationStatus.fulltexts && aggregationStatus.fulltexts > 0">
|
||||||
<span>OpenAIRE Text Mining</span>
|
<span>OpenAIRE Text Mining</span>
|
||||||
|
@ -150,10 +150,13 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<ng-container *ngIf="thematic">
|
<ng-container *ngIf="thematic">
|
||||||
<span>Thematic</span>
|
<span>Thematic</span>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<ng-container *ngIf="publiclyFunded">
|
||||||
|
<span>Publicly funded</span>
|
||||||
|
</ng-container>
|
||||||
<!-- Projects -->
|
<!-- Projects -->
|
||||||
<span *ngIf="projects && projects.length > 0"
|
<span *ngIf="projects && projects.length > 0">
|
||||||
[attr.uk-tooltip]="projects.length > projectsLimit ? 'cls: uk-invisible' : 'pos: top; cls: uk-active'" title="Funded by">
|
<span class="uk-text-meta uk-margin-xsmall-right">Funded by:</span>
|
||||||
{{showInline ? projectNames.join(', ') : projectNames.slice(0, projectsLimit).join(', ')}}
|
<span>{{showInline ? projectNames.join(', ') : projectNames.slice(0, projectsLimit).join(', ')}}</span>
|
||||||
<span *ngIf="projects.length > projectsLimit">
|
<span *ngIf="projects.length > projectsLimit">
|
||||||
<a *ngIf="!showInline" (click)="viewAllProjectsClick();" class="uk-background-muted custom-extra-entities">
|
<a *ngIf="!showInline" (click)="viewAllProjectsClick();" class="uk-background-muted custom-extra-entities">
|
||||||
+{{projects.length - projectsLimit | number}} projects
|
+{{projects.length - projectsLimit | number}} projects
|
||||||
|
@ -165,9 +168,9 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<!-- Organizations -->
|
<!-- Organizations -->
|
||||||
<span *ngIf="organizations && organizations.length > 0"
|
<span *ngIf="organizations && organizations.length > 0">
|
||||||
[attr.uk-tooltip]="organizations.length > organizationsLimit ? 'cls: uk-invisible' : 'pos: top; cls: uk-active'" title="Partners">
|
<span class="uk-text-meta uk-margin-xsmall-right">Partners:</span>
|
||||||
{{showInline ? organizationNames.join(', ') : organizationNames.slice(0, organizationsLimit).join(', ')}}
|
<span>{{showInline ? organizationNames.join(', ') : organizationNames.slice(0, organizationsLimit).join(', ')}}</span>
|
||||||
<span *ngIf="organizations.length > organizationsLimit">
|
<span *ngIf="organizations.length > organizationsLimit">
|
||||||
<a *ngIf="!showInline" (click)="viewAllPartnersClick();" class="uk-background-muted custom-extra-entities">
|
<a *ngIf="!showInline" (click)="viewAllPartnersClick();" class="uk-background-muted custom-extra-entities">
|
||||||
+{{organizations.length - organizationsLimit | number}} partners
|
+{{organizations.length - organizationsLimit | number}} partners
|
||||||
|
@ -179,9 +182,10 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
<!-- Subjects -->
|
<!-- Subjects -->
|
||||||
<span uk-tooltip="Subjects" *ngIf="subjects && subjects.length > 0" [class.truncated]="subjects.length > 3">
|
<span *ngIf="subjects && subjects.length > 0" [class.truncated]="subjects.length > 3">
|
||||||
{{subjects.slice(0, 3).join(', ')}}
|
{{subjects.slice(0, 3).join(', ')}}
|
||||||
</span>
|
</span>
|
||||||
|
<!-- For tabs in landing -->
|
||||||
<ng-container *ngIf="provenanceAction">
|
<ng-container *ngIf="provenanceAction">
|
||||||
<span>{{provenanceAction}}</span>
|
<span>{{provenanceAction}}</span>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@ -246,6 +250,7 @@ export class EntityMetadataComponent {
|
||||||
@Input() type; // data provider landing
|
@Input() type; // data provider landing
|
||||||
@Input() provenanceAction: string; // search result
|
@Input() provenanceAction: string; // search result
|
||||||
@Input() relationName: string; // search result
|
@Input() relationName: string; // search result
|
||||||
|
@Input() publiclyFunded: boolean; // search result
|
||||||
@Input() projects: Project[];
|
@Input() projects: Project[];
|
||||||
@Input() organizations: Organization[];
|
@Input() organizations: Organization[];
|
||||||
@Input() subjects: string[];
|
@Input() subjects: string[];
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
import {NgModule} from '@angular/core';
|
||||||
|
import {CommonModule} from '@angular/common';
|
||||||
|
import {EntityMetadataComponent} from './entity-metadata.component';
|
||||||
|
import {IconsModule} from '../../utils/icons/icons.module';
|
||||||
|
import {AlertModalModule} from '../../utils/modal/alertModal.module';
|
||||||
|
import {ShowPublisherModule} from "./showPublisher.module";
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
CommonModule, IconsModule, AlertModalModule, ShowPublisherModule
|
||||||
|
],
|
||||||
|
declarations: [EntityMetadataComponent],
|
||||||
|
providers:[],
|
||||||
|
exports: [EntityMetadataComponent]
|
||||||
|
})
|
||||||
|
export class EntityMetadataModule { }
|
|
@ -2,12 +2,13 @@ import {Component, EventEmitter, Input, Output} from "@angular/core";
|
||||||
import {RouterHelper} from "../../utils/routerHelper.class";
|
import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
import {properties} from "../../../../environments/environment";
|
import {properties} from "../../../../environments/environment";
|
||||||
import {StringUtils} from "../../utils/string-utils.class";
|
import {StringUtils} from "../../utils/string-utils.class";
|
||||||
|
import {SearchFields} from "../../utils/properties/searchFields";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'fos',
|
selector: 'fos',
|
||||||
template: `
|
template: `
|
||||||
<div class="uk-visible@m">
|
<div class="uk-visible@m">
|
||||||
<div class="uk-text-xsmall" style="color: #EEB204">Beta</div>
|
<!-- <div class="uk-text-xsmall" style="color: #EEB204">Beta</div>-->
|
||||||
<div [class]="'uk-flex uk-flex-between uk-flex-middle uk-margin-'+(viewAll?'':'small-')+'bottom'">
|
<div [class]="'uk-flex uk-flex-between uk-flex-middle uk-margin-'+(viewAll?'':'small-')+'bottom'">
|
||||||
<span *ngIf="viewAll" class="clickable uk-h6 uk-flex uk-flex-middle uk-margin-small-right uk-margin-remove-bottom" (click)="viewLessClick()">
|
<span *ngIf="viewAll" class="clickable uk-h6 uk-flex uk-flex-middle uk-margin-small-right uk-margin-remove-bottom" (click)="viewLessClick()">
|
||||||
<icon class="uk-margin-small-right" name="arrow_back" [flex]="true" [ratio]="1.2"></icon>
|
<icon class="uk-margin-small-right" name="arrow_back" [flex]="true" [ratio]="1.2"></icon>
|
||||||
|
@ -45,7 +46,7 @@ import {StringUtils} from "../../utils/string-utils.class";
|
||||||
<div class="uk-hidden@m">
|
<div class="uk-hidden@m">
|
||||||
<div *ngIf="!viewAll" class="uk-grid uk-grid-small uk-grid-divider" uk-grid>
|
<div *ngIf="!viewAll" class="uk-grid uk-grid-small uk-grid-divider" uk-grid>
|
||||||
<div class="uk-width-1-4 uk-text-meta">
|
<div class="uk-width-1-4 uk-text-meta">
|
||||||
<div class="uk-text-xsmall" style="color: #EEB204">Beta</div>
|
<!-- <div class="uk-text-xsmall" style="color: #EEB204">Beta</div>-->
|
||||||
{{title}}
|
{{title}}
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-width-expand">
|
<div class="uk-width-expand">
|
||||||
|
@ -96,6 +97,7 @@ export class FosComponent {
|
||||||
public routerHelper: RouterHelper = new RouterHelper();
|
public routerHelper: RouterHelper = new RouterHelper();
|
||||||
public properties = properties;
|
public properties = properties;
|
||||||
public title: string = "Fields of Science";
|
public title: string = "Fields of Science";
|
||||||
|
private searchFieldsHelper: SearchFields = new SearchFields();
|
||||||
|
|
||||||
public viewAllClick() {
|
public viewAllClick() {
|
||||||
// if(this.subjects.length <= this.threshold*2) {
|
// if(this.subjects.length <= this.threshold*2) {
|
||||||
|
@ -122,11 +124,11 @@ export class FosComponent {
|
||||||
|
|
||||||
public buildFosQueryParam(fos) {
|
public buildFosQueryParam(fos) {
|
||||||
// return {'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)};
|
// return {'foslabel': this.urlEncodeAndQuote(fos.id+"||"+fos.label)};
|
||||||
return (properties.environment !== 'production' ? ({'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 buildFosHrefParam(fos): string {
|
public buildFosHrefParam(fos): string {
|
||||||
// return ('foslabel='+this.urlEncodeAndQuote(fos.id+"||"+fos.label));
|
// return ('foslabel='+this.urlEncodeAndQuote(fos.id+"||"+fos.label));
|
||||||
return (properties.environment !== 'production' ? ('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)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,16 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!isMobile">
|
<div *ngIf="!isMobile">
|
||||||
<span *ngFor="let item of fundedByProjects.slice(0, viewAll?fundedByProjects.length:threshold) let i=index">
|
<span *ngFor="let item of fundedByProjects.slice(0, viewAll?fundedByProjects.length:threshold) let i=index">
|
||||||
<span class="uk-text-emphasis">
|
<span class="uk-text-emphasis" (click)="dropClicked=true">
|
||||||
<a class="uk-link uk-link-text">
|
<a class="uk-link uk-link-text">
|
||||||
<ng-container *ngTemplateOutlet="funder; context: {item: item}"></ng-container>
|
<ng-container *ngTemplateOutlet="funder; context: {item: item}"></ng-container>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
<div class="default-dropdown uk-margin-remove-top uk-dropdown"
|
<div class="default-dropdown uk-margin-remove-top uk-dropdown"
|
||||||
uk-dropdown="pos: bottom-left; mode:click">
|
uk-dropdown="pos: bottom-left; mode:click">
|
||||||
<ng-container *ngTemplateOutlet="dropInfo; context: { item: item}"></ng-container>
|
<ng-container *ngIf="dropClicked">
|
||||||
|
<ng-container *ngTemplateOutlet="dropInfo; context: { item: item, index: i}"></ng-container>
|
||||||
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
<span *ngIf="i < (fundedByProjects.slice(0, viewAll?fundedByProjects.length:threshold).length - 1)">, </span>
|
<span *ngIf="i < (fundedByProjects.slice(0, viewAll?fundedByProjects.length:threshold).length - 1)">, </span>
|
||||||
</span>
|
</span>
|
||||||
|
@ -35,13 +37,13 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<div *ngIf="isMobile">
|
<div *ngIf="isMobile">
|
||||||
<div *ngFor="let item of fundedByProjects.slice(0, viewAll?fundedByProjects.length:threshold) let i=index"
|
<div *ngFor="let item of fundedByProjects.slice(0, viewAll?fundedByProjects.length:threshold) let i=index"
|
||||||
class="uk-flex uk-flex-middle uk-margin-small-bottom">
|
class="uk-flex uk-flex-middle uk-margin-small-bottom">
|
||||||
<span class="uk-text-emphasis uk-width-expand">
|
<span class="uk-text-emphasis uk-width-expand" (click)="dropClicked=true">
|
||||||
<ng-container *ngTemplateOutlet="funder; context: {item: item}"></ng-container>
|
<ng-container *ngTemplateOutlet="funder; context: {item: item}"></ng-container>
|
||||||
</span>
|
</span>
|
||||||
<a #toggle><icon name="info" visuallyHidden="info" [type]="'outlined'"></icon></a>
|
<a #toggle><icon name="info" visuallyHidden="info" [type]="'outlined'"></icon></a>
|
||||||
<mobile-dropdown [toggle]="toggle">
|
<mobile-dropdown [toggle]="toggle">
|
||||||
<div class="uk-margin-remove-top">
|
<div *ngIf="dropClicked" class="uk-margin-remove-top">
|
||||||
<ng-container *ngTemplateOutlet="dropInfo; context: { item: item}"></ng-container>
|
<ng-container *ngTemplateOutlet="dropInfo; context: { item: item, index: i}"></ng-container>
|
||||||
</div>
|
</div>
|
||||||
</mobile-dropdown>
|
</mobile-dropdown>
|
||||||
</div>
|
</div>
|
||||||
|
@ -54,7 +56,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<span *ngIf="item['acronym'] || item['title']">| {{ item['acronym'] ? item['acronym'] : item['title']}}</span>
|
<span *ngIf="item['acronym'] || item['title']">| {{ item['acronym'] ? item['acronym'] : item['title']}}</span>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<ng-template #dropInfo let-item=item>
|
<ng-template #dropInfo let-item=item let-index=index>
|
||||||
<div class="uk-padding-small">
|
<div class="uk-padding-small">
|
||||||
<span>Project</span>
|
<span>Project</span>
|
||||||
<div class="uk-margin-bottom">
|
<div class="uk-margin-bottom">
|
||||||
|
@ -84,7 +86,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
||||||
<span class="uk-text-meta">Funding stream: </span>{{item.funding}}
|
<span class="uk-text-meta">Funding stream: </span>{{item.funding}}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div *ngIf="getVocabularyLabel(item, provenanceActionVocabulary, i) || item.validated" class="uk-text-meta">
|
<div *ngIf="item.provenanceAction || item.validated" class="uk-text-meta">
|
||||||
<span *ngIf="item.validated">Validated by funder</span>
|
<span *ngIf="item.validated">Validated by funder</span>
|
||||||
<span *ngIf="item.provenanceAction && item.validated"> | </span>
|
<span *ngIf="item.provenanceAction && item.validated"> | </span>
|
||||||
<span *ngIf="item.provenanceAction">{{item.provenanceAction}}</span>
|
<span *ngIf="item.provenanceAction">{{item.provenanceAction}}</span>
|
||||||
|
@ -105,8 +107,15 @@ export class FundedByComponent {
|
||||||
public url = properties.searchLinkToProject.split('?')[0];
|
public url = properties.searchLinkToProject.split('?')[0];
|
||||||
public title: string = "Funded by";
|
public title: string = "Funded by";
|
||||||
@Input() provenanceActionVocabulary = null;
|
@Input() provenanceActionVocabulary = null;
|
||||||
public provenancesCalculated: boolean[] = [];
|
// public provenancesCalculated: boolean[] = [];
|
||||||
public routerHelper:RouterHelper = new RouterHelper();
|
public routerHelper:RouterHelper = new RouterHelper();
|
||||||
|
public dropClicked: boolean = false;
|
||||||
|
|
||||||
|
public ngOnInit() {
|
||||||
|
this.fundedByProjects.forEach((project, index) => {
|
||||||
|
this.getVocabularyLabel(project, this.provenanceActionVocabulary, index);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
public viewAllClick() {
|
public viewAllClick() {
|
||||||
if(this.fundedByProjects.length <= this.threshold*2) {
|
if(this.fundedByProjects.length <= this.threshold*2) {
|
||||||
|
@ -124,11 +133,11 @@ export class FundedByComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public getVocabularyLabel(item: any, vocabulary: any, index: number) {
|
public getVocabularyLabel(item: any, vocabulary: any, index: number) {
|
||||||
if(!this.provenancesCalculated[index]) {
|
// if(!this.provenancesCalculated[index]) {
|
||||||
this.provenancesCalculated[index] = true;
|
// this.provenancesCalculated[index] = true;
|
||||||
item.provenanceAction = HelperFunctions.getVocabularyLabel(item.provenanceAction, vocabulary, false);
|
item.provenanceAction = HelperFunctions.getVocabularyLabel(item.provenanceAction, vocabulary, false);
|
||||||
}
|
// }
|
||||||
return item.provenanceAction;
|
// return item.provenanceAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public addEoscPrevInParams(obj) {
|
public addEoscPrevInParams(obj) {
|
||||||
|
|
|
@ -21,7 +21,7 @@ import {AlertModal} from "../../../utils/modal/alert";
|
||||||
[languages]="languages" [programmingLanguages]="programmingLanguages"
|
[languages]="languages" [programmingLanguages]="programmingLanguages"
|
||||||
[compatibility]="compatibility" [aggregationStatus]="aggregationStatus"
|
[compatibility]="compatibility" [aggregationStatus]="aggregationStatus"
|
||||||
[thematic]="thematic" [type]="type" [prevPath]="prevPath"
|
[thematic]="thematic" [type]="type" [prevPath]="prevPath"
|
||||||
[countries]="countries" [projects]="projects"
|
[countries]="countries" [publiclyFunded]="publiclyFunded" [projects]="projects"
|
||||||
></entity-metadata>
|
></entity-metadata>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="authors">
|
<div *ngIf="authors">
|
||||||
|
@ -63,5 +63,6 @@ export class LandingHeaderComponent {
|
||||||
@Input() type; // data provider landing
|
@Input() type; // data provider landing
|
||||||
@Input() prevPath: string = "";
|
@Input() prevPath: string = "";
|
||||||
@Input() countries;
|
@Input() countries;
|
||||||
|
@Input() publiclyFunded;
|
||||||
@Input() projects;
|
@Input() projects;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,12 +4,12 @@ import {CommonModule} from "@angular/common";
|
||||||
import {LandingModule} from "../landing.module";
|
import {LandingModule} from "../landing.module";
|
||||||
import {ShowAuthorsModule} from "../../../utils/authors/showAuthors.module";
|
import {ShowAuthorsModule} from "../../../utils/authors/showAuthors.module";
|
||||||
import {IconsModule} from "src/app/openaireLibrary/utils/icons/icons.module";
|
import {IconsModule} from "src/app/openaireLibrary/utils/icons/icons.module";
|
||||||
import {ShowPublisherModule} from "../showPublisher.module";
|
|
||||||
import {RouterModule} from "@angular/router";
|
import {RouterModule} from "@angular/router";
|
||||||
import {ResultLandingUtilsModule} from "../resultLandingUtils.module";
|
import {ResultLandingUtilsModule} from "../resultLandingUtils.module";
|
||||||
|
import {EntityMetadataModule} from "../entity-metadata.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [CommonModule, LandingModule, ShowAuthorsModule, IconsModule, ShowPublisherModule, RouterModule, ResultLandingUtilsModule],
|
imports: [CommonModule, LandingModule, ShowAuthorsModule, IconsModule, RouterModule, ResultLandingUtilsModule, EntityMetadataModule],
|
||||||
declarations: [LandingHeaderComponent],
|
declarations: [LandingHeaderComponent],
|
||||||
exports: [LandingHeaderComponent]
|
exports: [LandingHeaderComponent]
|
||||||
})
|
})
|
||||||
|
|
|
@ -8,19 +8,15 @@ import { RouterModule } from '@angular/router';
|
||||||
import {TabPagingComponent} from './tabPaging.component';
|
import {TabPagingComponent} from './tabPaging.component';
|
||||||
import {ShowTitleComponent} from './showTitle.component';
|
import {ShowTitleComponent} from './showTitle.component';
|
||||||
import {AddThisComponent} from './addThis.component';
|
import {AddThisComponent} from './addThis.component';
|
||||||
import {PiwikServiceModule} from '../../utils/piwik/piwikService.module';
|
|
||||||
import {PreviousRouteRecorder} from'../../utils/piwik/previousRouteRecorder.guard';
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule, RouterModule, PiwikServiceModule
|
CommonModule, FormsModule, RouterModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
TabPagingComponent, ShowTitleComponent, AddThisComponent
|
TabPagingComponent, ShowTitleComponent, AddThisComponent
|
||||||
],
|
],
|
||||||
providers:[
|
providers:[],
|
||||||
PreviousRouteRecorder
|
|
||||||
],
|
|
||||||
exports: [
|
exports: [
|
||||||
TabPagingComponent, ShowTitleComponent, AddThisComponent
|
TabPagingComponent, ShowTitleComponent, AddThisComponent
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import {HostedByCollectedFrom, Project, RelationResult} from "../../utils/result-preview/result-preview";
|
import {HostedByCollectedFrom, Project, RelationResult} from "../../utils/result-preview/result-preview";
|
||||||
import {Context, Measure, Metric, Reference} from "../../utils/entities/resultLandingInfo";
|
import {Context, Measure, Metric, MetricPerDatasource, Reference} from "../../utils/entities/resultLandingInfo";
|
||||||
import {Injectable} from '@angular/core';
|
import {Injectable} from '@angular/core';
|
||||||
import {properties} from "../../../../environments/environment";
|
import {properties} from "../../../../environments/environment";
|
||||||
import {StringUtils} from "../../utils/string-utils.class";
|
import {StringUtils} from "../../utils/string-utils.class";
|
||||||
|
@ -9,11 +9,11 @@ import {StringUtils} from "../../utils/string-utils.class";
|
||||||
})
|
})
|
||||||
export class ParsingFunctions {
|
export class ParsingFunctions {
|
||||||
public eoscSubjects = [
|
public eoscSubjects = [
|
||||||
{label: 'EOSC::Jupyter Notebook', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=tag_list:"EOSC%5C:%5C:Jupyter%20Notebook"', value: 'Jupyter Notebook'},
|
{label: 'EOSC::Jupyter Notebook', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=eosc_if:%22Jupyter%20Notebook%22', value: 'Jupyter Notebook'},
|
||||||
{label: 'EOSC::RO-crate', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/data-source?q=*&fq=tag_list:%22eosc%5C:%5C:ro%5C-crate%22', value: 'RO-crate'},
|
{label: 'EOSC::RO-crate', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=eosc_if:%22RO%5C-crate%22', value: 'RO-crate'},
|
||||||
{label: 'EOSC::Galaxy Workflow', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=tag_list:%22eosc%5C:%5C:galaxy%20workflow%22', value: 'Galaxy Workflow'},
|
{label: 'EOSC::Galaxy Workflow', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=eosc_if:%22Galaxy%20Workflow%22', value: 'Galaxy Workflow'},
|
||||||
{label: 'EOSC::Twitter Data', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=tag_list:%22EOSC%5C:%5C:Twitter%20Data%22', value: 'Twitter Data'},
|
{label: 'EOSC::Twitter Data', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=eosc_if:%22Twitter%20Data%22', value: 'Twitter Data'},
|
||||||
{label: 'EOSC::Data Cube', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=tag_list:%22EOSC%5C:%5C:Data%20Cube%22', value: 'Data Cube'}
|
{label: 'EOSC::Data Cube', link: 'https://' + (properties.environment != 'production'?'beta.':'') + 'search.marketplace.eosc-portal.eu/search/service?q=*&fq=eosc_if:%22Data%20Cube%22', value: 'Data Cube'}
|
||||||
]
|
]
|
||||||
public notebookInSubjects: boolean = false;
|
public notebookInSubjects: boolean = false;
|
||||||
private notebookKeyword: string = "eosc jupyter notebook";
|
private notebookKeyword: string = "eosc jupyter notebook";
|
||||||
|
@ -265,7 +265,8 @@ export class ParsingFunctions {
|
||||||
"types": [],
|
"types": [],
|
||||||
"years": [],
|
"years": [],
|
||||||
"license": "",
|
"license": "",
|
||||||
"fulltext": ""
|
"fulltext": "",
|
||||||
|
"peerReviewed": null
|
||||||
};
|
};
|
||||||
|
|
||||||
if (instance.hasOwnProperty("hostedby")) {
|
if (instance.hasOwnProperty("hostedby")) {
|
||||||
|
@ -359,6 +360,10 @@ export class ParsingFunctions {
|
||||||
available.fulltext = instance['fulltext'];
|
available.fulltext = instance['fulltext'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(instance.hasOwnProperty("refereed") && instance.refereed.classname == "peerReviewed") {
|
||||||
|
available.peerReviewed = true;
|
||||||
|
}
|
||||||
|
|
||||||
hostedBy_collectedFrom.push(available);
|
hostedBy_collectedFrom.push(available);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,7 +538,8 @@ export class ParsingFunctions {
|
||||||
|
|
||||||
if (pid.hasOwnProperty("classid") && pid['classid'] != "") {
|
if (pid.hasOwnProperty("classid") && pid['classid'] != "") {
|
||||||
if (pid.classid == "doi" || pid.classid == "pmc" || pid.classid == "handle" || pid.classid == "pmid" || pid.classid == "re3data"
|
if (pid.classid == "doi" || pid.classid == "pmc" || pid.classid == "handle" || pid.classid == "pmid" || pid.classid == "re3data"
|
||||||
|| pid.classid == "swhid") {
|
|| pid.classid == "swhid"
|
||||||
|
|| pid.classid == "ROR" || pid.classid == "ISNI" || pid.classid == "Wikidata" || pid.classid == "FundRef") {
|
||||||
if (!identifiers.has(pid.classid)) {
|
if (!identifiers.has(pid.classid)) {
|
||||||
identifiers.set(pid.classid, new Array<string>());
|
identifiers.set(pid.classid, new Array<string>());
|
||||||
}
|
}
|
||||||
|
@ -542,7 +548,8 @@ export class ParsingFunctions {
|
||||||
} else {
|
} else {
|
||||||
for (let i = 0; i < pid.length; i++) {
|
for (let i = 0; i < pid.length; i++) {
|
||||||
if (pid[i].classid == "doi" || pid[i].classid == "pmc" || pid[i].classid == "handle" || pid[i].classid == "pmid" || pid[i].classid == "re3data"
|
if (pid[i].classid == "doi" || pid[i].classid == "pmc" || pid[i].classid == "handle" || pid[i].classid == "pmid" || pid[i].classid == "re3data"
|
||||||
|| pid[i].classid == "swhid") {
|
|| pid[i].classid == "swhid"
|
||||||
|
|| pid[i].classid == "ROR" || pid[i].classid == "ISNI" || pid[i].classid == "Wikidata" || pid[i].classid == "FundRef") {
|
||||||
if (!identifiers.has(pid[i].classid)) {
|
if (!identifiers.has(pid[i].classid)) {
|
||||||
identifiers.set(pid[i].classid, new Array<string>());
|
identifiers.set(pid[i].classid, new Array<string>());
|
||||||
}
|
}
|
||||||
|
@ -878,19 +885,43 @@ export class ParsingFunctions {
|
||||||
if (elements && elements.length) {
|
if (elements && elements.length) {
|
||||||
let bip: Metric[] = [];
|
let bip: Metric[] = [];
|
||||||
let counts: Metric[] = [];
|
let counts: Metric[] = [];
|
||||||
|
let countsPerDatasource: MetricPerDatasource[] = [];
|
||||||
let measure: Measure = {};
|
let measure: Measure = {};
|
||||||
|
|
||||||
|
let datasourcePosition: Map<string, number> = new Map<string, number>();
|
||||||
|
|
||||||
|
let views: number = 0;
|
||||||
|
let downloads: number = 0;
|
||||||
elements.forEach(element => {
|
elements.forEach(element => {
|
||||||
if (element.id == 'views') {
|
if (element.id == 'views') {
|
||||||
counts.push({name: 'views', icon: 'visibility', value: element.count, order: 0});
|
views += element.count;
|
||||||
measure.views = element.count;
|
let datasourceId = element.datasource;
|
||||||
|
if(datasourceId) {
|
||||||
|
if(datasourcePosition.has(element.datasource)) {
|
||||||
|
countsPerDatasource[datasourcePosition.get(element.datasource)].views = element.count;
|
||||||
|
} else {
|
||||||
|
datasourcePosition.set(element.datasource, countsPerDatasource.length);
|
||||||
|
countsPerDatasource.push({"datasourceId": element.datasource.split("||")[0], "datasourceName": element.datasource.split("||")[1], "views": element.count, "downloads": 0})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// measure.views = element.count;
|
||||||
}
|
}
|
||||||
if (element.id == 'downloads') {
|
if (element.id == 'downloads') {
|
||||||
counts.push({name: 'downloads', icon: 'download', value: element.count, order: 1});
|
downloads += element.count;
|
||||||
measure.downloads = element.count;
|
let datasourceId = element.datasource;
|
||||||
|
if(datasourceId) {
|
||||||
|
if(datasourcePosition.has(element.datasource)) {
|
||||||
|
countsPerDatasource[datasourcePosition.get(element.datasource)].downloads = element.count;
|
||||||
|
} else {
|
||||||
|
datasourcePosition.set(element.datasource, countsPerDatasource.length);
|
||||||
|
countsPerDatasource.push({"datasourceId": element.datasource.split("||")[0], "datasourceName": element.datasource.split("||")[1], "views": 0, "downloads": element.count})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// measure.downloads = element.count;
|
||||||
}
|
}
|
||||||
if (element.id == 'influence_alt' || element.id == 'citation_count') {
|
if (element.id == 'influence_alt' || element.id == 'citation_count') {
|
||||||
bip.push({name: 'citations', icon: 'cite', value: element.score, order: 2});
|
bip.push({name: 'citations', icon: 'cite', value: element.score, order: 2});
|
||||||
measure.citations = element.score;
|
// measure.citations = element.score;
|
||||||
}
|
}
|
||||||
if (element.id == 'popularity') {
|
if (element.id == 'popularity') {
|
||||||
let metric: Metric = {name: 'popularity', icon: 'fire', value: null, order: 3};
|
let metric: Metric = {name: 'popularity', icon: 'fire', value: null, order: 3};
|
||||||
|
@ -902,14 +933,10 @@ export class ParsingFunctions {
|
||||||
metric.value = 'Top 1%';
|
metric.value = 'Top 1%';
|
||||||
} else if (element.class == 'C4') {
|
} else if (element.class == 'C4') {
|
||||||
metric.value = 'Top 10%';
|
metric.value = 'Top 10%';
|
||||||
} else if (element.class == 'A') {
|
|
||||||
metric.value = 'Exceptional';
|
|
||||||
} else if (element.class == 'B') {
|
|
||||||
metric.value = 'Substantial';
|
|
||||||
} else {
|
} else {
|
||||||
metric.value = 'Average';
|
metric.value = 'Average';
|
||||||
}
|
}
|
||||||
measure.popularity = metric.value;
|
// measure.popularity = metric.value;
|
||||||
bip.push(metric);
|
bip.push(metric);
|
||||||
}
|
}
|
||||||
if (element.id == 'influence') {
|
if (element.id == 'influence') {
|
||||||
|
@ -922,14 +949,10 @@ export class ParsingFunctions {
|
||||||
metric.value = 'Top 1%';
|
metric.value = 'Top 1%';
|
||||||
} else if (element.class == 'C4') {
|
} else if (element.class == 'C4') {
|
||||||
metric.value = 'Top 10%';
|
metric.value = 'Top 10%';
|
||||||
} else if (element.class == 'A') {
|
|
||||||
metric.value = 'Exceptional';
|
|
||||||
} else if (element.class == 'B') {
|
|
||||||
metric.value = 'Substantial';
|
|
||||||
} else {
|
} else {
|
||||||
metric.value = 'Average';
|
metric.value = 'Average';
|
||||||
}
|
}
|
||||||
measure.influence = metric.value;
|
// measure.influence = metric.value;
|
||||||
bip.push(metric);
|
bip.push(metric);
|
||||||
}
|
}
|
||||||
if (element.id == 'impulse') {
|
if (element.id == 'impulse') {
|
||||||
|
@ -942,17 +965,24 @@ export class ParsingFunctions {
|
||||||
metric.value = 'Top 1%';
|
metric.value = 'Top 1%';
|
||||||
} else if (element.class == 'C4') {
|
} else if (element.class == 'C4') {
|
||||||
metric.value = 'Top 10%';
|
metric.value = 'Top 10%';
|
||||||
} else if (element.class == 'A') {
|
|
||||||
metric.value = 'Exceptional';
|
|
||||||
} else if (element.class == 'B') {
|
|
||||||
metric.value = 'Substantial';
|
|
||||||
} else {
|
} else {
|
||||||
metric.value = 'Average';
|
metric.value = 'Average';
|
||||||
}
|
}
|
||||||
measure.impulse = metric.value;
|
// measure.impulse = metric.value;
|
||||||
bip.push(metric);
|
bip.push(metric);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(views > 0) {
|
||||||
|
counts.push({name: 'views', icon: 'visibility', value: views, order: 0});
|
||||||
|
}
|
||||||
|
if(downloads > 0) {
|
||||||
|
counts.push({name: 'downloads', icon: 'download', value: downloads, order: 1});
|
||||||
|
}
|
||||||
|
if(countsPerDatasource && countsPerDatasource.length > 0) {
|
||||||
|
measure.countsPerDatasource = countsPerDatasource;
|
||||||
|
}
|
||||||
|
|
||||||
measure.bip = bip.sort((a, b) => a.order - b.order);
|
measure.bip = bip.sort((a, b) => a.order - b.order);
|
||||||
measure.counts = counts.sort((a, b) => a.order - b.order);
|
measure.counts = counts.sort((a, b) => a.order - b.order);
|
||||||
return measure;
|
return measure;
|
||||||
|
|
|
@ -9,7 +9,6 @@ import {ShowSubjectsComponent} from './showSubjects.component';
|
||||||
import {FundedByComponent} from './fundedBy.component';
|
import {FundedByComponent} from './fundedBy.component';
|
||||||
import {AvailableOnComponent} from './availableOn.component';
|
import {AvailableOnComponent} from './availableOn.component';
|
||||||
import {TabTableComponent} from './tabTable.component';
|
import {TabTableComponent} from './tabTable.component';
|
||||||
import {ShowPublisherComponent} from "./showPublisher.component";
|
|
||||||
import {ShowPublisherModule} from "./showPublisher.module";
|
import {ShowPublisherModule} from "./showPublisher.module";
|
||||||
import {RelatedToComponent} from "./relatedTo.component";
|
import {RelatedToComponent} from "./relatedTo.component";
|
||||||
import {FosComponent} from "./fos.component";
|
import {FosComponent} from "./fos.component";
|
||||||
|
@ -17,13 +16,11 @@ import {SdgComponent} from "./sdg.component";
|
||||||
import {IconsModule} from "../../utils/icons/icons.module";
|
import {IconsModule} from "../../utils/icons/icons.module";
|
||||||
import {AlertModalModule} from "../../utils/modal/alertModal.module";
|
import {AlertModalModule} from "../../utils/modal/alertModal.module";
|
||||||
import { SearchInputModule } from '../../sharedComponents/search-input/search-input.module';
|
import { SearchInputModule } from '../../sharedComponents/search-input/search-input.module';
|
||||||
import {EntityMetadataComponent} from "./entity-metadata.component";
|
|
||||||
import {IconsService} from "../../utils/icons/icons.service";
|
import {IconsService} from "../../utils/icons/icons.service";
|
||||||
import {book, closed_access, cog, database, earth, open_access, unknown_access} from "../../utils/icons/icons";
|
import {book, closed_access, cog, database, earth, open_access, unknown_access} from "../../utils/icons/icons";
|
||||||
import {FullScreenModalModule} from "../../utils/modal/full-screen-modal/full-screen-modal.module";
|
import {FullScreenModalModule} from "../../utils/modal/full-screen-modal/full-screen-modal.module";
|
||||||
import {MobileDropdownModule} from "../../utils/mobile-dropdown/mobile-dropdown.module";
|
import {MobileDropdownModule} from "../../utils/mobile-dropdown/mobile-dropdown.module";
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule, RouterModule, PagingModule, ShowPublisherModule, IconsModule, AlertModalModule,
|
CommonModule, FormsModule, RouterModule, PagingModule, ShowPublisherModule, IconsModule, AlertModalModule,
|
||||||
|
@ -32,15 +29,14 @@ import {MobileDropdownModule} from "../../utils/mobile-dropdown/mobile-dropdown.
|
||||||
declarations: [
|
declarations: [
|
||||||
ShowIdentifiersComponent,ShowSubjectsComponent,
|
ShowIdentifiersComponent,ShowSubjectsComponent,
|
||||||
FundedByComponent,AvailableOnComponent,TabTableComponent,
|
FundedByComponent,AvailableOnComponent,TabTableComponent,
|
||||||
RelatedToComponent, FosComponent, SdgComponent,
|
RelatedToComponent, FosComponent, SdgComponent
|
||||||
EntityMetadataComponent
|
|
||||||
],
|
],
|
||||||
providers:[
|
providers:[
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
ShowIdentifiersComponent, ShowSubjectsComponent,
|
ShowIdentifiersComponent, ShowSubjectsComponent,
|
||||||
FundedByComponent,AvailableOnComponent, TabTableComponent, ShowPublisherComponent,
|
FundedByComponent,AvailableOnComponent, TabTableComponent,
|
||||||
RelatedToComponent, FosComponent, SdgComponent, EntityMetadataComponent
|
RelatedToComponent, FosComponent, SdgComponent
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class ResultLandingUtilsModule {
|
export class ResultLandingUtilsModule {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import {StringUtils} from "../../../utils/string-utils.class";
|
||||||
template: `
|
template: `
|
||||||
<modal-alert #selectionModal [large]="true" (alertOutput)="modalOutput()" (cancelOutput)="modalCancel()"
|
<modal-alert #selectionModal [large]="true" (alertOutput)="modalOutput()" (cancelOutput)="modalCancel()"
|
||||||
[okDisabled]="!sent && !selectionStep1 && (form.invalid || sending)">
|
[okDisabled]="!sent && !selectionStep1 && (form.invalid || sending)">
|
||||||
|
<ng-container *ngIf="isOpen">
|
||||||
<sdg-selection *ngIf="subjects && subjectType == 'sdg'" #selection [class.uk-hidden]="!selectionStep1"
|
<sdg-selection *ngIf="subjects && subjectType == 'sdg'" #selection [class.uk-hidden]="!selectionStep1"
|
||||||
[subjects]="subjects" [entityType]="entityType"></sdg-selection>
|
[subjects]="subjects" [entityType]="entityType"></sdg-selection>
|
||||||
<fos-selection *ngIf="subjects && subjectType == 'fos'" #selection [class.uk-hidden]="!selectionStep1"
|
<fos-selection *ngIf="subjects && subjectType == 'fos'" #selection [class.uk-hidden]="!selectionStep1"
|
||||||
|
@ -43,6 +44,7 @@ import {StringUtils} from "../../../utils/string-utils.class";
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</ng-container>
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
`
|
`
|
||||||
})
|
})
|
||||||
|
@ -62,6 +64,7 @@ export class SdgFosSuggestComponent {
|
||||||
public sent: boolean = false;
|
public sent: boolean = false;
|
||||||
public error: boolean = false;
|
public error: boolean = false;
|
||||||
subscriptions: Subscription[] = [];
|
subscriptions: Subscription[] = [];
|
||||||
|
isOpen: boolean = false;
|
||||||
|
|
||||||
constructor(private emailService: EmailService, private fb: FormBuilder, private cdr: ChangeDetectorRef) {}
|
constructor(private emailService: EmailService, private fb: FormBuilder, private cdr: ChangeDetectorRef) {}
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,9 @@ import {properties} from "../../../../environments/environment";
|
||||||
<span class="uk-text-meta uk-text-small" [class.uk-text-uppercase]="key != 're3data'">{{key}}: </span>
|
<span class="uk-text-meta uk-text-small" [class.uk-text-uppercase]="key != 're3data'">{{key}}: </span>
|
||||||
<span [class.uk-margin-small-left]="modal">
|
<span [class.uk-margin-small-left]="modal">
|
||||||
<ng-container *ngFor="let item of identifiers.get(key) let j=index">
|
<ng-container *ngFor="let item of identifiers.get(key) let j=index">
|
||||||
<a *ngIf="key == 'doi' || key == 'pmc' || key == 'pmid' || key == 'handle' || key == 're3data' || key == 'swhid'"
|
<a *ngIf="key == 'doi' || key == 'pmc' || key == 'pmid' || key == 'handle' || key == 're3data' || key == 'swhid'
|
||||||
[href]="getUrl(key) + item" target="_blank" class="uk-display-inline-block custom-external">
|
|| key == 'ROR' || key == 'ISNI' || key == 'Wikidata' || key == 'FundRef'"
|
||||||
|
[href]="getUrl(key, item) + item" target="_blank" class="uk-display-inline-block custom-external">
|
||||||
{{item}}
|
{{item}}
|
||||||
</a>
|
</a>
|
||||||
<ng-container *ngIf="(j !== (identifiers.get(key).length - 1))">, </ng-container>
|
<ng-container *ngIf="(j !== (identifiers.get(key).length - 1))">, </ng-container>
|
||||||
|
@ -113,7 +114,10 @@ export class ShowIdentifiersComponent implements AfterViewInit {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public getUrl(key: string): string {
|
public getUrl(key: string, value: string): string {
|
||||||
|
if(value.includes("http://") || value.includes("https://")) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
if(key == "doi") {
|
if(key == "doi") {
|
||||||
return properties.doiURL;
|
return properties.doiURL;
|
||||||
} else if(key == "pmc") {
|
} else if(key == "pmc") {
|
||||||
|
@ -126,6 +130,14 @@ export class ShowIdentifiersComponent implements AfterViewInit {
|
||||||
return properties.r3DataURL;
|
return properties.r3DataURL;
|
||||||
} else if(key == "swhid") {
|
} else if(key == "swhid") {
|
||||||
return properties.swhURL;
|
return properties.swhURL;
|
||||||
|
} else if(key == "ROR") {
|
||||||
|
return properties.rorURL;
|
||||||
|
} else if(key == "ISNI") {
|
||||||
|
return properties.isniURL;
|
||||||
|
} else if(key == "Wikidata") {
|
||||||
|
return properties.wikiDataURL;
|
||||||
|
} else if(key == "FundRef") {
|
||||||
|
return properties.fundRefURL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,8 @@ import {EnvProperties} from "../../utils/properties/env-properties";
|
||||||
selector: 'showPublisher, [showPublisher]',
|
selector: 'showPublisher, [showPublisher]',
|
||||||
template: `
|
template: `
|
||||||
<ng-container *ngIf="publisher">
|
<ng-container *ngIf="publisher">
|
||||||
<span [attr.uk-tooltip]="'cls: uk-active'" [title]="'Publisher'">{{publisher}}</span>
|
<span class="uk-text-meta uk-margin-xsmall-right">Publisher:</span>
|
||||||
|
<span>{{publisher}}</span>
|
||||||
<span *ngIf="journal && (journal['journal'] || journal['issn'] || journal['lissn']
|
<span *ngIf="journal && (journal['journal'] || journal['issn'] || journal['lissn']
|
||||||
|| journal['volume'] || journal['eissn'] || journal['issue'])"
|
|| journal['volume'] || journal['eissn'] || journal['issue'])"
|
||||||
class="uk-margin-xsmall-left uk-margin-xsmall-right bullet"></span>
|
class="uk-margin-xsmall-left uk-margin-xsmall-right bullet"></span>
|
||||||
|
@ -14,7 +15,8 @@ import {EnvProperties} from "../../utils/properties/env-properties";
|
||||||
|| journal['volume'] || journal['eissn'] || journal['issue'])">
|
|| journal['volume'] || journal['eissn'] || journal['issue'])">
|
||||||
<ng-container *ngIf="journal && (journal['journal'] || journal['issn'] || journal['lissn']
|
<ng-container *ngIf="journal && (journal['journal'] || journal['issn'] || journal['lissn']
|
||||||
|| journal['volume'] || journal['eissn'] || journal['issue'])">
|
|| journal['volume'] || journal['eissn'] || journal['issue'])">
|
||||||
<span [attr.uk-tooltip]="'cls: uk-active'" [title]="'Journal'">
|
<span>
|
||||||
|
<span class="uk-text-meta uk-margin-xsmall-right">Journal:</span>
|
||||||
<span *ngIf="journal['journal']">{{journal['journal']}}</span>
|
<span *ngIf="journal['journal']">{{journal['journal']}}</span>
|
||||||
<span *ngIf="journal['journal'] && (journal['volume'] || journal['issue'])">, </span>
|
<span *ngIf="journal['journal'] && (journal['volume'] || journal['issue'])">, </span>
|
||||||
<ng-container *ngIf="journal['volume']">
|
<ng-container *ngIf="journal['volume']">
|
||||||
|
|
|
@ -13,7 +13,7 @@ import {properties} from "../../../../environments/environment";
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'showSubjects',
|
selector: 'showSubjects',
|
||||||
template: `
|
template: `
|
||||||
<ng-container *ngIf="!viewAllSubjects && ((classifiedSubjects && classifiedSubjects.size > 0) || (eoscSubjects && eoscSubjects.length > 0))">
|
<ng-container *ngIf="properties.environment == 'production' && !viewAllSubjects && ((classifiedSubjects && classifiedSubjects.size > 0) || (eoscSubjects && eoscSubjects.length > 0))">
|
||||||
<div *ngIf="!viewAllClassifiedSubjects" class="uk-text-meta">
|
<div *ngIf="!viewAllClassifiedSubjects" class="uk-text-meta">
|
||||||
Subjects by Vocabulary
|
Subjects by Vocabulary
|
||||||
</div>
|
</div>
|
||||||
|
@ -22,10 +22,11 @@ import {properties} from "../../../../environments/environment";
|
||||||
<div *ngIf="isClassifiedLarge && !viewAllClassifiedSubjects" class="uk-text-right">
|
<div *ngIf="isClassifiedLarge && !viewAllClassifiedSubjects" class="uk-text-right">
|
||||||
<a (click)="viewAllSubjectsByVocabularyClicked()" class="view-more-less-link">View all</a>
|
<a (click)="viewAllSubjectsByVocabularyClicked()" class="view-more-less-link">View all</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
<ng-container *ngIf="!viewAllClassifiedSubjects && ((subjects && subjects.length > 0) || (otherSubjects && otherSubjects.size > 0))">
|
<ng-container *ngIf="!viewAllClassifiedSubjects && ((subjects && subjects.length > 0) || (otherSubjects && otherSubjects.size > 0))">
|
||||||
<div *ngIf="!viewAllSubjects" class="uk-text-meta uk-margin-small-bottom" [class.uk-margin-medium-top]="classifiedSubjects && classifiedSubjects.size > 0">
|
<div *ngIf="!viewAllSubjects" class="uk-text-meta uk-margin-small-bottom"
|
||||||
|
[class.uk-margin-medium-top]="properties.environment == 'production' && ((classifiedSubjects && classifiedSubjects.size > 0) || (eoscSubjects && eoscSubjects.length > 0))">
|
||||||
Keywords
|
Keywords
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngTemplateOutlet="subjects_template; context: {customClasses: (isMobile && viewAllSubjects) ? '' : 'multi-line-ellipsis lines-2', id: 'content'}"></ng-container>
|
<ng-container *ngTemplateOutlet="subjects_template; context: {customClasses: (isMobile && viewAllSubjects) ? '' : 'multi-line-ellipsis lines-2', id: 'content'}"></ng-container>
|
||||||
|
@ -34,6 +35,16 @@ import {properties} from "../../../../environments/environment";
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container *ngIf="properties.environment != 'production' && !viewAllSubjects && ((eoscSubjects && eoscSubjects.length > 0))">
|
||||||
|
<div class="uk-text-meta uk-margin-small-bottom"
|
||||||
|
[class.uk-margin-medium-top]="(subjects && subjects.length > 0) || (otherSubjects && otherSubjects.size > 0)">
|
||||||
|
EOSC Subjects
|
||||||
|
</div>
|
||||||
|
<div *ngIf="eoscSubjects && eoscSubjects.length > 0">
|
||||||
|
<ng-container *ngTemplateOutlet="eosc_subjects_template; context: {id: 'content'}"></ng-container>
|
||||||
|
</div>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
<ng-template #subjects_template let-customClasses="customClasses" let-id="id">
|
<ng-template #subjects_template let-customClasses="customClasses" let-id="id">
|
||||||
<div class="uk-text-break" [ngClass]="customClasses">
|
<div class="uk-text-break" [ngClass]="customClasses">
|
||||||
<p *ngIf="subjects && subjects.length > 0"><span #content [id]="id">{{subjects.join(', ')}}</span></p>
|
<p *ngIf="subjects && subjects.length > 0"><span #content [id]="id">{{subjects.join(', ')}}</span></p>
|
||||||
|
@ -78,7 +89,7 @@ import {properties} from "../../../../environments/environment";
|
||||||
<ng-template #eosc_subjects_template let-customClasses="customClasses" let-id="id">
|
<ng-template #eosc_subjects_template let-customClasses="customClasses" let-id="id">
|
||||||
<div class="uk-flex-wrap uk-margin-medium-right"
|
<div class="uk-flex-wrap uk-margin-medium-right"
|
||||||
[ngClass]="customClasses">
|
[ngClass]="customClasses">
|
||||||
<p class="uk-flex uk-flex-middle uk-margin-bottom">
|
<p *ngIf="properties.environment == 'production'" class="uk-flex uk-flex-middle uk-margin-bottom">
|
||||||
<span #classifiedContent [id]="id+'_eosc'">
|
<span #classifiedContent [id]="id+'_eosc'">
|
||||||
<span class="uk-margin-small-top uk-display-inline-block">
|
<span class="uk-margin-small-top uk-display-inline-block">
|
||||||
<span uk-icon="tag"></span>
|
<span uk-icon="tag"></span>
|
||||||
|
@ -91,13 +102,17 @@ import {properties} from "../../../../environments/environment";
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<p *ngIf="properties.environment != 'production' && eoscSubjects && eoscSubjects.length > 0">
|
||||||
|
<span #classifiedContent [id]="id+'_eosc'">{{getValue(eoscSubjects).join(', ')}}</span>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
<modal-alert #subjectsByVocabularyModal *ngIf="!isMobile && ((classifiedSubjects && classifiedSubjects.size > 0) || (eoscSubjects && eoscSubjects.length > 0))" large="true">
|
<modal-alert #subjectsByVocabularyModal *ngIf="!isMobile && ((classifiedSubjects && classifiedSubjects.size > 0) || (eoscSubjects && eoscSubjects.length > 0))" large="true">
|
||||||
<div class="uk-text-small">
|
<div class="uk-text-small">
|
||||||
<ng-container *ngTemplateOutlet="subjects_by_vocabulary_template"></ng-container>
|
<ng-container *ngTemplateOutlet="subjects_by_vocabulary_template"></ng-container>
|
||||||
<ng-container *ngIf="eoscSubjects && eoscSubjects.length > 0"><ng-container *ngTemplateOutlet="eosc_subjects_template"></ng-container></ng-container>
|
<ng-container *ngIf="eoscSubjects && eoscSubjects.length > 0"><ng-container *ngTemplateOutlet="eosc_subjects_template; context: {id: 'content'}"></ng-container></ng-container>
|
||||||
</div>
|
</div>
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
`
|
`
|
||||||
|
@ -234,4 +249,8 @@ export class ShowSubjectsComponent {
|
||||||
this.openSubjectsByVocabularyModal();
|
this.openSubjectsByVocabularyModal();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getValue(eosSubjects) {
|
||||||
|
return eosSubjects.map(res => res.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreviousRouteRecorder } from "../../utils/piwik/previousRouteRecorder.guard";
|
||||||
|
import { OrganizationComponent } from "./organization.component";
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
RouterModule.forChild([{ path: '', component: OrganizationComponent, canDeactivate: [PreviousRouteRecorder] }])
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class OrganizationRoutingModule { }
|
|
@ -1,3 +1,9 @@
|
||||||
|
<!-- Schema -->
|
||||||
|
<schema2jsonld *ngIf="organizationInfo" [data]=organizationInfo
|
||||||
|
[URL]="properties.domain + properties.baseLink+this.properties.searchLinkToOrganization+organizationInfo.relcanId"
|
||||||
|
type="organization">
|
||||||
|
</schema2jsonld>
|
||||||
|
|
||||||
<!-- Desktop view -->
|
<!-- Desktop view -->
|
||||||
<div id="tm-main" class="uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
<div id="tm-main" class="uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
||||||
<div *ngIf="!isMobile" class="tm-main">
|
<div *ngIf="!isMobile" class="tm-main">
|
||||||
|
@ -13,35 +19,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!showFeedback" class="uk-grid uk-margin-remove-left" uk-grid>
|
<div *ngIf="!showFeedback" class="uk-grid uk-margin-remove-left" uk-grid>
|
||||||
<!-- left column -->
|
|
||||||
<!-- <div id="landing-left-sidebar" *ngIf="organizationInfo" class="uk-visible@s uk-padding-remove-horizontal">
|
|
||||||
<div class="uk-flex uk-flex-column uk-flex-right uk-sticky"
|
|
||||||
uk-sticky="end: true" [attr.offset]="offset">
|
|
||||||
<div class="uk-margin-large-bottom uk-align-center">
|
|
||||||
<div class="uk-text-meta uk-text-uppercase">Actions</div>
|
|
||||||
<ul class="uk-list">
|
|
||||||
<li class="uk-text-center">
|
|
||||||
<a (click)="openAddThisModal()" [title]="'Share this '+openaireEntities.ORGANIZATION+' in your social networks'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="share" visuallyHidden="share"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="uk-text-center"
|
|
||||||
[title]="'Download reports'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<a class="uk-link-text uk-text-bold uk-text-uppercase" (click)="buildFunderOptions(); openDownloadReportsModal()">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="download" visuallyHidden="download"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<!-- center/right column -->
|
<!-- center/right column -->
|
||||||
<div id="landing-center-content" class="uk-width-expand uk-padding-remove uk-background-default">
|
<div id="landing-center-content" class="uk-width-expand uk-padding-remove uk-background-default">
|
||||||
|
|
||||||
|
@ -116,40 +93,11 @@
|
||||||
<ng-container *ngIf="organizationInfo">
|
<ng-container *ngIf="organizationInfo">
|
||||||
<!-- Main content -->
|
<!-- Main content -->
|
||||||
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
||||||
<!-- Schema -->
|
|
||||||
<schema2jsonld *ngIf="organizationInfo" [data]=organizationInfo
|
|
||||||
[URL]="properties.domain + properties.baseLink+this.properties.searchLinkToOrganization+organizationInfo.relcanId"
|
|
||||||
type="organization">
|
|
||||||
</schema2jsonld>
|
|
||||||
<!-- Actions for mobile viewport -->
|
|
||||||
<div class="uk-flex uk-flex-right uk-margin-medium-bottom uk-hidden@s">
|
|
||||||
<div class="uk-margin-small-right">
|
|
||||||
<a (click)="openAddThisModal()" [title]="'Share this '+openaireEntities.ORGANIZATION+' in your social networks'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="share" visuallyHidden="share"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div [title]="'Download reports'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<a class="uk-link-text uk-text-bold uk-text-uppercase" (click)="buildFunderOptions(); openDownloadReportsModal()">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="download" visuallyHidden="download"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- Helper -->
|
<!-- Helper -->
|
||||||
<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>
|
||||||
<!-- Versions -->
|
|
||||||
<!-- <span *ngIf="organizationInfo.deletedByInferenceIds" class="uk-text-primary uk-flex uk-flex-middle">
|
|
||||||
<icon flex="true" ratio="0.8" name="auto_awesome_motion"></icon>
|
|
||||||
<a (click)="openDeletedByInference()" class="uk-text-primary uk-text-small uk-margin-small-left">
|
|
||||||
View all {{organizationInfo.deletedByInferenceIds.length}} versions
|
|
||||||
</a>
|
|
||||||
</span> -->
|
|
||||||
<!-- Landing header -->
|
<!-- Landing header -->
|
||||||
<landing-header [properties]="properties" [title]="organizationInfo.title.name"
|
<landing-header [properties]="properties" [title]="organizationInfo.title.name"
|
||||||
[subTitle]="(organizationInfo.name
|
[subTitle]="(organizationInfo.name
|
||||||
|
@ -169,6 +117,10 @@
|
||||||
<div *ngIf="organizationInfo.country && !organizationInfo.country.toLowerCase().includes('unknown')">
|
<div *ngIf="organizationInfo.country && !organizationInfo.country.toLowerCase().includes('unknown')">
|
||||||
<span class="uk-text-meta">Country: </span>{{organizationInfo.country}}
|
<span class="uk-text-meta">Country: </span>{{organizationInfo.country}}
|
||||||
</div>
|
</div>
|
||||||
|
<!-- Identifiers -->
|
||||||
|
<div *ngIf="organizationInfo.identifiers && organizationInfo.identifiers.size > 0" class="uk-margin-small-top">
|
||||||
|
<showIdentifiers [identifiers]="organizationInfo.identifiers" [showViewAll]="true"></showIdentifiers>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Tabs section -->
|
<!-- Tabs section -->
|
||||||
|
@ -255,9 +207,7 @@
|
||||||
</search-tab>
|
</search-tab>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-text-xsmall uk-hidden@m">
|
|
||||||
<ng-container *ngTemplateOutlet="graph_and_feedback_template"></ng-container>
|
|
||||||
</div>
|
|
||||||
<!-- Helper -->
|
<!-- Helper -->
|
||||||
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
|
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
|
||||||
[texts]="pageContents['bottom']">
|
[texts]="pageContents['bottom']">
|
||||||
|
@ -268,13 +218,13 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<!-- Feedback -->
|
<!-- Feedback -->
|
||||||
<feedback *ngIf="organizationInfo && properties.reCaptchaSiteKey" [organizationInfo]="organizationInfo"
|
<feedback *ngIf="showFeedback && organizationInfo && properties.reCaptchaSiteKey" [organizationInfo]="organizationInfo"
|
||||||
[properties]="properties" [entityType]="'organization'" [fields]="feedbackFields"
|
[properties]="properties" [entityType]="'organization'" [fields]="feedbackFields"
|
||||||
[(showForm)]="showFeedback">
|
[(showForm)]="showFeedback">
|
||||||
</feedback>
|
</feedback>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Mobile view -->
|
<!-- Mobile view -->
|
||||||
<div *ngIf="isMobile" class="uk-hidden@m uk-position-relative landing">
|
<div *ngIf="isMobile" class="uk-hidden@m uk-position-relative landing">
|
||||||
|
@ -285,6 +235,23 @@
|
||||||
&& organizationInfo.title.name !== organizationInfo.name)?organizationInfo.name:null"
|
&& organizationInfo.title.name !== organizationInfo.name)?organizationInfo.name:null"
|
||||||
[entityType]="'organization'" [prevPath]="prevPath">
|
[entityType]="'organization'" [prevPath]="prevPath">
|
||||||
</landing-header>
|
</landing-header>
|
||||||
|
<div class="uk-text-small">
|
||||||
|
<!-- Web Page -->
|
||||||
|
<div *ngIf="organizationInfo.title && organizationInfo.title.url" class="uk-margin-small-bottom uk-display-inline-block">
|
||||||
|
<span class="uk-text-meta">Web page: </span>
|
||||||
|
<a [href]="organizationInfo.title.url" target="_blank" class="uk-button uk-button-text uk-text-lowercase uk-text-normal custom-external">
|
||||||
|
{{organizationInfo.title.url}}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<!-- Country -->
|
||||||
|
<div *ngIf="organizationInfo.country && !organizationInfo.country.toLowerCase().includes('unknown')">
|
||||||
|
<span class="uk-text-meta">Country: </span>{{organizationInfo.country}}
|
||||||
|
</div>
|
||||||
|
<!-- Identifiers -->
|
||||||
|
<div *ngIf="organizationInfo.identifiers && organizationInfo.identifiers.size > 0" class="uk-margin-small-top">
|
||||||
|
<showIdentifiers [identifiers]="organizationInfo.identifiers" [showViewAll]="true" [isMobile]="true"></showIdentifiers>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="uk-section uk-margin-top uk-text-large uk-text-empashis uk-text-bold">
|
<div class="uk-section uk-margin-top uk-text-large uk-text-empashis uk-text-bold">
|
||||||
<hr>
|
<hr>
|
||||||
<ng-container>
|
<ng-container>
|
||||||
|
@ -404,10 +371,7 @@
|
||||||
[type]="'organizations'" [prevPath]="prevPath">
|
[type]="'organizations'" [prevPath]="prevPath">
|
||||||
</organizationsDeletedByInference>
|
</organizationsDeletedByInference>
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
<!-- Share -->
|
|
||||||
<modal-alert *ngIf="organizationInfo" #addThisModal classBody="uk-flex uk-flex-center uk-flex-middle">
|
|
||||||
<addThis></addThis>
|
|
||||||
</modal-alert>
|
|
||||||
<!-- Download -->
|
<!-- Download -->
|
||||||
<modal-alert *ngIf="organizationInfo" #downloadReportsModal large="true">
|
<modal-alert *ngIf="organizationInfo" #downloadReportsModal large="true">
|
||||||
<div class="uk-padding-small uk-margin-small-left uk-margin-small-right">
|
<div class="uk-padding-small uk-margin-small-left uk-margin-small-right">
|
||||||
|
|
|
@ -77,7 +77,6 @@ export class OrganizationComponent {
|
||||||
@ViewChild('downloadReportsFsModal') downloadReportsFsModal: FullScreenModalComponent;
|
@ViewChild('downloadReportsFsModal') downloadReportsFsModal: FullScreenModalComponent;
|
||||||
// @ViewChild('downloadReportModal') downloadReportModal;
|
// @ViewChild('downloadReportModal') downloadReportModal;
|
||||||
// @ViewChild('downloadFunderReportModal') downloadFunderReportModal;
|
// @ViewChild('downloadFunderReportModal') downloadFunderReportModal;
|
||||||
@ViewChild('addThisModal') addThisModal;
|
|
||||||
@ViewChild('addThisFsModal') addThisFsModal: FullScreenModalComponent;
|
@ViewChild('addThisFsModal') addThisFsModal: FullScreenModalComponent;
|
||||||
|
|
||||||
@ViewChild(ModalLoading) loading: ModalLoading;
|
@ViewChild(ModalLoading) loading: ModalLoading;
|
||||||
|
@ -172,8 +171,10 @@ export class OrganizationComponent {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
if(properties.adminToolsPortalType !== "explore") {
|
||||||
//this.getDivContents();
|
//this.getDivContents();
|
||||||
this.getPageContents();
|
this.getPageContents();
|
||||||
|
}
|
||||||
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
||||||
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
||||||
|
|
||||||
|
@ -715,13 +716,6 @@ export class OrganizationComponent {
|
||||||
this.downloadReportsModal.cancel();
|
this.downloadReportsModal.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
public openAddThisModal() {
|
|
||||||
this.addThisModal.cancelButton = false;
|
|
||||||
this.addThisModal.okButton = false;
|
|
||||||
this.addThisModal.alertTitle = "Share this "+OpenaireEntities.ORGANIZATION+" in your social networks";
|
|
||||||
this.addThisModal.open();
|
|
||||||
}
|
|
||||||
|
|
||||||
public getParamsForSearchLink(type: string = "") {
|
public getParamsForSearchLink(type: string = "") {
|
||||||
if(type) {
|
if(type) {
|
||||||
return this.routerHelper.createQueryParams(['f0', 'fv0', 'type', 'qf', 'sortBy'], ['relorganizationid', this.organizationId, type, 'false', 'resultdateofacceptance,descending']);
|
return this.routerHelper.createQueryParams(['f0', 'fv0', 'type', 'qf', 'sortBy'], ['relorganizationid', this.organizationId, type, 'false', 'resultdateofacceptance,descending']);
|
||||||
|
|
|
@ -33,11 +33,14 @@ import {graph, versions} from "../../utils/icons/icons";
|
||||||
import {FullScreenModalModule} from "../../utils/modal/full-screen-modal/full-screen-modal.module";
|
import {FullScreenModalModule} from "../../utils/modal/full-screen-modal/full-screen-modal.module";
|
||||||
import {EGIDataTransferModule} from "../../utils/dataTransfer/transferData.module";
|
import {EGIDataTransferModule} from "../../utils/dataTransfer/transferData.module";
|
||||||
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
||||||
|
import {OrganizationRoutingModule} from "./organization-routing.module";
|
||||||
|
import {ResultLandingUtilsModule} from "../landing-utils/resultLandingUtils.module";
|
||||||
|
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule, RouterModule,
|
CommonModule, FormsModule, RouterModule,
|
||||||
|
OrganizationRoutingModule,
|
||||||
LoadingModalModule, AlertModalModule, ErrorMessagesModule,
|
LoadingModalModule, AlertModalModule, ErrorMessagesModule,
|
||||||
LandingModule,
|
LandingModule,
|
||||||
DataProvidersServiceModule,
|
DataProvidersServiceModule,
|
||||||
|
@ -49,7 +52,7 @@ import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.mod
|
||||||
ProjectsServiceModule,
|
ProjectsServiceModule,
|
||||||
Schema2jsonldModule, SEOServiceModule, HelperModule,
|
Schema2jsonldModule, SEOServiceModule, HelperModule,
|
||||||
OrganizationsDeletedByInferenceModule, LandingHeaderModule, FeedbackModule,
|
OrganizationsDeletedByInferenceModule, LandingHeaderModule, FeedbackModule,
|
||||||
TabsModule, SearchTabModule, LoadingModule, IconsModule, InputModule, FullScreenModalModule, EGIDataTransferModule, EntityActionsModule
|
TabsModule, SearchTabModule, LoadingModule, IconsModule, InputModule, FullScreenModalModule, EntityActionsModule, ResultLandingUtilsModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
OrganizationComponent,
|
OrganizationComponent,
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreviousRouteRecorder } from "../../utils/piwik/previousRouteRecorder.guard";
|
||||||
|
import { ProjectComponent } from "./project.component";
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
RouterModule.forChild([{ path: '', component: ProjectComponent, canDeactivate: [PreviousRouteRecorder] }])
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class ProjectRoutingModule { }
|
|
@ -1,3 +1,8 @@
|
||||||
|
<!-- schema.org-->
|
||||||
|
<schema2jsonld *ngIf="projectInfo"
|
||||||
|
[data]=projectInfo [URL]="properties.domain+properties.baseLink+properties.searchLinkToProject+projectId"
|
||||||
|
type="project"></schema2jsonld>
|
||||||
|
|
||||||
<!-- Desktop view -->
|
<!-- Desktop view -->
|
||||||
<div class=" uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
<div class=" uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
||||||
<div *ngIf="!isMobile" class="tm-main">
|
<div *ngIf="!isMobile" class="tm-main">
|
||||||
|
@ -141,10 +146,7 @@
|
||||||
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
||||||
<div class="uk-grid uk-grid-small" uk-grid>
|
<div class="uk-grid uk-grid-small" uk-grid>
|
||||||
<div class="uk-width-expand">
|
<div class="uk-width-expand">
|
||||||
<!-- schema.org-->
|
|
||||||
<schema2jsonld [data]=projectInfo
|
|
||||||
[URL]="properties.domain+properties.baseLink+properties.searchLinkToProject+projectId"
|
|
||||||
type="project"></schema2jsonld>
|
|
||||||
<!-- Actions for mobile viewport -->
|
<!-- Actions for mobile viewport -->
|
||||||
<div class="uk-flex uk-flex-right uk-margin-medium-bottom uk-hidden@s">
|
<div class="uk-flex uk-flex-right uk-margin-medium-bottom uk-hidden@s">
|
||||||
<div class="uk-margin-small-right">
|
<div class="uk-margin-small-right">
|
||||||
|
@ -321,7 +323,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="projectInfo && hasMetrics" class="uk-width-1-1 uk-width-medium@s">
|
<div *ngIf="projectInfo && hasMetrics" class="uk-width-1-1 uk-width-medium@s">
|
||||||
<div class="landing-metrics-card uk-text-small uk-flex uk-padding-small">
|
<div class="landing-metrics-card uk-text-small uk-flex uk-padding-small">
|
||||||
<div class="uk-width-expand uk-flex uk-flex-middle">
|
<div class="uk-width-expand uk-flex uk-flex-top">
|
||||||
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-grid uk-height-match="target: > div > .cell">
|
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-grid uk-height-match="target: > div > .cell">
|
||||||
<div>
|
<div>
|
||||||
<ng-container>
|
<ng-container>
|
||||||
|
|
|
@ -218,8 +218,10 @@ export class ProjectComponent {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
if(properties.adminToolsPortalType !== "explore") {
|
||||||
//this.getDivContents();
|
//this.getDivContents();
|
||||||
this.getPageContents();
|
this.getPageContents();
|
||||||
|
}
|
||||||
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
this.updateUrl(this.properties.domain + this.properties.baseLink + this._router.url);
|
||||||
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
||||||
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
this.subscriptions.push(this.route.queryParams.subscribe(params => {
|
||||||
|
@ -897,9 +899,11 @@ export class ProjectComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
private closeLoading() {
|
private closeLoading() {
|
||||||
|
setTimeout(() => {
|
||||||
if (this.loading) {
|
if (this.loading) {
|
||||||
this.loading.close();
|
this.loading.close();
|
||||||
}
|
}
|
||||||
|
}, 300)
|
||||||
}
|
}
|
||||||
|
|
||||||
private setMessageLoading(message: string) {
|
private setMessageLoading(message: string) {
|
||||||
|
|
|
@ -32,9 +32,11 @@ import {FullScreenModalModule} from '../../utils/modal/full-screen-modal/full-sc
|
||||||
import {SafeHtmlPipeModule} from '../../utils/pipes/safeHTMLPipe.module';
|
import {SafeHtmlPipeModule} from '../../utils/pipes/safeHTMLPipe.module';
|
||||||
import {EGIDataTransferModule} from "../../utils/dataTransfer/transferData.module";
|
import {EGIDataTransferModule} from "../../utils/dataTransfer/transferData.module";
|
||||||
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
||||||
|
import {ProjectRoutingModule} from "./project-routing.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
ProjectRoutingModule,
|
||||||
CommonModule, FormsModule, RouterModule, LandingModule,
|
CommonModule, FormsModule, RouterModule, LandingModule,
|
||||||
LoadingModalModule, AlertModalModule, ErrorMessagesModule,
|
LoadingModalModule, AlertModalModule, ErrorMessagesModule,
|
||||||
IFrameModule, ReportsServiceModule,
|
IFrameModule, ReportsServiceModule,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import {HelperFunctions} from "../../../utils/HelperFunctions.class";
|
||||||
<ul class="uk-list uk-margin">
|
<ul class="uk-list uk-margin">
|
||||||
<li *ngFor="let result of results.slice((page-1)*pageSize, page*pageSize)">
|
<li *ngFor="let result of results.slice((page-1)*pageSize, page*pageSize)">
|
||||||
<result-preview [modal]="modal" [properties]="properties" [hasLink]="false" [result]="getResultPreview(result)"
|
<result-preview [modal]="modal" [properties]="properties" [hasLink]="false" [result]="getResultPreview(result)"
|
||||||
[showOrcid]="false" [isCard]="false" [prevPath]="prevPath" [showInline]="true"
|
[showOrcid]="false" [prevPath]="prevPath" [showInline]="true"
|
||||||
[isDeletedByInferenceModal]="true"></result-preview>
|
[isDeletedByInferenceModal]="true"></result-preview>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -145,6 +145,15 @@ export class DeletedByInferenceService {
|
||||||
if(author.orcid_pending) {
|
if(author.orcid_pending) {
|
||||||
author.orcid_pending = author.orcid_pending.toUpperCase();
|
author.orcid_pending = author.orcid_pending.toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(result['authors'][author.rank] && results['authors'][author.rank].fullName == author.content) {
|
||||||
|
if(!author.orcid && result['authors'][author.rank].orcid) {
|
||||||
|
author.orcid = result['authors'][author.rank].orcid;
|
||||||
|
} else if(!author.orcid_pending && result['authors'][author.rank].orcid_pending) {
|
||||||
|
author.orcid_pending = result['authors'][author.rank].orcid_pending;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
result['authors'][author.rank] = {"fullName": author.content, "orcid": author.orcid, "orcid_pending": author.orcid_pending};
|
result['authors'][author.rank] = {"fullName": author.content, "orcid": author.orcid, "orcid_pending": author.orcid_pending};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { PreviousRouteRecorder } from "../../utils/piwik/previousRouteRecorder.guard";
|
||||||
|
import { ResultLandingComponent } from "./resultLanding.component";
|
||||||
|
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
imports: [
|
||||||
|
RouterModule.forChild([{ path: '', component: ResultLandingComponent, canDeactivate: [PreviousRouteRecorder] }])
|
||||||
|
]
|
||||||
|
})
|
||||||
|
export class ResultLandingRoutingModule { }
|
|
@ -1,6 +1,11 @@
|
||||||
|
<!-- schema.org-->
|
||||||
|
<schema2jsonld *ngIf="resultLandingInfo && resultLandingInfo.record"
|
||||||
|
[data]=resultLandingInfo.record [URL]="canonicalUrl"
|
||||||
|
[searchActionRoute]="properties.searchLinkToResults"></schema2jsonld>
|
||||||
|
|
||||||
<!-- Desktop view -->
|
<!-- Desktop view -->
|
||||||
<div id="tm-main" class="uk-visible@m landing uk-section uk-padding-remove tm-middle">
|
<div *ngIf="!isMobile" id="tm-main" class="landing uk-section uk-padding-remove tm-middle">
|
||||||
<div *ngIf="!isMobile" class="tm-main">
|
<div class="tm-main">
|
||||||
<div class="publication">
|
<div class="publication">
|
||||||
<div *ngIf="properties.adminToolsPortalType == 'eosc'" class="eosc-explore-back-search-bar">
|
<div *ngIf="properties.adminToolsPortalType == 'eosc'" class="eosc-explore-back-search-bar">
|
||||||
<div class="uk-light uk-container uk-container-large uk-margin-left uk-height-1-1">
|
<div class="uk-light uk-container uk-container-large uk-margin-left uk-height-1-1">
|
||||||
|
@ -13,70 +18,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="!showFeedback" class="uk-grid uk-margin-remove-left" uk-grid>
|
<div *ngIf="!showFeedback" class="uk-grid uk-margin-remove-left" uk-grid>
|
||||||
|
|
||||||
<!-- left box/sidebar - actions -->
|
|
||||||
<!-- <div id="landing-left-sidebar" *ngIf="resultLandingInfo" class="uk-visible@s uk-padding-remove-horizontal">
|
|
||||||
<div class="uk-flex uk-flex-column uk-flex-between uk-flex-center uk-sticky"
|
|
||||||
uk-sticky="end: true" [attr.offset]="offset">
|
|
||||||
<div class="uk-align-center uk-text-center uk-margin-medium-top uk-flex uk-flex-column uk-flex-between">
|
|
||||||
<ng-container *ngIf="resultLandingInfo && (hasAltMetrics || hasMetrics)">
|
|
||||||
<metrics *ngIf="hasMetrics" class="uk-margin-bottom"
|
|
||||||
[pageViews]="pageViews"
|
|
||||||
[id]="id" [entityType]="'results'" [entity]="title"
|
|
||||||
[viewsFrameUrl]="viewsFrameUrl" [downloadsFrameUrl]="downloadsFrameUrl"
|
|
||||||
(metricsResults)="metricsResults($event)" [properties]=properties
|
|
||||||
[prevPath]="prevPath">
|
|
||||||
</metrics>
|
|
||||||
<altmetrics *ngIf="hasAltMetrics" id="{{resultLandingInfo.identifiers?.get('doi')[0]}}" type="doi"></altmetrics>
|
|
||||||
</ng-container>
|
|
||||||
</div>
|
|
||||||
<div class="uk-margin-large-bottom uk-align-center">
|
|
||||||
<div class="uk-text-meta uk-text-uppercase">Actions</div>
|
|
||||||
<ul class="uk-list">
|
|
||||||
<li class="uk-text-center">
|
|
||||||
<a (click)="openAddThisModal()"
|
|
||||||
[title]="'Share this '+getTypeName() + ' in your social networks'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="share" visuallyHidden="share"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li *ngIf="isRouteAvailable('participate/direct-claim')" class="uk-text-center"
|
|
||||||
[title]="'<span class=\'uk-flex uk-flex-middle\'>Link this '+getTypeName()+' to ...<span class=\'material-icons uk-margin-small-left\'>east</span></span>'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<a [queryParams]="routerHelper.createQueryParams(['id','type','linkTo'],[id,type,'project'])"
|
|
||||||
routerLinkActive="router-link-active" routerLink="/participate/direct-claim">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="link" visuallyHidden="link"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li class="uk-text-center">
|
|
||||||
<a (click)="openCiteModal()"
|
|
||||||
[title]="'Cite this '+getTypeName()"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="quotes" visuallyHidden="cite"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
<li *ngIf="properties.adminToolsPortalType == 'explore' || properties.adminToolsPortalType == 'community' || properties.adminToolsPortalType == 'aggregator'"
|
|
||||||
class="uk-text-center">
|
|
||||||
<orcid-work [resultId]="id" [resultTitle]="resultLandingInfo.title" [resultLandingInfo]="resultLandingInfo"
|
|
||||||
[pids]="pidsArrayString" [pageType]="'landing'">
|
|
||||||
</orcid-work>
|
|
||||||
</li>
|
|
||||||
<li *ngIf=" properties.enableEoscDataTransfer && resultLandingInfo.resultType == 'dataset' &&
|
|
||||||
resultLandingInfo.identifiers && resultLandingInfo.identifiers.get('doi')"
|
|
||||||
class="uk-text-center">
|
|
||||||
<egi-transfer-data [dois]="resultLandingInfo.identifiers.get('doi')" [isOpen]="egiTransferModalOpen"></egi-transfer-data>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div> -->
|
|
||||||
|
|
||||||
<!-- center box-->
|
<!-- center box-->
|
||||||
<div id="landing-center-content" class="uk-width-expand uk-padding-remove uk-background-default">
|
<div id="landing-center-content" class="uk-width-expand uk-padding-remove uk-background-default">
|
||||||
|
|
||||||
|
@ -161,58 +102,6 @@
|
||||||
<!-- in small screens there is no sticky #graph_and_feedback so margin-top is medium (40px) -->
|
<!-- in small screens there is no sticky #graph_and_feedback so margin-top is medium (40px) -->
|
||||||
<!-- else margin is medium (40px) - the actual height of uk-sticky-placeholder (graph_height - 20px -> margins of #graph_and_feedback) -->
|
<!-- else margin is medium (40px) - the actual height of uk-sticky-placeholder (graph_height - 20px -> margins of #graph_and_feedback) -->
|
||||||
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
<div [attr.style]="'margin-top: '+(graph_height? 'calc(40px + 20px - '+graph_height+'px)': '40px')">
|
||||||
<!-- schema.org-->
|
|
||||||
<schema2jsonld *ngIf="resultLandingInfo.record" [data]=resultLandingInfo.record
|
|
||||||
[URL]="canonicalUrl"
|
|
||||||
[searchActionRoute]="properties.searchLinkToResults"></schema2jsonld>
|
|
||||||
|
|
||||||
<!-- Actions for mobile viewport -->
|
|
||||||
<div class="uk-flex uk-flex-right uk-margin-medium-bottom uk-hidden@s">
|
|
||||||
<!-- Share -->
|
|
||||||
<div class="uk-margin-small-right">
|
|
||||||
<a (click)="openAddThisModal()"
|
|
||||||
[title]="'Share this '+getTypeName() + ' in your social networks'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="share" visuallyHidden="share"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<!-- Link to -->
|
|
||||||
<div *ngIf="isRouteAvailable('participate/direct-claim')" class="uk-margin-small-right"
|
|
||||||
[title]="'<span class=\'uk-flex uk-flex-middle\'>Link this '+getTypeName()+' to ...<span class=\'material-icons uk-margin-small-left\'>east</span></span>'"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<a [queryParams]="routerHelper.createQueryParams(['id','type','linkTo'],[id,type,'project'])"
|
|
||||||
routerLinkActive="router-link-active" routerLink="/participate/direct-claim">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="link" visuallyHidden="link"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<!-- Cite this -->
|
|
||||||
<div class="uk-margin-small-right">
|
|
||||||
<a (click)="openCiteModal()"
|
|
||||||
[title]="'Cite this '+getTypeName()"
|
|
||||||
[attr.uk-tooltip]="'pos: right; cls: uk-active uk-text-small uk-padding-small'">
|
|
||||||
<span class="uk-icon-button uk-icon landing-action-button landing-action-button-portal">
|
|
||||||
<icon name="quotes" visuallyHidden="cite"></icon>
|
|
||||||
</span>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<!-- ORCID -->
|
|
||||||
<div *ngIf="properties.adminToolsPortalType == 'explore' || properties.adminToolsPortalType == 'community' || properties.adminToolsPortalType == 'aggregator'"
|
|
||||||
class="uk-margin-small-right">
|
|
||||||
<orcid-work [resultId]="id" [resultTitle]="resultLandingInfo.title" [resultLandingInfo]="resultLandingInfo"
|
|
||||||
[pids]="pidsArrayString" [pageType]="'landing'">
|
|
||||||
</orcid-work>
|
|
||||||
</div>
|
|
||||||
<div *ngIf=" properties.enableEoscDataTransfer && resultLandingInfo.resultType == 'dataset' &&
|
|
||||||
resultLandingInfo.identifiers && resultLandingInfo.identifiers.get('doi') &&
|
|
||||||
resultLandingInfo.identifiers.get('doi').join('').indexOf('zenodo.')!=-1"
|
|
||||||
class="">
|
|
||||||
<egi-transfer-data [dois]="resultLandingInfo.identifiers.get('doi')" [isOpen]="egiTransferModalOpen"></egi-transfer-data>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<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>
|
||||||
|
|
||||||
|
@ -228,50 +117,18 @@
|
||||||
[publisher]="resultLandingInfo.publisher" [journal]="resultLandingInfo.journal"
|
[publisher]="resultLandingInfo.publisher" [journal]="resultLandingInfo.journal"
|
||||||
[languages]="resultLandingInfo.languages" [programmingLanguages]="resultLandingInfo.programmingLanguages"
|
[languages]="resultLandingInfo.languages" [programmingLanguages]="resultLandingInfo.programmingLanguages"
|
||||||
[prevPath]="prevPath" [countries]="resultLandingInfo.countries"
|
[prevPath]="prevPath" [countries]="resultLandingInfo.countries"
|
||||||
|
[publiclyFunded]="resultLandingInfo.publiclyFunded"
|
||||||
[projects]="resultLandingInfo.fundedByProjects">
|
[projects]="resultLandingInfo.fundedByProjects">
|
||||||
</landing-header>
|
</landing-header>
|
||||||
<!-- Labels -->
|
|
||||||
<!-- Not used anymore - access labels will be in action bars, languages in the landing-header component -->
|
|
||||||
<!-- <div class="uk-margin-bottom uk-grid uk-grid-small uk-flex-middle" uk-grid>
|
|
||||||
<ng-container *ngIf="resultLandingInfo.accessMode && resultLandingInfo.accessMode.toLowerCase() !== 'not available'">
|
|
||||||
<div>
|
|
||||||
<span [class]="'uk-label uk-text-truncate '+ (accessClass(resultLandingInfo.accessMode) == 'open' ? 'uk-label-success' : '')"
|
|
||||||
title="Access Mode">{{resultLandingInfo.accessMode}}
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngIf="resultLandingInfo.languages &&
|
|
||||||
removeUnknown(resultLandingInfo.languages).length > 0">
|
|
||||||
<ng-container *ngFor="let language of removeUnknown(resultLandingInfo.languages)">
|
|
||||||
<div>
|
|
||||||
<span class="uk-label custom-label label-language" title="Language">{{language}}</span>
|
|
||||||
</div>
|
|
||||||
</ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngIf="resultLandingInfo.programmingLanguages && resultLandingInfo.programmingLanguages.length > 0">
|
|
||||||
<ng-container *ngFor="let programmingLanguage of resultLandingInfo.programmingLanguages">
|
|
||||||
<div>
|
|
||||||
<span class="uk-label custom-label label-language"
|
|
||||||
title="Programming Language">{{programmingLanguage}}</span>
|
|
||||||
</div>
|
|
||||||
</ng-container>
|
|
||||||
</ng-container>
|
|
||||||
</div> -->
|
|
||||||
<div class="uk-text-small">
|
<div class="uk-text-small">
|
||||||
<!-- Identifiers -->
|
<!-- Identifiers -->
|
||||||
<div *ngIf="resultLandingInfo.identifiers && resultLandingInfo.identifiers.size > 0" class="uk-margin-small-top">
|
<div *ngIf="resultLandingInfo.identifiers && resultLandingInfo.identifiers.size > 0" class="uk-margin-small-top">
|
||||||
<showIdentifiers [identifiers]="resultLandingInfo.identifiers" [showViewAll]="true"></showIdentifiers>
|
<showIdentifiers [identifiers]="resultLandingInfo.identifiers" [showViewAll]="true"></showIdentifiers>
|
||||||
</div>
|
</div>
|
||||||
<!--Published Date, Journal and Publisher-->
|
|
||||||
<!-- Moved inside landing-header component -->
|
|
||||||
<!-- <div showPublisher [publisher]="resultLandingInfo.publisher"
|
|
||||||
[publishDate]="resultLandingInfo.dateofacceptance"
|
|
||||||
[journal]="resultLandingInfo.journal" [properties]="properties" class="uk-margin-small-top"></div> -->
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="main-tabs-div" class="uk-sticky uk-blur-background"
|
<div id="main-tabs-div" class="uk-sticky uk-blur-background" uk-sticky="end: true; media: @m" [attr.offset]="offset">
|
||||||
uk-sticky="end: true; media: @m" [attr.offset]="offset">
|
|
||||||
<div class="uk-padding uk-padding-remove-horizontal uk-padding-remove-bottom">
|
<div class="uk-padding uk-padding-remove-horizontal uk-padding-remove-bottom">
|
||||||
<landing-header [ngClass]="stickyHeader ? 'uk-visible@m' : 'uk-invisible'"
|
<landing-header [ngClass]="stickyHeader ? 'uk-visible@m' : 'uk-invisible'"
|
||||||
[properties]="properties" [title]="resultLandingInfo.title"
|
[properties]="properties" [title]="resultLandingInfo.title"
|
||||||
|
@ -280,10 +137,9 @@
|
||||||
[date]="resultLandingInfo.dateofacceptance" [embargoEndDate]="resultLandingInfo.embargoEndDate"
|
[date]="resultLandingInfo.dateofacceptance" [embargoEndDate]="resultLandingInfo.embargoEndDate"
|
||||||
isSticky="true" [prevPath]="prevPath">
|
isSticky="true" [prevPath]="prevPath">
|
||||||
</landing-header>
|
</landing-header>
|
||||||
<!-- <showTitle *ngIf="stickyHeader" [titleName]="resultLandingInfo.title" classNames="uk-margin-remove-bottom" class="uk-visible@m"></showTitle>-->
|
|
||||||
<my-tabs (selectedActiveTab)="onSelectActiveTab($event)" [offsetForSticky]="offset" [(isSticky)]="stickyHeader">
|
<my-tabs (selectedActiveTab)="onSelectActiveTab($event)" [offsetForSticky]="offset" [(isSticky)]="stickyHeader">
|
||||||
<my-tab tabTitle="Summary" [tabId]="'summary'" [active]="true"></my-tab>
|
<my-tab tabTitle="Summary" [tabId]="'summary'" [active]="true"></my-tab>
|
||||||
<my-tab *ngIf="resultLandingInfo.subjects || resultLandingInfo.otherSubjects || resultLandingInfo.classifiedSubjects"
|
<my-tab *ngIf="hasSubjects"
|
||||||
[tabTitle]="'Subjects'" [tabId]="'subjects'">
|
[tabTitle]="'Subjects'" [tabId]="'subjects'">
|
||||||
</my-tab>
|
</my-tab>
|
||||||
<my-tab *ngIf="resultLandingInfo.references && resultLandingInfo.references.length > 0"
|
<my-tab *ngIf="resultLandingInfo.references && resultLandingInfo.references.length > 0"
|
||||||
|
@ -297,13 +153,13 @@
|
||||||
<my-tab *ngIf="resultLandingInfo.bioentities && bioentitiesNum> 0"
|
<my-tab *ngIf="resultLandingInfo.bioentities && bioentitiesNum> 0"
|
||||||
[tabTitle]="'External Databases'" [tabId]="'bioentities'" [tabNumber]="bioentitiesNum">
|
[tabTitle]="'External Databases'" [tabId]="'bioentities'" [tabNumber]="bioentitiesNum">
|
||||||
</my-tab>
|
</my-tab>
|
||||||
|
<my-tab *ngIf="resultLandingInfo && (resultLandingInfo.measure || hasAltMetrics)"
|
||||||
|
[tabTitle]="'Metrics'" [tabId]="'metrics'">
|
||||||
|
</my-tab>
|
||||||
<my-tab *ngIf="enermapsId && properties.enermapsURL"
|
<my-tab *ngIf="enermapsId && properties.enermapsURL"
|
||||||
[tabTitle]="'Enermaps Tool'" [tabId]="'enermaps'"
|
[tabTitle]="'Enermaps Tool'" [tabId]="'enermaps'"
|
||||||
customClass="portalTab">
|
customClass="portalTab">
|
||||||
</my-tab>
|
</my-tab>
|
||||||
<my-tab *ngIf="resultLandingInfo && (resultLandingInfo.measure || hasAltMetrics)"
|
|
||||||
[tabTitle]="'Metrics'" [tabId]="'metrics'">
|
|
||||||
</my-tab>
|
|
||||||
</my-tabs>
|
</my-tabs>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -312,7 +168,7 @@
|
||||||
<ng-container>
|
<ng-container>
|
||||||
<ng-container *ngTemplateOutlet="summary_content"></ng-container>
|
<ng-container *ngTemplateOutlet="summary_content"></ng-container>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngIf="resultLandingInfo.subjects || resultLandingInfo.otherSubjects || resultLandingInfo.classifiedSubjects">
|
<ng-container *ngIf="hasSubjects">
|
||||||
<ng-container *ngTemplateOutlet="subjects_content"></ng-container>
|
<ng-container *ngTemplateOutlet="subjects_content"></ng-container>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngIf="resultLandingInfo.references && resultLandingInfo.references.length > 0">
|
<ng-container *ngIf="resultLandingInfo.references && resultLandingInfo.references.length > 0">
|
||||||
|
@ -328,14 +184,14 @@
|
||||||
<ng-container *ngTemplateOutlet="bioentities_content"></ng-container>
|
<ng-container *ngTemplateOutlet="bioentities_content"></ng-container>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
<ng-container *ngIf="resultLandingInfo && ((resultLandingInfo.measure && (resultLandingInfo.measure.bip.length || resultLandingInfo.measure.counts.length)) || hasAltMetrics)">
|
||||||
|
<ng-container *ngTemplateOutlet="metricsContent"></ng-container>
|
||||||
|
</ng-container>
|
||||||
<ng-container *ngIf="enermapsId && properties.enermapsURL">
|
<ng-container *ngIf="enermapsId && properties.enermapsURL">
|
||||||
<div id="enermaps" class="landing-section">
|
<div id="enermaps" class="landing-section">
|
||||||
<ng-container *ngTemplateOutlet="enermapsTool_content"></ng-container>
|
<ng-container *ngTemplateOutlet="enermapsTool_content"></ng-container>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngIf="resultLandingInfo && ((resultLandingInfo.measure && (resultLandingInfo.measure.bip.length || resultLandingInfo.measure.counts.length)) || hasAltMetrics)">
|
|
||||||
<ng-container *ngTemplateOutlet="metricsContent"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-text-xsmall uk-hidden@m"><ng-container *ngTemplateOutlet="graph_and_feedback_template"></ng-container></div>
|
<div class="uk-text-xsmall uk-hidden@m"><ng-container *ngTemplateOutlet="graph_and_feedback_template"></ng-container></div>
|
||||||
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
|
<helper *ngIf="pageContents && pageContents['bottom'] && pageContents['bottom'].length > 0"
|
||||||
|
@ -360,32 +216,12 @@
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- right box/ sidebar-->
|
|
||||||
<ng-container *ngIf="!showFeedback && resultLandingInfo && hasRightSidebarInfo">
|
|
||||||
<a id="landing-right-sidebar-switcher" uk-toggle href="#right-column-offcanvas"
|
|
||||||
class="uk-offcanvas-switcher uk-flex uk-link-reset uk-flex-center uk-flex-middle uk-hidden@m"
|
|
||||||
(click)="rightSidebarOffcanvasClicked = true;">
|
|
||||||
<icon name="more" [ratio]="1.5" customClass="uk-text-primary" [flex]="true" visuallyHidden="sidebar"></icon>
|
|
||||||
</a>
|
|
||||||
<div id="right-column-offcanvas" class="uk-offcanvas" uk-offcanvas="flip: true; overlay: true;">
|
|
||||||
<div class="uk-offcanvas-bar">
|
|
||||||
<button class="uk-offcanvas-close uk-close uk-icon" type="button"
|
|
||||||
(click)="rightSidebarOffcanvasClicked = false">
|
|
||||||
<icon name="close" [ratio]="1.5" visuallyHidden="close"></icon>
|
|
||||||
</button>
|
|
||||||
<div *ngIf="rightSidebarOffcanvasClicked">
|
|
||||||
<ng-container *ngTemplateOutlet="right_column"></ng-container>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ng-container>
|
|
||||||
|
|
||||||
<ng-template #right_column>
|
<ng-template #right_column>
|
||||||
<!-- new metrics box -->
|
<!-- new metrics box -->
|
||||||
<div *ngIf="resultLandingInfo && resultLandingInfo.measure && (resultLandingInfo.measure.bip.length || resultLandingInfo.measure.counts.length) && !viewAll"
|
<div *ngIf="resultLandingInfo && resultLandingInfo.measure && (resultLandingInfo.measure.bip.length || resultLandingInfo.measure.counts.length) && !viewAll"
|
||||||
class="uk-margin-medium-top uk-padding uk-padding-remove-vertical">
|
class="uk-margin-medium-top uk-padding uk-padding-remove-vertical">
|
||||||
<div class="landing-metrics-card uk-text-small uk-flex uk-padding-small">
|
<div class="landing-metrics-card uk-text-small uk-flex uk-padding-small">
|
||||||
<div class="uk-width-expand uk-flex uk-flex-middle">
|
<div class="uk-width-expand uk-flex uk-flex-top">
|
||||||
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-grid uk-height-match="target: > div > .cell">
|
<div class="uk-grid uk-grid-small uk-flex-nowrap" uk-grid uk-height-match="target: > div > .cell">
|
||||||
<div>
|
<div>
|
||||||
<ng-container *ngIf="resultLandingInfo.measure.bip.length">
|
<ng-container *ngIf="resultLandingInfo.measure.bip.length">
|
||||||
|
@ -453,6 +289,29 @@
|
||||||
<!-- </div>-->
|
<!-- </div>-->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div *ngIf="resultLandingInfo && resultLandingInfo.oaRoutes && !viewAll"
|
||||||
|
class="uk-margin-medium-top uk-padding uk-padding-remove-vertical">
|
||||||
|
<div class="landing-oaroutes-card uk-text-small uk-flex uk-padding-small">
|
||||||
|
<div>
|
||||||
|
<div class="uk-flex uk-flex-top" uk-grid>
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes.green" class="uk-flex-nowrap uk-flex uk-flex-middle uk-margin-xsmall-bottom uk-margin-remove-top">
|
||||||
|
<div class="dot green"></div>
|
||||||
|
<div class="uk-text-capitalize">Green</div>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes.oaColor" class="uk-flex-nowrap uk-flex uk-flex-middle uk-margin-xsmall-bottom uk-margin-remove-top">
|
||||||
|
<div class="dot" [ngClass]="resultLandingInfo.oaRoutes.oaColor"></div>
|
||||||
|
<div class="uk-text-capitalize">{{resultLandingInfo.oaRoutes.oaColor}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes.isInDiamondJournal" class="uk-flex-nowrap uk-flex uk-flex-middle uk-margin-xsmall-bottom uk-text-truncate">
|
||||||
|
<div class="dot diamond"></div>
|
||||||
|
<div>Published in a Diamond OA journal</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="uk-margin-medium-top uk-list uk-list-large uk-padding uk-padding-remove-vertical" [class.uk-list-divider]="!viewAll">
|
<div class="uk-margin-medium-top uk-list uk-list-large uk-padding uk-padding-remove-vertical" [class.uk-list-divider]="!viewAll">
|
||||||
<!-- EOSC Services-->
|
<!-- EOSC Services-->
|
||||||
<div *ngIf="resultLandingInfo.eoscSubjects?.length > 0 && properties.adminToolsPortalType == 'eosc'
|
<div *ngIf="resultLandingInfo.eoscSubjects?.length > 0 && properties.adminToolsPortalType == 'eosc'
|
||||||
|
@ -484,12 +343,11 @@
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<feedback *ngIf="showFeedback && resultLandingInfo && properties.reCaptchaSiteKey" [resultLandingInfo]="resultLandingInfo"
|
||||||
|
|
||||||
<feedback *ngIf="resultLandingInfo && properties.reCaptchaSiteKey" [resultLandingInfo]="resultLandingInfo"
|
|
||||||
[properties]="properties" [entityType]="getTypeName()" [fields]="feedbackFields"
|
[properties]="properties" [entityType]="getTypeName()" [fields]="feedbackFields"
|
||||||
[(showForm)]="showFeedback" [preSelectedField]="feedbackPreSelectedField"></feedback>
|
[(showForm)]="showFeedback" [preSelectedField]="feedbackPreSelectedField"></feedback>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Mobile view -->
|
<!-- Mobile view -->
|
||||||
<div *ngIf="isMobile" class="uk-hidden@m uk-position-relative landing">
|
<div *ngIf="isMobile" class="uk-hidden@m uk-position-relative landing">
|
||||||
|
@ -522,6 +380,7 @@
|
||||||
[date]="resultLandingInfo.dateofacceptance" [embargoEndDate]="resultLandingInfo.embargoEndDate"
|
[date]="resultLandingInfo.dateofacceptance" [embargoEndDate]="resultLandingInfo.embargoEndDate"
|
||||||
[publisher]="resultLandingInfo.publisher" [journal]="resultLandingInfo.journal"
|
[publisher]="resultLandingInfo.publisher" [journal]="resultLandingInfo.journal"
|
||||||
[languages]="resultLandingInfo.languages" [programmingLanguages]="resultLandingInfo.programmingLanguages"
|
[languages]="resultLandingInfo.languages" [programmingLanguages]="resultLandingInfo.programmingLanguages"
|
||||||
|
[publiclyFunded]="resultLandingInfo.publiclyFunded" [projects]="resultLandingInfo.fundedByProjects"
|
||||||
[isMobile]="true" [prevPath]="prevPath">
|
[isMobile]="true" [prevPath]="prevPath">
|
||||||
</landing-header>
|
</landing-header>
|
||||||
<div class="uk-text-small">
|
<div class="uk-text-small">
|
||||||
|
@ -539,6 +398,31 @@
|
||||||
<fos [subjects]="resultLandingInfo.fos" (suggestClicked)="suggestMobileClicked($event)"
|
<fos [subjects]="resultLandingInfo.fos" (suggestClicked)="suggestMobileClicked($event)"
|
||||||
(viewAllClicked)="viewAllMobile=$event; openFsModal(fosFsModal, 'Fields of Science (FoS)')"></fos>
|
(viewAllClicked)="viewAllMobile=$event; openFsModal(fosFsModal, 'Fields of Science (FoS)')"></fos>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- OA Routes -->
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes && !viewAllMobile" class="uk-margin-top uk-grid uk-grid-small uk-grid-divider" uk-grid>
|
||||||
|
<div class="uk-width-auto uk-text-meta">
|
||||||
|
Access Routes
|
||||||
|
</div>
|
||||||
|
<div class="uk-width-expand uk-flex">
|
||||||
|
<div>
|
||||||
|
<div class="uk-flex uk-flex-top" uk-grid>
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes.green" class="uk-flex-nowrap uk-flex uk-flex-middle uk-margin-xsmall-bottom uk-margin-remove-top">
|
||||||
|
<div class="dot green"></div>
|
||||||
|
<div class="uk-text-capitalize">Green</div>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes.oaColor" class="uk-flex-nowrap uk-flex uk-flex-middle uk-margin-xsmall-bottom uk-margin-remove-top">
|
||||||
|
<div class="dot" [ngClass]="resultLandingInfo.oaRoutes.oaColor"></div>
|
||||||
|
<div class="uk-text-capitalize">{{resultLandingInfo.oaRoutes.oaColor}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="resultLandingInfo.oaRoutes.isInDiamondJournal" class="uk-flex-nowrap uk-flex uk-flex-middle uk-margin-xsmall-bottom uk-text-truncate">
|
||||||
|
<div class="dot diamond"></div>
|
||||||
|
<div>Published in a Diamond OA journal</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-section uk-margin-top uk-text-large uk-text-empashis uk-text-bold">
|
<div class="uk-section uk-margin-top uk-text-large uk-text-empashis uk-text-bold">
|
||||||
<hr>
|
<hr>
|
||||||
|
@ -549,7 +433,7 @@
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngIf="resultLandingInfo.subjects || resultLandingInfo.otherSubjects || resultLandingInfo.classifiedSubjects">
|
<ng-container *ngIf="hasSubjects">
|
||||||
<div class="clickable uk-flex uk-flex-middle uk-flex-between" (click)="openFsModal(subjectsFsModal, 'Subjects'); onSelectActiveTab('subjects')">
|
<div class="clickable uk-flex uk-flex-middle uk-flex-between" (click)="openFsModal(subjectsFsModal, 'Subjects'); onSelectActiveTab('subjects')">
|
||||||
<span>Subjects</span>
|
<span>Subjects</span>
|
||||||
<icon name="chevron_right" [ratio]="1.5" [flex]="true"></icon>
|
<icon name="chevron_right" [ratio]="1.5" [flex]="true"></icon>
|
||||||
|
@ -736,7 +620,7 @@
|
||||||
</fs-modal>
|
</fs-modal>
|
||||||
|
|
||||||
<fs-modal #subjectsFsModal classTitle="uk-tile-default uk-border-bottom" (cancelEmitter)="cancelSubjectsClicked()"
|
<fs-modal #subjectsFsModal classTitle="uk-tile-default uk-border-bottom" (cancelEmitter)="cancelSubjectsClicked()"
|
||||||
*ngIf="resultLandingInfo.subjects || resultLandingInfo.otherSubjects || resultLandingInfo.classifiedSubjects">
|
*ngIf="hasSubjects">
|
||||||
<ng-container *ngIf="activeTab == 'subjects'">
|
<ng-container *ngIf="activeTab == 'subjects'">
|
||||||
<ng-container *ngTemplateOutlet="subjects_content"></ng-container>
|
<ng-container *ngTemplateOutlet="subjects_content"></ng-container>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
|
@ -835,16 +719,18 @@
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
|
|
||||||
<modal-alert *ngIf="resultLandingInfo" #addThisModal classBody="uk-flex uk-flex-center uk-flex-middle">
|
<modal-alert *ngIf="resultLandingInfo" #addThisModal classBody="uk-flex uk-flex-center uk-flex-middle">
|
||||||
<addThis></addThis>
|
<addThis *ngIf="addThisClicked"></addThis>
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
|
|
||||||
<modal-alert *ngIf="resultLandingInfo && resultLandingInfo.organizations" #organizationsModal>
|
<modal-alert *ngIf="resultLandingInfo && resultLandingInfo.organizations" #organizationsModal>
|
||||||
|
<ng-container *ngIf="viewAllOrganizations">
|
||||||
<ng-container *ngTemplateOutlet="organizations_template; context: { threshold: resultLandingInfo.organizations.length}"></ng-container>
|
<ng-container *ngTemplateOutlet="organizations_template; context: { threshold: resultLandingInfo.organizations.length}"></ng-container>
|
||||||
|
</ng-container>
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
|
|
||||||
<modal-alert *ngIf="!isMobile && resultLandingInfo?.description" #descriptionModal
|
<modal-alert *ngIf="!isMobile && resultLandingInfo?.description" #descriptionModal
|
||||||
[large]="true">
|
[large]="true">
|
||||||
<div [innerHTML]="resultLandingInfo.description"></div>
|
<div *ngIf="descriptionClicked" [innerHTML]="resultLandingInfo.description"></div>
|
||||||
</modal-alert>
|
</modal-alert>
|
||||||
|
|
||||||
<!--<modal-alert *ngIf="resultLandingInfo && resultLandingInfo.sdg?.length > 0"-->
|
<!--<modal-alert *ngIf="resultLandingInfo && resultLandingInfo.sdg?.length > 0"-->
|
||||||
|
@ -1240,6 +1126,24 @@
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
</div>
|
</div>
|
||||||
|
<div *ngIf="resultLandingInfo.measure.countsPerDatasource" class="uk-margin-medium-top uk-width-auto">
|
||||||
|
<table class="uk-table uk-table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="uk-width-expand uk-width-1-2@xl">Data source</th>
|
||||||
|
<th class="uk-width-auto uk-text-center">Views</th>
|
||||||
|
<th class="uk-width-auto uk-text-center">Downloads</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr *ngFor="let datasource of resultLandingInfo.measure.countsPerDatasource">
|
||||||
|
<td class="uk-text-truncate"><a [routerLink]="properties.searchLinkToDataProvider.split('?')[0]" [queryParams]="{'datasourceId': datasource.datasourceId}">{{datasource.datasourceName}}</a></td>
|
||||||
|
<td class="uk-text-center">{{datasource.views}}</td>
|
||||||
|
<td class="uk-text-center">{{datasource.downloads}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
<div class="uk-text-center uk-margin-large-top">
|
<div class="uk-text-center uk-margin-large-top">
|
||||||
<span class="uk-text-meta">Powered by</span>
|
<span class="uk-text-meta">Powered by</span>
|
||||||
<a href='https://usagecounts.openaire.eu/' target='_blank' class="uk-link-reset">
|
<a href='https://usagecounts.openaire.eu/' target='_blank' class="uk-link-reset">
|
||||||
|
@ -1258,6 +1162,7 @@
|
||||||
</div>
|
</div>
|
||||||
</ng-template>
|
</ng-template>
|
||||||
|
|
||||||
|
<ng-container *ngIf="isMobile">
|
||||||
<fs-modal *ngIf="resultLandingInfo && resultLandingInfo.deletedByInferenceIds" #AlertModalDeletedByInferenceFS classTitle="uk-tile-default uk-border-bottom">
|
<fs-modal *ngIf="resultLandingInfo && resultLandingInfo.deletedByInferenceIds" #AlertModalDeletedByInferenceFS classTitle="uk-tile-default uk-border-bottom">
|
||||||
<deletedByInference *ngIf="type == 'publication' && deleteByInferenceOpened"
|
<deletedByInference *ngIf="type == 'publication' && deleteByInferenceOpened"
|
||||||
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
[id]="resultLandingInfo.record['result']['header']['dri:objIdentifier']"
|
||||||
|
@ -1283,5 +1188,6 @@
|
||||||
</fs-modal>
|
</fs-modal>
|
||||||
|
|
||||||
<fs-modal *ngIf="resultLandingInfo" #addThisFsModal classTitle="uk-tile-default uk-border-bottom" classBody="uk-flex uk-flex-center uk-flex-middle">
|
<fs-modal *ngIf="resultLandingInfo" #addThisFsModal classTitle="uk-tile-default uk-border-bottom" classBody="uk-flex uk-flex-center uk-flex-middle">
|
||||||
<addThis></addThis>
|
<addThis *ngIf="addThisClicked"></addThis>
|
||||||
</fs-modal>
|
</fs-modal>
|
||||||
|
</ng-container>
|
|
@ -74,6 +74,8 @@ export class ResultLandingComponent {
|
||||||
public linkToSearchPage: string = null;
|
public linkToSearchPage: string = null;
|
||||||
|
|
||||||
public citeThisClicked: boolean;
|
public citeThisClicked: boolean;
|
||||||
|
public addThisClicked: boolean;
|
||||||
|
public descriptionClicked: boolean;
|
||||||
|
|
||||||
// Metrics tab variables
|
// Metrics tab variables
|
||||||
public metricsClicked: boolean;
|
public metricsClicked: boolean;
|
||||||
|
@ -134,7 +136,6 @@ export class ResultLandingComponent {
|
||||||
|
|
||||||
public isLoggedIn: boolean = false;
|
public isLoggedIn: boolean = false;
|
||||||
public pid: string;
|
public pid: string;
|
||||||
// @ViewChild("annotation") annotation: AnnotationComponent;
|
|
||||||
public contextsWithLink: any;
|
public contextsWithLink: any;
|
||||||
|
|
||||||
public relatedClassFilters: Option[]=[{"label": "All relations", "value": ""}];
|
public relatedClassFilters: Option[]=[{"label": "All relations", "value": ""}];
|
||||||
|
@ -198,6 +199,9 @@ export class ResultLandingComponent {
|
||||||
private userManagementService: UserManagementService,
|
private userManagementService: UserManagementService,
|
||||||
private layoutService: LayoutService,
|
private layoutService: LayoutService,
|
||||||
private _contextService: ContextsService) {
|
private _contextService: ContextsService) {
|
||||||
|
if(route.snapshot.data && route.snapshot.data['type']) {
|
||||||
|
this.type = route.snapshot.data['type'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
@ -214,8 +218,10 @@ export class ResultLandingComponent {
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
if(properties.adminToolsPortalType !== "explore") {
|
||||||
//this.getDivContents();
|
//this.getDivContents();
|
||||||
this.getPageContents();
|
this.getPageContents();
|
||||||
|
}
|
||||||
this.updateUrl(this.properties.domain +this.properties.baseLink + this._router.url);
|
this.updateUrl(this.properties.domain +this.properties.baseLink + this._router.url);
|
||||||
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
this.seoService.createLinkForCanonicalURL(this.properties.domain +this.properties.baseLink + this._router.url);
|
||||||
this.subscriptions.push(this.route.queryParams.subscribe(data => {
|
this.subscriptions.push(this.route.queryParams.subscribe(data => {
|
||||||
|
@ -554,10 +560,6 @@ export class ResultLandingComponent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.communityId && this.communityId == "enermaps" && properties.enermapsURL) {
|
|
||||||
this.enermapsId = ParsingFunctions.getEnermapsConceptId(this.resultLandingInfo.contexts);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.relatedClassFilters = [{"label": "All relations", "value": ""}];
|
this.relatedClassFilters = [{"label": "All relations", "value": ""}];
|
||||||
if (this.resultLandingInfo.relatedClassFilters.size > 1) {
|
if (this.resultLandingInfo.relatedClassFilters.size > 1) {
|
||||||
for (let relClass of this.resultLandingInfo.relatedClassFilters) {
|
for (let relClass of this.resultLandingInfo.relatedClassFilters) {
|
||||||
|
@ -591,6 +593,9 @@ export class ResultLandingComponent {
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
|
|
||||||
if (contexts) {
|
if (contexts) {
|
||||||
|
if (this.communityId && this.communityId == "enermaps" && properties.enermapsURL) {
|
||||||
|
this.enermapsId = ParsingFunctions.getEnermapsConceptId(contexts);
|
||||||
|
}
|
||||||
await this.promise;
|
await this.promise;
|
||||||
if(this.publicCommunities && this.publicCommunities.length > 0) {
|
if(this.publicCommunities && this.publicCommunities.length > 0) {
|
||||||
this.resultLandingInfo.contexts = contexts.filter(context => {
|
this.resultLandingInfo.contexts = contexts.filter(context => {
|
||||||
|
@ -864,6 +869,7 @@ export class ResultLandingComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public openAddThisModal() {
|
public openAddThisModal() {
|
||||||
|
this.addThisClicked = true;
|
||||||
this.addThisModal.cancelButton = false;
|
this.addThisModal.cancelButton = false;
|
||||||
this.addThisModal.okButton = false;
|
this.addThisModal.okButton = false;
|
||||||
this.addThisModal.alertTitle = "Share this " + this.getTypeName() + " in your social networks";
|
this.addThisModal.alertTitle = "Share this " + this.getTypeName() + " in your social networks";
|
||||||
|
@ -1076,6 +1082,7 @@ export class ResultLandingComponent {
|
||||||
this.sdgFosSuggest.subjectType="fos";
|
this.sdgFosSuggest.subjectType="fos";
|
||||||
}
|
}
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
|
this.sdgFosSuggest.isOpen = true;
|
||||||
this.sdgFosSuggest.openSelectionModal();
|
this.sdgFosSuggest.openSelectionModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1090,6 +1097,7 @@ export class ResultLandingComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
public openDescriptionModal() {
|
public openDescriptionModal() {
|
||||||
|
this.descriptionClicked = true;
|
||||||
this.descriptionModal.alertFooter = false;
|
this.descriptionModal.alertFooter = false;
|
||||||
this.descriptionModal.alertTitle = "Abstract";
|
this.descriptionModal.alertTitle = "Abstract";
|
||||||
this.descriptionModal.open();
|
this.descriptionModal.open();
|
||||||
|
@ -1173,6 +1181,10 @@ export class ResultLandingComponent {
|
||||||
return "Not available access";
|
return "Not available access";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get hasSubjects(): boolean {
|
||||||
|
return !!(this.resultLandingInfo.subjects || this.resultLandingInfo.otherSubjects || (this.resultLandingInfo.classifiedSubjects && this.properties.environment == 'production') || this.resultLandingInfo.eoscSubjects);
|
||||||
|
}
|
||||||
|
|
||||||
public getEoscParams() {
|
public getEoscParams() {
|
||||||
let params = "";
|
let params = "";
|
||||||
if(this.prevPath) {
|
if(this.prevPath) {
|
||||||
|
|
|
@ -20,7 +20,6 @@ import {ShowAuthorsModule} from "../../utils/authors/showAuthors.module";
|
||||||
import {HelperModule} from "../../utils/helper/helper.module";
|
import {HelperModule} from "../../utils/helper/helper.module";
|
||||||
import {ResultLandingUtilsModule} from "../landing-utils/resultLandingUtils.module";
|
import {ResultLandingUtilsModule} from "../landing-utils/resultLandingUtils.module";
|
||||||
import {AlertModalModule} from "../../utils/modal/alertModal.module";
|
import {AlertModalModule} from "../../utils/modal/alertModal.module";
|
||||||
import {AnnotationModule} from "../annotation/annotation.module";
|
|
||||||
import {LandingHeaderModule} from "../landing-utils/landing-header/landing-header.module";
|
import {LandingHeaderModule} from "../landing-utils/landing-header/landing-header.module";
|
||||||
import {NoLoadPaging} from "../../searchPages/searchUtils/no-load-paging.module";
|
import {NoLoadPaging} from "../../searchPages/searchUtils/no-load-paging.module";
|
||||||
import {ResultPreviewModule} from "../../utils/result-preview/result-preview.module";
|
import {ResultPreviewModule} from "../../utils/result-preview/result-preview.module";
|
||||||
|
@ -38,14 +37,16 @@ import {SdgFosSuggestModule} from '../landing-utils/sdg-fos-suggest/sdg-fos-sugg
|
||||||
import {FullScreenModalModule} from "../../utils/modal/full-screen-modal/full-screen-modal.module";
|
import {FullScreenModalModule} from "../../utils/modal/full-screen-modal/full-screen-modal.module";
|
||||||
import {SafeHtmlPipeModule} from '../../utils/pipes/safeHTMLPipe.module';
|
import {SafeHtmlPipeModule} from '../../utils/pipes/safeHTMLPipe.module';
|
||||||
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.module";
|
||||||
|
import {ResultLandingRoutingModule} from "./resultLanding-routing.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule, LandingModule, SharedModule, RouterModule,
|
CommonModule, FormsModule, LandingModule, SharedModule, RouterModule,
|
||||||
|
ResultLandingRoutingModule,
|
||||||
CiteThisModule, PagingModule, IFrameModule,
|
CiteThisModule, PagingModule, IFrameModule,
|
||||||
AltMetricsModule, Schema2jsonldModule, SEOServiceModule,
|
AltMetricsModule, Schema2jsonldModule, SEOServiceModule,
|
||||||
DeletedByInferenceModule, ShowAuthorsModule, HelperModule, ResultLandingUtilsModule, AlertModalModule,
|
DeletedByInferenceModule, ShowAuthorsModule, HelperModule, ResultLandingUtilsModule, AlertModalModule,
|
||||||
AnnotationModule, LandingHeaderModule, NoLoadPaging, ResultPreviewModule, FeedbackModule, TabsModule, LoadingModule,
|
LandingHeaderModule, NoLoadPaging, ResultPreviewModule, FeedbackModule, TabsModule, LoadingModule,
|
||||||
OrcidModule, IconsModule, InputModule, EGIDataTransferModule, RecaptchaModule,
|
OrcidModule, IconsModule, InputModule, EGIDataTransferModule, RecaptchaModule,
|
||||||
SdgFosSuggestModule, FullScreenModalModule, SafeHtmlPipeModule, EntityActionsModule
|
SdgFosSuggestModule, FullScreenModalModule, SafeHtmlPipeModule, EntityActionsModule
|
||||||
],
|
],
|
||||||
|
|
|
@ -9,6 +9,7 @@ import {HostedByCollectedFrom, Organization} from "../../utils/result-preview/re
|
||||||
import {Dates, Identifier, StringUtils} from "../../utils/string-utils.class";
|
import {Dates, Identifier, StringUtils} from "../../utils/string-utils.class";
|
||||||
import {properties} from "../../../../environments/environment";
|
import {properties} from "../../../../environments/environment";
|
||||||
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
||||||
|
import {SearchFields} from "../../utils/properties/searchFields";
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ResultLandingService {
|
export class ResultLandingService {
|
||||||
|
@ -141,6 +142,19 @@ export class ResultLandingService {
|
||||||
this.resultLandingInfo.publisher = data[0].publisher;
|
this.resultLandingInfo.publisher = data[0].publisher;
|
||||||
this.resultLandingInfo.description = this.parsingFunctions.parseDescription(data[0] && data[0].description ? data[0].description : []);
|
this.resultLandingInfo.description = this.parsingFunctions.parseDescription(data[0] && data[0].description ? data[0].description : []);
|
||||||
this.resultLandingInfo.embargoEndDate = data[0].embargoenddate ? Dates.getDate(data[0].embargoenddate) : null;
|
this.resultLandingInfo.embargoEndDate = data[0].embargoenddate ? Dates.getDate(data[0].embargoenddate) : null;
|
||||||
|
|
||||||
|
if(data[0].hasOwnProperty("publiclyfunded") && data[0].publiclyfunded) {
|
||||||
|
this.resultLandingInfo.publiclyFunded = data[0].publiclyfunded;
|
||||||
|
}
|
||||||
|
if((data[0].hasOwnProperty("isgreen") && data[0].isgreen)
|
||||||
|
|| (data[0].hasOwnProperty("openaccesscolor") && data[0].openaccesscolor)
|
||||||
|
|| (data[0].hasOwnProperty("isindiamondjournal") && data[0].isindiamondjournal)) {
|
||||||
|
this.resultLandingInfo.oaRoutes = {
|
||||||
|
"green": data[0].isgreen,
|
||||||
|
"oaColor": data[0].openaccesscolor,
|
||||||
|
"isInDiamondJournal":data[0].isindiamondjournal
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data[0]['bestaccessright'] && data[0]['bestaccessright'].hasOwnProperty("classname")) {
|
if (data[0]['bestaccessright'] && data[0]['bestaccessright'].hasOwnProperty("classname")) {
|
||||||
|
@ -312,20 +326,26 @@ export class ResultLandingService {
|
||||||
this.resultLandingInfo.subjects = subjectResults[0];
|
this.resultLandingInfo.subjects = subjectResults[0];
|
||||||
this.resultLandingInfo.otherSubjects = subjectResults[1];
|
this.resultLandingInfo.otherSubjects = subjectResults[1];
|
||||||
this.resultLandingInfo.classifiedSubjects = subjectResults[2];
|
this.resultLandingInfo.classifiedSubjects = subjectResults[2];
|
||||||
|
|
||||||
if (subjectResults[3]) {
|
if (subjectResults[3]) {
|
||||||
|
let searchFieldsHelper: SearchFields = new SearchFields();
|
||||||
subjectResults[3].forEach(element => {
|
subjectResults[3].forEach(element => {
|
||||||
this.resultLandingInfo.fos.push({id: element, label: element.replace(/^\d+/, '').trim()});
|
this.resultLandingInfo.fos.push(
|
||||||
|
{id: element, label: searchFieldsHelper.getFosParameter() == "foslabel" ? element.replace(/^\d+/, '').trim() : element}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (this.resultLandingInfo.fos) {
|
if (this.resultLandingInfo.fos) {
|
||||||
this.resultLandingInfo.fos.sort((a, b) => a.id.localeCompare(b.id));
|
this.resultLandingInfo.fos.sort((a, b) => a.id.localeCompare(b.id));
|
||||||
}
|
}
|
||||||
|
if(properties.dashboard != "irish") {
|
||||||
this.resultLandingInfo.sdg = subjectResults[4];
|
this.resultLandingInfo.sdg = subjectResults[4];
|
||||||
if (this.resultLandingInfo.sdg) {
|
if (this.resultLandingInfo.sdg) {
|
||||||
this.resultLandingInfo.sdg.sort((a, b) => {
|
this.resultLandingInfo.sdg.sort((a, b) => {
|
||||||
return HelperFunctions.sortSDGs(a, b);
|
return HelperFunctions.sortSDGs(a, b);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// if(!this.resultLandingInfo.eoscSubjects) {
|
// if(!this.resultLandingInfo.eoscSubjects) {
|
||||||
// this.resultLandingInfo.eoscSubjects = subjectResults[5];
|
// this.resultLandingInfo.eoscSubjects = subjectResults[5];
|
||||||
|
@ -376,6 +396,15 @@ export class ResultLandingService {
|
||||||
if (author.orcid_pending) {
|
if (author.orcid_pending) {
|
||||||
author.orcid_pending = author.orcid_pending.toUpperCase();
|
author.orcid_pending = author.orcid_pending.toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(this.resultLandingInfo['authors'][author.rank] && this.resultLandingInfo['authors'][author.rank].fullName == author.content) {
|
||||||
|
if(!author.orcid && this.resultLandingInfo['authors'][author.rank].orcid) {
|
||||||
|
author.orcid = this.resultLandingInfo['authors'][author.rank].orcid;
|
||||||
|
} else if(!author.orcid_pending && this.resultLandingInfo['authors'][author.rank].orcid_pending) {
|
||||||
|
author.orcid_pending = this.resultLandingInfo['authors'][author.rank].orcid_pending;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.resultLandingInfo['authors'][author.rank] = {
|
this.resultLandingInfo['authors'][author.rank] = {
|
||||||
"fullName": author.content,
|
"fullName": author.content,
|
||||||
"orcid": author.orcid,
|
"orcid": author.orcid,
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { Router, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@a
|
||||||
import {Observable} from 'rxjs';
|
import {Observable} from 'rxjs';
|
||||||
import {LoginErrorCodes} from './utils/guardHelper.class';
|
import {LoginErrorCodes} from './utils/guardHelper.class';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable({providedIn: 'root'})
|
||||||
export class FreeGuard {
|
export class FreeGuard {
|
||||||
|
|
||||||
constructor(private router: Router) {
|
constructor(private router: Router) {
|
||||||
|
|
|
@ -27,7 +27,6 @@ export class UserComponent {
|
||||||
public errorCode: string = "";
|
public errorCode: string = "";
|
||||||
public redirectUrl: string = "";
|
public redirectUrl: string = "";
|
||||||
public routerHelper: RouterHelper = new RouterHelper();
|
public routerHelper: RouterHelper = new RouterHelper();
|
||||||
public loginUrl;
|
|
||||||
public properties: EnvProperties = properties;
|
public properties: EnvProperties = properties;
|
||||||
@Input() mainComponent = true;
|
@Input() mainComponent = true;
|
||||||
|
|
||||||
|
@ -40,7 +39,6 @@ export class UserComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.loginUrl = this.properties.loginUrl;
|
|
||||||
if (typeof document !== 'undefined') {
|
if (typeof document !== 'undefined') {
|
||||||
this.server = false;
|
this.server = false;
|
||||||
this.userManagementsService.updateUserInfo( () => {
|
this.userManagementsService.updateUserInfo( () => {
|
||||||
|
|
|
@ -7,16 +7,13 @@ import {UserRoutingModule} from './user-routing.module';
|
||||||
|
|
||||||
import {UserComponent} from './user.component';
|
import {UserComponent} from './user.component';
|
||||||
|
|
||||||
import {PreviousRouteRecorder} from '../utils/piwik/previousRouteRecorder.guard';
|
|
||||||
import {LoadingModule} from "../utils/loading/loading.module";
|
import {LoadingModule} from "../utils/loading/loading.module";
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule, FormsModule, UserRoutingModule, RouterModule, LoadingModule
|
CommonModule, FormsModule, UserRoutingModule, RouterModule, LoadingModule
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [],
|
||||||
PreviousRouteRecorder
|
|
||||||
],
|
|
||||||
declarations: [
|
declarations: [
|
||||||
UserComponent
|
UserComponent
|
||||||
],
|
],
|
||||||
|
|
|
@ -122,12 +122,8 @@ export class UserMiniComponent implements OnInit, OnChanges {
|
||||||
public isAuthorized: boolean = false;
|
public isAuthorized: boolean = false;
|
||||||
@Input() public mobileView: boolean = false;
|
@Input() public mobileView: boolean = false;
|
||||||
public firstLetters: string = "";
|
public firstLetters: string = "";
|
||||||
public server: boolean = true;
|
|
||||||
public routerHelper: RouterHelper = new RouterHelper();
|
public routerHelper: RouterHelper = new RouterHelper();
|
||||||
@Input() userMenuItems;
|
@Input() userMenuItems;
|
||||||
@Input() logInUrl;
|
|
||||||
@Input() logOutUrl;
|
|
||||||
@Input() cookieDomain;
|
|
||||||
@Input() notificationConfiguration: NotificationConfiguration;
|
@Input() notificationConfiguration: NotificationConfiguration;
|
||||||
@ViewChild('notificationsSidebar') notificationsSidebar: NotificationsSidebarComponent;
|
@ViewChild('notificationsSidebar') notificationsSidebar: NotificationsSidebarComponent;
|
||||||
public showNotifications = false;
|
public showNotifications = false;
|
||||||
|
@ -137,9 +133,6 @@ export class UserMiniComponent implements OnInit, OnChanges {
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
if (typeof document !== 'undefined') {
|
|
||||||
this.server = false;
|
|
||||||
}
|
|
||||||
this.initUser();
|
this.initUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import {stakeholderTypes} from "../../monitor/entities/stakeholder";
|
import {StakeholderConfiguration} from "../../monitor-admin/utils/indicator-utils";
|
||||||
|
|
||||||
|
|
||||||
export class User {
|
export class User {
|
||||||
email: string;
|
email: string;
|
||||||
|
@ -9,6 +10,7 @@ export class User {
|
||||||
expirationDate: number;
|
expirationDate: number;
|
||||||
role: string[];
|
role: string[];
|
||||||
accessToken?: string;
|
accessToken?: string;
|
||||||
|
orcid?: string;
|
||||||
refreshToken?: string;
|
refreshToken?: string;
|
||||||
|
|
||||||
constructor(info: any) {
|
constructor(info: any) {
|
||||||
|
@ -22,6 +24,9 @@ export class User {
|
||||||
if(info.refreshToken) {
|
if(info.refreshToken) {
|
||||||
this.refreshToken = info.refreshToken;
|
this.refreshToken = info.refreshToken;
|
||||||
}
|
}
|
||||||
|
if(info.orcid) {
|
||||||
|
this.orcid = info.orcid;
|
||||||
|
}
|
||||||
this.fullname = (info.name) ? info.name : "";
|
this.fullname = (info.name) ? info.name : "";
|
||||||
if (this.fullname == "") {
|
if (this.fullname == "") {
|
||||||
if (this.firstname != "") {
|
if (this.firstname != "") {
|
||||||
|
@ -37,7 +42,7 @@ export class User {
|
||||||
this.role = [];
|
this.role = [];
|
||||||
if (info.roles) {
|
if (info.roles) {
|
||||||
info.roles.forEach(role => {
|
info.roles.forEach(role => {
|
||||||
this.role.push(role);
|
this.role.push(decodeURIComponent(role).replace('$$', '::'));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (info.edu_person_entitlements) {
|
if (info.edu_person_entitlements) {
|
||||||
|
@ -63,20 +68,31 @@ export class Session {
|
||||||
var cookie = COOKIE.getCookie(COOKIE.cookieName_id);
|
var cookie = COOKIE.getCookie(COOKIE.cookieName_id);
|
||||||
return (cookie != null && cookie != "");
|
return (cookie != null && cookie != "");
|
||||||
}
|
}
|
||||||
|
public static clearReloadUrl() {
|
||||||
|
COOKIE.setCookie("reloadURLs", JSON.stringify([]), -1);
|
||||||
|
}
|
||||||
public static setReloadUrl(host: string, path: string, params: string, fragment: string) {
|
public static setReloadUrl(host: string, path: string, params: string, fragment: string) {
|
||||||
var URL = {};
|
let URLs:any[] = this.getReloadUrl();
|
||||||
|
let URL = {};
|
||||||
URL["host"] = host;
|
URL["host"] = host;
|
||||||
URL["path"] = path;
|
URL["path"] = path;
|
||||||
URL["params"] = params;
|
URL["params"] = params;
|
||||||
URL["fragment"] = fragment;
|
URL["fragment"] = fragment;
|
||||||
COOKIE.setCookie("reloadURL", JSON.stringify(URL), -1);
|
URLs.push(URL);
|
||||||
|
COOKIE.setCookie("reloadURLs", JSON.stringify(URLs), -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static getReloadUrl() {
|
public static getReloadUrl() {
|
||||||
var URL = COOKIE.getCookie("reloadURL");
|
let URLs = COOKIE.getCookie("reloadURLs");
|
||||||
URL = JSON.parse(URL);
|
let array = JSON.parse(URLs);
|
||||||
return URL;
|
return array?array:[];
|
||||||
|
|
||||||
|
}
|
||||||
|
public static popReloadUrl() {
|
||||||
|
let array = this.getReloadUrl();
|
||||||
|
let Url = array.length>0?array[0]:null;
|
||||||
|
COOKIE.setCookie("reloadURLs", JSON.stringify(array.slice(1)), -1);
|
||||||
|
return Url;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +116,7 @@ export class Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isMonitorCurator(user: User): boolean {
|
public static isMonitorCurator(user: User): boolean {
|
||||||
return stakeholderTypes.filter(stakeholderType => this.isTypeCurator(stakeholderType.value, user)).length > 0;
|
return StakeholderConfiguration.TYPES.filter(stakeholderType => this.isTypeCurator(stakeholderType.value, user)).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isCommunityCurator(user: User): boolean {
|
public static isCommunityCurator(user: User): boolean {
|
||||||
|
@ -112,7 +128,7 @@ export class Session {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isCurator(type: string, user: User): boolean {
|
public static isCurator(type: string, user: User): boolean {
|
||||||
return (type === 'community' || stakeholderTypes.find(stakeholderType => stakeholderType.value == type)) && this.isTypeCurator(type, user);
|
return (type === 'community' || StakeholderConfiguration.TYPES.find(stakeholderType => stakeholderType.value == type)) && this.isTypeCurator(type, user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static isPortalAdministrator(user: User): boolean {
|
public static isPortalAdministrator(user: User): boolean {
|
||||||
|
@ -206,12 +222,16 @@ export class COOKIE {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Role {
|
export class Role {
|
||||||
|
public static GROUP = '';
|
||||||
public static PORTAL_ADMIN = 'PORTAL_ADMINISTRATOR';
|
public static PORTAL_ADMIN = 'PORTAL_ADMINISTRATOR';
|
||||||
public static REGISTERED_USER = 'REGISTERED_USER';
|
public static REGISTERED_USER = 'REGISTERED_USER';
|
||||||
public static ANONYMOUS_USER = 'ROLE_ANONYMOUS';
|
public static ANONYMOUS_USER = 'ROLE_ANONYMOUS';
|
||||||
public static USER_MANAGER = 'USER_MANAGER';
|
public static USER_MANAGER = 'USER_MANAGER';
|
||||||
public static CURATOR_CLAIM = 'CURATOR_CLAIM';
|
public static CURATOR_CLAIM = 'CURATOR_CLAIM';
|
||||||
|
|
||||||
|
public static roleName(type: string, id: string) {
|
||||||
|
return this.GROUP + this.mapType(type) + '.' + id;
|
||||||
|
}
|
||||||
|
|
||||||
public static mapType(type: string, communityMap: boolean = true): string {
|
public static mapType(type: string, communityMap: boolean = true): string {
|
||||||
if (type == "ri" && communityMap) {
|
if (type == "ri" && communityMap) {
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
import {Component, Input, OnDestroy, ViewChild} from "@angular/core";
|
import {Component, Input, ViewChild} from "@angular/core";
|
||||||
import {Stakeholder} from "../../../monitor/entities/stakeholder";
|
import {Stakeholder} from "../../../monitor/entities/stakeholder";
|
||||||
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
import {UntypedFormBuilder, UntypedFormGroup, Validators} from "@angular/forms";
|
||||||
import {StakeholderUtils} from "../../utils/indicator-utils";
|
|
||||||
import {Option} from "../../../sharedComponents/input/input.component";
|
import {Option} from "../../../sharedComponents/input/input.component";
|
||||||
import {Subscription} from "rxjs";
|
import {Subscription} from "rxjs";
|
||||||
import {EnvProperties} from "../../../utils/properties/env-properties";
|
|
||||||
import {properties} from "src/environments/environment";
|
|
||||||
import {StakeholderService} from "../../../monitor/services/stakeholder.service";
|
import {StakeholderService} from "../../../monitor/services/stakeholder.service";
|
||||||
import {UtilitiesService} from "../../../services/utilities.service";
|
import {UtilitiesService} from "../../../services/utilities.service";
|
||||||
import {Role, Session, User} from "../../../login/utils/helper.class";
|
import {Role, Session, User} from "../../../login/utils/helper.class";
|
||||||
|
@ -16,10 +13,12 @@ import {NotificationUtils} from "../../../notifications/notification-utils";
|
||||||
import {Notification} from "../../../notifications/notifications";
|
import {Notification} from "../../../notifications/notifications";
|
||||||
import {NotificationHandler} from "../../../utils/notification-handler";
|
import {NotificationHandler} from "../../../utils/notification-handler";
|
||||||
import {StatsProfilesService} from "../../utils/services/stats-profiles.service";
|
import {StatsProfilesService} from "../../utils/services/stats-profiles.service";
|
||||||
|
import {StakeholderBaseComponent} from "../../utils/stakeholder-base.component";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'edit-stakeholder',
|
selector: 'edit-stakeholder',
|
||||||
template: `
|
template: `
|
||||||
|
<div class="uk-margin-medium-bottom">
|
||||||
<form *ngIf="stakeholderFb" [formGroup]="stakeholderFb">
|
<form *ngIf="stakeholderFb" [formGroup]="stakeholderFb">
|
||||||
<div class="uk-grid uk-grid-large" uk-grid>
|
<div class="uk-grid uk-grid-large" uk-grid>
|
||||||
<div class="uk-width-1-2@m">
|
<div class="uk-width-1-2@m">
|
||||||
|
@ -44,7 +43,8 @@ import {StatsProfilesService} from "../../utils/services/stats-profiles.service"
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="isCurator">
|
<ng-container *ngIf="isCurator">
|
||||||
<div class="uk-width-1-3@m">
|
<div class="uk-width-1-3@m">
|
||||||
<div *ngIf="statsProfiles" input [formInput]="stakeholderFb.get('statsProfile')" [type]="'select'"
|
<div *ngIf="statsProfiles" input [formInput]="stakeholderFb.get('statsProfile')"
|
||||||
|
[type]="'select'"
|
||||||
[options]="statsProfiles"
|
[options]="statsProfiles"
|
||||||
placeholder="Stats Profile"></div>
|
placeholder="Stats Profile"></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -65,7 +65,7 @@ import {StatsProfilesService} from "../../utils/services/stats-profiles.service"
|
||||||
<div class="uk-width-1-1">
|
<div class="uk-width-1-1">
|
||||||
<input #file id="photo" type="file" class="uk-hidden" (change)="fileChangeEvent($event)"/>
|
<input #file id="photo" type="file" class="uk-hidden" (change)="fileChangeEvent($event)"/>
|
||||||
<div *ngIf="!stakeholderFb.get('isUpload').value" class="uk-grid uk-grid-column-large" uk-grid>
|
<div *ngIf="!stakeholderFb.get('isUpload').value" class="uk-grid uk-grid-column-large" uk-grid>
|
||||||
<div class="uk-margin-top uk-width-auto@l uk-width-1-1">
|
<div class="uk-margin-xsmall-top uk-width-auto@l uk-width-1-1">
|
||||||
<div class="uk-grid uk-grid-column-large uk-flex-middle" uk-grid>
|
<div class="uk-grid uk-grid-column-large uk-flex-middle" uk-grid>
|
||||||
<div class="uk-width-auto@l uk-width-1-1 uk-flex uk-flex-center">
|
<div class="uk-width-auto@l uk-width-1-1 uk-flex uk-flex-center">
|
||||||
<button class="uk-button uk-button-primary uk-flex uk-flex-middle uk-flex-wrap"
|
<button class="uk-button uk-button-primary uk-flex uk-flex-middle uk-flex-wrap"
|
||||||
|
@ -99,38 +99,46 @@ import {StatsProfilesService} from "../../utils/services/stats-profiles.service"
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- Full width error message -->
|
<!-- Full width error message -->
|
||||||
<div *ngIf="uploadError" class="uk-text-danger uk-margin-small-top uk-width-1-1">{{uploadError}}</div>
|
<div *ngIf="uploadError"
|
||||||
|
class="uk-text-danger uk-margin-small-top uk-width-1-1">{{uploadError}}</div>
|
||||||
</div>
|
</div>
|
||||||
<div [class]="canChooseTemplate ? 'uk-width-1-3@m' : 'uk-width-1-2@m'">
|
<div class="uk-width-1-1">
|
||||||
|
<div class="uk-grid uk-child-width-expand@m uk-child-width-1-1" uk-grid>
|
||||||
|
<div *ngIf="showVisibility">
|
||||||
<div input [formInput]="stakeholderFb.get('visibility')"
|
<div input [formInput]="stakeholderFb.get('visibility')"
|
||||||
[placeholder]="'Select a status'"
|
[placeholder]="'Select a status'"
|
||||||
[options]="stakeholderUtils.statuses" type="select"></div>
|
[options]="stakeholderUtils.visibilities" type="select"></div>
|
||||||
</div>
|
</div>
|
||||||
<div [class]="canChooseTemplate ? 'uk-width-1-3@m' : 'uk-width-1-2@m'">
|
<div [class.uk-width-1-2@m]="!showVisibility && !showFunderType && !canChooseTemplate">
|
||||||
<div input [formInput]="stakeholderFb.get('type')"
|
<div input [formInput]="stakeholderFb.get('type')"
|
||||||
[placeholder]="'Select a type'"
|
[placeholder]="'Select a type of ' + entities.stakeholder"
|
||||||
[options]="types" type="select"></div>
|
[options]="typesByRole" type="select"></div>
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="canChooseTemplate">
|
<div *ngIf="showFunderType">
|
||||||
<div class="uk-width-1-3@m">
|
<div input [formInput]="stakeholderFb.get('funderType')"
|
||||||
|
[placeholder]="'Select a type of ' + entities.funder"
|
||||||
|
[options]="stakeholderUtils.funderTypes" type="select"></div>
|
||||||
|
</div>
|
||||||
|
<div *ngIf="canChooseTemplate">
|
||||||
<div [placeholder]="'Select a template'"
|
<div [placeholder]="'Select a template'"
|
||||||
input [formInput]="stakeholderFb.get('defaultId')"
|
input [formInput]="stakeholderFb.get('defaultId')"
|
||||||
[options]="defaultStakeholdersOptions" type="select"></div>
|
[options]="defaultStakeholdersOptions" type="select"></div>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div #notify [class.uk-hidden]="!stakeholderFb" notify-form
|
<div #notify [class.uk-hidden]="!stakeholderFb" notify-form
|
||||||
class="uk-width-1-1 uk-margin-large-top uk-margin-medium-bottom"></div>
|
class="uk-width-1-1 uk-margin-large-top"></div>
|
||||||
|
</div>
|
||||||
`,
|
`,
|
||||||
styleUrls: ['edit-stakeholder.component.less']
|
styleUrls: ['edit-stakeholder.component.less']
|
||||||
})
|
})
|
||||||
export class EditStakeholderComponent implements OnDestroy {
|
export class EditStakeholderComponent extends StakeholderBaseComponent {
|
||||||
@Input()
|
@Input()
|
||||||
public disableAlias: boolean = false;
|
public disableAlias: boolean = false;
|
||||||
public stakeholderFb: UntypedFormGroup;
|
public stakeholderFb: UntypedFormGroup;
|
||||||
public secure: boolean = false;
|
public secure: boolean = false;
|
||||||
public stakeholderUtils: StakeholderUtils = new StakeholderUtils();
|
|
||||||
public defaultStakeholdersOptions: Option[];
|
public defaultStakeholdersOptions: Option[];
|
||||||
public defaultStakeholders: Stakeholder[];
|
public defaultStakeholders: Stakeholder[];
|
||||||
public alias: string[];
|
public alias: string[];
|
||||||
|
@ -138,10 +146,8 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
public isDefault: boolean;
|
public isDefault: boolean;
|
||||||
public isNew: boolean;
|
public isNew: boolean;
|
||||||
public loading: boolean = false;
|
public loading: boolean = false;
|
||||||
public types: Option[];
|
public typesByRole: Option[];
|
||||||
public statsProfiles: string[];
|
public statsProfiles: string[];
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
private subscriptions: any[] = [];
|
|
||||||
/**
|
/**
|
||||||
* Photo upload
|
* Photo upload
|
||||||
* */
|
* */
|
||||||
|
@ -158,16 +164,21 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
private stakeholderService: StakeholderService,
|
private stakeholderService: StakeholderService,
|
||||||
private statsProfileService: StatsProfilesService,
|
private statsProfileService: StatsProfilesService,
|
||||||
private utilsService: UtilitiesService, private userManagementService: UserManagementService,) {
|
private utilsService: UtilitiesService, private userManagementService: UserManagementService,) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
this.reset();
|
this.reset();
|
||||||
|
super.ngOnDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(stakeholder: Stakeholder, alias: string[], defaultStakeholders: Stakeholder[], isDefault: boolean, isNew: boolean) {
|
public init(stakeholder: Stakeholder, alias: string[], defaultStakeholders: Stakeholder[], isDefault: boolean, isNew: boolean) {
|
||||||
this.reset();
|
this.reset();
|
||||||
this.deleteCurrentPhoto = false;
|
this.deleteCurrentPhoto = false;
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
|
if (this.stakeholderUtils.defaultValue(this.stakeholderUtils.visibilities)) {
|
||||||
|
this.stakeholder.visibility = this.stakeholderUtils.defaultValue(this.stakeholderUtils.visibilities);
|
||||||
|
}
|
||||||
this.alias = alias;
|
this.alias = alias;
|
||||||
this.defaultStakeholders = defaultStakeholders;
|
this.defaultStakeholders = defaultStakeholders;
|
||||||
this.isDefault = isDefault;
|
this.isDefault = isDefault;
|
||||||
|
@ -183,7 +194,7 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
} else {
|
} else {
|
||||||
this.statsProfiles = [];
|
this.statsProfiles = [];
|
||||||
}
|
}
|
||||||
this.types = this.stakeholderUtils.getTypesByUserRoles(this.user, this.stakeholder.alias);
|
this.typesByRole = this.stakeholderUtils.getTypesByUserRoles(this.user, this.stakeholder.alias);
|
||||||
this.stakeholderFb = this.fb.group({
|
this.stakeholderFb = this.fb.group({
|
||||||
_id: this.fb.control(this.stakeholder._id),
|
_id: this.fb.control(this.stakeholder._id),
|
||||||
defaultId: this.fb.control(this.stakeholder.defaultId),
|
defaultId: this.fb.control(this.stakeholder.defaultId),
|
||||||
|
@ -191,7 +202,7 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
description: this.fb.control(this.stakeholder.description),
|
description: this.fb.control(this.stakeholder.description),
|
||||||
index_name: this.fb.control(this.stakeholder.index_name, Validators.required),
|
index_name: this.fb.control(this.stakeholder.index_name, Validators.required),
|
||||||
index_id: this.fb.control(this.stakeholder.index_id, Validators.required),
|
index_id: this.fb.control(this.stakeholder.index_id, Validators.required),
|
||||||
index_shortName: this.fb.control(this.stakeholder.index_shortName, Validators.required),
|
index_shortName: this.fb.control(this.stakeholder.index_shortName),
|
||||||
statsProfile: this.fb.control(this.stakeholder.statsProfile, Validators.required),
|
statsProfile: this.fb.control(this.stakeholder.statsProfile, Validators.required),
|
||||||
locale: this.fb.control(this.stakeholder.locale, Validators.required),
|
locale: this.fb.control(this.stakeholder.locale, Validators.required),
|
||||||
projectUpdateDate: this.fb.control(this.stakeholder.projectUpdateDate),
|
projectUpdateDate: this.fb.control(this.stakeholder.projectUpdateDate),
|
||||||
|
@ -206,6 +217,7 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
isDefault: this.fb.control((this.isDefault)),
|
isDefault: this.fb.control((this.isDefault)),
|
||||||
visibility: this.fb.control(this.stakeholder.visibility, Validators.required),
|
visibility: this.fb.control(this.stakeholder.visibility, Validators.required),
|
||||||
type: this.fb.control(this.stakeholder.type, Validators.required),
|
type: this.fb.control(this.stakeholder.type, Validators.required),
|
||||||
|
funderType: this.fb.control(this.stakeholder.funderType),
|
||||||
topics: this.fb.control(this.stakeholder.topics),
|
topics: this.fb.control(this.stakeholder.topics),
|
||||||
isUpload: this.fb.control(this.stakeholder.isUpload),
|
isUpload: this.fb.control(this.stakeholder.isUpload),
|
||||||
logoUrl: this.fb.control(this.stakeholder.logoUrl),
|
logoUrl: this.fb.control(this.stakeholder.logoUrl),
|
||||||
|
@ -440,4 +452,8 @@ export class EditStakeholderComponent implements OnDestroy {
|
||||||
encodeURIComponent(this.stakeholder.type) + "/" + encodeURIComponent(this.stakeholder.alias) + "/" + this.stakeholder.logoUrl).subscribe());
|
encodeURIComponent(this.stakeholder.type) + "/" + encodeURIComponent(this.stakeholder.alias) + "/" + this.stakeholder.logoUrl).subscribe());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get showFunderType() {
|
||||||
|
return super.showFunderType && this.stakeholderFb?.get('type').value === 'funder' && !this.isDefault;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,29 +1,28 @@
|
||||||
import {ChangeDetectorRef, Component, OnDestroy, OnInit, ViewChild} from "@angular/core";
|
import {ChangeDetectorRef, Component, OnInit, ViewChild} from "@angular/core";
|
||||||
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
import {StakeholderService} from "../../monitor/services/stakeholder.service";
|
||||||
import {EnvProperties} from "../../utils/properties/env-properties";
|
|
||||||
import {Stakeholder} from "../../monitor/entities/stakeholder";
|
import {Stakeholder} from "../../monitor/entities/stakeholder";
|
||||||
import { Subscription, zip} from "rxjs";
|
import {zip} from "rxjs";
|
||||||
import {EditStakeholderComponent} from "./edit-stakeholder/edit-stakeholder.component";
|
import {EditStakeholderComponent} from "./edit-stakeholder/edit-stakeholder.component";
|
||||||
import {properties} from "src/environments/environment";
|
|
||||||
import {Title} from "@angular/platform-browser";
|
import {Title} from "@angular/platform-browser";
|
||||||
|
import {BaseComponent} from "../../sharedComponents/base/base.component";
|
||||||
|
import {ActivatedRoute} from "@angular/router";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'general',
|
selector: 'general',
|
||||||
templateUrl: "./general.component.html"
|
templateUrl: "./general.component.html"
|
||||||
})
|
})
|
||||||
export class GeneralComponent implements OnInit, OnDestroy {
|
export class GeneralComponent extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
public stakeholder: Stakeholder;
|
public stakeholder: Stakeholder;
|
||||||
public alias: string[];
|
public alias: string[];
|
||||||
public properties: EnvProperties = properties;
|
|
||||||
public defaultStakeholders: Stakeholder[];
|
public defaultStakeholders: Stakeholder[];
|
||||||
public loading: boolean = false;
|
public loading: boolean = false;
|
||||||
private subscriptions: any[] = [];
|
|
||||||
@ViewChild('editStakeholderComponent') editStakeholderComponent: EditStakeholderComponent;
|
@ViewChild('editStakeholderComponent') editStakeholderComponent: EditStakeholderComponent;
|
||||||
|
|
||||||
constructor(private stakeholderService: StakeholderService,
|
constructor(private stakeholderService: StakeholderService,
|
||||||
private cdr: ChangeDetectorRef,
|
private cdr: ChangeDetectorRef,
|
||||||
private title: Title) {
|
protected _route: ActivatedRoute,
|
||||||
|
protected _title: Title) {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
@ -32,7 +31,8 @@ export class GeneralComponent implements OnInit, OnDestroy {
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
this.cdr.detectChanges();
|
this.cdr.detectChanges();
|
||||||
if(this.stakeholder) {
|
if(this.stakeholder) {
|
||||||
this.title.setTitle(this.stakeholder.name + " | General");
|
this.title = this.stakeholder.name + " | General";
|
||||||
|
this.setMetadata();
|
||||||
let data = zip(
|
let data = zip(
|
||||||
this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
|
this.stakeholderService.getDefaultStakeholders(this.properties.monitorServiceAPIURL),
|
||||||
this.stakeholderService.getAlias(this.properties.monitorServiceAPIURL)
|
this.stakeholderService.getAlias(this.properties.monitorServiceAPIURL)
|
||||||
|
@ -51,10 +51,9 @@ export class GeneralComponent implements OnInit, OnDestroy {
|
||||||
this.editStakeholderComponent.init(this.stakeholder, this.alias, this.defaultStakeholders, this.stakeholder.defaultId == null, false)
|
this.editStakeholderComponent.init(this.stakeholder, this.alias, this.defaultStakeholders, this.stakeholder.defaultId == null, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public save() {
|
public save() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.editStakeholderComponent.save((stakeholder) => {
|
this.editStakeholderComponent.save(stakeholder => {
|
||||||
this.stakeholder = stakeholder;
|
this.stakeholder = stakeholder;
|
||||||
this.stakeholderService.setStakeholder(this.stakeholder);
|
this.stakeholderService.setStakeholder(this.stakeholder);
|
||||||
this.reset();
|
this.reset();
|
||||||
|
@ -64,12 +63,4 @@ export class GeneralComponent implements OnInit, OnDestroy {
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this.subscriptions.forEach(subscription => {
|
|
||||||
if(subscription instanceof Subscription) {
|
|
||||||
subscription.unsubscribe();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue