# Conflicts:
#	dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html
This commit is contained in:
Diamantis Tziotzios 2020-09-16 18:40:16 +03:00
commit 2f1f08a83f
38 changed files with 315 additions and 166 deletions

View File

@ -57,8 +57,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
import static org.springframework.http.MediaType.APPLICATION_ATOM_XML; import static org.springframework.http.MediaType.*;
import static org.springframework.http.MediaType.APPLICATION_JSON;
@RestController @RestController
@ -256,8 +255,10 @@ public class DMPs extends BaseController {
public ResponseEntity<ResponseItem> dmpUpload(@RequestParam("file") MultipartFile[] files, @RequestParam(name = "profiles", required = false)String[] profiles, Principal principal) throws Exception { public ResponseEntity<ResponseItem> dmpUpload(@RequestParam("file") MultipartFile[] files, @RequestParam(name = "profiles", required = false)String[] profiles, Principal principal) throws Exception {
if (files[0].getContentType().equals(APPLICATION_JSON.toString())) { if (files[0].getContentType().equals(APPLICATION_JSON.toString())) {
this.dataManagementPlanManager.createFromRDA(files, principal, profiles); this.dataManagementPlanManager.createFromRDA(files, principal, profiles);
} else if (files[0].getContentType().equals(APPLICATION_ATOM_XML.toString())) { } else if (files[0].getContentType().equals(APPLICATION_ATOM_XML.toString()) || files[0].getContentType().equals(TEXT_XML.toString())) {
this.dataManagementPlanManager.createDmpFromXml(this.getApiContext(), files, principal); this.dataManagementPlanManager.createDmpFromXml(this.getApiContext(), files, principal);
} else {
return ResponseEntity.badRequest().body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("File format is not supported"));
} }
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List>() return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List>()
.status(ApiMessageCode.SUCCESS_MESSAGE)); .status(ApiMessageCode.SUCCESS_MESSAGE));

View File

@ -48,8 +48,12 @@ public class TagController extends BaseController {
//ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(query); //ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(query);
/*List<Map<String, String>> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getTags(externalUrlCriteria, type); /*List<Map<String, String>> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getTags(externalUrlCriteria, type);
TagExternalSourcesModel researchersExternalSourcesModel = new TagExternalSourcesModel().fromExternalItem(remoteRepos);*/ TagExternalSourcesModel researchersExternalSourcesModel = new TagExternalSourcesModel().fromExternalItem(remoteRepos);*/
List<Tag> tags = this.getApiContext().getOperationsContext().getElasticRepository().getDatasetRepository().query(new DatasetCriteria()).stream().map(Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList()); if (this.getApiContext().getOperationsContext().getElasticRepository().getDatasetRepository().exists()) {
List<Tag> tags = this.getApiContext().getOperationsContext().getElasticRepository().getDatasetRepository().query(new DatasetCriteria()).stream().map(Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList());
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<Tag>>().payload(tags).status(ApiMessageCode.NO_MESSAGE)); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<Tag>>().payload(tags).status(ApiMessageCode.NO_MESSAGE));
} else {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(new ResponseItem<List<Tag>>().status(ApiMessageCode.ERROR_MESSAGE).message("Elastic Services are not available"));
}
} }
} }

View File

@ -168,7 +168,7 @@ public class DatasetManager {
QueryableList<eu.eudat.data.entities.Dataset> authItems; QueryableList<eu.eudat.data.entities.Dataset> authItems;
if (!datasetTableRequest.getCriteria().getIsPublic()) { if (!datasetTableRequest.getCriteria().getIsPublic()) {
if (principal.getId() == null) { if (principal.getId() == null) {
throw new UnauthorisedException(); throw new UnauthorisedException("You are not allowed to access those datasets");
} }
if (datasetTableRequest.getCriteria().getRole() != null) if (datasetTableRequest.getCriteria().getRole() != null)
roles.add(datasetTableRequest.getCriteria().getRole()); roles.add(datasetTableRequest.getCriteria().getRole());

View File

@ -199,7 +199,10 @@ public class DatasetProfileManager {
public eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.DatasetProfile createDatasetProfileFromXml(MultipartFile multiPartFile) { public eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.DatasetProfile createDatasetProfileFromXml(MultipartFile multiPartFile) {
ImportXmlBuilderDatasetProfile xmlBuilder = new ImportXmlBuilderDatasetProfile(); ImportXmlBuilderDatasetProfile xmlBuilder = new ImportXmlBuilderDatasetProfile();
try { try {
return xmlBuilder.build(convert(multiPartFile)); File localFile = convert(multiPartFile);
eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.DatasetProfile profile = xmlBuilder.build(localFile);
Files.deleteIfExists(localFile.toPath());
return profile;
} catch (IOException e) { } catch (IOException e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} }

View File

@ -205,6 +205,7 @@ public class ExportXmlBuilderDatasetProfile {
WordListData wordListDataObject = (WordListData) field.getData(); WordListData wordListDataObject = (WordListData) field.getData();
dataOut.setAttribute("label", wordListDataObject.getLabel()); dataOut.setAttribute("label", wordListDataObject.getLabel());
dataOut.setAttribute("type", wordListDataObject.getType()); dataOut.setAttribute("type", wordListDataObject.getType());
dataOut.setAttribute("multiList", wordListDataObject.getMultiList().toString());
Element options = element.createElement("options"); Element options = element.createElement("options");
wordListDataObject.getOptions().forEach(optionChildFor -> { wordListDataObject.getOptions().forEach(optionChildFor -> {
Element optionChild = element.createElement("option"); Element optionChild = element.createElement("option");

View File

@ -0,0 +1,13 @@
package eu.eudat.logic.utilities.json;
public class JavaToJson {
public static String objectStringToJson(String object) {
String result = object.replaceAll("=", "\":\"")
.replaceAll("\\{", "{\"")
.replaceAll(", ", "\", \"")
.replaceAll("}", "\"}" ).
replaceAll("}\", \"\\{", "}, {");
return result;
}
}

View File

@ -78,7 +78,8 @@ public class WordListData extends ComboBoxData<WordListData> {
this.options.add(newOption); this.options.add(newOption);
} }
} }
this.multiList = (Boolean) ((Map<String, Object>) data).get("multiList"); Object multiList1 = ((Map<String, Object>) data).get("multiList");
this.multiList = multiList1 instanceof String ? Boolean.parseBoolean((String) multiList1) : (Boolean) multiList1;
} }
return this; return this;
} }
@ -92,6 +93,7 @@ public class WordListData extends ComboBoxData<WordListData> {
@Override @Override
public Map<String, Object> toMap(Element item) { public Map<String, Object> toMap(Element item) {
HashMap dataMap = new HashMap(); HashMap dataMap = new HashMap();
dataMap.put("multiList", item != null ? item.getAttribute("multiList") : "false");
dataMap.put("label", item != null ? item.getAttribute("label") : ""); dataMap.put("label", item != null ? item.getAttribute("label") : "");
dataMap.put("type", item != null ? item.getAttribute("type") : "wordlist"); dataMap.put("type", item != null ? item.getAttribute("type") : "wordlist");
Element optionsElement = (Element) item.getElementsByTagName("options").item(0); Element optionsElement = (Element) item.getElementsByTagName("options").item(0);

View File

@ -53,6 +53,14 @@ public class DatasetId implements Serializable
private Map<String, Object> additionalProperties = new HashMap<String, Object>(); private Map<String, Object> additionalProperties = new HashMap<String, Object>();
private final static long serialVersionUID = -6295164005851378031L; private final static long serialVersionUID = -6295164005851378031L;
public DatasetId() {
}
public DatasetId(String identifier, Type type) {
this.identifier = identifier;
this.type = type;
}
/** /**
* The Dataset Identifier Schema * The Dataset Identifier Schema
* <p> * <p>

View File

@ -52,15 +52,17 @@ public class DatasetIdRDAMapper {
} }
private static void finalRDAMap(DatasetId rda, String property, String value) { private static void finalRDAMap(DatasetId rda, String property, String value) {
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) { if (value != null) {
if (property.contains(datasetIdProperties.getName())) { for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
switch (datasetIdProperties) { if (property.contains(datasetIdProperties.getName())) {
case IDENTIFIER: switch (datasetIdProperties) {
rda.setIdentifier(value); case IDENTIFIER:
break; rda.setIdentifier(value);
case TYPE: break;
rda.setType(DatasetId.Type.fromValue(value)); case TYPE:
break; rda.setType(DatasetId.Type.fromValue(value));
break;
}
} }
} }
} }

View File

@ -11,6 +11,7 @@ import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
import eu.eudat.models.rda.Contributor; import eu.eudat.models.rda.Contributor;
import eu.eudat.models.rda.Dataset; import eu.eudat.models.rda.Dataset;
import eu.eudat.models.rda.DatasetId;
import eu.eudat.models.rda.Language; import eu.eudat.models.rda.Language;
import org.json.JSONObject; import org.json.JSONObject;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -56,11 +57,14 @@ public class DatasetRDAMapper {
if (!idNodes.isEmpty()) { if (!idNodes.isEmpty()) {
rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes)); rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes));
} }
if (rda.getDatasetId() == null) {
rda.setDatasetId(new DatasetId(dataset.getId().toString(), DatasetId.Type.OTHER));
}
List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type"); List<JsonNode> typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type");
if (!typeNodes.isEmpty()) { if (!typeNodes.isEmpty()) {
rda.setType(typeNodes.get(0).get("value").asText()); rda.setType(typeNodes.get(0).get("value").asText());
} else { } else {
rda.setType(dataset.getLabel()); rda.setType("DMP Dataset");
} }
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language"); List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language");
if (!languageNodes.isEmpty()) { if (!languageNodes.isEmpty()) {
@ -93,9 +97,9 @@ public class DatasetRDAMapper {
rda.setKeyword(keywordNodes.stream().map(keywordNode -> { rda.setKeyword(keywordNodes.stream().map(keywordNode -> {
JsonNode value = keywordNode.get("value"); JsonNode value = keywordNode.get("value");
if (value.isArray()) { if (value.isArray()) {
return StreamSupport.stream(value.spliterator(), false).map(node -> KeywordRDAMapper.toRDA(node.asText())).collect(Collectors.toList()); return StreamSupport.stream(value.spliterator(), false).map(node -> KeywordRDAMapper.toRDA(node.asText())).flatMap(Collection::stream).collect(Collectors.toList());
} else { } else {
return Collections.singletonList(KeywordRDAMapper.toRDA(keywordNode.get("value").asText())); return KeywordRDAMapper.toRDA(keywordNode.get("value").asText());
} }
}).flatMap(Collection::stream).collect(Collectors.toList())); }).flatMap(Collection::stream).collect(Collectors.toList()));
for (int i = 0; i < keywordNodes.size(); i++) { for (int i = 0; i < keywordNodes.size(); i++) {
@ -118,6 +122,8 @@ public class DatasetRDAMapper {
List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data"); List<JsonNode> sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data");
if (!sensitiveDataNodes.isEmpty()) { if (!sensitiveDataNodes.isEmpty()) {
rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get()); rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get());
} else {
rda.setSensitiveData(Dataset.SensitiveData.UNKNOWN);
} }
List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource"); List<JsonNode> technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource");
if (!technicalResourceNodes.isEmpty()) { if (!technicalResourceNodes.isEmpty()) {

View File

@ -31,6 +31,18 @@ public class DmpRDAMapper {
@Transactional @Transactional
public Dmp toRDA(DMP dmp) { public Dmp toRDA(DMP dmp) {
Map<String, Object> extraProperties;
if (dmp.getExtraProperties() == null) {
throw new IllegalArgumentException("DMP is missing required Data for RDA export");
} else {
extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap();
if (extraProperties.get("language") == null) {
throw new IllegalArgumentException("DMP must have it's language property defined");
}
if (extraProperties.get("contact") == null) {
throw new IllegalArgumentException("DMP must have it's contact property defined");
}
}
Dmp rda = new Dmp(); Dmp rda = new Dmp();
if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) { if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) {
rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getDoi())); rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getDoi()));
@ -42,11 +54,13 @@ public class DmpRDAMapper {
rda.setModified(dmp.getModified()); rda.setModified(dmp.getModified());
rda.setTitle(dmp.getLabel()); rda.setTitle(dmp.getLabel());
Map<String, Object> extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap();
if (!extraProperties.isEmpty()) { if (!extraProperties.isEmpty()) {
if (extraProperties.get("language") != null) { if (extraProperties.get("ethicalIssues") != null) {
rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(extraProperties.get("language").toString())); rda.setEthicalIssuesExist(Dmp.EthicalIssuesExist.fromValue(extraProperties.get("ethicalIsses").toString()));
} else {
rda.setEthicalIssuesExist(Dmp.EthicalIssuesExist.UNKNOWN);
} }
rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(extraProperties.get("language").toString()));
if (extraProperties.get("costs") != null) { if (extraProperties.get("costs") != null) {
rda.setCost(new ArrayList<>()); rda.setCost(new ArrayList<>());
((List) extraProperties.get("costs")).forEach(costl -> { ((List) extraProperties.get("costs")).forEach(costl -> {
@ -59,10 +73,8 @@ public class DmpRDAMapper {
rda.getCost().add(cost); rda.getCost().add(cost);
}); });
} }
if (extraProperties.get("contact") != null) { UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String)extraProperties.get("contact"))); rda.setContact(ContactRDAMapper.toRDA(contact));
rda.setContact(ContactRDAMapper.toRDA(contact));
}
} }
/*UserInfo creator; /*UserInfo creator;
@ -101,7 +113,7 @@ public class DmpRDAMapper {
entity.getAssociatedDmps().add(exProfile); entity.getAssociatedDmps().add(exProfile);
} }
} }
if (rda.getContributor() != null && !rda.getContributor().isEmpty()) { if (rda.getContributor() != null && !rda.getContributor().isEmpty() && rda.getContributor().get(0).getContributorId() != null) {
entity.setResearchers(rda.getContributor().stream().map(ContributorRDAMapper::toEntity).filter(StreamDistinctBy.distinctByKey(Researcher::getReference)).collect(Collectors.toSet())); entity.setResearchers(rda.getContributor().stream().map(ContributorRDAMapper::toEntity).filter(StreamDistinctBy.distinctByKey(Researcher::getReference)).collect(Collectors.toSet()));
} }
entity.setCreated(rda.getCreated()); entity.setCreated(rda.getCreated());

View File

@ -1,25 +1,29 @@
package eu.eudat.models.rda.mapper; package eu.eudat.models.rda.mapper;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import eu.eudat.elastic.entities.Tag;
import eu.eudat.logic.utilities.json.JavaToJson;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.*;
import java.util.Map; import java.util.stream.Collectors;
public class KeywordRDAMapper { public class KeywordRDAMapper {
private static final Logger logger = LoggerFactory.getLogger(KeywordRDAMapper.class); private static final Logger logger = LoggerFactory.getLogger(KeywordRDAMapper.class);
public static String toRDA(String value) { public static List<String> toRDA(String value) {
ObjectMapper mapper = new ObjectMapper(); ObjectMapper mapper = new ObjectMapper();
try { try {
Map<String, Object> map = mapper.readValue(value, HashMap.class); value = JavaToJson.objectStringToJson(value);
return (String) map.get("name"); List<Tag> tags = Arrays.asList(mapper.readValue(value, Tag[].class));
List<String> keywordNames = tags.stream().map(Tag::getName).collect(Collectors.toList());
return keywordNames;
} catch (IOException e) { } catch (IOException e) {
logger.error(e.getMessage(), e); logger.error(e.getMessage(), e);
} }
return value; return new ArrayList<>();
} }
} }

View File

@ -20,7 +20,6 @@
"src/assets", "src/assets",
"src/favicon.ico", "src/favicon.ico",
{ "glob": "**/*", "input": "node_modules/tinymce", "output": "/tinymce/" } { "glob": "**/*", "input": "node_modules/tinymce", "output": "/tinymce/" }
], ],
"styles": [ "styles": [
"src/styles.scss", "src/styles.scss",

View File

@ -48,7 +48,9 @@ export class AuthService extends BaseService {
return principal; return principal;
} }
const principalJson = localStorage.getItem('principal'); const principalJson = localStorage.getItem('principal');
if (!principalJson) { return null; } if (principalJson === null || principalJson === undefined) {
return null;
}
let principalObj = JSON.parse(principalJson) as Principal; let principalObj = JSON.parse(principalJson) as Principal;
principalObj.expiresAt = new Date(principalObj.expiresAt); principalObj.expiresAt = new Date(principalObj.expiresAt);
if (principalObj.expiresAt < new Date()) { if (principalObj.expiresAt < new Date()) {
@ -125,7 +127,8 @@ export class AuthService extends BaseService {
} }
public me(): Observable<Principal> { public me(): Observable<Principal> {
const url = this.actionUrl + '/me'; this.actionUrl = this.configurationService.server + 'auth/';
const url = this.actionUrl + 'me';
const principal = this.current(); const principal = this.current();
if (!principal) { if (!principal) {
this.clear(); this.clear();

View File

@ -85,8 +85,9 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn
this.form = this.dataModel.buildForm(); this.form = this.dataModel.buildForm();
} }
this.prepareForm(); this.prepareForm();
} catch { } catch (error) {
this.logger.error('Could not parse MasterItem: ' + data); this.logger.error('Could not parse MasterItem: ' + data);
console.log(error)
this.uiNotificationService.snackBarNotification(this.language.instant('NOTIFICATIONS.DEFAULT.ERROR'), SnackBarNotificationLevel.Error); this.uiNotificationService.snackBarNotification(this.language.instant('NOTIFICATIONS.DEFAULT.ERROR'), SnackBarNotificationLevel.Error);
} }
}, },

View File

@ -1,9 +1,10 @@
<div class="main-content listing-main-container h-100"> <div class="main-content listing-main-container h-100">
<div class="container-fluid"> <div class="container-fluid">
<div class="d-flex flex-direction-row"> <div class="d-flex flex-direction-row">
<div class="card mt-0" [style.display]="isVisible ? 'block' : 'none'"> <div *ngIf="hasListingItems && listingItems && listingItems.length === 0" class="card mt-0">
<a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto pt-3 material-icons clear-icon">clear</span></a> <!-- <div class="card mt-0" [style.display]="isVisible ? 'block' : 'none'"> -->
<div class="card-content info-text mb-0 pt-0"> <!-- <a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto pt-3 material-icons clear-icon">clear</span></a> -->
<div class="card-content info-text mb-0">
<p>{{'DATASET-LISTING.TEXT-INFO' | translate}} <u class="pointer" [routerLink]="['/explore']">{{'DATASET-LISTING.LINK-PUBLIC-DATASETS' | translate}}</u> {{'DATASET-LISTING.TEXT-INFO-REST' | translate}}</p> <p>{{'DATASET-LISTING.TEXT-INFO' | translate}} <u class="pointer" [routerLink]="['/explore']">{{'DATASET-LISTING.LINK-PUBLIC-DATASETS' | translate}}</u> {{'DATASET-LISTING.TEXT-INFO-REST' | translate}}</p>
<p class="mt-4 pt-2">{{'DATASET-LISTING.TEXT-INFO-PAR' | translate}} <p class="mt-4 pt-2">{{'DATASET-LISTING.TEXT-INFO-PAR' | translate}}
<div class="col pl-0 pt-3"> <div class="col pl-0 pt-3">
@ -13,7 +14,15 @@
</div> </div>
</div> </div>
</div> </div>
<div class="filter-btn" [style.right]="dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()"> <p *ngIf="listingItems && listingItems.length > 0" class="col-auto header-title">{{(isPublic ? 'GENERAL.TITLES.EXPLORE' : 'GENERAL.TITLES.DATASETS') | translate}}</p>
<div *ngIf="listingItems && listingItems.length > 0 && !isPublic" class="ml-auto">
<div class="col-auto">
<button mat-raised-button class="add-dataset align-self-center yellow-btn" [routerLink]="['/new/dataset/']">
{{'DASHBOARD.ACTIONS.ADD-DATASET' | translate}}
</button>
</div>
</div>
<div *ngIf="listingItems && listingItems.length > 0" class="filter-btn" [style.right]="dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()">
<button mat-raised-button class="p-0"> <button mat-raised-button class="p-0">
<mat-icon class="mr-4">filter_alt</mat-icon> <mat-icon class="mr-4">filter_alt</mat-icon>
</button> </button>
@ -21,11 +30,11 @@
</div> </div>
<div> <div>
<div class="listing row pb-2"> <div class="listing row pb-2">
<div class="col-md-12"> <div *ngIf="listingItems && listingItems.length > 0" class="col-md-12">
<div class="d-flex flex-direction-row pt-4"> <div class="d-flex flex-direction-row pt-4">
<!-- Sort by --> <!-- Sort by -->
<span class="d-flex align-items-center">{{'DMP-LISTING.SORT-BY' | translate}}:</span> <span class="d-flex align-items-center">{{'DMP-LISTING.SORT-BY' | translate}}:</span>
<mat-form-field appearance="outline" class="sort-form col-auto pr-0"> <mat-form-field class="sort-form col-auto pr-0">
<mat-select placeholder="{{'CRITERIA.LIKE'| translate}}" [formControl]="formGroup.get('order')"> <mat-select placeholder="{{'CRITERIA.LIKE'| translate}}" [formControl]="formGroup.get('order')">
<mat-option *ngIf="!isPublic" [value]="order.MODIFIED">{{enumUtils.toRecentActivityOrderString(order.MODIFIED)}}</mat-option> <mat-option *ngIf="!isPublic" [value]="order.MODIFIED">{{enumUtils.toRecentActivityOrderString(order.MODIFIED)}}</mat-option>
<mat-option *ngIf="isPublic" [value]="order.DATASETPUBLISHED">{{enumUtils.toRecentActivityOrderString(order.DATASETPUBLISHED)}}</mat-option> <mat-option *ngIf="isPublic" [value]="order.DATASETPUBLISHED">{{enumUtils.toRecentActivityOrderString(order.DATASETPUBLISHED)}}</mat-option>
@ -37,12 +46,12 @@
<!-- End of Sort by --> <!-- End of Sort by -->
<div class="d-flex flex-row ml-auto"> <div class="d-flex flex-row ml-auto">
<!-- Guided Tour --> <!-- Guided Tour -->
<div class="center-content" [style.display]=" (!isVisible && isAuthenticated()) ? 'block' : 'none'" (click)="restartTour()"> <div *ngIf="!isPublic" class="center-content" (click)="restartTour()">
{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }} {{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}
</div> </div>
<!-- End of Guided Tour --> <!-- End of Guided Tour -->
<!-- Search Filter--> <!-- Search Filter-->
<mat-form-field *ngIf="listingItems && listingItems.length > 0" appearance="outline" class="search-form ml-auto col-auto" floatLabel="never"> <mat-form-field class="search-form ml-auto col-auto" floatLabel="never">
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
<input matInput placeholder="{{'CRITERIA.DATA-SETS.LIKE'| translate}}" name="likeCriteria" [formControl]="formGroup.get('like')"> <input matInput placeholder="{{'CRITERIA.DATA-SETS.LIKE'| translate}}" name="likeCriteria" [formControl]="formGroup.get('like')">
<mat-error *ngIf="formGroup.get('like').hasError('backendError')">{{formGroup.get('like').getError('backendError').message}}</mat-error> <mat-error *ngIf="formGroup.get('like').hasError('backendError')">{{formGroup.get('like').getError('backendError').message}}</mat-error>
@ -59,7 +68,7 @@
<button type="button" class="btn-load-more" (click)="loadMore()">{{'GENERAL.ACTIONS.LOAD-MORE' | translate}}</button> <button type="button" class="btn-load-more" (click)="loadMore()">{{'GENERAL.ACTIONS.LOAD-MORE' | translate}}</button>
</div> </div>
</div> </div>
<div class="col-md-12 d-flex justify-content-center" *ngIf="listingItems.length === 0"> <div class="col-md-12 d-flex justify-content-center pt-4 mt-4 mb-4 pb-4" *ngIf="hasListingItems && listingItems && listingItems.length === 0">
<span class="empty-list">{{'DATASET-LISTING.EMPTY-LIST' | translate}}</span> <span class="empty-list">{{'DATASET-LISTING.EMPTY-LIST' | translate}}</span>
</div> </div>
</div> </div>

View File

@ -19,6 +19,14 @@
position: relative; position: relative;
} }
.header-title {
text-align: left;
font-size: 1.25rem;
font-weight: 300;
color: #212121;
padding: 0px;
}
.header-text-container { .header-text-container {
background: rgba(255, 255, 255, 0.7); background: rgba(255, 255, 255, 0.7);
position: absolute; position: absolute;
@ -146,7 +154,7 @@
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 600; font-weight: 600;
letter-spacing: 0.02rem; letter-spacing: 0.02rem;
color: #2D72D6; color: #2d72d6;
cursor: pointer; cursor: pointer;
} }
@ -179,8 +187,8 @@
} }
::ng-deep .sort-form .mat-form-field-wrapper { ::ng-deep .sort-form .mat-form-field-wrapper {
background-color: white !important; background-color: white !important;
padding-bottom: 0 !important; padding-bottom: 0 !important;
} }
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix { ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {

View File

@ -46,6 +46,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
totalCount: number; totalCount: number;
dmpSearchEnabled = true; dmpSearchEnabled = true;
listingItems: DatasetListingModel[] = []; listingItems: DatasetListingModel[] = [];
hasListingItems = null;
isPublic: boolean = false; isPublic: boolean = false;
public isVisible = true public isVisible = true
@ -195,6 +196,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
// if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } // if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; }
this.totalCount = result.totalCount; this.totalCount = result.totalCount;
this.listingItems = result.data; this.listingItems = result.data;
this.hasListingItems = true;
}); });
} }
@ -211,6 +213,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
// if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; } // if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; }
// this.listingItems = this.listingItems.concat(result.data); // this.listingItems = this.listingItems.concat(result.data);
this.listingItems = this.listingItems.length > 0 ? this.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value) : result.data; this.listingItems = this.listingItems.length > 0 ? this.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value) : result.data;
this.hasListingItems = true;
}); });
} }

View File

@ -48,12 +48,12 @@
</div> </div>
</div> </div>
<div class="row mb-4 pb-3"> <div class="row mb-4 pb-3">
<button *ngIf="isAuthenticated()" (click)="openDmpSearchDialogue()" mat-mini-fab class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.CLONE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
</button>
<button *ngIf="isDraftDataset(dataset) && !lockStatus" (click)="editClicked(dataset)" mat-mini-fab class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above"> <button *ngIf="isDraftDataset(dataset) && !lockStatus" (click)="editClicked(dataset)" mat-mini-fab class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">create</mat-icon> <mat-icon class="mat-mini-fab-icon">create</mat-icon>
</button> </button>
<button *ngIf="isAuthenticated()" (click)="openDmpSearchDialogue()" mat-mini-fab class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.CLONE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
</button>
<button *ngIf="isUserDatasetRelated() && !lockStatus" (click)="deleteClicked()" mat-mini-fab class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" matTooltipPosition="above"> <button *ngIf="isUserDatasetRelated() && !lockStatus" (click)="deleteClicked()" mat-mini-fab class="mr-3 actions-btn" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">delete</mat-icon> <mat-icon class="mat-mini-fab-icon">delete</mat-icon>
</button> </button>

View File

@ -53,6 +53,6 @@ export class AvailableProfilesComponent extends BaseComponent implements OnInit
} }
isOptionSelected(profile: any) { isOptionSelected(profile: any) {
return this.formGroup.value.map(x => x.id).indexOf(profile.id) !== -1; return this.formGroup.value ? this.formGroup.value.map(x => x.id).indexOf(profile.id) !== -1 : null;
} }
} }

View File

@ -57,7 +57,7 @@
</button> </button>
</div> </div>
<div class="col-auto d-flex align-items-center"> <div class="col-auto d-flex align-items-center">
<button *ngIf="!lockStatus" mat-raised-button class="dataset-save-btn" type="submit">{{ 'DATASET-WIZARD.ACTIONS.SAVE' | translate }}</button> <button *ngIf="!lockStatus && !isFinalized" mat-raised-button class="dataset-save-btn" type="submit">{{ 'DATASET-WIZARD.ACTIONS.SAVE' | translate }}</button>
<button *ngIf="lockStatus" mat-raised-button disabled class="dataset-save-btn cursor-default" type="button">{{ 'DMP-OVERVIEW.LOCKED' | translate}}</button> <button *ngIf="lockStatus" mat-raised-button disabled class="dataset-save-btn cursor-default" type="button">{{ 'DMP-OVERVIEW.LOCKED' | translate}}</button>
<!-- <div *ngIf="!isNew && formGroup.enabled && !lockStatus"> <!-- <div *ngIf="!isNew && formGroup.enabled && !lockStatus">
<button *ngIf="!isFinalized" mat-raised-button type="submit" class="dataset-save-btn">{{'DMP-EDITOR.ACTIONS.SAVE' | translate}}</button> <button *ngIf="!isFinalized" mat-raised-button type="submit" class="dataset-save-btn">{{'DMP-EDITOR.ACTIONS.SAVE' | translate}}</button>
@ -97,7 +97,7 @@
</ul> </ul>
</li> </li>
</ol> </ol>
<ul *ngIf="!isNewDataset && hasProfile()" class="add-dataset-option"> <ul *ngIf="!isNewDataset && hasProfile() && !isFinalized" class="add-dataset-option">
<li> <li>
<a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank"> <a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank">
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}} <mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}

View File

@ -1,14 +1,16 @@
<div class="main-content listing-main-container h-100"> <div class="main-content listing-main-container h-100">
<div class="container-fluid"> <div class="container-fluid">
<div class="d-flex flex-direction-row"> <div class="d-flex flex-direction-row">
<div class="card mt-0" [style.display]="isVisible ? 'block' : 'none'"> <div *ngIf="hasListingItems && listingItems && listingItems.length === 0" class="card mt-0">
<a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto pt-3 material-icons clear-icon">clear</span></a> <!-- <div *ngIf="listingItems && listingItems.length === 0" class="card mt-0" [style.display]="isVisible ? 'block' : 'none'"> -->
<div class="card-content info-text mb-0 pt-0"> <!-- <a class="col-auto d-flex" (click)="closeCard()"><span class="ml-auto pt-3 material-icons clear-icon">clear</span></a> -->
<div class="card-content info-text mb-0">
<p>{{'DMP-LISTING.TEXT-INFO' | translate}}</p> <p>{{'DMP-LISTING.TEXT-INFO' | translate}}</p>
<p class="mt-4 pt-2">{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} <a class="zenodo-link" href="https://zenodo.org/communities/liber-dmp-cat/?page=1&size=20" target="_blank">{{'DMP-LISTING.LINK-ZENODO' | translate}}</a> {{'DMP-LISTING.GET-IDEA' | translate}}</p> <p class="mt-4 pt-2">{{'DMP-LISTING.TEXT-INFO-QUESTION' | translate}} <a class="zenodo-link" href="https://zenodo.org/communities/liber-dmp-cat/?page=1&size=20" target="_blank">{{'DMP-LISTING.LINK-ZENODO' | translate}}</a> {{'DMP-LISTING.GET-IDEA' | translate}}</p>
</div> </div>
</div> </div>
<div class="filter-btn" [style.right]="this.dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()"> <p *ngIf="listingItems && listingItems.length > 0" class="col-auto header-title">{{(isPublic ? 'GENERAL.TITLES.EXPLORE-PLANS' : 'GENERAL.TITLES.PLANS') | translate}}</p>
<div *ngIf="listingItems && listingItems.length > 0" class="filter-btn" [style.right]="this.dialog.getDialogById('filters') ? '446px' : '0px'" [style.width]="scrollbar ? '57px' : '37px'" (click)="openFiltersDialog()">
<button mat-raised-button class="p-0"> <button mat-raised-button class="p-0">
<mat-icon class="mr-4">filter_alt</mat-icon> <mat-icon class="mr-4">filter_alt</mat-icon>
</button> </button>
@ -16,11 +18,11 @@
</div> </div>
<div> <div>
<div class="listing row pb-2"> <div class="listing row pb-2">
<div class="col-md-12"> <div *ngIf="listingItems && listingItems.length > 0" class="col-md-12">
<div class="d-flex flex-direction-row pt-4"> <div class="d-flex flex-direction-row pt-4">
<!-- Sort by --> <!-- Sort by -->
<span class="d-flex align-items-center">{{'DMP-LISTING.SORT-BY' | translate}}:</span> <span class="d-flex align-items-center">{{'DMP-LISTING.SORT-BY' | translate}}:</span>
<mat-form-field appearance="outline" class="sort-form col-auto"> <mat-form-field class="sort-form col-auto">
<mat-select placeholder="{{'CRITERIA.LIKE'| translate}}" [formControl]="formGroup.get('order')"> <mat-select placeholder="{{'CRITERIA.LIKE'| translate}}" [formControl]="formGroup.get('order')">
<mat-option *ngIf="!isPublic" [value]="order.MODIFIED">{{enumUtils.toRecentActivityOrderString(order.MODIFIED)}}</mat-option> <mat-option *ngIf="!isPublic" [value]="order.MODIFIED">{{enumUtils.toRecentActivityOrderString(order.MODIFIED)}}</mat-option>
<mat-option *ngIf="isPublic" [value]="order.PUBLISHED">{{enumUtils.toRecentActivityOrderString(order.PUBLISHED)}}</mat-option> <mat-option *ngIf="isPublic" [value]="order.PUBLISHED">{{enumUtils.toRecentActivityOrderString(order.PUBLISHED)}}</mat-option>
@ -32,13 +34,11 @@
<!-- End of Sort by --> <!-- End of Sort by -->
<div class="d-flex flex-row ml-auto"> <div class="d-flex flex-row ml-auto">
<!-- Guided Tour --> <!-- Guided Tour -->
<div class="center-content" <!-- <div class="center-content" [style.display]="!isVisible && isAuthenticated()? 'block' : 'none'" (click)="restartTour()"> -->
[style.display]="!isVisible && isAuthenticated()? 'block' : 'none'" (click)="restartTour()"> <div *ngIf="!isPublic" class="center-content" (click)="restartTour()">{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}</div>
{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}
</div>
<!-- End of Guided Tour --> <!-- End of Guided Tour -->
<!-- Search Filter--> <!-- Search Filter-->
<mat-form-field *ngIf="listingItems && listingItems.length > 0" appearance="outline" class="search-form ml-auto col-auto pr-0" <mat-form-field class="search-form ml-auto col-auto pr-0"
floatLabel="never"> floatLabel="never">
<mat-icon matSuffix>search</mat-icon> <mat-icon matSuffix>search</mat-icon>
<input matInput placeholder="{{'CRITERIA.DMP.LIKE'| translate}}" name="likeCriteria" <input matInput placeholder="{{'CRITERIA.DMP.LIKE'| translate}}" name="likeCriteria"
@ -58,7 +58,7 @@
<button type="button" class="btn-load-more" (click)="loadMore()">{{'GENERAL.ACTIONS.LOAD-MORE' | translate}}</button> <button type="button" class="btn-load-more" (click)="loadMore()">{{'GENERAL.ACTIONS.LOAD-MORE' | translate}}</button>
</div> </div>
</div> </div>
<div class="col-md-12 d-flex justify-content-center" *ngIf="listingItems && listingItems.length === 0"> <div class="col-md-12 d-flex justify-content-center pt-4 mt-4 mb-4 pb-4" *ngIf="hasListingItems && listingItems && listingItems.length === 0">
<span class="empty-list">{{'DMP-LISTING.EMPTY-LIST' | translate}}</span> <span class="empty-list">{{'DMP-LISTING.EMPTY-LIST' | translate}}</span>
</div> </div>
</div> </div>

View File

@ -81,6 +81,14 @@
position: relative; position: relative;
} }
.header-title {
text-align: left;
font-size: 1.25rem;
font-weight: 300;
color: #212121;
padding: 0px;
}
.header-text-container { .header-text-container {
background: rgba(255, 255, 255, 0.7); background: rgba(255, 255, 255, 0.7);
position: absolute; position: absolute;
@ -133,7 +141,7 @@
letter-spacing: 0px; letter-spacing: 0px;
color: #212121; color: #212121;
padding-left: 40px; padding-left: 40px;
padding-top: 36px; padding-top: 38px;
padding-bottom: 36px; padding-bottom: 36px;
padding-right: 55px; padding-right: 55px;
opacity: 1; opacity: 1;
@ -190,7 +198,7 @@
right: 0px; right: 0px;
z-index: 100; z-index: 100;
width: 37px; width: 37px;
transition: right .3s; transition: right 0.3s;
transition-timing-function: ease-in-out; transition-timing-function: ease-in-out;
} }
@ -225,7 +233,8 @@
color: black; color: black;
} }
.pointer:hover, .zenodo-link:hover { .pointer:hover,
.zenodo-link:hover {
color: #00b29f; color: #00b29f;
} }
@ -235,8 +244,8 @@
} }
::ng-deep .sort-form .mat-form-field-wrapper { ::ng-deep .sort-form .mat-form-field-wrapper {
background-color: white !important; background-color: white !important;
padding-bottom: 0 !important; padding-bottom: 0 !important;
} }
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix { ::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
@ -252,7 +261,7 @@
font-size: 0.875rem; font-size: 0.875rem;
font-weight: 600; font-weight: 600;
letter-spacing: 0.02rem; letter-spacing: 0.02rem;
color: #2D72D6; color: #2d72d6;
cursor: pointer; cursor: pointer;
} }

View File

@ -52,6 +52,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
groupLabel: string; groupLabel: string;
isPublic: boolean = false; isPublic: boolean = false;
public isVisible = true public isVisible = true
hasListingItems = null;
startIndex: number = 0; startIndex: number = 0;
pageSize: number = 5; pageSize: number = 5;
@ -236,6 +237,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
return item; return item;
}); });
this.listingItems = result.data; this.listingItems = result.data;
this.hasListingItems = true;
this.totalCount = result.totalCount; this.totalCount = result.totalCount;
}); });
} }
@ -260,6 +262,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
}); });
// this.listingItems = this.listingItems.concat(result.data); // this.listingItems = this.listingItems.concat(result.data);
this.listingItems = this.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value); this.listingItems = this.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value);
this.hasListingItems = true;
}); });
} }

View File

@ -25,7 +25,7 @@
<div class="col-auto dmp-dataset-descriptions-name" *ngIf="last || i == 2">{{dataset.label}}</div> <div class="col-auto dmp-dataset-descriptions-name" *ngIf="last || i == 2">{{dataset.label}}</div>
</div> </div>
</div> </div>
<a class="d-flex justify-content-center pb-3 show-more" *ngIf="dmp.datasets.length > 3" [routerLink]="['../plans/overview/' + dmp.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a> <a class="d-flex justify-content-center pb-3 show-more" *ngIf="dmp.datasets.length > 3" [routerLink]="isPublic ? ['/explore-plans/publicOverview/' + dmp.id] : ['/plans/overview/' + dmp.id]"><u>{{'GENERAL.ACTIONS.SHOW-MORE' | translate}}</u></a>
</a> </a>
<div class="dmp-card-actions"> <div class="dmp-card-actions">
<a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a> <a class="col-auto border-right pointer" [matMenuTriggerFor]="exportMenu"><span class="material-icons icon-align pr-2">open_in_new</span>{{'DMP-LISTING.ACTIONS.EXPORT' | translate}}</a>

View File

@ -51,12 +51,12 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<button *ngIf="isAuthenticated()" (click)="cloneOrNewVersionClicked(dmp, false)" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.CLONE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
</button>
<button *ngIf="isDraftDmp(dmp) && isUserOwner && !lockStatus" (click)="editClicked(dmp)" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above"> <button *ngIf="isDraftDmp(dmp) && isUserOwner && !lockStatus" (click)="editClicked(dmp)" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.EDIT' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">create</mat-icon> <mat-icon class="mat-mini-fab-icon">create</mat-icon>
</button> </button>
<button *ngIf="isAuthenticated()" (click)="cloneOrNewVersionClicked(dmp, false)" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.CLONE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">content_copy</mat-icon>
</button>
<button *ngIf="isUserOwner && !lockStatus" (click)="deleteClicked()" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" matTooltipPosition="above"> <button *ngIf="isUserOwner && !lockStatus" (click)="deleteClicked()" mat-mini-fab class="mr-3 d-flex justify-content-center align-items-center" matTooltip="{{'DMP-LISTING.ACTIONS.DELETE' | translate}}" matTooltipPosition="above">
<mat-icon class="mat-mini-fab-icon">delete</mat-icon> <mat-icon class="mat-mini-fab-icon">delete</mat-icon>
</button> </button>

View File

@ -346,11 +346,17 @@ export class FormFieldComponent extends BaseComponent implements OnInit {
parseTags() { parseTags() {
let stringValue = this.form.get('value').value; let stringValue = this.form.get('value').value;
stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}'); if (typeof stringValue === 'string') {
stringValue = stringValue.replace(new RegExp('}"', 'g'), '}').replace(new RegExp('"{', 'g'), '{'); stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}');
console.log(stringValue); stringValue = stringValue.replace(new RegExp('}"', 'g'), '}').replace(new RegExp('"{', 'g'), '{');
} else if (stringValue instanceof Array) {
const tempArray = new Array();
for (let stringTag of stringValue) {
tempArray.push(JSON.parse(stringTag));
}
stringValue = JSON.stringify(tempArray);
}
const tagArray = JSON.parse(stringValue); const tagArray = JSON.parse(stringValue);
console.log(tagArray);
this.form.patchValue({'value': tagArray}); this.form.patchValue({'value': tagArray});
} }

View File

@ -17,7 +17,7 @@
</a> </a>
<a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/co-branding'" href="/splash/resources/co-branding.html"> <a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/co-branding'" href="/splash/resources/co-branding.html">
<i class="material-icons icon">{{ groupMenuRoute.icon }}</i> <i class="material-icons icon">{{ groupMenuRoute.icon }}</i>
<span>{{groupMenuRoute.title | translate}}</span> <span>{{groupMenuRoute.title | translate}} <span class="material-icons icon-external">open_in_new</span></span>
</a> </a>
<a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/contact-support' && this.isAuthenticated()" [routerLink]="[groupMenuRoute.path]"> <a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/contact-support' && this.isAuthenticated()" [routerLink]="[groupMenuRoute.path]">
<i class="material-icons icon">{{ groupMenuRoute.icon }}</i> <i class="material-icons icon">{{ groupMenuRoute.icon }}</i>
@ -25,11 +25,11 @@
</a> </a>
<a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/contact-support' && !this.isAuthenticated()" href="/splash/contact.html"> <a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/contact-support' && !this.isAuthenticated()" href="/splash/contact.html">
<i class="material-icons icon">{{ groupMenuRoute.icon }}</i> <i class="material-icons icon">{{ groupMenuRoute.icon }}</i>
<span>{{groupMenuRoute.title | translate}}</span> <span>{{groupMenuRoute.title | translate}} <span class="material-icons icon-external">open_in_new</span></span>
</a> </a>
<a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/feedback'" (click)="openFeedback(groupMenuRoute)"> <a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/feedback'" (click)="openFeedback(groupMenuRoute)">
<i class="material-icons icon">{{ groupMenuRoute.icon }}</i> <i class="material-icons icon">{{ groupMenuRoute.icon }}</i>
<span>{{groupMenuRoute.title | translate}}</span> <span>{{groupMenuRoute.title | translate}} <span class="material-icons icon-external">open_in_new</span></span>
</a> </a>
</mat-list-item> </mat-list-item>
</div> </div>

View File

@ -9,7 +9,7 @@ $mat-card-header-size: 30px !default;
} }
.nav-list-item { .nav-list-item {
// margin-top: 20px; // margin-top: 20px;
} }
.login { .login {
@ -21,36 +21,42 @@ $mat-card-header-size: 30px !default;
} }
.firstSubtitle { .firstSubtitle {
margin-top: 20px; margin-top: 20px;
} }
.icon-mask { .icon-mask {
color: #6b6b6b; color: #6b6b6b;
transform: translate(-8px, 8px); transform: translate(-8px, 8px);
} }
.active a{ .active a {
font-weight: 700; font-weight: 700;
} }
.active a i{ .active a i {
color: #23BCBA; color: #23bcba;
} }
.inner-line { .inner-line {
margin-left: 12px; margin-left: 12px;
margin-right: 10px; margin-right: 10px;
width: 20px; width: 20px;
height: 13px; height: 13px;
border-left: 1px solid #CCCCCC; border-left: 1px solid #cccccc;
border-bottom: 1px solid #CCCCCC; border-bottom: 1px solid #cccccc;
}
.icon-external {
font-size: 1rem;
padding-left: 0.4rem !important;
color: #6b6b6b;
} }
mat-list-item { mat-list-item {
display: flex !important; display: flex !important;
height: auto !important; height: auto !important;
} }
::ng-deep .mat-list-item-content { ::ng-deep .mat-list-item-content {
width: 100% !important; width: 100% !important;
} }

View File

@ -33,7 +33,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="how-it-works.html">How it works</a> <a href="how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="faqs.html">faqs</a> <a href="faqs.html">faqs</a>
<a href="contributors.html">Contributors</a> <a href="contributors.html">Contributors</a>
</div> </div>
@ -132,7 +135,10 @@
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -34,7 +34,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="how-it-works.html">How it works</a> <a href="how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="faqs.html">faqs</a> <a href="faqs.html">faqs</a>
<a href="contributors.html">Contributors</a> <a href="contributors.html">Contributors</a>
</div> </div>
@ -198,7 +201,10 @@
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -33,7 +33,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="how-it-works.html">How it works</a> <a href="how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="faqs.html">faqs</a> <a href="faqs.html">faqs</a>
<a href="contributors.html">Contributors</a> <a href="contributors.html">Contributors</a>
</div> </div>
@ -152,7 +155,10 @@
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
@ -164,4 +170,4 @@
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View File

@ -34,7 +34,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="about/how-it-works.html">How it works</a> <a href="about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="about/faqs.html">faqs</a> <a href="about/faqs.html">faqs</a>
<a href="about/contributors.html">Contributors</a> <a href="about/contributors.html">Contributors</a>
</div> </div>
@ -134,7 +137,10 @@
<div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -361,3 +361,7 @@ hr {
padding-left: 0px !important; padding-left: 0px !important;
transform: scale(0.45); transform: scale(0.45);
} }
.ext-link-icon {
margin-left: .2rem;
}

View File

@ -34,7 +34,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="about/how-it-works.html">How it works</a> <a href="about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="about/faqs.html">faqs</a> <a href="about/faqs.html">faqs</a>
<a href="about/contributors.html">Contributors</a> <a href="about/contributors.html">Contributors</a>
</div> </div>
@ -268,8 +271,12 @@
<div class="row benefit-ic"> <div class="row benefit-ic">
<img src="assets/img/ic_check_circle_24px.svg" width="20" height="20"> <img src="assets/img/ic_check_circle_24px.svg" width="20" height="20">
<span class="benefit-card-subtitle">Link argos to your</span>&nbsp; <span class="benefit-card-subtitle">Link argos to your</span>&nbsp;
<span class="benefit-card-sub-color"><a href="https://monitor.openaire.eu/">Monitoring <span class="benefit-card-sub-color">
Dashboard</a></span> <a href="https://monitor.openaire.eu/">
Monitoring Dashboard
<i class="fas fa-external-link-alt fa-sm ext-link-icon"></i>
</a>
</span>
</div> </div>
</div> </div>
</div> </div>
@ -396,7 +403,10 @@
<div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">CC ATTRIBUTION 4.0 INTERNATIONAL LICENSE.</a></u></div> <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
CC ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>

View File

@ -38,7 +38,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="../about/how-it-works.html">How it works</a> <a href="../about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="../about/faqs.html">faqs</a> <a href="../about/faqs.html">faqs</a>
<a href="../about/contributors.html">Contributors</a> <a href="../about/contributors.html">Contributors</a>
</div> </div>
@ -75,7 +78,10 @@
<div class="col"> <div class="col">
<p>Open to all to suggest new features and to actively contribute to Argos development via pull <p>Open to all to suggest new features and to actively contribute to Argos development via pull
requests of code in requests of code in
<a href="https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot">GitLab</a>! <a href="https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot" target="_blank">
GitLab
<i class="fas fa-external-link-alt ext-link-icon fa-sm"></i>
</a>!
<br>Note that this page is under development. <br>Note that this page is under development.
</p> </p>
</div> </div>
@ -130,8 +136,10 @@
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
INTERNATIONAL LICENSE.</a></u></div> ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
@ -149,4 +157,4 @@
crossorigin="anonymous"></script> crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View File

@ -9,17 +9,14 @@
<!-- Font Awesome icons (free version)--> <!-- Font Awesome icons (free version)-->
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script> <script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
<!-- Google fonts--> <!-- Google fonts-->
<link <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet">
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
rel="stylesheet">
<!-- Core theme CSS --> <!-- Core theme CSS -->
<link href="../css/styles.css" rel="stylesheet"> <link href="../css/styles.css" rel="stylesheet">
<link href="../css/navbar.css" rel="stylesheet"> <link href="../css/navbar.css" rel="stylesheet">
<link href="../css/footer.css" rel="stylesheet"> <link href="../css/footer.css" rel="stylesheet">
<link href="../css/section.css" rel="stylesheet"> <link href="../css/section.css" rel="stylesheet">
<!-- Bootstrap --> <!-- Bootstrap -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
</head> </head>
<body id="page-top" class="bootstrap-overrides"> <body id="page-top" class="bootstrap-overrides">
@ -27,9 +24,7 @@
<nav class="navbar navbar-expand-lg" id="nav"> <nav class="navbar navbar-expand-lg" id="nav">
<div class="container"> <div class="container">
<a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a> <a class="navbar-brand" href="../index.html"><img src="../assets/img/argos-logo.svg"></a>
<button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" <button class="collapse navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i class="fas fa-bars ml-1"></i></button>
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i
class="fas fa-bars ml-1"></i></button>
<div class="navbar-collapse" id="navbarResponsive"> <div class="navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ml-auto"> <ul class="navbar-nav text-uppercase ml-auto">
<li class="nav-item"> <li class="nav-item">
@ -38,7 +33,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="../about/how-it-works.html">How it works</a> <a href="../about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="../about/faqs.html">faqs</a> <a href="../about/faqs.html">faqs</a>
<a href="../about/contributors.html">Contributors</a> <a href="../about/contributors.html">Contributors</a>
</div> </div>
@ -92,11 +90,15 @@
way. way.
</li> </li>
<li> <li>
<a href="../assets/media-kit/Factsheet.pdf">Factsheet</a> containing the basics of Argos and <a href="../assets/media-kit/Factsheet.pdf">
explaining its key features in an adequate level of Factsheet
<i class="fas fa-external-link-alt ext-link-icon fa-xs"></i>
</a> containing the basics of Argos and explaining its key features in an adequate level of
</li> </li>
<li> <li>
<a href="https://www.openaire.eu/argos/">Useful Resources,</a> a collection of resources either <a href="https://www.openaire.eu/argos/">Useful Resources
<i class="fas fa-external-link-alt ext-link-icon fa-xs"></i>
,</a> a collection of resources either
directly for Argos or indirectly for Research Data Management issues which to some extent relate directly for Argos or indirectly for Research Data Management issues which to some extent relate
to Argos. to Argos.
</li> </li>
@ -167,10 +169,8 @@
</div> </div>
</div> </div>
<div class="row d-flex justify-content-center"> <div class="row d-flex justify-content-center">
<div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-svg.zip"><i <div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-svg.zip"><i class="fas fa-lg fa-download"></i>SVG</a></div>
class="fas fa-lg fa-download"></i>SVG</a></div> <div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-png.zip"><i class="fas fa-lg fa-download"></i>PNG</a></div>
<div class="col-auto pt-4"><a href="../assets/media-kit/moo-card-png.zip"><i
class="fas fa-lg fa-download"></i>PNG</a></div>
</div> </div>
</div> </div>
</section> </section>
@ -193,19 +193,13 @@
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
<div class="col d-flex justify-content-end"> <div class="col d-flex justify-content-end">
<a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i <a class="btn rounded-circle btn-social mx-1" href="https://www.facebook.com/groups/openaire/"><i class="fab fa-lg fa-facebook-f"></i></a>
class="fab fa-lg fa-facebook-f"></i></a> <a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i class="fab fa-lg fa-twitter"></i></a>
<a class="btn rounded-circle btn-social twitter mx-1" href="https://twitter.com/OpenAIRE_eu"><i <a class="btn rounded-circle btn-social linkedin mx-1" href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a>
class="fab fa-lg fa-twitter"></i></a> <a class="btn rounded-circle btn-social youtube mx-1" href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i class="fab fa-lg fa-youtube"></i></a>
<a class="btn rounded-circle btn-social linkedin mx-1"
href="https://www.linkedin.com/groups/3893548/"><i class="fab fa-lg fa-linkedin-in"></i></a>
<a class="btn rounded-circle btn-social youtube mx-1"
href="https://www.youtube.com/channel/UChFYqizc-S6asNjQSoWuwjw"><i
class="fab fa-lg fa-youtube"></i></a>
</div> </div>
<div class="col"> <div class="col">
<a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span <a class="btn mx-1" href="https://www.openaire.eu/newsletter/listing"><span class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a>
class="newsletter">Newsletter</span><i class="fas fa-lg fa-wifi wifi-rotate"></i></i></a>
</div> </div>
</div> </div>
<div class="row justify-content-center pt-5"> <div class="row justify-content-center pt-5">
@ -218,23 +212,19 @@
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">ATTRIBUTION 4.0 <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
INTERNATIONAL LICENSE.</a></u></div> ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
<!-- Core theme JS--> <!-- Core theme JS-->
<script src="../js/scripts.js"></script> <script src="../js/scripts.js"></script>
<!-- Bootstrap --> <!-- Bootstrap -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"
integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"
integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI"
crossorigin="anonymous"></script>
</body> </body>
</html> </html>

View File

@ -38,7 +38,10 @@
<div class="dropdown-top"></div> <div class="dropdown-top"></div>
<div class="dropdown-options"> <div class="dropdown-options">
<a href="../about/how-it-works.html">How it works</a> <a href="../about/how-it-works.html">How it works</a>
<a href="https://trello.com/b/x49lylnK/argos" target="_blank">Roadmap</a> <a href="https://trello.com/b/x49lylnK/argos" target="_blank">
Roadmap
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a>
<a href="../about/faqs.html">faqs</a> <a href="../about/faqs.html">faqs</a>
<a href="../about/contributors.html">Contributors</a> <a href="../about/contributors.html">Contributors</a>
</div> </div>
@ -79,9 +82,14 @@
</p> </p>
<ul class="list mb-5"> <ul class="list mb-5">
<li><a href="/user-guide">User Guide</a></li> <li><a href="/user-guide">User Guide</a></li>
<li><a href="../assets/presentations/argos.pdf">Presentations</a></li> <li><a href="../assets/presentations/argos.pdf">
<li><a href="https://docs.google.com/forms/d/1KNhgjQyGrA6lYjOOUUL5cqU2BVquS0qdfwzOGxokgAw">Feedback Presentations
Form</a></li> <i class="fas fa-external-link-alt ext-link-icon fa-xs"></i>
</a></li>
<li><a href="https://docs.google.com/forms/d/1KNhgjQyGrA6lYjOOUUL5cqU2BVquS0qdfwzOGxokgAw">
Feedback Form
<i class="fas fa-external-link-alt ext-link-icon fa-xs"></i>
</a></li>
</ul> </ul>
</div> </div>
<div class="col d-flex justify-content-center mb-5 pb-5"> <div class="col d-flex justify-content-center mb-5 pb-5">
@ -132,8 +140,10 @@
<div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div> <div class="col-auto pl-0"><img src="../assets/img/univ-access.png" width="24" height="24"></div>
<div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under <div class="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
</div>&nbsp; </div>&nbsp;
<div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">CC ATTRIBUTION 4.0 <div><u><a class="licence" href="https://creativecommons.org/licenses/by/4.0/">
INTERNATIONAL LICENSE.</a></u></div> CC ATTRIBUTION 4.0 INTERNATIONAL LICENSE.
<i class="fas fa-external-link-alt ext-link-icon"></i>
</a></u></div>
</div> </div>
</div> </div>
</footer> </footer>
@ -151,4 +161,4 @@
crossorigin="anonymous"></script> crossorigin="anonymous"></script>
</body> </body>
</html> </html>