geonetwork-ui 2.7.0-dev.d6c0958d7 → 2.7.0-dev.da19181da

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.
Files changed (145) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.mjs +4 -7
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +20 -20
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +3 -3
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -4
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -5
  8. package/esm2022/libs/api/repository/src/index.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +5 -5
  10. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +55 -12
  11. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +3 -3
  12. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +3 -3
  13. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -3
  14. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +9 -5
  15. package/esm2022/libs/api/repository/src/lib/metadata-language.token.mjs +3 -0
  16. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +11 -1
  17. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +3 -3
  18. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +2 -2
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.mjs +79 -0
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +8 -3
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  22. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +77 -1
  23. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +3 -5
  24. package/esm2022/libs/feature/router/src/lib/default/state/query-params.utils.mjs +4 -3
  25. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +3 -2
  26. package/esm2022/libs/feature/search/src/lib/state/reducer.mjs +5 -2
  27. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  28. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +1 -4
  29. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +7 -7
  30. package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +1 -6
  31. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  32. package/esm2022/libs/util/app-config/src/lib/fixtures.mjs +2 -2
  33. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  34. package/esm2022/libs/util/app-config/src/lib/parse-utils.mjs +5 -4
  35. package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +50 -9
  36. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +9 -8
  37. package/esm2022/libs/util/shared/src/lib/utils/geojson.mjs +58 -1
  38. package/esm2022/translations/de.json +52 -20
  39. package/esm2022/translations/en.json +53 -21
  40. package/esm2022/translations/es.json +39 -7
  41. package/esm2022/translations/fr.json +57 -25
  42. package/esm2022/translations/it.json +52 -20
  43. package/esm2022/translations/nl.json +39 -7
  44. package/esm2022/translations/pt.json +39 -7
  45. package/esm2022/translations/sk.json +43 -11
  46. package/fesm2022/geonetwork-ui.mjs +3028 -2913
  47. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  48. package/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.d.ts.map +1 -1
  49. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +1 -1
  50. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +2 -2
  52. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  53. package/libs/api/repository/src/index.d.ts +1 -1
  54. package/libs/api/repository/src/index.d.ts.map +1 -1
  55. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -2
  56. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  57. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +1 -0
  58. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  59. package/libs/api/repository/src/lib/metadata-language.token.d.ts +5 -0
  60. package/libs/api/repository/src/lib/metadata-language.token.d.ts.map +1 -0
  61. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +5 -1
  62. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  63. package/libs/feature/catalog/src/lib/sources/sources.service.d.ts.map +1 -1
  64. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts +28 -0
  66. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.d.ts.map +1 -0
  67. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -0
  68. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  69. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  70. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  71. package/libs/feature/editor/src/lib/fields.config.d.ts +8 -1
  72. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  73. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -2
  74. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  75. package/libs/feature/router/src/lib/default/state/query-params.utils.d.ts.map +1 -1
  76. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  77. package/libs/feature/search/src/lib/state/reducer.d.ts.map +1 -1
  78. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +0 -1
  79. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  80. package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
  81. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  82. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  83. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  84. package/libs/util/app-config/src/lib/parse-utils.d.ts.map +1 -1
  85. package/libs/util/i18n/src/lib/language-codes.d.ts +91 -31
  86. package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
  87. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -1
  88. package/libs/util/shared/src/lib/utils/geojson.d.ts +7 -2
  89. package/libs/util/shared/src/lib/utils/geojson.d.ts.map +1 -1
  90. package/package.json +11 -10
  91. package/src/libs/api/metadata-converter/src/lib/dcat-ap/read-parts.ts +3 -6
  92. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +47 -22
  93. package/src/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.ts +2 -2
  94. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +2 -2
  95. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +2 -2
  96. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +3 -3
  97. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +6 -6
  98. package/src/libs/api/repository/src/index.ts +1 -1
  99. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -4
  100. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +65 -14
  101. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  102. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +2 -2
  103. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +2 -2
  104. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +9 -7
  105. package/src/libs/api/repository/src/lib/metadata-language.token.ts +8 -0
  106. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +17 -1
  107. package/src/libs/feature/catalog/src/lib/sources/sources.service.ts +2 -5
  108. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +3 -1
  109. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.css +0 -0
  110. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.html +20 -0
  111. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-inspire-field/form-field-inspire-theme.component.ts +85 -0
  112. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +6 -0
  113. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +5 -0
  114. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  115. package/src/libs/feature/editor/src/lib/fields.config.ts +85 -1
  116. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +8 -8
  117. package/src/libs/feature/router/src/lib/default/state/query-params.utils.ts +5 -2
  118. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +2 -1
  119. package/src/libs/feature/search/src/lib/state/reducer.ts +4 -1
  120. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +4 -1
  121. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +0 -4
  122. package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +6 -6
  123. package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +0 -6
  124. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  125. package/src/libs/util/app-config/src/lib/fixtures.ts +1 -1
  126. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  127. package/src/libs/util/app-config/src/lib/parse-utils.ts +4 -7
  128. package/src/libs/util/i18n/src/lib/language-codes.ts +62 -11
  129. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +13 -10
  130. package/src/libs/util/shared/src/lib/utils/geojson.ts +72 -2
  131. package/translations/de.json +52 -20
  132. package/translations/en.json +53 -21
  133. package/translations/es.json +39 -7
  134. package/translations/fr.json +57 -25
  135. package/translations/it.json +52 -20
  136. package/translations/nl.json +39 -7
  137. package/translations/pt.json +39 -7
  138. package/translations/sk.json +43 -11
  139. package/esm2022/libs/api/repository/src/lib/metadata-language.mjs +0 -3
  140. package/esm2022/libs/util/app-config/src/lib/constants.mjs +0 -439
  141. package/libs/api/repository/src/lib/metadata-language.d.ts +0 -3
  142. package/libs/api/repository/src/lib/metadata-language.d.ts.map +0 -1
  143. package/libs/util/app-config/src/lib/constants.d.ts +0 -2
  144. package/libs/util/app-config/src/lib/constants.d.ts.map +0 -1
  145. package/src/libs/api/repository/src/lib/metadata-language.ts +0 -3
@@ -1,20 +1,32 @@
1
1
  import { marker } from '@biesbjerg/ngx-translate-extract-marker'
2
2
 
3
+ /**
4
+ * Taken from https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
5
+ * Note: some languages have multiple 3-char codes, like 'fre' and 'fra'; in that case, the one to be used
6
+ * in priority is the one defined last
7
+ */
3
8
  const LANG_3_TO_2_MAPPER = {
4
9
  eng: 'en',
10
+ nld: 'nl', // duplicate for "dut"
5
11
  dut: 'nl',
12
+ fra: 'fr', // duplicate for "fre"
6
13
  fre: 'fr',
14
+ deu: 'de', // duplicate for "ger"
7
15
  ger: 'de',
8
16
  kor: 'ko',
9
17
  spa: 'es',
18
+ ces: 'cs', // duplicate for "cze"
10
19
  cze: 'cs',
11
20
  cat: 'ca',
12
21
  fin: 'fi',
22
+ isl: 'is', // duplicate for "ice"
13
23
  ice: 'is',
14
24
  ita: 'it',
15
25
  por: 'pt',
16
26
  rus: 'ru',
27
+ zho: 'zh', // duplicate for "chi"
17
28
  chi: 'zh',
29
+ slk: 'sk', // duplicate for "slo"
18
30
  slo: 'sk',
19
31
  roh: 'rm',
20
32
  ara: 'ar',
@@ -25,10 +37,12 @@ const LANG_3_TO_2_MAPPER = {
25
37
  tur: 'tr',
26
38
  arm: 'hy',
27
39
  aze: 'az',
40
+ kat: 'ka', // duplicate for "geo"
28
41
  geo: 'ka',
29
42
  ukr: 'uk',
43
+ cym: 'cy', // duplicate for "wel"
30
44
  wel: 'cy',
31
- }
45
+ } as const
32
46
 
33
47
  export const LANGUAGE_NAMES = {
34
48
  en: 'English',
@@ -58,26 +72,63 @@ export const LANGUAGE_NAMES = {
58
72
  ka: 'ქართული',
59
73
  uk: 'українська',
60
74
  wel: 'Cymraeg',
61
- }
75
+ } as const
76
+
77
+ export type LanguageCode3 = keyof typeof LANG_3_TO_2_MAPPER
78
+ export type LanguageCode2 = (typeof LANG_3_TO_2_MAPPER)[LanguageCode3]
62
79
 
63
80
  export const LANG_2_TO_3_MAPPER = Object.entries(LANG_3_TO_2_MAPPER).reduce(
64
81
  (mapperObject, langEntry) => {
65
82
  return { ...mapperObject, [langEntry[1]]: langEntry[0] }
66
83
  },
67
84
  {}
68
- )
85
+ ) as Record<LanguageCode2, LanguageCode3>
69
86
 
70
- export function getLang3FromLang2(lang2: string): string {
71
- return LANG_2_TO_3_MAPPER[lang2] ?? lang2
72
- }
87
+ /**
88
+ * This can be:
89
+ * - an ISO 639-2 language code in 3 characters (e.g. 'eng', 'fre', 'ger')
90
+ * - an ISO 639-1 language code in 2 characters (e.g. 'en', 'fr', 'de')
91
+ * - a 2-character language code with locale (e.g. 'fr_FR', 'fr_CA')
92
+ */
93
+ export type LanguageCodeLike = LanguageCode2 | LanguageCode3 | string
73
94
 
74
- export function getLang2FromLang3(lang3: string): string {
75
- return LANG_3_TO_2_MAPPER[lang3] ?? lang3
95
+ /**
96
+ * Converts a language code in any format to the ISO 639-2 format (3 characters)
97
+ * Returns the given string if the corresponding language code could not be recognized
98
+ */
99
+ export function toLang3(lang: LanguageCodeLike): LanguageCode3 | string {
100
+ if (!lang) {
101
+ // also handle falsy values just in case
102
+ return lang
103
+ }
104
+ if (lang.length === 3) {
105
+ return LANG_2_TO_3_MAPPER[LANG_3_TO_2_MAPPER[lang.toLowerCase()]] ?? lang
106
+ }
107
+ const lang2 = lang.toLowerCase().substring(0, 2)
108
+ return LANG_2_TO_3_MAPPER[lang2] ?? lang
76
109
  }
77
110
 
78
- export function getLocalizedIndexKey(lang2: string): string {
79
- const lang3 = getLang3FromLang2(lang2)
80
- return lang3 ? `lang${lang3}` : null
111
+ /**
112
+ * Converts a language code in any format to the ISO 639-1 format (2 characters)
113
+ * Returns the given string if the corresponding language code could not be recognized
114
+ */
115
+ export function toLang2(lang: LanguageCodeLike): LanguageCode2 | string {
116
+ if (!lang) {
117
+ // also handle falsy values just in case
118
+ return lang
119
+ }
120
+ if (lang.length === 3) {
121
+ return LANG_3_TO_2_MAPPER[lang.toLowerCase()] ?? lang
122
+ }
123
+ const lang2 = lang.toLowerCase().substring(0, 2)
124
+ if (lang2 in LANG_2_TO_3_MAPPER) {
125
+ return lang2
126
+ }
127
+ if (lang.match(/[a-z]{2}_[A-Z]{2}/)) {
128
+ // remove locale code even if the language code is not known
129
+ return lang2
130
+ }
131
+ return lang
81
132
  }
82
133
 
83
134
  marker('language.en')
@@ -11,15 +11,18 @@ const ValidatorMapper: TValidatorMapper = {
11
11
  title: (record) => !!record?.title,
12
12
  abstract: (record) => !!record?.abstract,
13
13
  keywords: (record) => (record?.keywords?.length ?? 0) > 0,
14
- legalConstraints: (record) => (record?.legalConstraints?.length ?? 0) > 0,
15
- contacts: (record) => !!record?.contacts?.[0]?.email,
16
- updateFrequency: (record) => !!record?.updateFrequency,
14
+ legalConstraints: (record) =>
15
+ !!(
16
+ record?.legalConstraints?.length &&
17
+ record.legalConstraints.some((c) => c?.text?.trim().length > 0)
18
+ ),
19
+ contacts: (record) =>
20
+ !!record?.contacts?.[0]?.email &&
21
+ record.contacts[0].email !== 'missing@missing.com',
22
+ updateFrequency: (record) =>
23
+ !!record?.updateFrequency && record.updateFrequency !== 'unknown',
17
24
  topics: (record) => (record?.topics?.length ?? 0) > 0,
18
25
  organisation: (record) => !!record?.contacts?.[0]?.organization?.name,
19
- capabilities: (record) =>
20
- record?.onlineResources?.some((resource) =>
21
- resource?.url?.href.toLowerCase().includes('capabilities')
22
- ),
23
26
  source: (record) => !!record?.extras?.sourcesIdentifiers,
24
27
  } as const
25
28
 
@@ -40,12 +43,12 @@ function getMappersFromKind(kind: RecordKind) {
40
43
  ]
41
44
 
42
45
  switch (kind) {
43
- case 'service':
44
- kindKeys = ['capabilities']
45
- break
46
46
  case 'reuse':
47
47
  kindKeys = ['topics', 'organisation', 'source']
48
48
  break
49
+ case 'service':
50
+ kindKeys = []
51
+ break
49
52
  case 'dataset':
50
53
  default:
51
54
  kindKeys = ['updateFrequency', 'topics', 'organisation']
@@ -1,8 +1,11 @@
1
- import { Feature, FeatureCollection, Geometry } from 'geojson'
1
+ import type { Feature, FeatureCollection, Geometry, Position } from 'geojson'
2
2
 
3
+ /**
4
+ * @returns The geometry if available, otherwise null.
5
+ */
3
6
  export function getGeometryFromGeoJSON(
4
7
  data: FeatureCollection | Feature | Geometry
5
- ): Geometry {
8
+ ): Geometry | null {
6
9
  if (data.type === 'FeatureCollection') {
7
10
  return data?.features?.[0]?.geometry || null
8
11
  }
@@ -24,3 +27,70 @@ export function getGeometryFromGeoJSON(
24
27
  }
25
28
  return null
26
29
  }
30
+
31
+ // FIXME: this type should be more generic across the project
32
+ export type BoundingBox = [number, number, number, number]
33
+
34
+ export function getGeometryBoundingBox(geometry: Geometry): BoundingBox {
35
+ // use the bounding box if specified in the GeoJSON object
36
+ if (geometry.bbox) {
37
+ return geometry.bbox.length > 4
38
+ ? [geometry.bbox[0], geometry.bbox[1], geometry.bbox[3], geometry.bbox[4]]
39
+ : (geometry.bbox as BoundingBox)
40
+ }
41
+
42
+ const coordinatesReducer = (prev: BoundingBox, coords: Position) =>
43
+ [
44
+ Math.min(prev[0], coords[0]),
45
+ Math.min(prev[1], coords[1]),
46
+ Math.max(prev[2], coords[0]),
47
+ Math.max(prev[3], coords[1]),
48
+ ] as BoundingBox
49
+ const coordinatesArrayReducer = (
50
+ prev: BoundingBox,
51
+ coordsArray: Position[]
52
+ ) => {
53
+ const bbox = coordsArray.reduce(coordinatesReducer, emptyExtent)
54
+ return [
55
+ Math.min(prev[0], bbox[0]),
56
+ Math.min(prev[1], bbox[1]),
57
+ Math.max(prev[2], bbox[2]),
58
+ Math.max(prev[3], bbox[3]),
59
+ ] as BoundingBox
60
+ }
61
+ const emptyExtent = [Infinity, Infinity, -Infinity, -Infinity] as BoundingBox
62
+
63
+ switch (geometry.type) {
64
+ case 'MultiPolygon':
65
+ return geometry.coordinates.reduce((prev, polygonCoords) => {
66
+ const bbox = polygonCoords.reduce(coordinatesArrayReducer, emptyExtent)
67
+ return [
68
+ Math.min(prev[0], bbox[0]),
69
+ Math.min(prev[1], bbox[1]),
70
+ Math.max(prev[2], bbox[2]),
71
+ Math.max(prev[3], bbox[3]),
72
+ ] as BoundingBox
73
+ }, emptyExtent)
74
+ case 'GeometryCollection':
75
+ return geometry.geometries.reduce((prev, geom) => {
76
+ const bbox = getGeometryBoundingBox(geom)
77
+ return [
78
+ Math.min(prev[0], bbox[0]),
79
+ Math.min(prev[1], bbox[1]),
80
+ Math.max(prev[2], bbox[2]),
81
+ Math.max(prev[3], bbox[3]),
82
+ ] as BoundingBox
83
+ }, emptyExtent)
84
+ case 'Polygon':
85
+ case 'MultiLineString':
86
+ return geometry.coordinates.reduce(coordinatesArrayReducer, emptyExtent)
87
+ case 'LineString':
88
+ case 'MultiPoint':
89
+ return geometry.coordinates.reduce<BoundingBox>(
90
+ coordinatesReducer,
91
+ emptyExtent
92
+ )
93
+ case 'Point':
94
+ return coordinatesReducer(emptyExtent, geometry.coordinates)
95
+ }
96
+ }
@@ -3,7 +3,7 @@
3
3
  "Add Layer As": "",
4
4
  "Enter to search": "",
5
5
  "button.login": "",
6
- "catalog.figures.datasets": "{count, plural, =0{Datensätze} one{Datensatz} other{Datensätze}}",
6
+ "catalog.figures.datasets": "{count, plural, =0{Ressource} one{Ressource} other{Ressourcen}}",
7
7
  "catalog.figures.organizations": "{count, plural, =0{Organisationen} one{Organisation} other{Organisationen}}",
8
8
  "chart.aggregation.average": "Durchschnitt",
9
9
  "chart.aggregation.count": "Anzahl",
@@ -184,6 +184,26 @@
184
184
  "editor.record.form.field.topics": "Kategorien",
185
185
  "editor.record.form.field.uniqueIdentifier": "Eindeutige Kennung (ID)",
186
186
  "editor.record.form.field.updateFrequency": "Aktualisierungshäufigkeit",
187
+ "editor.record.form.inspire.biota": "",
188
+ "editor.record.form.inspire.boundaries": "",
189
+ "editor.record.form.inspire.climatology": "",
190
+ "editor.record.form.inspire.economy": "",
191
+ "editor.record.form.inspire.elevation": "",
192
+ "editor.record.form.inspire.environnement": "",
193
+ "editor.record.form.inspire.farming": "",
194
+ "editor.record.form.inspire.geoscientific": "",
195
+ "editor.record.form.inspire.health": "",
196
+ "editor.record.form.inspire.imagery": "",
197
+ "editor.record.form.inspire.intelligence": "",
198
+ "editor.record.form.inspire.location": "",
199
+ "editor.record.form.inspire.oceans": "",
200
+ "editor.record.form.inspire.placeholder": "",
201
+ "editor.record.form.inspire.planning": "",
202
+ "editor.record.form.inspire.society": "",
203
+ "editor.record.form.inspire.structure": "",
204
+ "editor.record.form.inspire.transportation": "",
205
+ "editor.record.form.inspire.utilities": "",
206
+ "editor.record.form.inspire.waters": "",
187
207
  "editor.record.form.keywords.place.placeholder": "",
188
208
  "editor.record.form.keywords.place.withoutExtent": "",
189
209
  "editor.record.form.keywords.placeholder": "",
@@ -219,6 +239,8 @@
219
239
  "editor.record.form.section.dataManagers.description": "",
220
240
  "editor.record.form.section.dataManagers.label": "",
221
241
  "editor.record.form.section.geographicalCoverage.label": "",
242
+ "editor.record.form.section.inspire.description": "",
243
+ "editor.record.form.section.inspire.label": "",
222
244
  "editor.record.form.section.metadataPointOfContact.description": "",
223
245
  "editor.record.form.section.metadataPointOfContact.label": "",
224
246
  "editor.record.form.section.useAndAccessConditions.label": "",
@@ -367,10 +389,10 @@
367
389
  "organisations.sortBy.nameDesc": "Name Z → A",
368
390
  "organisations.sortBy.recordCountAsc": "Veröffentlichungen 0 → 9",
369
391
  "organisations.sortBy.recordCountDesc": "Veröffentlichungen 9 → 0",
370
- "organization.details.lastPublishedDatasets": "",
392
+ "organization.details.lastPublishedDatasets": "Zuletzt veröffentlichte Ressourcen",
371
393
  "organization.details.lastPublishedDatasets.searchAllButton": "",
372
394
  "organization.details.mailContact": "",
373
- "organization.header.recordCount": "{count, plural, =0{} one{} other{}}",
395
+ "organization.header.recordCount": "{count, plural, =0{Veröffentlichung} one{Veröffentlichung} other{Veröffentlichungen}}",
374
396
  "pagination.nextPage": "Nächste Seite",
375
397
  "pagination.page": "Seite",
376
398
  "pagination.pageOf": "von",
@@ -390,6 +412,16 @@
390
412
  "record.kind.service": "",
391
413
  "record.metadata.about": "Beschreibung",
392
414
  "record.metadata.api": "API",
415
+ "record.metadata.api.accessServiceProtocol.GPFDL": "",
416
+ "record.metadata.api.accessServiceProtocol.esriRest": "",
417
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "",
418
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
419
+ "record.metadata.api.accessServiceProtocol.other": "",
420
+ "record.metadata.api.accessServiceProtocol.tms": "",
421
+ "record.metadata.api.accessServiceProtocol.wfs": "",
422
+ "record.metadata.api.accessServiceProtocol.wms": "",
423
+ "record.metadata.api.accessServiceProtocol.wmts": "",
424
+ "record.metadata.api.accessServiceProtocol.wps": "",
393
425
  "record.metadata.api.form.closeButton": "Schließen",
394
426
  "record.metadata.api.form.closeForm": "Formular schließen",
395
427
  "record.metadata.api.form.create": "Ihre Anfrage erstellen",
@@ -451,12 +483,12 @@
451
483
  "record.metadata.publication": "Veröffentlichungsdatum",
452
484
  "record.metadata.publications": "{count, plural, =0{Veröffentlichungsdatum} one{Veröffentlichungsdatum} other{Veröffentlichungen}}",
453
485
  "record.metadata.quality": "Metadatenqualität",
486
+ "record.metadata.quality.abstract.failed": "Beschreibung nicht angegeben",
487
+ "record.metadata.quality.abstract.success": "Beschreibung angegeben",
454
488
  "record.metadata.quality.capabilities.failed": "",
455
- "record.metadata.quality.capabilities.success": "",
456
- "record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
457
- "record.metadata.quality.contact.success": "Kontakt angegeben",
458
- "record.metadata.quality.description.failed": "Beschreibung nicht angegeben",
459
- "record.metadata.quality.description.success": "Beschreibung angegeben",
489
+ "record.metadata.quality.capabilities.success": "Kontakt angegeben",
490
+ "record.metadata.quality.contacts.failed": "Kontakt nicht angegeben",
491
+ "record.metadata.quality.contacts.success": "",
460
492
  "record.metadata.quality.details": "Details",
461
493
  "record.metadata.quality.keywords.failed": "Schlagwörter nicht angegeben",
462
494
  "record.metadata.quality.keywords.success": "Schlagwörter angegeben",
@@ -468,8 +500,8 @@
468
500
  "record.metadata.quality.source.success": "",
469
501
  "record.metadata.quality.title.failed": "Titel nicht angegeben",
470
502
  "record.metadata.quality.title.success": "Titel angegeben",
471
- "record.metadata.quality.topic.failed": "Thema nicht angegeben",
472
- "record.metadata.quality.topic.success": "Thema angegeben",
503
+ "record.metadata.quality.topics.failed": "Thema nicht angegeben",
504
+ "record.metadata.quality.topics.success": "Thema angegeben",
473
505
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
474
506
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
475
507
  "record.metadata.related": "Entdecken Sie den Katalog",
@@ -500,18 +532,18 @@
500
532
  "record.tab.chart": "Diagramm",
501
533
  "record.tab.data": "Tabelle",
502
534
  "record.tab.map": "Karte",
503
- "record.was.created.time": "erstellte diesen Datensatz {time}",
535
+ "record.was.created.time": "erstellte diesen Ressource {time}",
504
536
  "records": "Datensätze",
505
537
  "results.layout.selectOne": "Layout auswählen",
506
- "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
538
+ "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Ressource.} one{1 } other{{displayed} }} {hits, plural, other{von insgesamt {hits} angezeigt.}}",
507
539
  "results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie es mit anderen Worten</li><li>Beschränken Sie die Suchwörter</li></ul>",
508
- "results.records.hits.found": "{hits, plural, =0{Keine Dokumente entsprechen der angegebenen Suche.} one{1 Datensatz gefunden.} other{{hits} Datensätze gefunden.}}",
540
+ "results.records.hits.found": "{hits, plural, =0{Keine Ressource entsprechen der angegebenen Suche.} one{1 Ressource gefunden.} other{{hits} Ressourcen gefunden.}}",
509
541
  "results.records.hits.selected": "{ amount } ausgewählt",
510
542
  "results.showMore": "Mehr Ergebnisse anzeigen...",
511
543
  "results.sortBy.changeDate": "",
512
544
  "results.sortBy.dateStamp": "Neueste",
513
545
  "results.sortBy.popularity": "Beliebtheit",
514
- "results.sortBy.qualityScore": "Qualitätsbewertung",
546
+ "results.sortBy.qualityScore": "Fertigstellungsanzeige",
515
547
  "results.sortBy.relevancy": "Relevanz",
516
548
  "reuse.metadata.access": "",
517
549
  "search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
@@ -520,7 +552,7 @@
520
552
  "search.error.organizationNotFound": "",
521
553
  "search.error.receivedError": "Ein Fehler ist aufgetreten",
522
554
  "search.error.recordHasnolink": "",
523
- "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
555
+ "search.error.recordNotFound": "Die Ressource mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
524
556
  "search.field.any.placeholder": "Suche im katalog ...",
525
557
  "search.field.sortBy": "Sortieren nach:",
526
558
  "search.filter.into.feature.catalog": "",
@@ -547,10 +579,10 @@
547
579
  "search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
548
580
  "search.filters.maximize": "Erweitern",
549
581
  "search.filters.minimize": "Minimieren",
550
- "search.filters.myRecords": "Nur meine Datensätze anzeigen",
551
- "search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Datensätze angezeigt; Datensätze, die von anderen erstellt wurden, werden nicht angezeigt.",
582
+ "search.filters.myRecords": "Nur meine Ressourcen anzeigen",
583
+ "search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Ressourcen angezeigt; Ressourcen, die von anderen erstellt wurden, werden nicht angezeigt.",
552
584
  "search.filters.organization": "",
553
- "search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
585
+ "search.filters.otherRecords": "Ressourcen von einer anderen Person anzeigen",
554
586
  "search.filters.producerOrg": "",
555
587
  "search.filters.publicationYear": "Veröffentlichungsjahr",
556
588
  "search.filters.publisherOrg": "",
@@ -565,8 +597,8 @@
565
597
  "search.filters.summaryLabel.user": "Geändert von: ",
566
598
  "search.filters.title": "Ergebnisse filtern",
567
599
  "search.filters.topic": "Themen",
568
- "search.filters.useSpatialFilter": "Zuerst Datensätze im Interessenbereich anzeigen",
569
- "search.filters.useSpatialFilterHelp": "Wenn diese Option aktiviert ist, werden Datensätze im Bereich des Katalogs zuerst angezeigt. Datensätze außerhalb dieses Bereichs werden nicht angezeigt.",
600
+ "search.filters.useSpatialFilter": "Zuerst Ressourcen im Interessenbereich anzeigen",
601
+ "search.filters.useSpatialFilterHelp": "Wenn diese Option aktiviert ist, werden Ressourcen im Bereich des Katalogs zuerst angezeigt. Ressourcen außerhalb dieses Bereichs werden nicht angezeigt.",
570
602
  "search.filters.user": "Editor",
571
603
  "service.metadata.capabilities": "",
572
604
  "service.metadata.capabilities.abstract": "",
@@ -3,7 +3,7 @@
3
3
  "Add Layer As": "",
4
4
  "Enter to search": "",
5
5
  "button.login": "Log in",
6
- "catalog.figures.datasets": "{count, plural, =0{datasets} one{dataset} other{datasets}}",
6
+ "catalog.figures.datasets": "{count, plural, =0{record} one{record} other{records}}",
7
7
  "catalog.figures.organizations": "{count, plural, =0{organizations} one{organization} other{organizations}}",
8
8
  "chart.aggregation.average": "average",
9
9
  "chart.aggregation.count": "count",
@@ -184,6 +184,26 @@
184
184
  "editor.record.form.field.topics": "Categories",
185
185
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
186
186
  "editor.record.form.field.updateFrequency": "Update frequency",
187
+ "editor.record.form.inspire.biota": "Biota",
188
+ "editor.record.form.inspire.boundaries": "Boundaries",
189
+ "editor.record.form.inspire.climatology": "Climatology / Meteorology / Atmosphere",
190
+ "editor.record.form.inspire.economy": "Economy",
191
+ "editor.record.form.inspire.elevation": "Elevation",
192
+ "editor.record.form.inspire.environnement": "Environnement",
193
+ "editor.record.form.inspire.farming": "Farming",
194
+ "editor.record.form.inspire.geoscientific": "Geoscientific Information",
195
+ "editor.record.form.inspire.health": "Health",
196
+ "editor.record.form.inspire.imagery": "Imagery / Base Maps / Earth Cover",
197
+ "editor.record.form.inspire.intelligence": "Intelligence / Military",
198
+ "editor.record.form.inspire.location": "Location",
199
+ "editor.record.form.inspire.oceans": "Oceans",
200
+ "editor.record.form.inspire.placeholder": "Select an INSPIRE theme",
201
+ "editor.record.form.inspire.planning": "Planning / Cadastre",
202
+ "editor.record.form.inspire.society": "Society",
203
+ "editor.record.form.inspire.structure": "Structure",
204
+ "editor.record.form.inspire.transportation": "Transportation",
205
+ "editor.record.form.inspire.utilities": "Utilities / Communication",
206
+ "editor.record.form.inspire.waters": "Inland Waters",
187
207
  "editor.record.form.keywords.place.placeholder": "Search for place keywords",
188
208
  "editor.record.form.keywords.place.withoutExtent": "This keyword is not associated with any geographical extent",
189
209
  "editor.record.form.keywords.placeholder": "Select a keyword",
@@ -219,6 +239,8 @@
219
239
  "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data",
220
240
  "editor.record.form.section.dataManagers.label": "Data managers",
221
241
  "editor.record.form.section.geographicalCoverage.label": "Geographical coverage",
242
+ "editor.record.form.section.inspire.description": "Appropriate INSPIRE themes help users find the dataset",
243
+ "editor.record.form.section.inspire.label": "INSPIRE themes",
222
244
  "editor.record.form.section.metadataPointOfContact.description": "This information concerns the metadata",
223
245
  "editor.record.form.section.metadataPointOfContact.label": "Metadata point of contact",
224
246
  "editor.record.form.section.useAndAccessConditions.label": "Use and access conditions",
@@ -367,10 +389,10 @@
367
389
  "organisations.sortBy.nameDesc": "Name Z → A",
368
390
  "organisations.sortBy.recordCountAsc": "Publications 0 → 9",
369
391
  "organisations.sortBy.recordCountDesc": "Publications 9 → 0",
370
- "organization.details.lastPublishedDatasets": "Last published datasets",
392
+ "organization.details.lastPublishedDatasets": "Last published records",
371
393
  "organization.details.lastPublishedDatasets.searchAllButton": "Search all",
372
394
  "organization.details.mailContact": "Contact by email",
373
- "organization.header.recordCount": "{count, plural, =0{data} one{data} other{datas}}",
395
+ "organization.header.recordCount": "{count, plural, =0{publication} one{publication} other{publications}}",
374
396
  "pagination.nextPage": "Next page",
375
397
  "pagination.page": "Page",
376
398
  "pagination.pageOf": "of",
@@ -390,6 +412,16 @@
390
412
  "record.kind.service": "Service",
391
413
  "record.metadata.about": "Description",
392
414
  "record.metadata.api": "API",
415
+ "record.metadata.api.accessServiceProtocol.GPFDL": "GPFDL",
416
+ "record.metadata.api.accessServiceProtocol.esriRest": "esriRest",
417
+ "record.metadata.api.accessServiceProtocol.maplibre-style": "maplibre-style",
418
+ "record.metadata.api.accessServiceProtocol.ogcFeatures": "ogcFeatures",
419
+ "record.metadata.api.accessServiceProtocol.other": "other",
420
+ "record.metadata.api.accessServiceProtocol.tms": "tms",
421
+ "record.metadata.api.accessServiceProtocol.wfs": "wfs",
422
+ "record.metadata.api.accessServiceProtocol.wms": "wms",
423
+ "record.metadata.api.accessServiceProtocol.wmts": "wmts",
424
+ "record.metadata.api.accessServiceProtocol.wps": "wps",
393
425
  "record.metadata.api.form.closeButton": "Close",
394
426
  "record.metadata.api.form.closeForm": "Close the form",
395
427
  "record.metadata.api.form.create": "Create your request",
@@ -451,12 +483,12 @@
451
483
  "record.metadata.publication": "Date of publication",
452
484
  "record.metadata.publications": "{count, plural, =0{publication} one{publication} other{publications}}",
453
485
  "record.metadata.quality": "Metadata Quality",
486
+ "record.metadata.quality.abstract.failed": "Description is not specified",
487
+ "record.metadata.quality.abstract.success": "Description is specified",
454
488
  "record.metadata.quality.capabilities.failed": "Capabilities URL is not specified",
455
489
  "record.metadata.quality.capabilities.success": "Capabilities URL is specified",
456
- "record.metadata.quality.contact.failed": "Contact is not specified",
457
- "record.metadata.quality.contact.success": "Contact is specified",
458
- "record.metadata.quality.description.failed": "Description is not specified",
459
- "record.metadata.quality.description.success": "Description is specified",
490
+ "record.metadata.quality.contacts.failed": "Contact is not specified",
491
+ "record.metadata.quality.contacts.success": "Contact is specified",
460
492
  "record.metadata.quality.details": "Details",
461
493
  "record.metadata.quality.keywords.failed": "Keywords are not specified",
462
494
  "record.metadata.quality.keywords.success": "Keywords are specified",
@@ -468,8 +500,8 @@
468
500
  "record.metadata.quality.source.success": "A source dataset is specified",
469
501
  "record.metadata.quality.title.failed": "Title is not specified",
470
502
  "record.metadata.quality.title.success": "Title is specified",
471
- "record.metadata.quality.topic.failed": "Topic is not specified",
472
- "record.metadata.quality.topic.success": "Topic is specified",
503
+ "record.metadata.quality.topics.failed": "Topic is not specified",
504
+ "record.metadata.quality.topics.success": "Topic is specified",
473
505
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
474
506
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
475
507
  "record.metadata.related": "Explore the catalog",
@@ -500,27 +532,27 @@
500
532
  "record.tab.chart": "Chart",
501
533
  "record.tab.data": "Table",
502
534
  "record.tab.map": "Map",
503
- "record.was.created.time": "created this dataset {time}",
535
+ "record.was.created.time": "created this record {time}",
504
536
  "records": "datasets",
505
537
  "results.layout.selectOne": "Results layout",
506
- "results.records.hits.displayedOn": "{displayed, plural, =0{No dataset.} one{1 } other{{displayed} }} {hits, plural, other{displayed on {hits} total.}}",
538
+ "results.records.hits.displayedOn": "{displayed, plural, =0{No record.} one{1 } other{{displayed} }} {hits, plural, other{displayed on {hits} total.}}",
507
539
  "results.records.hits.empty.help.html": "Suggestions: <ul class='list-disc list-inside'><li>Try other words</li><li>Specify fewer words</li></ul>",
508
- "results.records.hits.found": "{hits, plural, =0{No datasets match the specified search.} one{1 dataset found.} other{{hits} datasets found.}}",
540
+ "results.records.hits.found": "{hits, plural, =0{No record match the specified search.} one{1 record found.} other{{hits} records found.}}",
509
541
  "results.records.hits.selected": "{ amount } selected",
510
542
  "results.showMore": "Show more results...",
511
543
  "results.sortBy.changeDate": "Last modification",
512
544
  "results.sortBy.dateStamp": "Newest",
513
545
  "results.sortBy.popularity": "Popularity",
514
- "results.sortBy.qualityScore": "Quality score",
546
+ "results.sortBy.qualityScore": "Completion score",
515
547
  "results.sortBy.relevancy": "Relevancy",
516
548
  "reuse.metadata.access": "Access the reuse",
517
549
  "search.autocomplete.error": "Suggestions could not be fetched:",
518
550
  "search.error.couldNotReachApi": "The API could not be reached",
519
- "search.error.organizationHasNoDataset": "This organization has no dataset yet.",
551
+ "search.error.organizationHasNoDataset": "This organization has no records yet.",
520
552
  "search.error.organizationNotFound": "This organization could not be found.",
521
553
  "search.error.receivedError": "An error was received",
522
- "search.error.recordHasnolink": "This dataset currently has no link yet, please come back later.",
523
- "search.error.recordNotFound": "The dataset with identifier \"{ id }\" could not be found.",
554
+ "search.error.recordHasnolink": "This record currently has no link yet, please come back later.",
555
+ "search.error.recordNotFound": "The record with identifier \"{ id }\" could not be found.",
524
556
  "search.field.any.placeholder": "Search in the catalog ...",
525
557
  "search.field.sortBy": "Sort by:",
526
558
  "search.filter.into.feature.catalog": "Search a term",
@@ -547,10 +579,10 @@
547
579
  "search.filters.license.unknown": "Unknown or absent",
548
580
  "search.filters.maximize": "Expand",
549
581
  "search.filters.minimize": "Minimize",
550
- "search.filters.myRecords": "Show only my datasets",
551
- "search.filters.myRecordsHelp": "When this is enabled, only your datasets are shown; datasets created by others will not show up.",
582
+ "search.filters.myRecords": "Show only my records",
583
+ "search.filters.myRecordsHelp": "When this is enabled, only your records are shown; records created by others will not show up.",
552
584
  "search.filters.organization": "Organization",
553
- "search.filters.otherRecords": "Showing datasets from another person",
585
+ "search.filters.otherRecords": "Showing records from another person",
554
586
  "search.filters.producerOrg": "Producer",
555
587
  "search.filters.publicationYear": "Publication year",
556
588
  "search.filters.publisherOrg": "Publisher",
@@ -565,8 +597,8 @@
565
597
  "search.filters.summaryLabel.user": "Editor: ",
566
598
  "search.filters.title": "Filter your results",
567
599
  "search.filters.topic": "Topics",
568
- "search.filters.useSpatialFilter": "Show datasets in the area of interest first",
569
- "search.filters.useSpatialFilterHelp": "When this is enabled, datasets situated in the catalog's area of interest are shown first; records outside of this area will not show up.",
600
+ "search.filters.useSpatialFilter": "Show records in the area of interest first",
601
+ "search.filters.useSpatialFilterHelp": "When this is enabled, records situated in the catalog's area of interest are shown first; records outside of this area will not show up.",
570
602
  "search.filters.user": "Editor",
571
603
  "service.metadata.capabilities": "Technical information",
572
604
  "service.metadata.capabilities.abstract": "Abstract",