geonetwork-ui 2.2.0-dev.eaf94daa → 2.2.0-dev.ecc0ab67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +42 -51
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +4 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +16 -11
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +23 -16
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +21 -18
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +2 -2
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -22
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +2 -3
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
- package/esm2022/translations/de.json +2 -1
- package/esm2022/translations/en.json +4 -3
- package/esm2022/translations/es.json +2 -1
- package/esm2022/translations/fr.json +4 -3
- package/esm2022/translations/it.json +4 -3
- package/esm2022/translations/nl.json +2 -1
- package/esm2022/translations/pt.json +2 -1
- package/fesm2022/geonetwork-ui.mjs +254 -170
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -4
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -2
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +5 -10
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +7 -3
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +6 -6
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -3
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +22 -4
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +69 -65
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +3 -2
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +19 -12
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +62 -43
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +91 -59
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +5 -11
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +6 -2
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +2 -2
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +45 -18
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +31 -12
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +1 -2
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
- package/translations/de.json +2 -1
- package/translations/en.json +4 -3
- package/translations/es.json +2 -1
- package/translations/fr.json +4 -3
- package/translations/it.json +4 -3
- package/translations/nl.json +2 -1
- package/translations/pt.json +2 -1
- package/translations/sk.json +2 -1
|
@@ -8,7 +8,7 @@ import * as i1$1 from '@ngx-translate/core';
|
|
|
8
8
|
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
|
-
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take,
|
|
11
|
+
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
@@ -649,28 +649,32 @@ function extractStatus() {
|
|
|
649
649
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
650
650
|
}
|
|
651
651
|
// from gmd:resourceConstraints
|
|
652
|
-
function
|
|
653
|
-
|
|
654
|
-
|
|
652
|
+
function extractLegalConstraints() {
|
|
653
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
654
|
+
...(url && { url }),
|
|
655
655
|
text,
|
|
656
|
-
type: 'other',
|
|
657
656
|
})));
|
|
658
|
-
|
|
657
|
+
}
|
|
658
|
+
// from gmd:resourceConstraints
|
|
659
|
+
function extractSecurityConstraints() {
|
|
660
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
661
|
+
...(url && { url }),
|
|
659
662
|
text,
|
|
660
|
-
type: 'security',
|
|
661
663
|
})));
|
|
662
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
663
664
|
}
|
|
664
665
|
// from gmd:resourceConstraints
|
|
665
|
-
function
|
|
666
|
-
return pipe(
|
|
666
|
+
function extractOtherConstraints() {
|
|
667
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
|
+
...(url && { url }),
|
|
669
|
+
text,
|
|
670
|
+
})));
|
|
667
671
|
}
|
|
668
672
|
// from gmd:resourceConstraints
|
|
669
673
|
function extractLicenses() {
|
|
670
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
674
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
671
675
|
...(url && { url }),
|
|
672
676
|
text,
|
|
673
|
-
})))
|
|
677
|
+
})));
|
|
674
678
|
}
|
|
675
679
|
// from gmd:MD_Distribution
|
|
676
680
|
function extractDatasetDistributions() {
|
|
@@ -842,11 +846,14 @@ function readStatus(rootEl) {
|
|
|
842
846
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
843
847
|
}
|
|
844
848
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
845
|
-
function
|
|
846
|
-
return pipe(getConstraints, mapArray(
|
|
849
|
+
function readLegalConstraints(rootEl) {
|
|
850
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
847
851
|
}
|
|
848
|
-
function
|
|
849
|
-
return pipe(getConstraints, mapArray(
|
|
852
|
+
function readSecurityConstraints(rootEl) {
|
|
853
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
854
|
+
}
|
|
855
|
+
function readOtherConstraints(rootEl) {
|
|
856
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
850
857
|
}
|
|
851
858
|
function readLicenses(rootEl) {
|
|
852
859
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
@@ -1079,23 +1086,23 @@ function appendKeywords(keywords, type) {
|
|
|
1079
1086
|
? appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', type)))
|
|
1080
1087
|
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
|
|
1081
1088
|
}
|
|
1082
|
-
function
|
|
1083
|
-
|
|
1084
|
-
// remove legal constraints that *only* have 'otherRestrictions'
|
|
1085
|
-
const otherConstraintsFilter = pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code === 'otherRestrictions'));
|
|
1086
|
-
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray((el) => securityConstraintsFilter(el) || otherConstraintsFilter(el))));
|
|
1087
|
-
}
|
|
1088
|
-
function createAccessConstraint(constraint) {
|
|
1089
|
-
if (constraint.type === 'security') {
|
|
1089
|
+
function createConstraint(constraint, type) {
|
|
1090
|
+
if (type === 'security') {
|
|
1090
1091
|
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_SecurityConstraints'), appendChildren(pipe(createElement('gmd:classification'), createChild('gmd:MD_ClassificationCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ClassificationCode'), addAttribute('codeListValue', 'restricted')), pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1091
1092
|
}
|
|
1092
|
-
|
|
1093
|
+
else if (type === 'legal') {
|
|
1094
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
|
|
1095
|
+
}
|
|
1096
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1093
1097
|
}
|
|
1094
|
-
function
|
|
1098
|
+
function removeOtherConstraints() {
|
|
1095
1099
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1096
1100
|
}
|
|
1097
|
-
function
|
|
1098
|
-
return pipe(
|
|
1101
|
+
function removeSecurityConstraints() {
|
|
1102
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1103
|
+
}
|
|
1104
|
+
function removeLegalConstraints() {
|
|
1105
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code !== 'license')))));
|
|
1099
1106
|
}
|
|
1100
1107
|
function removeLicenses() {
|
|
1101
1108
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.some((code) => code === 'license')))));
|
|
@@ -1199,14 +1206,17 @@ function writeKeywords(record, rootEl) {
|
|
|
1199
1206
|
function writeThemes(record, rootEl) {
|
|
1200
1207
|
pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
|
|
1201
1208
|
}
|
|
1202
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1203
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1204
|
-
}
|
|
1205
1209
|
function writeLicenses(record, rootEl) {
|
|
1206
1210
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1207
1211
|
}
|
|
1208
|
-
function
|
|
1209
|
-
pipe(findOrCreateIdentification(),
|
|
1212
|
+
function writeLegalConstraints(record, rootEl) {
|
|
1213
|
+
pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
|
|
1214
|
+
}
|
|
1215
|
+
function writeSecurityConstraints(record, rootEl) {
|
|
1216
|
+
pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
|
|
1217
|
+
}
|
|
1218
|
+
function writeOtherConstraints(record, rootEl) {
|
|
1219
|
+
pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
|
|
1210
1220
|
}
|
|
1211
1221
|
function writeUpdateFrequency(record, rootEl) {
|
|
1212
1222
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1304,8 +1314,9 @@ function toModel(xml) {
|
|
|
1304
1314
|
const recordCreated = recordUpdated;
|
|
1305
1315
|
const keywords = readKeywords(rootEl);
|
|
1306
1316
|
const themes = readThemes(rootEl);
|
|
1307
|
-
const
|
|
1308
|
-
const
|
|
1317
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1318
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1319
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1309
1320
|
const licenses = readLicenses(rootEl);
|
|
1310
1321
|
const overviews = readOverviews(rootEl);
|
|
1311
1322
|
// not used yet
|
|
@@ -1333,9 +1344,10 @@ function toModel(xml) {
|
|
|
1333
1344
|
contactsForResource: [],
|
|
1334
1345
|
keywords,
|
|
1335
1346
|
themes,
|
|
1336
|
-
accessConstraints,
|
|
1337
|
-
useLimitations,
|
|
1338
1347
|
licenses,
|
|
1348
|
+
legalConstraints,
|
|
1349
|
+
securityConstraints,
|
|
1350
|
+
otherConstraints,
|
|
1339
1351
|
...(datasetCreated && { datasetCreated }),
|
|
1340
1352
|
...(datasetUpdated && { datasetUpdated }),
|
|
1341
1353
|
lineage,
|
|
@@ -1360,9 +1372,10 @@ function toModel(xml) {
|
|
|
1360
1372
|
contacts,
|
|
1361
1373
|
keywords,
|
|
1362
1374
|
themes,
|
|
1363
|
-
accessConstraints,
|
|
1364
|
-
useLimitations,
|
|
1365
1375
|
licenses,
|
|
1376
|
+
legalConstraints,
|
|
1377
|
+
securityConstraints,
|
|
1378
|
+
otherConstraints,
|
|
1366
1379
|
overviews,
|
|
1367
1380
|
onlineResources,
|
|
1368
1381
|
};
|
|
@@ -1388,9 +1401,11 @@ function toXml(record, originalXml) {
|
|
|
1388
1401
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1389
1402
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1390
1403
|
fieldChanged('themes') && writeThemes(record, rootEl);
|
|
1391
|
-
fieldChanged('
|
|
1404
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1405
|
+
fieldChanged('securityConstraints') &&
|
|
1406
|
+
writeSecurityConstraints(record, rootEl);
|
|
1392
1407
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1393
|
-
fieldChanged('
|
|
1408
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1394
1409
|
if (record.kind === 'dataset') {
|
|
1395
1410
|
writeStatus(record, rootEl);
|
|
1396
1411
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -16774,12 +16789,12 @@ var de = {
|
|
|
16774
16789
|
"record.metadata.details": "Technische Informationen",
|
|
16775
16790
|
"record.metadata.download": "Downloads",
|
|
16776
16791
|
"record.metadata.formats": "Formate",
|
|
16777
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16778
16792
|
"record.metadata.keywords": "Stichworte",
|
|
16779
16793
|
"record.metadata.lastUpdate": "Zuletzt aktualisiert am",
|
|
16780
16794
|
"record.metadata.links": "Links",
|
|
16781
16795
|
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16782
16796
|
"record.metadata.origin": "Über die Daten",
|
|
16797
|
+
"record.metadata.otherConstraints": "",
|
|
16783
16798
|
"record.metadata.owner": "",
|
|
16784
16799
|
"record.metadata.preview": "Vorschau",
|
|
16785
16800
|
"record.metadata.publications": "Veröffentlichungen",
|
|
@@ -16841,6 +16856,7 @@ var de = {
|
|
|
16841
16856
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
16842
16857
|
"search.filters.isSpatial.no": "nicht räumlich",
|
|
16843
16858
|
"search.filters.isSpatial.yes": "räumlich",
|
|
16859
|
+
"search.filters.keyword": "Schlüsselwort",
|
|
16844
16860
|
"search.filters.license": "Lizenz",
|
|
16845
16861
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
16846
16862
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17114,12 +17130,12 @@ var en = {
|
|
|
17114
17130
|
"record.metadata.details": "Technical information",
|
|
17115
17131
|
"record.metadata.download": "Downloads",
|
|
17116
17132
|
"record.metadata.formats": "Formats",
|
|
17117
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17118
17133
|
"record.metadata.keywords": "Keywords",
|
|
17119
17134
|
"record.metadata.lastUpdate": "Last updated on",
|
|
17120
17135
|
"record.metadata.links": "Links",
|
|
17121
17136
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17122
17137
|
"record.metadata.origin": "About the data",
|
|
17138
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17123
17139
|
"record.metadata.owner": "Catalog of origin",
|
|
17124
17140
|
"record.metadata.preview": "Preview",
|
|
17125
17141
|
"record.metadata.publications": "publications",
|
|
@@ -17150,8 +17166,8 @@ var en = {
|
|
|
17150
17166
|
"record.metadata.uniqueId": "Unique Identifier",
|
|
17151
17167
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17152
17168
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17153
|
-
"record.metadata.updatedOn": "
|
|
17154
|
-
"record.metadata.usage": "
|
|
17169
|
+
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17170
|
+
"record.metadata.usage": "License and Conditions",
|
|
17155
17171
|
"record.more.details": "Read more",
|
|
17156
17172
|
"record.tab.chart": "Chart",
|
|
17157
17173
|
"record.tab.data": "Table",
|
|
@@ -17181,6 +17197,7 @@ var en = {
|
|
|
17181
17197
|
"search.filters.isSpatial": "Is spatial data",
|
|
17182
17198
|
"search.filters.isSpatial.no": "non spatial",
|
|
17183
17199
|
"search.filters.isSpatial.yes": "spatial",
|
|
17200
|
+
"search.filters.keyword": "Keyword",
|
|
17184
17201
|
"search.filters.license": "License",
|
|
17185
17202
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
17186
17203
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17454,12 +17471,12 @@ var es = {
|
|
|
17454
17471
|
"record.metadata.details": "",
|
|
17455
17472
|
"record.metadata.download": "",
|
|
17456
17473
|
"record.metadata.formats": "",
|
|
17457
|
-
"record.metadata.isOpenData": "",
|
|
17458
17474
|
"record.metadata.keywords": "",
|
|
17459
17475
|
"record.metadata.lastUpdate": "",
|
|
17460
17476
|
"record.metadata.links": "",
|
|
17461
17477
|
"record.metadata.noUsage": "",
|
|
17462
17478
|
"record.metadata.origin": "",
|
|
17479
|
+
"record.metadata.otherConstraints": "",
|
|
17463
17480
|
"record.metadata.owner": "",
|
|
17464
17481
|
"record.metadata.preview": "",
|
|
17465
17482
|
"record.metadata.publications": "",
|
|
@@ -17521,6 +17538,7 @@ var es = {
|
|
|
17521
17538
|
"search.filters.isSpatial": "",
|
|
17522
17539
|
"search.filters.isSpatial.no": "",
|
|
17523
17540
|
"search.filters.isSpatial.yes": "",
|
|
17541
|
+
"search.filters.keyword": "",
|
|
17524
17542
|
"search.filters.license": "",
|
|
17525
17543
|
"search.filters.license.cc-by": "",
|
|
17526
17544
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -17794,12 +17812,12 @@ var fr = {
|
|
|
17794
17812
|
"record.metadata.details": "Informations techniques",
|
|
17795
17813
|
"record.metadata.download": "Téléchargements",
|
|
17796
17814
|
"record.metadata.formats": "Formats",
|
|
17797
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17798
17815
|
"record.metadata.keywords": "Mots clés",
|
|
17799
17816
|
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17800
17817
|
"record.metadata.links": "Liens",
|
|
17801
17818
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17802
17819
|
"record.metadata.origin": "À propos des données",
|
|
17820
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17803
17821
|
"record.metadata.owner": "Catalogue d'origine",
|
|
17804
17822
|
"record.metadata.preview": "Aperçu",
|
|
17805
17823
|
"record.metadata.publications": "données",
|
|
@@ -17830,8 +17848,8 @@ var fr = {
|
|
|
17830
17848
|
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17831
17849
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17832
17850
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17833
|
-
"record.metadata.updatedOn": "
|
|
17834
|
-
"record.metadata.usage": "
|
|
17851
|
+
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17852
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17835
17853
|
"record.more.details": "Détails",
|
|
17836
17854
|
"record.tab.chart": "Graphique",
|
|
17837
17855
|
"record.tab.data": "Tableau",
|
|
@@ -17861,6 +17879,7 @@ var fr = {
|
|
|
17861
17879
|
"search.filters.isSpatial": "Données spatiales",
|
|
17862
17880
|
"search.filters.isSpatial.no": "non-géolocalisées",
|
|
17863
17881
|
"search.filters.isSpatial.yes": "géolocalisées",
|
|
17882
|
+
"search.filters.keyword": "Mot-clé",
|
|
17864
17883
|
"search.filters.license": "Licence",
|
|
17865
17884
|
"search.filters.license.cc-by": "cc-by",
|
|
17866
17885
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18134,12 +18153,12 @@ var it = {
|
|
|
18134
18153
|
"record.metadata.details": "Informazioni tecniche",
|
|
18135
18154
|
"record.metadata.download": "Download",
|
|
18136
18155
|
"record.metadata.formats": "Formati",
|
|
18137
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18138
18156
|
"record.metadata.keywords": "Parole chiave",
|
|
18139
18157
|
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18140
18158
|
"record.metadata.links": "Collegamenti",
|
|
18141
18159
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18142
18160
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18161
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18143
18162
|
"record.metadata.owner": "Catalogo originale",
|
|
18144
18163
|
"record.metadata.preview": "Anteprima",
|
|
18145
18164
|
"record.metadata.publications": "pubblicazioni",
|
|
@@ -18170,8 +18189,8 @@ var it = {
|
|
|
18170
18189
|
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18171
18190
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18172
18191
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18173
|
-
"record.metadata.updatedOn": "Ultimo aggiornamento
|
|
18174
|
-
"record.metadata.usage": "
|
|
18192
|
+
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18193
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18175
18194
|
"record.more.details": "Dettagli",
|
|
18176
18195
|
"record.tab.chart": "Grafico",
|
|
18177
18196
|
"record.tab.data": "Tabella",
|
|
@@ -18201,6 +18220,7 @@ var it = {
|
|
|
18201
18220
|
"search.filters.isSpatial": "Dati spaziali",
|
|
18202
18221
|
"search.filters.isSpatial.no": "Non geolocalizzati",
|
|
18203
18222
|
"search.filters.isSpatial.yes": "Geolocalizzati",
|
|
18223
|
+
"search.filters.keyword": "Parola chiave",
|
|
18204
18224
|
"search.filters.license": "Licenza",
|
|
18205
18225
|
"search.filters.license.cc-by": "cc-by",
|
|
18206
18226
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18474,12 +18494,12 @@ var nl = {
|
|
|
18474
18494
|
"record.metadata.details": "",
|
|
18475
18495
|
"record.metadata.download": "",
|
|
18476
18496
|
"record.metadata.formats": "",
|
|
18477
|
-
"record.metadata.isOpenData": "",
|
|
18478
18497
|
"record.metadata.keywords": "",
|
|
18479
18498
|
"record.metadata.lastUpdate": "",
|
|
18480
18499
|
"record.metadata.links": "",
|
|
18481
18500
|
"record.metadata.noUsage": "",
|
|
18482
18501
|
"record.metadata.origin": "",
|
|
18502
|
+
"record.metadata.otherConstraints": "",
|
|
18483
18503
|
"record.metadata.owner": "",
|
|
18484
18504
|
"record.metadata.preview": "",
|
|
18485
18505
|
"record.metadata.publications": "",
|
|
@@ -18541,6 +18561,7 @@ var nl = {
|
|
|
18541
18561
|
"search.filters.isSpatial": "",
|
|
18542
18562
|
"search.filters.isSpatial.no": "",
|
|
18543
18563
|
"search.filters.isSpatial.yes": "",
|
|
18564
|
+
"search.filters.keyword": "",
|
|
18544
18565
|
"search.filters.license": "",
|
|
18545
18566
|
"search.filters.license.cc-by": "",
|
|
18546
18567
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18814,12 +18835,12 @@ var pt = {
|
|
|
18814
18835
|
"record.metadata.details": "",
|
|
18815
18836
|
"record.metadata.download": "",
|
|
18816
18837
|
"record.metadata.formats": "",
|
|
18817
|
-
"record.metadata.isOpenData": "",
|
|
18818
18838
|
"record.metadata.keywords": "",
|
|
18819
18839
|
"record.metadata.lastUpdate": "",
|
|
18820
18840
|
"record.metadata.links": "",
|
|
18821
18841
|
"record.metadata.noUsage": "",
|
|
18822
18842
|
"record.metadata.origin": "",
|
|
18843
|
+
"record.metadata.otherConstraints": "",
|
|
18823
18844
|
"record.metadata.owner": "",
|
|
18824
18845
|
"record.metadata.preview": "",
|
|
18825
18846
|
"record.metadata.publications": "",
|
|
@@ -18881,6 +18902,7 @@ var pt = {
|
|
|
18881
18902
|
"search.filters.isSpatial": "",
|
|
18882
18903
|
"search.filters.isSpatial.no": "",
|
|
18883
18904
|
"search.filters.isSpatial.yes": "",
|
|
18905
|
+
"search.filters.keyword": "",
|
|
18884
18906
|
"search.filters.license": "",
|
|
18885
18907
|
"search.filters.license.cc-by": "",
|
|
18886
18908
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -19056,20 +19078,11 @@ class Gn4FieldMapper {
|
|
|
19056
19078
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19057
19079
|
],
|
|
19058
19080
|
}),
|
|
19059
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19060
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19061
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19062
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19063
|
-
licenseObject: (output, source) => (
|
|
19064
|
-
...output,
|
|
19065
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19066
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19067
|
-
return {
|
|
19068
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19069
|
-
...(link ? { link } : {}),
|
|
19070
|
-
};
|
|
19071
|
-
}),
|
|
19072
|
-
}),
|
|
19081
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19082
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19083
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19084
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19085
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19073
19086
|
lineageObject: (output, source) => ({
|
|
19074
19087
|
...output,
|
|
19075
19088
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19131,31 +19144,42 @@ class Gn4FieldMapper {
|
|
|
19131
19144
|
},
|
|
19132
19145
|
};
|
|
19133
19146
|
this.genericField = (output) => output;
|
|
19134
|
-
this.constraintField = (
|
|
19135
|
-
|
|
19136
|
-
|
|
19137
|
-
|
|
19138
|
-
|
|
19139
|
-
|
|
19140
|
-
|
|
19141
|
-
|
|
19142
|
-
|
|
19143
|
-
|
|
19144
|
-
|
|
19145
|
-
|
|
19146
|
-
|
|
19147
|
-
|
|
19148
|
-
|
|
19149
|
-
|
|
19150
|
-
|
|
19151
|
-
|
|
19152
|
-
|
|
19153
|
-
|
|
19154
|
-
|
|
19155
|
-
|
|
19156
|
-
|
|
19157
|
-
}
|
|
19158
|
-
|
|
19147
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19148
|
+
let outputField;
|
|
19149
|
+
switch (type) {
|
|
19150
|
+
case 'license':
|
|
19151
|
+
outputField = 'licenses';
|
|
19152
|
+
break;
|
|
19153
|
+
case 'legal':
|
|
19154
|
+
outputField = 'legalConstraints';
|
|
19155
|
+
break;
|
|
19156
|
+
case 'security':
|
|
19157
|
+
outputField = 'securityConstraints';
|
|
19158
|
+
break;
|
|
19159
|
+
case 'other':
|
|
19160
|
+
outputField = 'otherConstraints';
|
|
19161
|
+
break;
|
|
19162
|
+
}
|
|
19163
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19164
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19165
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19166
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19167
|
+
return {
|
|
19168
|
+
text,
|
|
19169
|
+
...(url ? { url } : {}),
|
|
19170
|
+
};
|
|
19171
|
+
}));
|
|
19172
|
+
const result = {
|
|
19173
|
+
...output,
|
|
19174
|
+
[outputField]: outputArray,
|
|
19175
|
+
};
|
|
19176
|
+
// avoid legal constraints being duplicates of licenses
|
|
19177
|
+
if ('legalConstraints' in result &&
|
|
19178
|
+
(type === 'legal' || type === 'license')) {
|
|
19179
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19180
|
+
}
|
|
19181
|
+
return result;
|
|
19182
|
+
};
|
|
19159
19183
|
this.mapLink = (sourceLink) => {
|
|
19160
19184
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19161
19185
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19203,17 +19227,6 @@ class Gn4FieldMapper {
|
|
|
19203
19227
|
extras: { ...(output.extras || {}), ...value },
|
|
19204
19228
|
});
|
|
19205
19229
|
}
|
|
19206
|
-
getConstraintsType(indexField) {
|
|
19207
|
-
switch (indexField) {
|
|
19208
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19209
|
-
return 'legal';
|
|
19210
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19211
|
-
return 'security';
|
|
19212
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19213
|
-
default:
|
|
19214
|
-
return 'other';
|
|
19215
|
-
}
|
|
19216
|
-
}
|
|
19217
19230
|
getMappingFn(fieldName) {
|
|
19218
19231
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19219
19232
|
}
|
|
@@ -19275,12 +19288,13 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19275
19288
|
recordUpdated: null,
|
|
19276
19289
|
ownerOrganization: null,
|
|
19277
19290
|
licenses: [],
|
|
19291
|
+
legalConstraints: [],
|
|
19292
|
+
securityConstraints: [],
|
|
19293
|
+
otherConstraints: [],
|
|
19278
19294
|
contacts: [],
|
|
19279
19295
|
contactsForResource: [],
|
|
19280
|
-
accessConstraints: [],
|
|
19281
19296
|
keywords: [],
|
|
19282
19297
|
themes: [],
|
|
19283
|
-
useLimitations: [],
|
|
19284
19298
|
spatialExtents: [],
|
|
19285
19299
|
temporalExtents: [],
|
|
19286
19300
|
overviews: [],
|
|
@@ -20048,11 +20062,18 @@ class OrganizationsFromMetadataService {
|
|
|
20048
20062
|
if (!allContactOrgs.length)
|
|
20049
20063
|
return of(record);
|
|
20050
20064
|
const ownerOrganization = allContactOrgs[0];
|
|
20051
|
-
|
|
20065
|
+
// read the owner group as well to have a fallback logo
|
|
20066
|
+
const groupId = selectField(source, 'groupOwner');
|
|
20067
|
+
const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
|
|
20068
|
+
return group.id === Number(groupId);
|
|
20069
|
+
})));
|
|
20070
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
|
|
20052
20071
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
20072
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
|
|
20053
20073
|
return {
|
|
20054
20074
|
...record,
|
|
20055
20075
|
ownerOrganization: {
|
|
20076
|
+
logoUrl,
|
|
20056
20077
|
...ownerOrganization,
|
|
20057
20078
|
...recordOrganisation,
|
|
20058
20079
|
},
|
|
@@ -20363,12 +20384,21 @@ class Gn4PlatformMapper {
|
|
|
20363
20384
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
20364
20385
|
return { ...apiUser, id: id.toString() };
|
|
20365
20386
|
}
|
|
20366
|
-
thesaurusFromApi(thesaurus) {
|
|
20387
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
20367
20388
|
return thesaurus.map((keyword) => {
|
|
20368
|
-
|
|
20389
|
+
let key = keyword.uri;
|
|
20390
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
20391
|
+
if (key.indexOf('@@@') > -1) {
|
|
20392
|
+
key = key.split('@@@')[1];
|
|
20393
|
+
}
|
|
20394
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
20395
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
20396
|
+
? keyword.definitions[lang3]
|
|
20397
|
+
: keyword.definition;
|
|
20369
20398
|
return {
|
|
20370
|
-
key
|
|
20371
|
-
label
|
|
20399
|
+
key,
|
|
20400
|
+
label,
|
|
20401
|
+
description,
|
|
20372
20402
|
};
|
|
20373
20403
|
});
|
|
20374
20404
|
}
|
|
@@ -20381,13 +20411,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
20381
20411
|
|
|
20382
20412
|
const minApiVersion = '4.2.2';
|
|
20383
20413
|
class Gn4PlatformService {
|
|
20384
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
|
|
20414
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
20385
20415
|
this.siteApiService = siteApiService;
|
|
20386
20416
|
this.meApi = meApi;
|
|
20387
20417
|
this.usersApi = usersApi;
|
|
20388
20418
|
this.mapper = mapper;
|
|
20389
20419
|
this.toolsApiService = toolsApiService;
|
|
20390
20420
|
this.registriesApiService = registriesApiService;
|
|
20421
|
+
this.langService = langService;
|
|
20391
20422
|
this.type = 'GeoNetwork';
|
|
20392
20423
|
this.keyTranslations$ = this.toolsApiService
|
|
20393
20424
|
.getTranslationsPackage1('gnui')
|
|
@@ -20401,6 +20432,11 @@ class Gn4PlatformService {
|
|
|
20401
20432
|
throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
|
|
20402
20433
|
}
|
|
20403
20434
|
}), shareReplay(1));
|
|
20435
|
+
/**
|
|
20436
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
20437
|
+
* @private
|
|
20438
|
+
*/
|
|
20439
|
+
this.thesauri = {};
|
|
20404
20440
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
20405
20441
|
this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
20406
20442
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
@@ -20427,19 +20463,36 @@ class Gn4PlatformService {
|
|
|
20427
20463
|
return this.users$;
|
|
20428
20464
|
}
|
|
20429
20465
|
translateKey(key) {
|
|
20466
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
20467
|
+
if (key.match(/^https?:\/\//)) {
|
|
20468
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
20469
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
20470
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
|
|
20471
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
|
|
20472
|
+
for (const item of thesaurus) {
|
|
20473
|
+
if (item.key === key)
|
|
20474
|
+
return item.label;
|
|
20475
|
+
}
|
|
20476
|
+
return key;
|
|
20477
|
+
}));
|
|
20478
|
+
}
|
|
20430
20479
|
return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
|
|
20431
20480
|
}
|
|
20432
|
-
|
|
20433
|
-
|
|
20434
|
-
.
|
|
20435
|
-
|
|
20481
|
+
getThesaurusByUri(uri) {
|
|
20482
|
+
if (this.thesauri[uri]) {
|
|
20483
|
+
return this.thesauri[uri];
|
|
20484
|
+
}
|
|
20485
|
+
this.thesauri[uri] = this.registriesApiService
|
|
20486
|
+
.searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
|
|
20487
|
+
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
20488
|
+
return this.thesauri[uri];
|
|
20436
20489
|
}
|
|
20437
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20490
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20438
20491
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
20439
20492
|
}
|
|
20440
20493
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
20441
20494
|
type: Injectable
|
|
20442
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
|
|
20495
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
20443
20496
|
|
|
20444
20497
|
function provideGn4() {
|
|
20445
20498
|
return [
|
|
@@ -23305,8 +23358,7 @@ class MetadataQualityComponent {
|
|
|
23305
23358
|
: this.calculatedQualityScore;
|
|
23306
23359
|
}
|
|
23307
23360
|
get calculatedQualityScore() {
|
|
23308
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23309
|
-
this.items.length);
|
|
23361
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23310
23362
|
}
|
|
23311
23363
|
showMenu() {
|
|
23312
23364
|
this.isMenuShown = true;
|
|
@@ -23931,11 +23983,11 @@ class MarkdownParserComponent {
|
|
|
23931
23983
|
return marked.parse(this.textContent);
|
|
23932
23984
|
}
|
|
23933
23985
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23934
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none
|
|
23986
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23935
23987
|
}
|
|
23936
23988
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23937
23989
|
type: Component,
|
|
23938
|
-
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none
|
|
23990
|
+
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
23939
23991
|
}], propDecorators: { textContent: [{
|
|
23940
23992
|
type: Input
|
|
23941
23993
|
}] } });
|
|
@@ -23946,16 +23998,32 @@ class MetadataInfoComponent {
|
|
|
23946
23998
|
}
|
|
23947
23999
|
get hasUsage() {
|
|
23948
24000
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23949
|
-
this.metadata.
|
|
23950
|
-
|
|
24001
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
24002
|
+
this.legalConstraints.length > 0) ||
|
|
24003
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
24004
|
+
this.otherConstraints.length > 0) ||
|
|
24005
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
24006
|
+
}
|
|
24007
|
+
get legalConstraints() {
|
|
24008
|
+
let array = [];
|
|
24009
|
+
if (this.metadata.legalConstraints?.length) {
|
|
24010
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24011
|
+
}
|
|
24012
|
+
return array;
|
|
23951
24013
|
}
|
|
23952
|
-
get
|
|
24014
|
+
get otherConstraints() {
|
|
23953
24015
|
let array = [];
|
|
23954
|
-
if (this.metadata.
|
|
23955
|
-
array = array.concat(this.metadata.
|
|
24016
|
+
if (this.metadata.otherConstraints?.length) {
|
|
24017
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23956
24018
|
}
|
|
23957
|
-
|
|
23958
|
-
|
|
24019
|
+
return array;
|
|
24020
|
+
}
|
|
24021
|
+
get licenses() {
|
|
24022
|
+
let array = [];
|
|
24023
|
+
if (this.metadata.licenses?.length) {
|
|
24024
|
+
array = array.concat(this.metadata.licenses
|
|
24025
|
+
.filter((c) => c.text)
|
|
24026
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23959
24027
|
}
|
|
23960
24028
|
return array;
|
|
23961
24029
|
}
|
|
@@ -23977,16 +24045,12 @@ class MetadataInfoComponent {
|
|
|
23977
24045
|
onKeywordClick(keyword) {
|
|
23978
24046
|
this.keyword.emit(keyword);
|
|
23979
24047
|
}
|
|
23980
|
-
copyText() {
|
|
23981
|
-
navigator.clipboard.writeText(this.metadata.uniqueIdentifier);
|
|
23982
|
-
event.target.blur();
|
|
23983
|
-
}
|
|
23984
24048
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23985
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel
|
|
24049
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23986
24050
|
}
|
|
23987
24051
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23988
24052
|
type: Component,
|
|
23989
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel
|
|
24053
|
+
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
|
|
23990
24054
|
}], propDecorators: { metadata: [{
|
|
23991
24055
|
type: Input
|
|
23992
24056
|
}], incomplete: [{
|
|
@@ -25892,7 +25956,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25892
25956
|
|
|
25893
25957
|
const DEFAULT_PARAMS = {
|
|
25894
25958
|
OFFSET: '',
|
|
25895
|
-
LIMIT: '',
|
|
25959
|
+
LIMIT: '-1',
|
|
25896
25960
|
FORMAT: 'json',
|
|
25897
25961
|
};
|
|
25898
25962
|
class RecordApiFormComponent {
|
|
@@ -25921,6 +25985,8 @@ class RecordApiFormComponent {
|
|
|
25921
25985
|
}
|
|
25922
25986
|
return outputUrl;
|
|
25923
25987
|
}));
|
|
25988
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
25989
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25924
25990
|
}
|
|
25925
25991
|
set apiLink(value) {
|
|
25926
25992
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25930,10 +25996,11 @@ class RecordApiFormComponent {
|
|
|
25930
25996
|
this.offset$.next(value);
|
|
25931
25997
|
}
|
|
25932
25998
|
setLimit(value) {
|
|
25933
|
-
|
|
25999
|
+
const newLimit = value === '' ? '-1' : value;
|
|
26000
|
+
this.limit$.next(newLimit);
|
|
25934
26001
|
}
|
|
25935
26002
|
setFormat(value) {
|
|
25936
|
-
this.format$.next(value);
|
|
26003
|
+
this.format$.next(String(value));
|
|
25937
26004
|
}
|
|
25938
26005
|
resetUrl() {
|
|
25939
26006
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25941,11 +26008,11 @@ class RecordApiFormComponent {
|
|
|
25941
26008
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25942
26009
|
}
|
|
25943
26010
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25944
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
26011
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25945
26012
|
}
|
|
25946
26013
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25947
26014
|
type: Component,
|
|
25948
|
-
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
26015
|
+
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
25949
26016
|
}], propDecorators: { apiLink: [{
|
|
25950
26017
|
type: Input
|
|
25951
26018
|
}] } });
|
|
@@ -27708,10 +27775,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27708
27775
|
class AbstractSearchField {
|
|
27709
27776
|
}
|
|
27710
27777
|
class SimpleSearchField {
|
|
27711
|
-
constructor(esFieldName, order = 'asc',
|
|
27778
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27712
27779
|
this.esFieldName = esFieldName;
|
|
27713
|
-
this.order = order;
|
|
27714
27780
|
this.injector = injector;
|
|
27781
|
+
this.order = order;
|
|
27782
|
+
this.orderType = orderType;
|
|
27715
27783
|
this.repository = this.injector.get(RecordsRepositoryInterface);
|
|
27716
27784
|
// FIXME: this is required to register runtime fields; abstract this as well
|
|
27717
27785
|
this.esService = this.injector.get(ElasticsearchService);
|
|
@@ -27722,12 +27790,12 @@ class SimpleSearchField {
|
|
|
27722
27790
|
type: 'terms',
|
|
27723
27791
|
field: this.esFieldName,
|
|
27724
27792
|
limit: 1000,
|
|
27725
|
-
sort: [this.order,
|
|
27793
|
+
sort: [this.order, this.orderType],
|
|
27726
27794
|
},
|
|
27727
27795
|
};
|
|
27728
27796
|
}
|
|
27729
27797
|
async getBucketLabel(bucket) {
|
|
27730
|
-
return bucket.term;
|
|
27798
|
+
return bucket.term.toString();
|
|
27731
27799
|
}
|
|
27732
27800
|
getAvailableValues() {
|
|
27733
27801
|
return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
|
|
@@ -27755,9 +27823,13 @@ class SimpleSearchField {
|
|
|
27755
27823
|
return of(values);
|
|
27756
27824
|
}
|
|
27757
27825
|
}
|
|
27758
|
-
class
|
|
27759
|
-
constructor() {
|
|
27760
|
-
super(
|
|
27826
|
+
class TranslatedSearchField extends SimpleSearchField {
|
|
27827
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27828
|
+
super(esFieldName, injector, order, orderType);
|
|
27829
|
+
this.esFieldName = esFieldName;
|
|
27830
|
+
this.injector = injector;
|
|
27831
|
+
this.order = order;
|
|
27832
|
+
this.orderType = orderType;
|
|
27761
27833
|
this.platformService = this.injector.get(PlatformServiceInterface);
|
|
27762
27834
|
}
|
|
27763
27835
|
async getTranslation(key) {
|
|
@@ -27767,26 +27839,36 @@ class KeySearchField extends SimpleSearchField {
|
|
|
27767
27839
|
return (await this.getTranslation(bucket.term)) || bucket.term;
|
|
27768
27840
|
}
|
|
27769
27841
|
getAvailableValues() {
|
|
27842
|
+
if (this.orderType === 'count')
|
|
27843
|
+
return super.getAvailableValues();
|
|
27770
27844
|
// sort values by alphabetical order
|
|
27771
27845
|
return super
|
|
27772
27846
|
.getAvailableValues()
|
|
27773
27847
|
.pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
|
|
27774
27848
|
}
|
|
27775
27849
|
}
|
|
27776
|
-
|
|
27777
|
-
|
|
27778
|
-
|
|
27779
|
-
|
|
27850
|
+
/**
|
|
27851
|
+
* This search field will either target the `.default` field, or a specific `.langxyz` field according
|
|
27852
|
+
* to the defined METADATA_LANGUAGE token
|
|
27853
|
+
* The provided ES field name should not include any prefix such as `.langeng`
|
|
27854
|
+
*/
|
|
27855
|
+
class MultilingualSearchField extends SimpleSearchField {
|
|
27856
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27857
|
+
super(esFieldName, injector, order, orderType);
|
|
27858
|
+
this.esFieldName = esFieldName;
|
|
27859
|
+
this.injector = injector;
|
|
27860
|
+
this.order = order;
|
|
27861
|
+
this.orderType = orderType;
|
|
27780
27862
|
this.langService = this.injector.get(LangService);
|
|
27781
|
-
this.
|
|
27782
|
-
|
|
27783
|
-
|
|
27784
|
-
|
|
27785
|
-
|
|
27786
|
-
}
|
|
27787
|
-
|
|
27788
|
-
|
|
27789
|
-
|
|
27863
|
+
this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
|
|
27864
|
+
// note: we're excluding the metadata language "current" value because that would produce
|
|
27865
|
+
// permalinks that might not work for different users
|
|
27866
|
+
if (this.searchLanguage && this.searchLanguage !== 'current') {
|
|
27867
|
+
this.esFieldName += `.lang${this.searchLanguage}`;
|
|
27868
|
+
}
|
|
27869
|
+
else {
|
|
27870
|
+
this.esFieldName += '.default';
|
|
27871
|
+
}
|
|
27790
27872
|
}
|
|
27791
27873
|
}
|
|
27792
27874
|
class FullTextSearchField {
|
|
@@ -27806,7 +27888,7 @@ marker('search.filters.isSpatial.yes');
|
|
|
27806
27888
|
marker('search.filters.isSpatial.no');
|
|
27807
27889
|
class IsSpatialSearchField extends SimpleSearchField {
|
|
27808
27890
|
constructor(injector) {
|
|
27809
|
-
super('isSpatial', 'asc'
|
|
27891
|
+
super('isSpatial', injector, 'asc');
|
|
27810
27892
|
this.translateService = this.injector.get(TranslateService);
|
|
27811
27893
|
this.esService.registerRuntimeField('isSpatial', `String result = 'no';
|
|
27812
27894
|
String formats = doc.format.join('|').toLowerCase();
|
|
@@ -27856,7 +27938,7 @@ marker('search.filters.license.unknown');
|
|
|
27856
27938
|
// Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
|
|
27857
27939
|
class LicenseSearchField extends SimpleSearchField {
|
|
27858
27940
|
constructor(injector) {
|
|
27859
|
-
super('license', 'asc'
|
|
27941
|
+
super('license', injector, 'asc');
|
|
27860
27942
|
this.translateService = this.injector.get(TranslateService);
|
|
27861
27943
|
this.esService.registerRuntimeField('license', `String raw = '';
|
|
27862
27944
|
if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
|
|
@@ -27940,7 +28022,7 @@ class OrganizationSearchField {
|
|
|
27940
28022
|
}
|
|
27941
28023
|
class OwnerSearchField extends SimpleSearchField {
|
|
27942
28024
|
constructor(injector) {
|
|
27943
|
-
super('owner', 'asc'
|
|
28025
|
+
super('owner', injector, 'asc');
|
|
27944
28026
|
}
|
|
27945
28027
|
getAvailableValues() {
|
|
27946
28028
|
return of([]);
|
|
@@ -27949,6 +28031,7 @@ class OwnerSearchField extends SimpleSearchField {
|
|
|
27949
28031
|
|
|
27950
28032
|
marker('search.filters.format');
|
|
27951
28033
|
marker('search.filters.inspireKeyword');
|
|
28034
|
+
marker('search.filters.keyword');
|
|
27952
28035
|
marker('search.filters.isSpatial');
|
|
27953
28036
|
marker('search.filters.license');
|
|
27954
28037
|
marker('search.filters.publicationYear');
|
|
@@ -27966,13 +28049,14 @@ class FieldsService {
|
|
|
27966
28049
|
this.injector = injector;
|
|
27967
28050
|
this.fields = {
|
|
27968
28051
|
publisher: new OrganizationSearchField(this.injector),
|
|
27969
|
-
format: new SimpleSearchField('format', 'asc'
|
|
27970
|
-
resourceType: new
|
|
27971
|
-
representationType: new
|
|
27972
|
-
publicationYear: new SimpleSearchField('publicationYearForResource', 'desc'
|
|
27973
|
-
topic: new
|
|
27974
|
-
inspireKeyword: new
|
|
27975
|
-
|
|
28052
|
+
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
28053
|
+
resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
|
|
28054
|
+
representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
|
|
28055
|
+
publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
|
|
28056
|
+
topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
|
|
28057
|
+
inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
|
|
28058
|
+
keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
|
|
28059
|
+
documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
|
|
27976
28060
|
isSpatial: new IsSpatialSearchField(this.injector),
|
|
27977
28061
|
q: new FullTextSearchField(),
|
|
27978
28062
|
license: new LicenseSearchField(this.injector),
|