Merge pull request 'Production release January 2024' (#29) from develop into master
Reviewed-on: #29
This commit is contained in:
commit
7b8ca9ca66
|
@ -8,29 +8,39 @@ import { properties } from "../../environments/environment";
|
|||
export class CacheInterceptorService implements HttpInterceptor {
|
||||
cachingRequests = [
|
||||
// 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=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=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=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=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=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=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=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=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=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=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=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=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=funder&fields=projectstartyear&fields=projectendyear&fields=projectoamandatepublications&&type=projects&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=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=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&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",
|
||||
|
||||
"/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) {
|
||||
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 false;
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
<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)">
|
||||
<div input type="select" [(value)]="showOptions.show" placeholder="Type" hint="Select..."
|
||||
[options]="showOptions.selectOptions" class="uk-width-2-5"></div>
|
||||
<div class="uk-width-expand" input type="text" [(value)]="keyword" [searchable]="true" placeholder="Entities to link"
|
||||
[hint]="'Search for ' + openaireEntities.RESULTS.toLowerCase() + '...'" tooltip="true"></div>
|
||||
</advanced-search-input>
|
||||
</div>
|
||||
<div *ngIf="!showOptions" class="uk-width-xlarge@l uk-width-large">
|
||||
<div search-input [(value)]="keyword" [placeholder]="'Search for ' + openaireEntities.RESULTS.toLowerCase() + '...'"
|
||||
[searchInputClass]="'inner background'" (searchEmitter)="search(true)"></div>
|
||||
<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':''">
|
||||
<advanced-search-input (searchEmitter)="search(true)">
|
||||
<div input type="select" [(value)]="showOptions.show" placeholder="Type" hint="Select..."
|
||||
[options]="showOptions.selectOptions" class="uk-width-2-5"></div>
|
||||
<div class="uk-width-expand" input type="text" [(value)]="keyword" [searchable]="true" placeholder="Entities to link"
|
||||
[hint]="'Search for ' + openaireEntities.RESULTS.toLowerCase() + '...'" tooltip="true"></div>
|
||||
</advanced-search-input>
|
||||
</div>
|
||||
<div *ngIf="!showOptions" class="uk-width-xlarge@l uk-width-large">
|
||||
<div search-input [(value)]="keyword" [placeholder]="'Search for ' + openaireEntities.RESULTS.toLowerCase() + '...'"
|
||||
[searchInputClass]="'inner background'" (searchEmitter)="search(true)"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="!showSearchResults">
|
||||
<div class="uk-text-center uk-text-large uk-text-meta uk-margin-large-top">
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
<div class="uk-width-expand">
|
||||
<div class="uk-margin-bottom">
|
||||
<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 class="uk-margin-bottom">
|
||||
<span *ngIf="isClaimAvailable(claim) else notAvailable" class="uk-label uk-label-success"
|
||||
|
|
|
@ -18,7 +18,7 @@ import {StringUtils} from "../../../utils/string-utils.class";
|
|||
<div class="uk-flex">
|
||||
<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"
|
||||
path="/search/result" [externalPortalUrl]=externalPortalUrl></publication-title>
|
||||
path="/search/result" [externalPortalUrl]=externalPortalUrl [linkAvailable]="linkAvailable"></publication-title>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="type == 'project'" [attr.uk-tooptip]="getEntityName(type)"
|
||||
|
@ -40,6 +40,7 @@ export class ClaimEntityFormatter {
|
|||
@Input() properties: EnvProperties;
|
||||
@Input() externalPortalUrl: string = null;
|
||||
@Input() source: boolean = true;
|
||||
@Input() linkAvailable: boolean = true;
|
||||
public openAIREEntities = OpenaireEntities;
|
||||
|
||||
constructor() {
|
||||
|
|
|
@ -10,8 +10,8 @@ import {RouterHelper} from '../../../utils/routerHelper.class';
|
|||
<h6 class="uk-margin-remove multi-line-ellipsis lines-2">
|
||||
<p class="uk-margin-remove">
|
||||
<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>
|
||||
<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>
|
||||
[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" [class.uk-disabled]="!linkAvailable">{{entity.title?entity.title:"[No title available]"}}</a>
|
||||
</p>
|
||||
</h6>
|
||||
</ng-container>
|
||||
|
@ -23,5 +23,6 @@ export class PublicationTitleFormatter {
|
|||
@Input() path: string;
|
||||
@Input() entity: any;
|
||||
@Input() externalPortalUrl: string = null;
|
||||
@Input() linkAvailable: boolean = true;
|
||||
public routerHelper: RouterHelper = new RouterHelper();
|
||||
}
|
||||
|
|
|
@ -73,11 +73,11 @@
|
|||
<div id="tm-main" class="uk-section uk-padding-remove-top" *ngIf="showOptions.show != 'claim'">
|
||||
<div>
|
||||
<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 [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-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>
|
||||
<div *ngIf="showOptions.show=='source'">
|
||||
<claim-result-search-form [selectedResults]="sources" [properties]=properties
|
||||
|
@ -109,11 +109,11 @@
|
|||
</div>
|
||||
</div>
|
||||
<!-- 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 class="uk-card uk-card-default linkingBasket">
|
||||
<div class="uk-card-body uk-padding-small">
|
||||
<div class="uk-margin-right">
|
||||
<div>
|
||||
<ng-container *ngIf="inlineEntity">
|
||||
<div class="uk-margin-small-bottom">
|
||||
<div class="uk-text-emphasis uk-text-bolder">Source</div>
|
||||
|
@ -145,7 +145,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
<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;">
|
||||
<start-over *ngIf="showOptions.show == 'source' && sources.length> 0"
|
||||
[results]="sources"
|
||||
|
@ -173,7 +173,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -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 { }
|
|
@ -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-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">
|
||||
<span class="uk-align-left uk-margin-remove-bottom">
|
||||
<span uk-scrollspy-class class="uk-text-large" style="color: #EEB204">Beta</span>
|
||||
</span>
|
||||
<!-- <span class="uk-align-left uk-margin-remove-bottom">-->
|
||||
<!-- <span uk-scrollspy-class class="uk-text-large" style="color: #EEB204">Beta</span>-->
|
||||
<!-- </span>-->
|
||||
<div style="max-width: 600px;">
|
||||
<h1 uk-scrollspy-class class="uk-h1 uk-margin-remove-top">
|
||||
<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;">
|
||||
<a [routerLink]="properties.searchLinkToResults" [queryParams]="buildFosQueryParam(subChild)"
|
||||
class="uk-link-text">
|
||||
{{subChild.label}}
|
||||
{{searchFieldsHelper.getFosParameter() == 'foslabel' ? subChild.label : subChild.id}}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -139,7 +139,7 @@
|
|||
</h3>
|
||||
<div *ngFor="let subSubItem of subItem.children" style="margin-bottom: 5px;">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -15,6 +15,7 @@ import {PiwikService} from "../utils/piwik/piwik.service";
|
|||
import {debounceTime, distinctUntilChanged} from "rxjs/operators";
|
||||
import Timeout = NodeJS.Timeout;
|
||||
import {ISVocabulariesService} from "../utils/staticAutoComplete/ISVocabularies.service";
|
||||
import {SearchFields} from "../utils/properties/searchFields";
|
||||
|
||||
declare var UIkit;
|
||||
|
||||
|
@ -46,6 +47,7 @@ export class FosComponent implements OnInit, OnDestroy {
|
|||
private timeout: Timeout;
|
||||
@ViewChild('tabs') tabs: ElementRef;
|
||||
public sliderInit: boolean = false;
|
||||
private searchFieldsHelper: SearchFields = new SearchFields();
|
||||
|
||||
constructor(
|
||||
private vocabulariesService: ISVocabulariesService,
|
||||
|
@ -217,6 +219,6 @@ export class FosComponent implements OnInit, OnDestroy {
|
|||
|
||||
public buildFosQueryParam(fos) {
|
||||
// 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)}));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -188,7 +188,7 @@
|
|||
</div>
|
||||
<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="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>
|
||||
<ng-container>
|
||||
|
|
|
@ -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,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
|||
<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'"
|
||||
[attr.uk-grid]="!isMobile ? '' : null">
|
||||
<div *ngIf="properties.environment != 'production' && availableOn[0].fulltext" class="uk-flex uk-flex-middle"
|
||||
<div *ngIf="availableOn[0].fulltext" class="uk-flex uk-flex-middle"
|
||||
[ngClass]="isMobile ? 'uk-width-1-1' : 'uk-text-bolder'">
|
||||
<a [href]="availableOn[0].fulltext" target="_blank"
|
||||
class="uk-flex uk-flex-middle uk-button-link"
|
||||
|
@ -95,7 +95,7 @@ import {RouterHelper} from "../../utils/routerHelper.class";
|
|||
</a>
|
||||
<ng-template #elseBlock> {{instance.license}}</ng-template>
|
||||
</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:
|
||||
<a *ngIf="isUrl(instance.fulltext); else elseBlock"
|
||||
[href]="instance.fulltext" target="_blank" class="custom-external uk-link-text">
|
||||
|
|
|
@ -2,12 +2,13 @@ import {Component, EventEmitter, Input, Output} from "@angular/core";
|
|||
import {RouterHelper} from "../../utils/routerHelper.class";
|
||||
import {properties} from "../../../../environments/environment";
|
||||
import {StringUtils} from "../../utils/string-utils.class";
|
||||
import {SearchFields} from "../../utils/properties/searchFields";
|
||||
|
||||
@Component({
|
||||
selector: 'fos',
|
||||
template: `
|
||||
<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'">
|
||||
<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>
|
||||
|
@ -45,7 +46,7 @@ import {StringUtils} from "../../utils/string-utils.class";
|
|||
<div class="uk-hidden@m">
|
||||
<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-text-xsmall" style="color: #EEB204">Beta</div>
|
||||
<!-- <div class="uk-text-xsmall" style="color: #EEB204">Beta</div>-->
|
||||
{{title}}
|
||||
</div>
|
||||
<div class="uk-width-expand">
|
||||
|
@ -96,6 +97,7 @@ export class FosComponent {
|
|||
public routerHelper: RouterHelper = new RouterHelper();
|
||||
public properties = properties;
|
||||
public title: string = "Fields of Science";
|
||||
private searchFieldsHelper: SearchFields = new SearchFields();
|
||||
|
||||
public viewAllClick() {
|
||||
// if(this.subjects.length <= this.threshold*2) {
|
||||
|
@ -122,11 +124,11 @@ export class FosComponent {
|
|||
|
||||
public buildFosQueryParam(fos) {
|
||||
// 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 {
|
||||
// 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)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ import {properties} from "../../../../environments/environment";
|
|||
@Component({
|
||||
selector: 'showSubjects',
|
||||
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">
|
||||
Subjects by Vocabulary
|
||||
</div>
|
||||
|
@ -22,10 +22,11 @@ import {properties} from "../../../../environments/environment";
|
|||
<div *ngIf="isClassifiedLarge && !viewAllClassifiedSubjects" class="uk-text-right">
|
||||
<a (click)="viewAllSubjectsByVocabularyClicked()" class="view-more-less-link">View all</a>
|
||||
</div>
|
||||
|
||||
</ng-container>
|
||||
|
||||
<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
|
||||
</div>
|
||||
<ng-container *ngTemplateOutlet="subjects_template; context: {customClasses: (isMobile && viewAllSubjects) ? '' : 'multi-line-ellipsis lines-2', id: 'content'}"></ng-container>
|
||||
|
@ -33,6 +34,16 @@ import {properties} from "../../../../environments/environment";
|
|||
<a (click)="viewAllSubjectsClicked()" class="view-more-less-link">View all</a>
|
||||
</div>
|
||||
</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">
|
||||
<div class="uk-text-break" [ngClass]="customClasses">
|
||||
|
@ -78,7 +89,7 @@ import {properties} from "../../../../environments/environment";
|
|||
<ng-template #eosc_subjects_template let-customClasses="customClasses" let-id="id">
|
||||
<div class="uk-flex-wrap uk-margin-medium-right"
|
||||
[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 class="uk-margin-small-top uk-display-inline-block">
|
||||
<span uk-icon="tag"></span>
|
||||
|
@ -91,13 +102,17 @@ import {properties} from "../../../../environments/environment";
|
|||
</span>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<p *ngIf="properties.environment != 'production' && eoscSubjects && eoscSubjects.length > 0">
|
||||
<span #classifiedContent [id]="id+'_eosc'">{{getValue(eoscSubjects).join(', ')}}</span>
|
||||
</p>
|
||||
</div>
|
||||
</ng-template>
|
||||
|
||||
<modal-alert #subjectsByVocabularyModal *ngIf="!isMobile && ((classifiedSubjects && classifiedSubjects.size > 0) || (eoscSubjects && eoscSubjects.length > 0))" large="true">
|
||||
<div class="uk-text-small">
|
||||
<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>
|
||||
</modal-alert>
|
||||
`
|
||||
|
@ -234,4 +249,8 @@ export class ShowSubjectsComponent {
|
|||
this.openSubjectsByVocabularyModal();
|
||||
}
|
||||
}
|
||||
|
||||
getValue(eosSubjects) {
|
||||
return eosSubjects.map(res => res.value);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -321,7 +321,7 @@
|
|||
</div>
|
||||
<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="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>
|
||||
<ng-container>
|
||||
|
|
|
@ -897,9 +897,11 @@ export class ProjectComponent {
|
|||
}
|
||||
|
||||
private closeLoading() {
|
||||
if (this.loading) {
|
||||
this.loading.close();
|
||||
}
|
||||
setTimeout(() => {
|
||||
if (this.loading) {
|
||||
this.loading.close();
|
||||
}
|
||||
}, 300)
|
||||
}
|
||||
|
||||
private setMessageLoading(message: string) {
|
||||
|
|
|
@ -145,6 +145,15 @@ export class DeletedByInferenceService {
|
|||
if(author.orcid_pending) {
|
||||
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};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -283,7 +283,7 @@
|
|||
<!-- <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-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'">
|
||||
</my-tab>
|
||||
<my-tab *ngIf="resultLandingInfo.references && resultLandingInfo.references.length > 0"
|
||||
|
@ -312,7 +312,7 @@
|
|||
<ng-container>
|
||||
<ng-container *ngTemplateOutlet="summary_content"></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>
|
||||
<ng-container *ngIf="resultLandingInfo.references && resultLandingInfo.references.length > 0">
|
||||
|
@ -385,7 +385,7 @@
|
|||
<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">
|
||||
<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>
|
||||
<ng-container *ngIf="resultLandingInfo.measure.bip.length">
|
||||
|
@ -549,7 +549,7 @@
|
|||
</div>
|
||||
<hr>
|
||||
</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')">
|
||||
<span>Subjects</span>
|
||||
<icon name="chevron_right" [ratio]="1.5" [flex]="true"></icon>
|
||||
|
@ -736,7 +736,7 @@
|
|||
</fs-modal>
|
||||
|
||||
<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 *ngTemplateOutlet="subjects_content"></ng-container>
|
||||
</ng-container>
|
||||
|
|
|
@ -134,7 +134,6 @@ export class ResultLandingComponent {
|
|||
|
||||
public isLoggedIn: boolean = false;
|
||||
public pid: string;
|
||||
// @ViewChild("annotation") annotation: AnnotationComponent;
|
||||
public contextsWithLink: any;
|
||||
|
||||
public relatedClassFilters: Option[]=[{"label": "All relations", "value": ""}];
|
||||
|
@ -1172,6 +1171,10 @@ export class ResultLandingComponent {
|
|||
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() {
|
||||
let params = "";
|
||||
if(this.prevPath) {
|
||||
|
|
|
@ -20,7 +20,6 @@ import {ShowAuthorsModule} from "../../utils/authors/showAuthors.module";
|
|||
import {HelperModule} from "../../utils/helper/helper.module";
|
||||
import {ResultLandingUtilsModule} from "../landing-utils/resultLandingUtils.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 {NoLoadPaging} from "../../searchPages/searchUtils/no-load-paging.module";
|
||||
import {ResultPreviewModule} from "../../utils/result-preview/result-preview.module";
|
||||
|
@ -45,7 +44,7 @@ import {EntityActionsModule} from "../../utils/entity-actions/entity-actions.mod
|
|||
CiteThisModule, PagingModule, IFrameModule,
|
||||
AltMetricsModule, Schema2jsonldModule, SEOServiceModule,
|
||||
DeletedByInferenceModule, ShowAuthorsModule, HelperModule, ResultLandingUtilsModule, AlertModalModule,
|
||||
AnnotationModule, LandingHeaderModule, NoLoadPaging, ResultPreviewModule, FeedbackModule, TabsModule, LoadingModule,
|
||||
LandingHeaderModule, NoLoadPaging, ResultPreviewModule, FeedbackModule, TabsModule, LoadingModule,
|
||||
OrcidModule, IconsModule, InputModule, EGIDataTransferModule, RecaptchaModule,
|
||||
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 {properties} from "../../../../environments/environment";
|
||||
import {HelperFunctions} from "../../utils/HelperFunctions.class";
|
||||
import {SearchFields} from "../../utils/properties/searchFields";
|
||||
|
||||
@Injectable()
|
||||
export class ResultLandingService {
|
||||
|
@ -312,9 +313,13 @@ export class ResultLandingService {
|
|||
this.resultLandingInfo.subjects = subjectResults[0];
|
||||
this.resultLandingInfo.otherSubjects = subjectResults[1];
|
||||
this.resultLandingInfo.classifiedSubjects = subjectResults[2];
|
||||
|
||||
if (subjectResults[3]) {
|
||||
let searchFieldsHelper: SearchFields = new SearchFields();
|
||||
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) {
|
||||
|
@ -376,6 +381,15 @@ export class ResultLandingService {
|
|||
if (author.orcid_pending) {
|
||||
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] = {
|
||||
"fullName": author.content,
|
||||
"orcid": author.orcid,
|
||||
|
|
|
@ -444,7 +444,7 @@ export class SearchAllComponent {
|
|||
this.fetchDataproviders.results = [];
|
||||
this.reload["datasources"] = false;
|
||||
// this.fetchDataproviders.getNumForSearch(this.keyword, this.properties, refineParams);
|
||||
this.subs.push(this._searchDataprovidersService.numOfSearchDataproviders2(this.keyword.length>0?NewSearchPageComponent.createKeywordQuery("datasources",this.keyword,"q","="):"", this.properties, refineParams).subscribe(
|
||||
this.subs.push(this._searchDataprovidersService.numOfSearchDataproviders2(this.keyword.length>0?NewSearchPageComponent.createKeywordQuery("dataprovider",this.keyword,"q","="):"", this.properties, refineParams).subscribe(
|
||||
data => {
|
||||
this.fetchDataproviders.searchUtils.totalResults = data;
|
||||
this.fetchDataproviders.searchUtils.status = this.errorCodes.DONE;
|
||||
|
@ -463,7 +463,7 @@ export class SearchAllComponent {
|
|||
if (this.activeEntity != "services" && this.reload["services"] && this.showServices) {
|
||||
this.fetchServices.results = [];
|
||||
this.reload["services"] = false;
|
||||
this.subs.push(this._searchDataprovidersService.numOfSearchDataproviders2(this.keyword.length>0?NewSearchPageComponent.createKeywordQuery("datasources",this.keyword,"q","="):"", this.properties, refineParams, "services").subscribe(
|
||||
this.subs.push(this._searchDataprovidersService.numOfSearchDataproviders2(this.keyword.length>0?NewSearchPageComponent.createKeywordQuery("service",this.keyword,"q","="):"", this.properties, refineParams, "services").subscribe(
|
||||
data => {
|
||||
this.fetchServices.searchUtils.totalResults = data;
|
||||
this.fetchServices.searchUtils.status = this.errorCodes.DONE;
|
||||
|
|
|
@ -190,7 +190,17 @@ export class SearchDataProvidersComponent {
|
|||
this.searchPageUpdates.emit({disableForms: this.disableForms, disableRefineForms: this.disableRefineForms, searchUtils: this.searchUtils});
|
||||
|
||||
let datasourceQueryPrefix = DatasourcesHelperClass.getQueryPrefix(this.type);
|
||||
this.searchFiltersSub = this._searchDataProvidersService.advancedSearchDataproviders( datasourceQueryPrefix +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' and (':'') + parameters +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' ) ':''), page, size, this.properties, (refine /*&& (this.type=="all" || this.type == "deposit")*/) ? this.searchPage.getRefineFieldsQuery() : null, this.searchPage.getFields(), refineFieldsFilterQuery, (this.type == "deposit"), true)
|
||||
let isDeposit: boolean = (this.type == "deposit");
|
||||
let parametersFull;
|
||||
let refineQueryFull;
|
||||
if(isDeposit) {
|
||||
parametersFull = datasourceQueryPrefix +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' and (':'') + parameters +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' ) ':'');
|
||||
refineQueryFull = refineFieldsFilterQuery;
|
||||
} else {
|
||||
parametersFull = parameters;
|
||||
refineQueryFull = refineFieldsFilterQuery+(refineFieldsFilterQuery.length > 0 && datasourceQueryPrefix.length >0 ? "&" : "")+(datasourceQueryPrefix.length>0 ? "fq=" : "")+datasourceQueryPrefix;
|
||||
}
|
||||
this.searchFiltersSub = this._searchDataProvidersService.advancedSearchDataproviders( parametersFull, page, size, this.properties, (refine /*&& (this.type=="all" || this.type == "deposit")*/) ? this.searchPage.getRefineFieldsQuery() : null, this.searchPage.getFields(), refineQueryFull, isDeposit, true)
|
||||
//.switchMap(
|
||||
.subscribe(
|
||||
data => {
|
||||
|
@ -262,7 +272,17 @@ export class SearchDataProvidersComponent {
|
|||
this.searchUtils.totalResults = 0;
|
||||
|
||||
let datasourceQueryPrefix = DatasourcesHelperClass.getQueryPrefix(this.type);
|
||||
this.searchResultsSub = this._searchDataProvidersService.advancedSearchDataproviders( datasourceQueryPrefix +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' and (':'') + parameters +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' ) ':''), page, size, this.properties, null, this.searchPage.getFields(), refineFieldsFilterQuery, (this.type == "deposit")).subscribe(
|
||||
let isDeposit: boolean = (this.type == "deposit");
|
||||
let parametersFull;
|
||||
let refineQueryFull;
|
||||
if(isDeposit) {
|
||||
parametersFull = datasourceQueryPrefix +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' and (':'') + parameters +(datasourceQueryPrefix.length > 0 && parameters.length > 0 ?' ) ':'');
|
||||
refineQueryFull = refineFieldsFilterQuery;
|
||||
} else {
|
||||
parametersFull = parameters;
|
||||
refineQueryFull = refineFieldsFilterQuery+(refineFieldsFilterQuery.length > 0 && datasourceQueryPrefix.length >0 ? "&" : "")+(datasourceQueryPrefix.length>0 ? "fq=" : "")+datasourceQueryPrefix;
|
||||
}
|
||||
this.searchResultsSub = this._searchDataProvidersService.advancedSearchDataproviders( parametersFull, page, size, this.properties, null, this.searchPage.getFields(), refineQueryFull, isDeposit).subscribe(
|
||||
data => {
|
||||
let totalResults = data[0];
|
||||
let results = data[1];
|
||||
|
|
|
@ -63,11 +63,12 @@ export class SearchOrganizationsService {
|
|||
"reldatasourcecompatibilityid exact openaire-cris_1.1 or " +
|
||||
"reldatasourcecompatibilityid exact openaire2.0_data or reldatasourcecompatibilityid exact hostedBy or relproject=*)";
|
||||
|
||||
url += "&query=";
|
||||
// url += "&query=";
|
||||
if(params!= null && params != '' ) {
|
||||
url +=" ( "+basicQuery+ " ) " +" and (" + params + ")";
|
||||
}else{
|
||||
url +=" ( "+basicQuery+ " ) ";
|
||||
// url +=" ( "+basicQuery+ " ) " +" and (" + params + ")";
|
||||
url +="&query=(" + params + ")";
|
||||
// }else{
|
||||
// url +=" ( "+basicQuery+ " ) ";
|
||||
}
|
||||
if(refineParams!= null && refineParams != '' ) {
|
||||
url += refineParams;
|
||||
|
@ -75,6 +76,7 @@ export class SearchOrganizationsService {
|
|||
if(refineQuery) {
|
||||
url += "&" + refineQuery;
|
||||
}
|
||||
url += "&fq="+basicQuery;
|
||||
url += "&page="+(page-1)+"&size="+size;
|
||||
url += minRef ? "&minRef=true" : "";
|
||||
|
||||
|
@ -212,15 +214,17 @@ export class SearchOrganizationsService {
|
|||
"reldatasourcecompatibilityid exact openaire-cris_1.1 or " +
|
||||
"reldatasourcecompatibilityid exact openaire2.0_data or reldatasourcecompatibilityid exact hostedBy or relproject=*)";
|
||||
|
||||
url += "&query=";
|
||||
// url += "&query=";
|
||||
if(params!= null && params != '' ) {
|
||||
url +=" ( "+basicQuery+ " ) " +" and (" + params + ")";
|
||||
}else{
|
||||
url +=" ( "+basicQuery+ " ) ";
|
||||
// url +=" ( "+basicQuery+ " ) " +" and (" + params + ")";
|
||||
url +="&query=( "+params+ " ) ";
|
||||
// }else{
|
||||
// url +=" ( "+basicQuery+ " ) ";
|
||||
}
|
||||
if(refineParams!= null && refineParams != '' ) {
|
||||
url += refineParams;
|
||||
}
|
||||
url += "&fq="+basicQuery;
|
||||
return this.http.get((properties.useCache)? (properties.cacheUrl+encodeURIComponent(url)): url)
|
||||
.pipe(map(res => res['meta']['total']));
|
||||
}
|
||||
|
|
|
@ -348,6 +348,15 @@ export class SearchResearchResultsService {
|
|||
if (author.orcid_pending) {
|
||||
author.orcid_pending = author.orcid_pending.toUpperCase();
|
||||
}
|
||||
|
||||
if(result['authors'][author.rank] && result['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,
|
||||
|
|
|
@ -38,6 +38,11 @@ export class EntitiesSearchService {
|
|||
return [{id:'-2',label:'Error'}];
|
||||
});
|
||||
}*/
|
||||
|
||||
// not used
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
searchByDepositType(keyword:string, DepositType:string, properties:EnvProperties ):any {
|
||||
this.ready = false;
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ export let common: EnvProperties = {
|
|||
searchOrcidURL: "https://pub.orcid.org/v2.1/",
|
||||
orcidURL: "https://orcid.org/",
|
||||
orcidAPIURL: "https://services.openaire.eu/uoa-orcid-service/",
|
||||
orcidTokenURL : "https://orcid.org/oauth/authorize?",
|
||||
orcidTokenURL: "https://orcid.org/oauth/authorize?",
|
||||
orcidClientId: "APP-IN0O56SBVVTB7NN4",
|
||||
doiURL: "https://doi.org/",
|
||||
pmcURL: "http://europepmc.org/articles/",
|
||||
|
@ -33,7 +33,7 @@ export let common: EnvProperties = {
|
|||
csvLimit: 2000,
|
||||
pagingLimit: 20,
|
||||
resultsPerPage: 10,
|
||||
baseLink : "",
|
||||
baseLink: "",
|
||||
searchLinkToResult: "/search/result?id=",
|
||||
searchLinkToPublication: "/search/publication?articleId=",
|
||||
searchLinkToProject: "/search/project?projectId=",
|
||||
|
@ -79,22 +79,19 @@ export let common: EnvProperties = {
|
|||
footerGrantText: "OpenAIRE has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452",
|
||||
|
||||
//connect
|
||||
enermapsURL:"https://lab.idiap.ch/enermaps",
|
||||
enermapsURL: "https://lab.idiap.ch/enermaps",
|
||||
zenodoCommunities: 'https://zenodo.org/api/communities',
|
||||
shareInZenodoPage: '/participate/deposit/zenodo',
|
||||
afterLoginRedirectLink: '/myCommunities',
|
||||
searchLinkToCommunities: '/search/find/communities',
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
export let commonDev: EnvProperties = {
|
||||
environment: "development",
|
||||
pdfStatisticsAPIURL: "https://beta.services.openaire.eu/pdf-stats",
|
||||
statisticsAPIURL: "http://vatopedi.di.uoa.gr:8080/stats/",
|
||||
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
|
||||
statisticsFrameAPIURL: "https://beta.openaire.eu/stats/",
|
||||
statisticsFrameNewAPIURL: "https://stats.madgik.di.uoa.gr/stats-api/",
|
||||
statisticsFrameNewAPIURL: "https://beta.services.openaire.eu/stats-tool/",
|
||||
claimsAPIURL: "http://scoobydoo.di.uoa.gr:8880/dnet-claims-service-2.0.0-SNAPSHOT/rest/claimsService/",
|
||||
searchAPIURLLAst: "http://beta.services.openaire.eu/search/v2/api/",
|
||||
searchResourcesAPIURL: "https://beta.services.openaire.eu/search/v2/api/resources",
|
||||
|
@ -102,7 +99,7 @@ export let commonDev: EnvProperties = {
|
|||
openCitationsAPIURL: "https://services.openaire.eu/opencitations/getCitations?id=",
|
||||
csvAPIURL: "https://beta.services.openaire.eu/search/v2/api/reports",
|
||||
orcidAPIURL: "http://duffy.di.uoa.gr:19480/uoa-orcid-service/",
|
||||
orcidTokenURL : "https://sandbox.orcid.org/oauth/authorize?",
|
||||
orcidTokenURL: "https://sandbox.orcid.org/oauth/authorize?",
|
||||
orcidClientId: "APP-A5M3KTX6NCN67L91",
|
||||
utilsService: "http://dl170.madgik.di.uoa.gr:8000",
|
||||
vocabulariesAPI: "https://dev-openaire.d4science.org/provision/mvc/vocabularies/",
|
||||
|
@ -117,7 +114,7 @@ export let commonDev: EnvProperties = {
|
|||
datasourcesAPI: "https://beta.services.openaire.eu/openaire/ds/api/",
|
||||
contextsAPI: "https://dev-openaire.d4science.org/openaire/context",
|
||||
communityAPI: "https://dev-openaire.d4science.org/openaire/community/",
|
||||
lastIndexInformationLink: "https://www.openaire.eu/aggregation-and-content-provision-workflows",
|
||||
lastIndexInformationLink: "https://www.openaire.eu/aggregation-and-content-provision-workflows",
|
||||
widgetLink: "https://beta.openaire.eu/index.php?option=com_openaire&view=widget&format=raw&projectId=",
|
||||
claimsInformationLink: "https://www.openaire.eu/linking-beta",
|
||||
indexInfoAPI: "https://beta.services.openaire.eu/openaire/info/",
|
||||
|
@ -208,7 +205,7 @@ export let commonBeta: EnvProperties = {
|
|||
export let commonProd: EnvProperties = {
|
||||
environment: "production",
|
||||
pdfStatisticsAPIURL: "https://services.openaire.eu/pdf-stats",
|
||||
statisticsAPIURL: "https://beta.services.openaire.eu/stats-api/",
|
||||
statisticsAPIURL: "https://services.openaire.eu/stats-api/",
|
||||
statisticsFrameAPIURL: "https://www.openaire.eu/stats/",
|
||||
statisticsFrameNewAPIURL: "https://services.openaire.eu/stats-tool/",
|
||||
claimsAPIURL: "https://services.openaire.eu/claims-new/rest/claimsService/",
|
||||
|
|
|
@ -16,7 +16,7 @@ export class SearchFieldsBase {
|
|||
|
||||
// Remove Collected From Filter "collectedfrom","collectedfrom"
|
||||
public RESULT_REFINE_FIELDS = [
|
||||
"instancetypename", properties.environment!='production'?"foslabel":'fos', "relfunder",
|
||||
"instancetypename", "foslabel", "relfunder",
|
||||
"relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id",
|
||||
"relproject", "sdg", "country", "resultlanguagename", "resulthostingdatasource", "community"];
|
||||
|
||||
|
@ -25,7 +25,7 @@ export class SearchFieldsBase {
|
|||
{type: "refine", title: "", values: ["instancetypename"]},
|
||||
{type: "range", title: "", values: ["resultacceptanceyear", "resultacceptanceyear"]},
|
||||
{type: "refine", title: "", values: [
|
||||
properties.environment!='production'?"foslabel":'fos', "relfunder",
|
||||
"foslabel", "relfunder",
|
||||
"relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id",
|
||||
"relproject", "sdg", "country", "resultlanguagename", "resulthostingdatasource", "community"
|
||||
]}
|
||||
|
@ -271,7 +271,7 @@ export class SearchFieldsBase {
|
|||
filterType: "checkbox"
|
||||
},
|
||||
["fos"]: {
|
||||
name: "Field of Science [Beta]",
|
||||
name: "Field of Science",
|
||||
type: "vocabulary",
|
||||
param: "fos",
|
||||
operator: "fs",
|
||||
|
@ -279,7 +279,7 @@ export class SearchFieldsBase {
|
|||
filterType: "checkbox"
|
||||
},
|
||||
["foslabel"]: {
|
||||
name: "Field of Science [Beta]",
|
||||
name: "Field of Science",
|
||||
type: "vocabulary",
|
||||
param: "foslabel",
|
||||
operator: "fl",
|
||||
|
@ -770,7 +770,9 @@ export class SearchFieldsBase {
|
|||
|
||||
//add project field depending on funder
|
||||
public HIDDEN_FIELDS: string[] = ["fundinglevel0_id", "fundinglevel1_id", "fundinglevel2_id",
|
||||
"relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id", "relproject", "instancetypename"];
|
||||
"relfundinglevel0_id", "relfundinglevel1_id", "relfundinglevel2_id", "relproject",
|
||||
// "instancetypename"
|
||||
];
|
||||
|
||||
public DEPENDENT_FIELDS: { [key: string]: string } = {
|
||||
["relproject"]: "relfunder",
|
||||
|
@ -780,7 +782,7 @@ export class SearchFieldsBase {
|
|||
["relfundinglevel0_id"]: "relfunder",
|
||||
["relfundinglevel1_id"]: "relfundinglevel0_id",
|
||||
["relfundinglevel2_id"]: "relfundinglevel1_id",
|
||||
["instancetypename"]: "type"
|
||||
// ["instancetypename"]: "type"
|
||||
};
|
||||
|
||||
|
||||
|
@ -885,6 +887,10 @@ export class SearchFieldsBase {
|
|||
}
|
||||
return "or";
|
||||
}
|
||||
|
||||
getFosParameter() {
|
||||
return this.RESULT_REFINE_FIELDS.includes("foslabel") ? "foslabel" : "fos";
|
||||
}
|
||||
}
|
||||
|
||||
export class FieldDetails {
|
||||
|
|
|
@ -143,28 +143,49 @@ export class ISVocabulariesService {
|
|||
|
||||
parseFOS(data: any): AutoCompleteValue[] {
|
||||
let array: AutoCompleteValue[] = []
|
||||
for (let fos of data) {
|
||||
let children = data.reverse();
|
||||
while(children && children.length > 0) {
|
||||
let fos = children.pop();
|
||||
let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
value.id = fos.id;//data[i].code;
|
||||
value.label = fos.label;
|
||||
array.push(value);
|
||||
if(fos.children) {
|
||||
for (let fos2 of fos.children) {
|
||||
let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
value.id = fos2.id;//data[i].code;
|
||||
value.label = fos2.label;
|
||||
array.push(value);
|
||||
if(fos2.children) {
|
||||
for (let fos3 of fos2.children) {
|
||||
let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
value.id = fos3.id;//data[i].code;
|
||||
value.label = fos3.label;
|
||||
array.push(value);
|
||||
}
|
||||
}
|
||||
if(fos.children && fos.children.length > 0) {
|
||||
for (let i=fos.children.length-1; i>=0; i--) {
|
||||
children.push(fos.children[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
// for (let fos of data) {
|
||||
// let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
// value.id = fos.id;//data[i].code;
|
||||
// value.label = fos.label;
|
||||
// array.push(value);
|
||||
// if(fos.children) {
|
||||
// for (let fos2 of fos.children) {
|
||||
// let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
// value.id = fos2.id;//data[i].code;
|
||||
// value.label = fos2.label;
|
||||
// array.push(value);
|
||||
// if(fos2.children) {
|
||||
// for (let fos3 of fos2.children) {
|
||||
// let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
// value.id = fos3.id;//data[i].code;
|
||||
// value.label = fos3.label;
|
||||
// array.push(value);
|
||||
// // if(fos3.children) {
|
||||
// // for (let fos4 of fos3.children) {
|
||||
// // let value: AutoCompleteValue = new AutoCompleteValue();
|
||||
// // value.id = fos4.id;//data[i].code;
|
||||
// // value.label = fos4.label;
|
||||
// // array.push(value);
|
||||
// // }
|
||||
// // }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return array;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue