Merge branch 'ui-redesign' of gitlab.eudat.eu:dmp/OpenAIRE-EUDAT-DMP-service-pilot into ui-redesign
This commit is contained in:
commit
b3332762c5
|
@ -10,8 +10,8 @@ export interface DmpListingModel {
|
||||||
grantId: String;
|
grantId: String;
|
||||||
grantAbbreviation: String;
|
grantAbbreviation: String;
|
||||||
profile: String;
|
profile: String;
|
||||||
creationTime: String;
|
creationTime: string;
|
||||||
modifiedTime: String;
|
modifiedTime: string;
|
||||||
publishedAt: Date;
|
publishedAt: Date;
|
||||||
finalizedAt: Date;
|
finalizedAt: Date;
|
||||||
organisations: String;
|
organisations: String;
|
||||||
|
|
|
@ -325,8 +325,58 @@ export class DraftsComponent extends BaseComponent implements OnInit {
|
||||||
|
|
||||||
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
||||||
if (!result) { return []; }
|
if (!result) { return []; }
|
||||||
this.datasetDrafts = this.datasetDrafts.concat(result.data);
|
// this.datasetDrafts = this.datasetDrafts.concat(result.data);
|
||||||
|
this.datasetDrafts = this.datasetDrafts.length > 0 ? this.mergeTwoSortedLists(this.datasetDrafts, result.data, this.formGroup.get('order').value) : result.data;
|
||||||
this.totalCountDraftDatasets.emit(this.datasetDrafts.length);
|
this.totalCountDraftDatasets.emit(this.datasetDrafts.length);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private mergeTwoSortedLists(arr1: DatasetListingModel[], arr2: DatasetListingModel[], order: string): DatasetListingModel[] {
|
||||||
|
let merged = [];
|
||||||
|
let index1 = 0;
|
||||||
|
let index2 = 0;
|
||||||
|
let current = 0;
|
||||||
|
|
||||||
|
while (current < (arr1.length + arr2.length)) {
|
||||||
|
|
||||||
|
let isArr1Depleted = index1 >= arr1.length;
|
||||||
|
let isArr2Depleted = index2 >= arr2.length;
|
||||||
|
|
||||||
|
if (order === 'modified') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'created') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'label') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'status') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -497,12 +497,62 @@ export class RecentEditedActivityComponent extends BaseComponent implements OnIn
|
||||||
this.dmpOffset = this.dmpOffset + 1;
|
this.dmpOffset = this.dmpOffset + 1;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.allRecentActivities = this.allRecentActivities.concat(result);
|
// this.allRecentActivities = this.allRecentActivities.concat(result);
|
||||||
|
this.allRecentActivities = this.allRecentActivities.length > 0 ? this.mergeTwoSortedLists(this.allRecentActivities, result, this.formGroup.get('order').value) : result;
|
||||||
this.totalCountRecentEdited.emit(this.allRecentActivities.length);
|
this.totalCountRecentEdited.emit(this.allRecentActivities.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private mergeTwoSortedLists(arr1: RecentActivityModel[], arr2: RecentActivityModel[], order: string): RecentActivityModel[] {
|
||||||
|
let merged = [];
|
||||||
|
let index1 = 0;
|
||||||
|
let index2 = 0;
|
||||||
|
let current = 0;
|
||||||
|
|
||||||
|
while (current < (arr1.length + arr2.length)) {
|
||||||
|
|
||||||
|
let isArr1Depleted = index1 >= arr1.length;
|
||||||
|
let isArr2Depleted = index2 >= arr2.length;
|
||||||
|
|
||||||
|
if (order === 'modified') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'created') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'label') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].title < arr2[index2].title))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'status') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
|
|
||||||
// advancedClicked(dmp: DmpListingModel) {
|
// advancedClicked(dmp: DmpListingModel) {
|
||||||
// const dialogRef = this.dialog.open(ExportMethodDialogComponent, {
|
// const dialogRef = this.dialog.open(ExportMethodDialogComponent, {
|
||||||
// maxWidth: '500px',
|
// maxWidth: '500px',
|
||||||
|
|
|
@ -113,7 +113,8 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen
|
||||||
|
|
||||||
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
||||||
if (!result) { return []; }
|
if (!result) { return []; }
|
||||||
this.datasetActivities = this.datasetActivities.concat(result.data);
|
// this.datasetActivities = this.datasetActivities.concat(result.data);
|
||||||
|
this.datasetActivities = this.datasetActivities.length > 0 ? this.mergeTwoSortedLists(this.datasetActivities, result.data, this.formGroup.get('order').value) : result.data;
|
||||||
this.totalCountDatasets.emit(this.datasetActivities.length);
|
this.totalCountDatasets.emit(this.datasetActivities.length);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -336,4 +337,53 @@ export class RecentEditedDatasetActivityComponent extends BaseComponent implemen
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private mergeTwoSortedLists(arr1: DatasetListingModel[], arr2: DatasetListingModel[], order: string): DatasetListingModel[] {
|
||||||
|
let merged = [];
|
||||||
|
let index1 = 0;
|
||||||
|
let index2 = 0;
|
||||||
|
let current = 0;
|
||||||
|
|
||||||
|
while (current < (arr1.length + arr2.length)) {
|
||||||
|
|
||||||
|
let isArr1Depleted = index1 >= arr1.length;
|
||||||
|
let isArr2Depleted = index2 >= arr2.length;
|
||||||
|
|
||||||
|
if (order === 'modified') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'created') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'label') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'status') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,12 +370,62 @@ export class RecentEditedDmpActivityComponent extends BaseComponent implements O
|
||||||
|
|
||||||
this.dmpService.getPaged(request, "listing").pipe(takeUntil(this._destroyed)).subscribe(result => {
|
this.dmpService.getPaged(request, "listing").pipe(takeUntil(this._destroyed)).subscribe(result => {
|
||||||
if (!result) { return []; }
|
if (!result) { return []; }
|
||||||
this.dmpActivities = this.dmpActivities.concat(result.data);
|
// this.dmpActivities = this.dmpActivities.concat(result.data);
|
||||||
|
this.dmpActivities = this.dmpActivities.length > 0 ? this.mergeTwoSortedLists(this.dmpActivities, result.data, this.formGroup.get('order').value) : result.data;
|
||||||
this.totalCountDmps.emit(this.dmpActivities.length);
|
this.totalCountDmps.emit(this.dmpActivities.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private mergeTwoSortedLists(arr1: DmpListingModel[], arr2: DmpListingModel[], order: string): DmpListingModel[] {
|
||||||
|
let merged = [];
|
||||||
|
let index1 = 0;
|
||||||
|
let index2 = 0;
|
||||||
|
let current = 0;
|
||||||
|
|
||||||
|
while (current < (arr1.length + arr2.length)) {
|
||||||
|
|
||||||
|
let isArr1Depleted = index1 >= arr1.length;
|
||||||
|
let isArr2Depleted = index2 >= arr2.length;
|
||||||
|
|
||||||
|
if (order === 'modified') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modifiedTime) > new Date(arr2[index2].modifiedTime)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'created') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].creationTime) > new Date(arr2[index2].creationTime)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'label') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'status') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
|
|
||||||
// advancedClicked(dmp: DmpListingModel) {
|
// advancedClicked(dmp: DmpListingModel) {
|
||||||
// const dialogRef = this.dialog.open(ExportMethodDialogComponent, {
|
// const dialogRef = this.dialog.open(ExportMethodDialogComponent, {
|
||||||
// maxWidth: '500px',
|
// maxWidth: '500px',
|
||||||
|
|
|
@ -176,7 +176,8 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
|
||||||
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
this.datasetService.getPaged(request).pipe(takeUntil(this._destroyed)).subscribe(result => {
|
||||||
if (!result) { return []; }
|
if (!result) { return []; }
|
||||||
// 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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -277,6 +278,55 @@ export class DatasetListingComponent extends BaseComponent implements OnInit, IB
|
||||||
return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight
|
return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private mergeTwoSortedLists(arr1: DatasetListingModel[], arr2: DatasetListingModel[], order: string): DatasetListingModel[] {
|
||||||
|
let merged = [];
|
||||||
|
let index1 = 0;
|
||||||
|
let index2 = 0;
|
||||||
|
let current = 0;
|
||||||
|
|
||||||
|
while (current < (arr1.length + arr2.length)) {
|
||||||
|
|
||||||
|
let isArr1Depleted = index1 >= arr1.length;
|
||||||
|
let isArr2Depleted = index2 >= arr2.length;
|
||||||
|
|
||||||
|
if (order === 'modified') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modified) > new Date(arr2[index2].modified)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'created') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].created) > new Date(arr2[index2].created)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'label') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'status') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
|
|
||||||
// rowClicked(dataset: DatasetListingModel) {
|
// rowClicked(dataset: DatasetListingModel) {
|
||||||
// this.router.navigate(['/datasets/edit/' + dataset.id]);
|
// this.router.navigate(['/datasets/edit/' + dataset.id]);
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -224,7 +224,8 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
|
||||||
});
|
});
|
||||||
return item;
|
return item;
|
||||||
});
|
});
|
||||||
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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -376,6 +377,55 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread
|
||||||
hasScrollbar(): boolean {
|
hasScrollbar(): boolean {
|
||||||
return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight
|
return document.getElementById("main-page").scrollHeight > document.documentElement.clientHeight
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private mergeTwoSortedLists(arr1: DmpListingModel[], arr2: DmpListingModel[], order: string): DmpListingModel[] {
|
||||||
|
let merged = [];
|
||||||
|
let index1 = 0;
|
||||||
|
let index2 = 0;
|
||||||
|
let current = 0;
|
||||||
|
|
||||||
|
while (current < (arr1.length + arr2.length)) {
|
||||||
|
|
||||||
|
let isArr1Depleted = index1 >= arr1.length;
|
||||||
|
let isArr2Depleted = index2 >= arr2.length;
|
||||||
|
|
||||||
|
if (order === 'modified') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].modifiedTime) > new Date(arr2[index2].modifiedTime)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'created') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (new Date(arr1[index1].creationTime) > new Date(arr2[index2].creationTime)))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'label') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].label < arr2[index2].label))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
} else if (order === 'status') {
|
||||||
|
if (!isArr1Depleted && (isArr2Depleted || (arr1[index1].status < arr2[index2].status))) {
|
||||||
|
merged[current] = arr1[index1];
|
||||||
|
index1++;
|
||||||
|
} else {
|
||||||
|
merged[current] = arr2[index2];
|
||||||
|
index2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// export class DmpDataSource extends DataSource<DmpListingModel> {
|
// export class DmpDataSource extends DataSource<DmpListingModel> {
|
||||||
|
|
|
@ -754,6 +754,7 @@
|
||||||
"NEW": "New Data Management Plan",
|
"NEW": "New Data Management Plan",
|
||||||
"EDIT": "Edit",
|
"EDIT": "Edit",
|
||||||
"EDIT-DMP": "Editing DMP",
|
"EDIT-DMP": "Editing DMP",
|
||||||
|
"EDIT-DATASET": "Editing Dataset",
|
||||||
"SUBTITLE": "DOI"
|
"SUBTITLE": "DOI"
|
||||||
},
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
|
|
|
@ -748,6 +748,7 @@
|
||||||
"NEW": "Nuevo Plan de Gestión de Datos",
|
"NEW": "Nuevo Plan de Gestión de Datos",
|
||||||
"EDIT": "Editar",
|
"EDIT": "Editar",
|
||||||
"EDIT-DMP": "Editing DMP",
|
"EDIT-DMP": "Editing DMP",
|
||||||
|
"EDIT-DATASET": "Editing Dataset",
|
||||||
"SUBTITLE": "DOI"
|
"SUBTITLE": "DOI"
|
||||||
},
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
|
|
|
@ -749,6 +749,7 @@
|
||||||
"NEW": "Νέα Σχέδιο Διαχείρισης Δεδομένων",
|
"NEW": "Νέα Σχέδιο Διαχείρισης Δεδομένων",
|
||||||
"EDIT": "Επεξεργασία",
|
"EDIT": "Επεξεργασία",
|
||||||
"EDIT-DMP": "Editing DMP",
|
"EDIT-DMP": "Editing DMP",
|
||||||
|
"EDIT-DATASET": "Editing Dataset",
|
||||||
"SUBTITLE": "Μονοσήμαντο Αναγνωριστικό Ψηφιακού Αντικειμένου (DOI)"
|
"SUBTITLE": "Μονοσήμαντο Αναγνωριστικό Ψηφιακού Αντικειμένου (DOI)"
|
||||||
},
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
|
|
Loading…
Reference in New Issue