Merge branch 'ui-redesign' of https://gitlab.eudat.eu/dmp/OpenAIRE-EUDAT-DMP-service-pilot into ui-redesign
# Conflicts: # dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html
This commit is contained in:
commit
2f1f08a83f
|
@ -57,8 +57,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import static org.springframework.http.MediaType.APPLICATION_ATOM_XML;
|
||||
import static org.springframework.http.MediaType.APPLICATION_JSON;
|
||||
import static org.springframework.http.MediaType.*;
|
||||
|
||||
|
||||
@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 {
|
||||
if (files[0].getContentType().equals(APPLICATION_JSON.toString())) {
|
||||
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);
|
||||
} 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>()
|
||||
.status(ApiMessageCode.SUCCESS_MESSAGE));
|
||||
|
|
|
@ -48,8 +48,12 @@ public class TagController extends BaseController {
|
|||
//ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(query);
|
||||
/*List<Map<String, String>> remoteRepos = this.getApiContext().getOperationsContext().getRemoteFetcher().getTags(externalUrlCriteria, type);
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -168,7 +168,7 @@ public class DatasetManager {
|
|||
QueryableList<eu.eudat.data.entities.Dataset> authItems;
|
||||
if (!datasetTableRequest.getCriteria().getIsPublic()) {
|
||||
if (principal.getId() == null) {
|
||||
throw new UnauthorisedException();
|
||||
throw new UnauthorisedException("You are not allowed to access those datasets");
|
||||
}
|
||||
if (datasetTableRequest.getCriteria().getRole() != null)
|
||||
roles.add(datasetTableRequest.getCriteria().getRole());
|
||||
|
|
|
@ -199,7 +199,10 @@ public class DatasetProfileManager {
|
|||
public eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.DatasetProfile createDatasetProfileFromXml(MultipartFile multiPartFile) {
|
||||
ImportXmlBuilderDatasetProfile xmlBuilder = new ImportXmlBuilderDatasetProfile();
|
||||
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) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
|
|
@ -205,6 +205,7 @@ public class ExportXmlBuilderDatasetProfile {
|
|||
WordListData wordListDataObject = (WordListData) field.getData();
|
||||
dataOut.setAttribute("label", wordListDataObject.getLabel());
|
||||
dataOut.setAttribute("type", wordListDataObject.getType());
|
||||
dataOut.setAttribute("multiList", wordListDataObject.getMultiList().toString());
|
||||
Element options = element.createElement("options");
|
||||
wordListDataObject.getOptions().forEach(optionChildFor -> {
|
||||
Element optionChild = element.createElement("option");
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -78,7 +78,8 @@ public class WordListData extends ComboBoxData<WordListData> {
|
|||
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;
|
||||
}
|
||||
|
@ -92,6 +93,7 @@ public class WordListData extends ComboBoxData<WordListData> {
|
|||
@Override
|
||||
public Map<String, Object> toMap(Element item) {
|
||||
HashMap dataMap = new HashMap();
|
||||
dataMap.put("multiList", item != null ? item.getAttribute("multiList") : "false");
|
||||
dataMap.put("label", item != null ? item.getAttribute("label") : "");
|
||||
dataMap.put("type", item != null ? item.getAttribute("type") : "wordlist");
|
||||
Element optionsElement = (Element) item.getElementsByTagName("options").item(0);
|
||||
|
|
|
@ -53,6 +53,14 @@ public class DatasetId implements Serializable
|
|||
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
|
||||
private final static long serialVersionUID = -6295164005851378031L;
|
||||
|
||||
public DatasetId() {
|
||||
}
|
||||
|
||||
public DatasetId(String identifier, Type type) {
|
||||
this.identifier = identifier;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Dataset Identifier Schema
|
||||
* <p>
|
||||
|
|
|
@ -52,15 +52,17 @@ public class DatasetIdRDAMapper {
|
|||
}
|
||||
|
||||
private static void finalRDAMap(DatasetId rda, String property, String value) {
|
||||
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
|
||||
if (property.contains(datasetIdProperties.getName())) {
|
||||
switch (datasetIdProperties) {
|
||||
case IDENTIFIER:
|
||||
rda.setIdentifier(value);
|
||||
break;
|
||||
case TYPE:
|
||||
rda.setType(DatasetId.Type.fromValue(value));
|
||||
break;
|
||||
if (value != null) {
|
||||
for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) {
|
||||
if (property.contains(datasetIdProperties.getName())) {
|
||||
switch (datasetIdProperties) {
|
||||
case IDENTIFIER:
|
||||
rda.setIdentifier(value);
|
||||
break;
|
||||
case TYPE:
|
||||
rda.setType(DatasetId.Type.fromValue(value));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel;
|
|||
import eu.eudat.models.data.datasetwizard.DatasetWizardModel;
|
||||
import eu.eudat.models.rda.Contributor;
|
||||
import eu.eudat.models.rda.Dataset;
|
||||
import eu.eudat.models.rda.DatasetId;
|
||||
import eu.eudat.models.rda.Language;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
|
@ -56,11 +57,14 @@ public class DatasetRDAMapper {
|
|||
if (!idNodes.isEmpty()) {
|
||||
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");
|
||||
if (!typeNodes.isEmpty()) {
|
||||
rda.setType(typeNodes.get(0).get("value").asText());
|
||||
} else {
|
||||
rda.setType(dataset.getLabel());
|
||||
rda.setType("DMP Dataset");
|
||||
}
|
||||
List<JsonNode> languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language");
|
||||
if (!languageNodes.isEmpty()) {
|
||||
|
@ -93,9 +97,9 @@ public class DatasetRDAMapper {
|
|||
rda.setKeyword(keywordNodes.stream().map(keywordNode -> {
|
||||
JsonNode value = keywordNode.get("value");
|
||||
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 {
|
||||
return Collections.singletonList(KeywordRDAMapper.toRDA(keywordNode.get("value").asText()));
|
||||
return KeywordRDAMapper.toRDA(keywordNode.get("value").asText());
|
||||
}
|
||||
}).flatMap(Collection::stream).collect(Collectors.toList()));
|
||||
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");
|
||||
if (!sensitiveDataNodes.isEmpty()) {
|
||||
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");
|
||||
if (!technicalResourceNodes.isEmpty()) {
|
||||
|
|
|
@ -31,6 +31,18 @@ public class DmpRDAMapper {
|
|||
|
||||
@Transactional
|
||||
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();
|
||||
if (dmp.getDoi() != null && !dmp.getDoi().isEmpty()) {
|
||||
rda.setDmpId(DmpIdRDAMapper.toRDA(dmp.getDoi()));
|
||||
|
@ -42,11 +54,13 @@ public class DmpRDAMapper {
|
|||
rda.setModified(dmp.getModified());
|
||||
rda.setTitle(dmp.getLabel());
|
||||
|
||||
Map<String, Object> extraProperties = new org.json.JSONObject(dmp.getExtraProperties()).toMap();
|
||||
if (!extraProperties.isEmpty()) {
|
||||
if (extraProperties.get("language") != null) {
|
||||
rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(extraProperties.get("language").toString()));
|
||||
if (extraProperties.get("ethicalIssues") != null) {
|
||||
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) {
|
||||
rda.setCost(new ArrayList<>());
|
||||
((List) extraProperties.get("costs")).forEach(costl -> {
|
||||
|
@ -59,10 +73,8 @@ public class DmpRDAMapper {
|
|||
rda.getCost().add(cost);
|
||||
});
|
||||
}
|
||||
if (extraProperties.get("contact") != null) {
|
||||
UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String)extraProperties.get("contact")));
|
||||
rda.setContact(ContactRDAMapper.toRDA(contact));
|
||||
}
|
||||
UserInfo contact = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString((String) extraProperties.get("contact")));
|
||||
rda.setContact(ContactRDAMapper.toRDA(contact));
|
||||
}
|
||||
|
||||
/*UserInfo creator;
|
||||
|
@ -101,7 +113,7 @@ public class DmpRDAMapper {
|
|||
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.setCreated(rda.getCreated());
|
||||
|
|
|
@ -1,25 +1,29 @@
|
|||
package eu.eudat.models.rda.mapper;
|
||||
|
||||
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.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class KeywordRDAMapper {
|
||||
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();
|
||||
try {
|
||||
Map<String, Object> map = mapper.readValue(value, HashMap.class);
|
||||
return (String) map.get("name");
|
||||
value = JavaToJson.objectStringToJson(value);
|
||||
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) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
return value;
|
||||
return new ArrayList<>();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
"src/assets",
|
||||
"src/favicon.ico",
|
||||
{ "glob": "**/*", "input": "node_modules/tinymce", "output": "/tinymce/" }
|
||||
|
||||
],
|
||||
"styles": [
|
||||
"src/styles.scss",
|
||||
|
|
|
@ -48,7 +48,9 @@ export class AuthService extends BaseService {
|
|||
return principal;
|
||||
}
|
||||
const principalJson = localStorage.getItem('principal');
|
||||
if (!principalJson) { return null; }
|
||||
if (principalJson === null || principalJson === undefined) {
|
||||
return null;
|
||||
}
|
||||
let principalObj = JSON.parse(principalJson) as Principal;
|
||||
principalObj.expiresAt = new Date(principalObj.expiresAt);
|
||||
if (principalObj.expiresAt < new Date()) {
|
||||
|
@ -125,7 +127,8 @@ export class AuthService extends BaseService {
|
|||
}
|
||||
|
||||
public me(): Observable<Principal> {
|
||||
const url = this.actionUrl + '/me';
|
||||
this.actionUrl = this.configurationService.server + 'auth/';
|
||||
const url = this.actionUrl + 'me';
|
||||
const principal = this.current();
|
||||
if (!principal) {
|
||||
this.clear();
|
||||
|
|
|
@ -85,8 +85,9 @@ export class DatasetProfileEditorComponent extends BaseComponent implements OnIn
|
|||
this.form = this.dataModel.buildForm();
|
||||
}
|
||||
this.prepareForm();
|
||||
} catch {
|
||||
} catch (error) {
|
||||
this.logger.error('Could not parse MasterItem: ' + data);
|
||||
console.log(error)
|
||||
this.uiNotificationService.snackBarNotification(this.language.instant('NOTIFICATIONS.DEFAULT.ERROR'), SnackBarNotificationLevel.Error);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<div class="main-content listing-main-container h-100">
|
||||
<div class="container-fluid">
|
||||
<div class="d-flex flex-direction-row">
|
||||
<div class="card mt-0" [style.display]="isVisible ? 'block' : 'none'">
|
||||
<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 pt-0">
|
||||
<div *ngIf="hasListingItems && listingItems && listingItems.length === 0" class="card mt-0">
|
||||
<!-- <div class="card mt-0" [style.display]="isVisible ? 'block' : 'none'"> -->
|
||||
<!-- <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 class="mt-4 pt-2">{{'DATASET-LISTING.TEXT-INFO-PAR' | translate}}
|
||||
<div class="col pl-0 pt-3">
|
||||
|
@ -13,7 +14,15 @@
|
|||
</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">
|
||||
<mat-icon class="mr-4">filter_alt</mat-icon>
|
||||
</button>
|
||||
|
@ -21,11 +30,11 @@
|
|||
</div>
|
||||
<div>
|
||||
<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">
|
||||
<!-- Sort by -->
|
||||
<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-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>
|
||||
|
@ -37,12 +46,12 @@
|
|||
<!-- End of Sort by -->
|
||||
<div class="d-flex flex-row ml-auto">
|
||||
<!-- 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 }}
|
||||
</div>
|
||||
<!-- End of Guided Tour -->
|
||||
<!-- 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>
|
||||
<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>
|
||||
|
@ -59,7 +68,7 @@
|
|||
<button type="button" class="btn-load-more" (click)="loadMore()">{{'GENERAL.ACTIONS.LOAD-MORE' | translate}}</button>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -19,6 +19,14 @@
|
|||
position: relative;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
text-align: left;
|
||||
font-size: 1.25rem;
|
||||
font-weight: 300;
|
||||
color: #212121;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.header-text-container {
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
position: absolute;
|
||||
|
@ -146,7 +154,7 @@
|
|||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.02rem;
|
||||
color: #2D72D6;
|
||||
color: #2d72d6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
@ -179,8 +187,8 @@
|
|||
}
|
||||
|
||||
::ng-deep .sort-form .mat-form-field-wrapper {
|
||||
background-color: white !important;
|
||||
padding-bottom: 0 !important;
|
||||
background-color: white !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
|
||||
|
|
|
@ -46,6 +46,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
|
|||
totalCount: number;
|
||||
dmpSearchEnabled = true;
|
||||
listingItems: DatasetListingModel[] = [];
|
||||
hasListingItems = null;
|
||||
|
||||
isPublic: boolean = false;
|
||||
public isVisible = true
|
||||
|
@ -195,6 +196,7 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
|
|||
// if (this._paginator.pageIndex === 0) { this.totalCount = result.totalCount; }
|
||||
this.totalCount = result.totalCount;
|
||||
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; }
|
||||
// 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.hasListingItems = true;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -48,12 +48,12 @@
|
|||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<mat-icon class="mat-mini-fab-icon">create</mat-icon>
|
||||
</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">
|
||||
<mat-icon class="mat-mini-fab-icon">delete</mat-icon>
|
||||
</button>
|
||||
|
|
|
@ -53,6 +53,6 @@ export class AvailableProfilesComponent extends BaseComponent implements OnInit
|
|||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
</button>
|
||||
</div>
|
||||
<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>
|
||||
<!-- <div *ngIf="!isNew && formGroup.enabled && !lockStatus">
|
||||
<button *ngIf="!isFinalized" mat-raised-button type="submit" class="dataset-save-btn">{{'DMP-EDITOR.ACTIONS.SAVE' | translate}}</button>
|
||||
|
@ -97,7 +97,7 @@
|
|||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<ul *ngIf="!isNewDataset && hasProfile()" class="add-dataset-option">
|
||||
<ul *ngIf="!isNewDataset && hasProfile() && !isFinalized" class="add-dataset-option">
|
||||
<li>
|
||||
<a class="add-dataset-btn stepper-btn" (click)="addDataset()" target="_blank">
|
||||
<mat-icon>add</mat-icon>{{'DMP-LISTING.ACTIONS.ADD-DATASET-SHORT' | translate}}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
<div class="main-content listing-main-container h-100">
|
||||
<div class="container-fluid">
|
||||
<div class="d-flex flex-direction-row">
|
||||
<div class="card mt-0" [style.display]="isVisible ? 'block' : 'none'">
|
||||
<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 pt-0">
|
||||
<div *ngIf="hasListingItems && listingItems && listingItems.length === 0" class="card mt-0">
|
||||
<!-- <div *ngIf="listingItems && listingItems.length === 0" class="card mt-0" [style.display]="isVisible ? 'block' : 'none'"> -->
|
||||
<!-- <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 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 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">
|
||||
<mat-icon class="mr-4">filter_alt</mat-icon>
|
||||
</button>
|
||||
|
@ -16,11 +18,11 @@
|
|||
</div>
|
||||
<div>
|
||||
<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">
|
||||
<!-- Sort by -->
|
||||
<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-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>
|
||||
|
@ -32,13 +34,11 @@
|
|||
<!-- End of Sort by -->
|
||||
<div class="d-flex flex-row ml-auto">
|
||||
<!-- Guided Tour -->
|
||||
<div class="center-content"
|
||||
[style.display]="!isVisible && isAuthenticated()? 'block' : 'none'" (click)="restartTour()">
|
||||
{{ 'GENERAL.ACTIONS.TAKE-A-TOUR'| translate }}
|
||||
</div>
|
||||
<!-- <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 }}</div>
|
||||
<!-- End of Guided Tour -->
|
||||
<!-- 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">
|
||||
<mat-icon matSuffix>search</mat-icon>
|
||||
<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>
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -81,6 +81,14 @@
|
|||
position: relative;
|
||||
}
|
||||
|
||||
.header-title {
|
||||
text-align: left;
|
||||
font-size: 1.25rem;
|
||||
font-weight: 300;
|
||||
color: #212121;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.header-text-container {
|
||||
background: rgba(255, 255, 255, 0.7);
|
||||
position: absolute;
|
||||
|
@ -133,7 +141,7 @@
|
|||
letter-spacing: 0px;
|
||||
color: #212121;
|
||||
padding-left: 40px;
|
||||
padding-top: 36px;
|
||||
padding-top: 38px;
|
||||
padding-bottom: 36px;
|
||||
padding-right: 55px;
|
||||
opacity: 1;
|
||||
|
@ -190,7 +198,7 @@
|
|||
right: 0px;
|
||||
z-index: 100;
|
||||
width: 37px;
|
||||
transition: right .3s;
|
||||
transition: right 0.3s;
|
||||
transition-timing-function: ease-in-out;
|
||||
}
|
||||
|
||||
|
@ -225,7 +233,8 @@
|
|||
color: black;
|
||||
}
|
||||
|
||||
.pointer:hover, .zenodo-link:hover {
|
||||
.pointer:hover,
|
||||
.zenodo-link:hover {
|
||||
color: #00b29f;
|
||||
}
|
||||
|
||||
|
@ -235,8 +244,8 @@
|
|||
}
|
||||
|
||||
::ng-deep .sort-form .mat-form-field-wrapper {
|
||||
background-color: white !important;
|
||||
padding-bottom: 0 !important;
|
||||
background-color: white !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
::ng-deep .mat-form-field-appearance-outline .mat-form-field-infix {
|
||||
|
@ -252,7 +261,7 @@
|
|||
font-size: 0.875rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.02rem;
|
||||
color: #2D72D6;
|
||||
color: #2d72d6;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
|
|
@ -52,6 +52,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
|
|||
groupLabel: string;
|
||||
isPublic: boolean = false;
|
||||
public isVisible = true
|
||||
hasListingItems = null;
|
||||
|
||||
startIndex: number = 0;
|
||||
pageSize: number = 5;
|
||||
|
@ -236,6 +237,7 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
|
|||
return item;
|
||||
});
|
||||
this.listingItems = result.data;
|
||||
this.hasListingItems = true;
|
||||
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.mergeTwoSortedLists(this.listingItems, result.data, this.formGroup.get('order').value);
|
||||
this.hasListingItems = true;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<div class="col-auto dmp-dataset-descriptions-name" *ngIf="last || i == 2">{{dataset.label}}</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>
|
||||
<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>
|
||||
|
|
|
@ -51,12 +51,12 @@
|
|||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<mat-icon class="mat-mini-fab-icon">create</mat-icon>
|
||||
</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">
|
||||
<mat-icon class="mat-mini-fab-icon">delete</mat-icon>
|
||||
</button>
|
||||
|
|
|
@ -346,11 +346,17 @@ export class FormFieldComponent extends BaseComponent implements OnInit {
|
|||
|
||||
parseTags() {
|
||||
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'), '"}');
|
||||
stringValue = stringValue.replace(new RegExp('}"', 'g'), '}').replace(new RegExp('"{', 'g'), '{');
|
||||
console.log(stringValue);
|
||||
if (typeof stringValue === 'string') {
|
||||
stringValue = (<string>stringValue).replace(new RegExp('{', 'g'), '{"').replace(new RegExp('=', 'g'), '":"').replace(new RegExp(',', 'g'), '",').replace(new RegExp(', ', 'g'), ', "').replace(new RegExp('}', 'g'), '"}');
|
||||
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);
|
||||
console.log(tagArray);
|
||||
this.form.patchValue({'value': tagArray});
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</a>
|
||||
<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>
|
||||
<span>{{groupMenuRoute.title | translate}}</span>
|
||||
<span>{{groupMenuRoute.title | translate}} <span class="material-icons icon-external">open_in_new</span></span>
|
||||
</a>
|
||||
<a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/contact-support' && this.isAuthenticated()" [routerLink]="[groupMenuRoute.path]">
|
||||
<i class="material-icons icon">{{ groupMenuRoute.icon }}</i>
|
||||
|
@ -25,11 +25,11 @@
|
|||
</a>
|
||||
<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>
|
||||
<span>{{groupMenuRoute.title | translate}}</span>
|
||||
<span>{{groupMenuRoute.title | translate}} <span class="material-icons icon-external">open_in_new</span></span>
|
||||
</a>
|
||||
<a class="nav-link nav-row" *ngIf="groupMenuRoute.path === '/feedback'" (click)="openFeedback(groupMenuRoute)">
|
||||
<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>
|
||||
</mat-list-item>
|
||||
</div>
|
||||
|
|
|
@ -9,7 +9,7 @@ $mat-card-header-size: 30px !default;
|
|||
}
|
||||
|
||||
.nav-list-item {
|
||||
// margin-top: 20px;
|
||||
// margin-top: 20px;
|
||||
}
|
||||
|
||||
.login {
|
||||
|
@ -21,36 +21,42 @@ $mat-card-header-size: 30px !default;
|
|||
}
|
||||
|
||||
.firstSubtitle {
|
||||
margin-top: 20px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.icon-mask {
|
||||
color: #6b6b6b;
|
||||
transform: translate(-8px, 8px);
|
||||
color: #6b6b6b;
|
||||
transform: translate(-8px, 8px);
|
||||
}
|
||||
|
||||
.active a{
|
||||
font-weight: 700;
|
||||
.active a {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.active a i{
|
||||
color: #23BCBA;
|
||||
.active a i {
|
||||
color: #23bcba;
|
||||
}
|
||||
|
||||
.inner-line {
|
||||
margin-left: 12px;
|
||||
margin-right: 10px;
|
||||
width: 20px;
|
||||
height: 13px;
|
||||
border-left: 1px solid #CCCCCC;
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
margin-left: 12px;
|
||||
margin-right: 10px;
|
||||
width: 20px;
|
||||
height: 13px;
|
||||
border-left: 1px solid #cccccc;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
|
||||
.icon-external {
|
||||
font-size: 1rem;
|
||||
padding-left: 0.4rem !important;
|
||||
color: #6b6b6b;
|
||||
}
|
||||
|
||||
mat-list-item {
|
||||
display: flex !important;
|
||||
height: auto !important;
|
||||
display: flex !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
::ng-deep .mat-list-item-content {
|
||||
width: 100% !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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="contributors.html">Contributors</a>
|
||||
</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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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="contributors.html">Contributors</a>
|
||||
</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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -33,7 +33,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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="contributors.html">Contributors</a>
|
||||
</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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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/contributors.html">Contributors</a>
|
||||
</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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -361,3 +361,7 @@ hr {
|
|||
padding-left: 0px !important;
|
||||
transform: scale(0.45);
|
||||
}
|
||||
|
||||
.ext-link-icon {
|
||||
margin-left: .2rem;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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/contributors.html">Contributors</a>
|
||||
</div>
|
||||
|
@ -268,8 +271,12 @@
|
|||
<div class="row benefit-ic">
|
||||
<img src="assets/img/ic_check_circle_24px.svg" width="20" height="20">
|
||||
<span class="benefit-card-subtitle">Link argos to your</span>
|
||||
<span class="benefit-card-sub-color"><a href="https://monitor.openaire.eu/">Monitoring
|
||||
Dashboard</a></span>
|
||||
<span class="benefit-card-sub-color">
|
||||
<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>
|
||||
|
@ -396,7 +403,10 @@
|
|||
<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>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -38,7 +38,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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/contributors.html">Contributors</a>
|
||||
</div>
|
||||
|
@ -75,7 +78,10 @@
|
|||
<div class="col">
|
||||
<p>Open to all to suggest new features and to actively contribute to Argos development via pull
|
||||
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.
|
||||
</p>
|
||||
</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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
|
@ -9,17 +9,14 @@
|
|||
<!-- Font Awesome icons (free version)-->
|
||||
<script src="https://use.fontawesome.com/releases/v5.12.1/js/all.js" crossorigin="anonymous"></script>
|
||||
<!-- Google fonts-->
|
||||
<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">
|
||||
<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">
|
||||
<!-- Core theme CSS -->
|
||||
<link href="../css/styles.css" rel="stylesheet">
|
||||
<link href="../css/navbar.css" rel="stylesheet">
|
||||
<link href="../css/footer.css" rel="stylesheet">
|
||||
<link href="../css/section.css" rel="stylesheet">
|
||||
<!-- Bootstrap -->
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
|
||||
integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<body id="page-top" class="bootstrap-overrides">
|
||||
|
@ -27,9 +24,7 @@
|
|||
<nav class="navbar navbar-expand-lg" id="nav">
|
||||
<div class="container">
|
||||
<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"
|
||||
aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><i
|
||||
class="fas fa-bars ml-1"></i></button>
|
||||
<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>
|
||||
<div class="navbar-collapse" id="navbarResponsive">
|
||||
<ul class="navbar-nav text-uppercase ml-auto">
|
||||
<li class="nav-item">
|
||||
|
@ -38,7 +33,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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/contributors.html">Contributors</a>
|
||||
</div>
|
||||
|
@ -92,11 +90,15 @@
|
|||
way.
|
||||
</li>
|
||||
<li>
|
||||
<a href="../assets/media-kit/Factsheet.pdf">Factsheet</a> containing the basics of Argos and
|
||||
explaining its key features in an adequate level of
|
||||
<a href="../assets/media-kit/Factsheet.pdf">
|
||||
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>
|
||||
<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
|
||||
to Argos.
|
||||
</li>
|
||||
|
@ -167,10 +169,8 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="row d-flex justify-content-center">
|
||||
<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>
|
||||
<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-svg.zip"><i 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>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -193,19 +193,13 @@
|
|||
</div>
|
||||
<div class="row justify-content-center pt-5">
|
||||
<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
|
||||
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 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>
|
||||
<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>
|
||||
<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 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 class="col">
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
<!-- Core theme JS-->
|
||||
<script src="../js/scripts.js"></script>
|
||||
<!-- Bootstrap -->
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"
|
||||
integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
|
||||
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>
|
||||
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" 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>
|
||||
|
||||
</html>
|
|
@ -38,7 +38,10 @@
|
|||
<div class="dropdown-top"></div>
|
||||
<div class="dropdown-options">
|
||||
<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/contributors.html">Contributors</a>
|
||||
</div>
|
||||
|
@ -79,9 +82,14 @@
|
|||
</p>
|
||||
<ul class="list mb-5">
|
||||
<li><a href="/user-guide">User Guide</a></li>
|
||||
<li><a href="../assets/presentations/argos.pdf">Presentations</a></li>
|
||||
<li><a href="https://docs.google.com/forms/d/1KNhgjQyGrA6lYjOOUUL5cqU2BVquS0qdfwzOGxokgAw">Feedback
|
||||
Form</a></li>
|
||||
<li><a href="../assets/presentations/argos.pdf">
|
||||
Presentations
|
||||
<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>
|
||||
</div>
|
||||
<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="licence">Unless otherwise indicated, all materials created by OpenAIRE are licenced under
|
||||
</div>
|
||||
<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>
|
||||
</footer>
|
||||
|
|
Loading…
Reference in New Issue