geonetwork-ui 2.4.2-dev.ff0aab388 → 2.5.0-dev.22c177ea1

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 (192) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +2 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +31 -16
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +2 -2
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +18 -16
  7. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +6 -14
  8. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +12 -17
  9. package/esm2022/libs/feature/editor/src/lib/components/contact-card/contact-card.component.mjs +3 -3
  10. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +3 -3
  11. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +3 -4
  12. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +3 -3
  13. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +31 -40
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +3 -3
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +3 -3
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +3 -3
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +8 -9
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +5 -25
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +5 -4
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +3 -3
  21. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +11 -11
  22. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +10 -2
  23. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +6 -3
  24. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +3 -3
  25. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +6 -7
  26. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +6 -3
  27. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +46 -1
  28. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +3 -2
  29. package/esm2022/libs/ui/dataviz/src/index.mjs +3 -3
  30. package/esm2022/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.mjs +51 -0
  31. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +133 -0
  32. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.data.source.mjs +24 -0
  33. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.mjs +82 -0
  34. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +18 -10
  35. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +3 -1
  36. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -13
  37. package/esm2022/libs/util/data-fetcher/src/index.mjs +3 -1
  38. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -1
  39. package/esm2022/libs/util/data-fetcher/src/lib/headers.mjs +3 -2
  40. package/esm2022/libs/util/data-fetcher/src/lib/model.mjs +8 -3
  41. package/esm2022/libs/util/data-fetcher/src/lib/readers/wfs.mjs +97 -0
  42. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +3 -3
  43. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +41 -0
  44. package/esm2022/libs/util/shared/src/lib/services/index.mjs +2 -1
  45. package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +4 -4
  46. package/esm2022/translations/de.json +20 -5
  47. package/esm2022/translations/en.json +29 -14
  48. package/esm2022/translations/es.json +20 -5
  49. package/esm2022/translations/fr.json +30 -15
  50. package/esm2022/translations/it.json +39 -26
  51. package/esm2022/translations/nl.json +20 -5
  52. package/esm2022/translations/pt.json +20 -5
  53. package/fesm2022/geonetwork-ui.mjs +1004 -545
  54. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  57. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +2 -1
  58. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  59. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  60. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts +7 -9
  61. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts.map +1 -1
  62. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  63. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +3 -6
  64. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts +0 -1
  66. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +7 -14
  68. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  69. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +2 -2
  70. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  71. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +1 -6
  72. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  73. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  74. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts +3 -3
  75. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts.map +1 -1
  76. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  77. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +2 -1
  78. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  79. package/libs/feature/record/src/lib/feature-record.module.d.ts +2 -2
  80. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  81. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +2 -1
  82. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  83. package/libs/feature/search/src/lib/utils/service/fields.d.ts +10 -0
  84. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  85. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  86. package/libs/ui/dataviz/src/index.d.ts +2 -2
  87. package/libs/ui/dataviz/src/index.d.ts.map +1 -1
  88. package/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.d.ts +14 -0
  89. package/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.d.ts.map +1 -0
  90. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +45 -0
  91. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -0
  92. package/libs/ui/dataviz/src/lib/data-table/data-table.data.source.d.ts +12 -0
  93. package/libs/ui/dataviz/src/lib/data-table/data-table.data.source.d.ts.map +1 -0
  94. package/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.d.ts +10 -0
  95. package/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.d.ts.map +1 -0
  96. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +5 -0
  97. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  98. package/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.d.ts.map +1 -1
  99. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -2
  100. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  101. package/libs/util/data-fetcher/src/index.d.ts +3 -1
  102. package/libs/util/data-fetcher/src/index.d.ts.map +1 -1
  103. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +3 -2
  104. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  105. package/libs/util/data-fetcher/src/lib/headers.d.ts.map +1 -1
  106. package/libs/util/data-fetcher/src/lib/model.d.ts +2 -2
  107. package/libs/util/data-fetcher/src/lib/model.d.ts.map +1 -1
  108. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +21 -0
  109. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -0
  110. package/libs/util/shared/src/lib/services/date.service.d.ts +13 -0
  111. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -0
  112. package/libs/util/shared/src/lib/services/index.d.ts +1 -0
  113. package/libs/util/shared/src/lib/services/index.d.ts.map +1 -1
  114. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +2 -1
  115. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -1
  116. package/package.json +1 -1
  117. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -0
  118. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +1 -2
  119. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +3 -0
  120. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +33 -16
  121. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +1 -5
  122. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +1 -1
  123. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.html +3 -3
  124. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.ts +17 -15
  125. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +6 -14
  126. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +4 -3
  127. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +9 -18
  128. package/src/libs/feature/editor/src/lib/components/contact-card/contact-card.component.html +1 -1
  129. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  130. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.html +4 -1
  131. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +0 -4
  132. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +2 -2
  133. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +8 -8
  134. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +32 -45
  135. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +1 -1
  136. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +3 -1
  137. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +1 -1
  138. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +0 -1
  139. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +6 -6
  140. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +24 -17
  141. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +2 -27
  142. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +1 -1
  143. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +2 -1
  144. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +1 -1
  145. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.ts +3 -4
  146. package/src/libs/feature/editor/src/lib/fields.config.ts +9 -1
  147. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -1
  148. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +1 -0
  149. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +1 -1
  150. package/src/libs/feature/record/src/lib/feature-record.module.ts +6 -4
  151. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +1 -0
  152. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +1 -0
  153. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +2 -0
  154. package/src/libs/feature/search/src/lib/utils/service/fields.ts +55 -0
  155. package/src/libs/ui/dataviz/src/index.ts +2 -2
  156. package/src/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.ts +52 -0
  157. package/src/libs/ui/dataviz/src/lib/{table/table.component.css → data-table/data-table.component.css} +4 -0
  158. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +67 -0
  159. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +173 -0
  160. package/src/libs/ui/dataviz/src/lib/data-table/data-table.data.source.ts +33 -0
  161. package/src/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.ts +84 -0
  162. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +3 -3
  163. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +12 -2
  164. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.ts +3 -0
  165. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +1 -1
  166. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +4 -2
  167. package/src/libs/util/data-fetcher/src/index.ts +3 -0
  168. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +9 -1
  169. package/src/libs/util/data-fetcher/src/lib/headers.ts +4 -3
  170. package/src/libs/util/data-fetcher/src/lib/model.ts +7 -2
  171. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +134 -0
  172. package/src/libs/util/data-fetcher/src/lib/utils.ts +2 -2
  173. package/src/libs/util/shared/src/lib/services/date.service.ts +45 -0
  174. package/src/libs/util/shared/src/lib/services/index.ts +1 -0
  175. package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +6 -3
  176. package/translations/de.json +20 -5
  177. package/translations/en.json +29 -14
  178. package/translations/es.json +20 -5
  179. package/translations/fr.json +30 -15
  180. package/translations/it.json +39 -26
  181. package/translations/nl.json +20 -5
  182. package/translations/pt.json +20 -5
  183. package/translations/sk.json +21 -6
  184. package/esm2022/libs/ui/dataviz/src/lib/table/table.component.mjs +0 -61
  185. package/esm2022/libs/ui/dataviz/src/lib/table/table.fixtures.mjs +0 -40
  186. package/libs/ui/dataviz/src/lib/table/table.component.d.ts +0 -29
  187. package/libs/ui/dataviz/src/lib/table/table.component.d.ts.map +0 -1
  188. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts +0 -11
  189. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts.map +0 -1
  190. package/src/libs/ui/dataviz/src/lib/table/table.component.html +0 -40
  191. package/src/libs/ui/dataviz/src/lib/table/table.component.ts +0 -80
  192. package/src/libs/ui/dataviz/src/lib/table/table.fixtures.ts +0 -40
@@ -5,6 +5,9 @@ export {
5
5
  DataItem,
6
6
  FetchError,
7
7
  FieldAggregation,
8
+ PropertyInfo,
8
9
  } from './lib/model'
9
10
  export { getJsonDataItemsProxy } from './lib/utils'
10
11
  export { BaseReader } from './lib/readers/base'
12
+ export { BaseFileReader } from './lib/readers/base-file'
13
+ export { GeojsonReader } from './lib/readers/geojson'
@@ -8,11 +8,16 @@ import { inferDatasetType } from './utils'
8
8
  import { BaseReader } from './readers/base'
9
9
  import { GmlReader } from './readers/gml'
10
10
  import { WfsVersion } from '@camptocamp/ogc-client'
11
+ import { WfsReader } from './readers/wfs'
11
12
 
12
13
  export async function openDataset(
13
14
  url: string,
14
15
  typeHint?: SupportedType,
15
- options?: { namespace: string; wfsVersion: WfsVersion }
16
+ options?: {
17
+ namespace?: string
18
+ wfsVersion?: WfsVersion
19
+ wfsFeatureType?: string
20
+ }
16
21
  ): Promise<BaseReader> {
17
22
  const fileType = await inferDatasetType(url, typeHint)
18
23
  let reader: BaseReader
@@ -33,6 +38,9 @@ export async function openDataset(
33
38
  case 'gml':
34
39
  reader = new GmlReader(url, options.namespace, options.wfsVersion)
35
40
  break
41
+ case 'wfs':
42
+ reader = await WfsReader.createReader(url, options.wfsFeatureType)
43
+ break
36
44
  }
37
45
  reader.load()
38
46
  return reader
@@ -5,9 +5,10 @@ export function parseHeaders(httpHeaders: Headers): DatasetHeaders {
5
5
  if (httpHeaders.has('Content-Type')) {
6
6
  result.mimeType = httpHeaders.get('Content-Type').split(';')[0]
7
7
  const supported =
8
- SupportedTypes.filter(
9
- (type) => AllMimeTypes[type].indexOf(result.mimeType as never) > -1
10
- )[0] || null
8
+ SupportedTypes.filter((type) => type !== 'wfs') // Ignore wfs type as it is not a file type
9
+ .filter(
10
+ (type) => AllMimeTypes[type].indexOf(result.mimeType as never) > -1
11
+ )[0] || null
11
12
  if (supported !== null) result.supportedType = supported
12
13
  }
13
14
  if (httpHeaders.has('Content-Length')) {
@@ -13,8 +13,12 @@ export class FetchError {
13
13
  ) {
14
14
  this.message = `An error happened in the data fetcher, type: ${type}, info: ${info}`
15
15
  }
16
- static http(code: number) {
17
- return new FetchError('http', '', code)
16
+ static http(code: number, body?: string) {
17
+ const info = body
18
+ ? `Error ${code}
19
+ ${body}`
20
+ : `${code}`
21
+ return new FetchError('http', info, code)
18
22
  }
19
23
  static corsOrNetwork(message: string) {
20
24
  return new FetchError('network', message, 0)
@@ -60,6 +64,7 @@ export const SupportedTypes = [
60
64
  'geojson',
61
65
  'excel',
62
66
  'gml',
67
+ 'wfs',
63
68
  ] as const
64
69
  export type SupportedType = (typeof SupportedTypes)[number]
65
70
 
@@ -0,0 +1,134 @@
1
+ import { WfsEndpoint, WfsVersion } from '@camptocamp/ogc-client'
2
+ import { DataItem, DatasetInfo, PropertyInfo } from '../model'
3
+ import { fetchDataAsText } from '../utils'
4
+ import { BaseReader } from './base'
5
+ import { GmlReader, parseGml } from './gml'
6
+ import { GeojsonReader, parseGeojson } from './geojson'
7
+ import { marker } from '@biesbjerg/ngx-translate-extract-marker'
8
+
9
+ export class WfsReader extends BaseReader {
10
+ endpoint: WfsEndpoint
11
+ featureTypeName: string
12
+ version: WfsVersion
13
+
14
+ constructor(url: string, wfsEndpoint: WfsEndpoint, featureTypeName: string) {
15
+ super(url)
16
+ this.endpoint = wfsEndpoint
17
+ this.featureTypeName = featureTypeName
18
+ this.version = this.endpoint.getVersion()
19
+ }
20
+
21
+ get properties(): Promise<PropertyInfo[]> {
22
+ return this.endpoint
23
+ .getFeatureTypeFull(this.featureTypeName)
24
+ .then((featureType) =>
25
+ Object.keys(featureType.properties).map((prop) => {
26
+ const originalType = featureType.properties[prop]
27
+ const type =
28
+ originalType === 'float' || originalType === 'integer'
29
+ ? 'number'
30
+ : (originalType as PropertyInfo['type']) // FIXME: ogc-client typing is incorrect, should be a string union
31
+ return {
32
+ name: prop,
33
+ label: prop,
34
+ type,
35
+ }
36
+ })
37
+ )
38
+ }
39
+
40
+ get info(): Promise<DatasetInfo> {
41
+ return this.endpoint.getFeatureTypeFull(this.featureTypeName).then(
42
+ (result) =>
43
+ ({
44
+ itemsCount: result.objectCount,
45
+ }) as DatasetInfo
46
+ )
47
+ }
48
+
49
+ static async createReader(wfsUrlEndpoint: string, featureTypeName?: string) {
50
+ const wfsEndpoint = await new WfsEndpoint(wfsUrlEndpoint).isReady()
51
+ const featureTypes = wfsEndpoint.getFeatureTypes()
52
+ const featureType = wfsEndpoint.getFeatureTypeSummary(
53
+ featureTypes.length === 1 && !featureTypeName
54
+ ? featureTypes[0].name
55
+ : featureTypeName
56
+ )
57
+ if (!featureType) {
58
+ throw new Error('wfs.featuretype.notfound')
59
+ }
60
+
61
+ if (wfsEndpoint.supportsStartIndex()) {
62
+ return new WfsReader(wfsUrlEndpoint, wfsEndpoint, featureType.name)
63
+ } else if (wfsEndpoint.supportsJson(featureType.name)) {
64
+ return new GeojsonReader(
65
+ wfsEndpoint.getFeatureUrl(featureType.name, {
66
+ asJson: true,
67
+ outputCrs: 'EPSG:4326',
68
+ })
69
+ )
70
+ } else {
71
+ if (
72
+ featureType.outputFormats.find((f) =>
73
+ f.toLowerCase().includes('gml')
74
+ ) &&
75
+ (featureType.defaultCrs === 'EPSG:4326' ||
76
+ featureType.otherCrs?.includes('EPSG:4326'))
77
+ ) {
78
+ return new GmlReader(
79
+ wfsEndpoint.getFeatureUrl(featureType.name, {
80
+ outputFormat: featureType.outputFormats.find((f) =>
81
+ f.toLowerCase().includes('gml')
82
+ ),
83
+ outputCrs: 'EPSG:4326',
84
+ }),
85
+ featureType.name,
86
+ wfsEndpoint.getVersion()
87
+ )
88
+ }
89
+ throw new Error('wfs.geojsongml.notsupported')
90
+ }
91
+ }
92
+
93
+ protected getData() {
94
+ if (this.aggregations || this.groupedBy) {
95
+ throw new Error(marker('wfs.aggregations.notsupported'))
96
+ }
97
+
98
+ const asJson = this.endpoint.supportsJson(this.featureTypeName)
99
+ const attributes = this.selected ?? undefined
100
+ let url = this.endpoint.getFeatureUrl(this.featureTypeName, {
101
+ ...(this.startIndex !== null && { startIndex: this.startIndex }),
102
+ ...(this.count !== null && { maxFeatures: this.count }),
103
+ asJson,
104
+ outputCrs: 'EPSG:4326',
105
+ attributes,
106
+ // sortBy: this.sort // TODO: no sort in ogc-client?
107
+ })
108
+
109
+ if (Array.isArray(this.sort) && this.sort.length > 0) {
110
+ const finalUrl = new URL(url)
111
+ const sorts = this.sort
112
+ .map(
113
+ (fieldSort) => `${fieldSort[1]}+${fieldSort[0] === 'asc' ? 'A' : 'D'}`
114
+ )
115
+ .join(',')
116
+ // Direct update on string url to prevent encoding of +A and +D
117
+ url = `${url}${finalUrl.search ? '&' : ''}SORTBY=${sorts}`
118
+ }
119
+
120
+ return fetchDataAsText(url).then((text) =>
121
+ asJson
122
+ ? parseGeojson(text)
123
+ : parseGml(text, this.featureTypeName, this.version)
124
+ )
125
+ }
126
+
127
+ load() {
128
+ // Nothing to load for Wfs
129
+ }
130
+
131
+ async read(): Promise<DataItem[]> {
132
+ return (await this.getData()).items
133
+ }
134
+ }
@@ -60,7 +60,7 @@ export function fetchDataAsText(url: string): Promise<string> {
60
60
  })
61
61
  .then(async (response) => {
62
62
  if (!response.ok) {
63
- throw FetchError.http(response.status)
63
+ throw FetchError.http(response.status, await response.text())
64
64
  }
65
65
  return response.text()
66
66
  }),
@@ -77,7 +77,7 @@ export function fetchDataAsArrayBuffer(url: string): Promise<ArrayBuffer> {
77
77
  })
78
78
  .then(async (response) => {
79
79
  if (!response.ok) {
80
- throw FetchError.http(response.status)
80
+ throw FetchError.http(response.status, await response.text())
81
81
  }
82
82
  // convert to a numeric array so that we can store the response in cache
83
83
  return Array.from(new Uint8Array(await response.arrayBuffer()))
@@ -0,0 +1,45 @@
1
+ import { Injectable } from '@angular/core'
2
+ import { TranslateService } from '@ngx-translate/core'
3
+
4
+ @Injectable({
5
+ providedIn: 'root',
6
+ })
7
+ export class DateService {
8
+ constructor(private translateService: TranslateService) {}
9
+
10
+ private getDateObject(date: Date | string): Date {
11
+ if (typeof date === 'string') {
12
+ const dateObj = new Date(date)
13
+ if (isNaN(dateObj.getTime())) {
14
+ throw new Error('Invalid date string')
15
+ }
16
+ return dateObj
17
+ }
18
+ return date
19
+ }
20
+
21
+ private getLocaleAndDate(date: Date | string): {
22
+ locale: string
23
+ dateObj: Date
24
+ } {
25
+ const locale = this.translateService.currentLang || 'en-US'
26
+ const dateObj = this.getDateObject(date)
27
+ return { locale, dateObj }
28
+ }
29
+
30
+ formatDate(
31
+ date: Date | string,
32
+ options?: Intl.DateTimeFormatOptions
33
+ ): string {
34
+ const { locale, dateObj } = this.getLocaleAndDate(date)
35
+ return dateObj.toLocaleDateString(locale, options)
36
+ }
37
+
38
+ formatDateTime(
39
+ date: Date | string,
40
+ options?: Intl.DateTimeFormatOptions
41
+ ): string {
42
+ const { locale, dateObj } = this.getLocaleAndDate(date)
43
+ return dateObj.toLocaleString(locale, options)
44
+ }
45
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './theme.service'
2
2
  export * from './log.service'
3
3
  export * from './proxy.service'
4
+ export * from './date.service'
@@ -1,8 +1,11 @@
1
+ import { DateService } from '../services'
2
+
1
3
  export function getTemporalRangeUnion(
2
4
  ranges: {
3
5
  start?: Date
4
6
  end?: Date
5
- }[]
7
+ }[],
8
+ dateService: DateService
6
9
  ) {
7
10
  let earliestStartDate = Infinity
8
11
  let latestEndDate = -Infinity
@@ -24,11 +27,11 @@ export function getTemporalRangeUnion(
24
27
  return {
25
28
  start:
26
29
  earliestStartDate !== -Infinity
27
- ? new Date(earliestStartDate).toLocaleDateString()
30
+ ? dateService.formatDate(new Date(earliestStartDate))
28
31
  : undefined,
29
32
  end:
30
33
  latestEndDate !== Infinity
31
- ? new Date(latestEndDate).toLocaleDateString()
34
+ ? dateService.formatDate(new Date(latestEndDate))
32
35
  : undefined,
33
36
  }
34
37
  } else {
@@ -25,7 +25,8 @@
25
25
  "dashboard.createRecord": "Neuer Eintrag",
26
26
  "dashboard.importRecord": "",
27
27
  "dashboard.importRecord.importExternal": "",
28
- "dashboard.importRecord.importExternalLabel": "",
28
+ "dashboard.importRecord.importExternal.subtitle": "",
29
+ "dashboard.importRecord.importExternal.title": "",
29
30
  "dashboard.labels.catalog": "Katalog",
30
31
  "dashboard.labels.mySpace": "Mein Bereich",
31
32
  "dashboard.records.all": "Metadatenkatalog",
@@ -194,8 +195,7 @@
194
195
  "downloads.format.unknown": "unbekannt",
195
196
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
196
197
  "dropFile": "Datei ablegen",
197
- "editor.form.keywords.placeholder": "",
198
- "editor.form.placeKeywordWithoutExtent": "",
198
+ "editor.new.record.title": "",
199
199
  "editor.record.delete.confirmation.cancelText": "Stornieren",
200
200
  "editor.record.delete.confirmation.confirmText": "Löschen",
201
201
  "editor.record.delete.confirmation.message": "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
@@ -228,7 +228,9 @@
228
228
  "editor.record.form.field.abstract": "Kurzbeschreibung",
229
229
  "editor.record.form.field.constraintsShortcuts": "",
230
230
  "editor.record.form.field.contacts.noContact": "",
231
+ "editor.record.form.field.contacts.placeholder": "",
231
232
  "editor.record.form.field.contactsForResource.noContact": "",
233
+ "editor.record.form.field.contactsForResource.placeholder": "",
232
234
  "editor.record.form.field.keywords": "Schlagwörter",
233
235
  "editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
234
236
  "editor.record.form.field.license": "Lizenz",
@@ -237,12 +239,12 @@
237
239
  "editor.record.form.field.onlineResource.confirm": "",
238
240
  "editor.record.form.field.onlineResource.dialogTitle": "",
239
241
  "editor.record.form.field.onlineResource.edit.description": "",
240
- "editor.record.form.field.onlineResource.edit.protocol": "",
241
242
  "editor.record.form.field.onlineResource.edit.identifier.error": "Schichten konnten nicht vom Protokoll abgerufen werden",
242
243
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Ebenenname",
243
244
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Prozessname",
244
245
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Wählen Sie eine Ebene",
245
246
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Link zum Dienst",
247
+ "editor.record.form.field.onlineResource.edit.protocol": "",
246
248
  "editor.record.form.field.onlineResource.edit.title": "",
247
249
  "editor.record.form.field.onlineResource.fileSize": "",
248
250
  "editor.record.form.field.onlineResource.modify": "",
@@ -262,6 +264,9 @@
262
264
  "editor.record.form.field.title.placeholder": "Geben Sie einen Titel ein",
263
265
  "editor.record.form.field.uniqueIdentifier": "Eindeutige Kennung (ID)",
264
266
  "editor.record.form.field.updateFrequency": "Aktualisierungshäufigkeit",
267
+ "editor.record.form.keywords.place.placeholder": "",
268
+ "editor.record.form.keywords.place.withoutExtent": "",
269
+ "editor.record.form.keywords.placeholder": "",
265
270
  "editor.record.form.license.cc-by": "",
266
271
  "editor.record.form.license.cc-by-sa": "",
267
272
  "editor.record.form.license.cc-zero": "",
@@ -273,7 +278,7 @@
273
278
  "editor.record.form.license.unknown": "",
274
279
  "editor.record.form.page.accessAndContact": "",
275
280
  "editor.record.form.page.description": "",
276
- "editor.record.form.page.ressources": "",
281
+ "editor.record.form.page.resources": "",
277
282
  "editor.record.form.section.about.description": "",
278
283
  "editor.record.form.section.about.label": "",
279
284
  "editor.record.form.section.annexes.description": "",
@@ -450,6 +455,8 @@
450
455
  "record.metadata.api.form.productTooltip": "",
451
456
  "record.metadata.api.form.reset": "Zurücksetzen",
452
457
  "record.metadata.api.form.resetTooltip": "",
458
+ "record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
459
+ "record.metadata.api.form.title.gpf": "",
453
460
  "record.metadata.api.form.type": "Ausgabeformat",
454
461
  "record.metadata.api.form.zoneTitle": "",
455
462
  "record.metadata.api.form.zoneTooltip": "",
@@ -518,6 +525,7 @@
518
525
  "record.tab.chart": "Diagramm",
519
526
  "record.tab.data": "Tabelle",
520
527
  "record.tab.map": "Karte",
528
+ "record.was.created.time": "erstellte diesen Datensatz {time}",
521
529
  "records": "Datensätze",
522
530
  "results.layout.selectOne": "Layout auswählen",
523
531
  "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
@@ -581,6 +589,12 @@
581
589
  "share.tab.webComponent": "Integrieren",
582
590
  "table.loading.data": "Daten werden geladen...",
583
591
  "table.object.count": "Objekte in diesem Datensatz",
592
+ "table.paginator.firstPage": "Erste Seite",
593
+ "table.paginator.itemsPerPage": "Elemente pro Seite",
594
+ "table.paginator.lastPage": "Letzte Seite",
595
+ "table.paginator.nextPage": "Nächste Seite",
596
+ "table.paginator.previousPage": "Vorherige Seite",
597
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} von {length}",
584
598
  "table.select.data": "Datenquelle",
585
599
  "tooltip.html.copy": "HTML kopieren",
586
600
  "tooltip.id.copy": "Eindeutige Kennung kopieren",
@@ -588,6 +602,7 @@
588
602
  "tooltip.url.open": "URL öffnen",
589
603
  "ui.readLess": "Weniger lesen",
590
604
  "ui.readMore": "Weiterlesen",
605
+ "wfs.aggregations.notsupported": "",
591
606
  "wfs.feature.limit": "Zu viele Features, um den WFS-Layer anzuzeigen!",
592
607
  "wfs.featuretype.notfound": "Kein passender Feature-Typ wurde im Dienst gefunden",
593
608
  "wfs.geojsongml.notsupported": "Dieser Dienst unterstützt das GeoJSON- oder GML-Format nicht",
@@ -25,7 +25,8 @@
25
25
  "dashboard.createRecord": "New dataset",
26
26
  "dashboard.importRecord": "Import",
27
27
  "dashboard.importRecord.importExternal": "Import an external file",
28
- "dashboard.importRecord.importExternalLabel": "External file URL",
28
+ "dashboard.importRecord.importExternal.subtitle": "(link to an XML file)",
29
+ "dashboard.importRecord.importExternal.title": "External file URL",
29
30
  "dashboard.labels.catalog": "Catalog",
30
31
  "dashboard.labels.mySpace": "My space",
31
32
  "dashboard.records.all": "Datasets",
@@ -194,8 +195,7 @@
194
195
  "downloads.format.unknown": "Unknown",
195
196
  "downloads.wfs.featuretype.not.found": "The layer was not found",
196
197
  "dropFile": "Drop file",
197
- "editor.form.keywords.placeholder": "Select a keyword",
198
- "editor.form.placeKeywordWithoutExtent": "This keyword is not associated with any geographical extent",
198
+ "editor.new.record.title": "My dataset",
199
199
  "editor.record.delete.confirmation.cancelText": "Cancel",
200
200
  "editor.record.delete.confirmation.confirmText": "Delete",
201
201
  "editor.record.delete.confirmation.message": "Are you sure you want to delete this dataset?",
@@ -220,15 +220,17 @@
220
220
  "editor.record.form.constraint.header.securityConstraints": "Applicable security conditions",
221
221
  "editor.record.form.constraint.legalConstraints": "Legal constraints",
222
222
  "editor.record.form.constraint.markdown.placeholder": "Your text here",
223
- "editor.record.form.constraint.not.applicable": "No conditions apply.",
224
- "editor.record.form.constraint.not.known": "The conditions are unknown.",
223
+ "editor.record.form.constraint.not.applicable": "No conditions apply",
224
+ "editor.record.form.constraint.not.known": "The conditions are unknown",
225
225
  "editor.record.form.constraint.otherConstraints": "Other constraints",
226
226
  "editor.record.form.constraint.securityConstraints": "Security constraints",
227
227
  "editor.record.form.draft.updateAlert": "Since you created this draft, the dataset has been updated on { date } by { user }. Publishing your draft might erase their edits. To avoid this, you need to either cancel your changes or knowingly publish your own version.",
228
228
  "editor.record.form.field.abstract": "Abstract",
229
229
  "editor.record.form.field.constraintsShortcuts": "",
230
230
  "editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
231
+ "editor.record.form.field.contacts.placeholder": "Choose a contact",
231
232
  "editor.record.form.field.contactsForResource.noContact": "Please provide at least one point of contact responsible for the data.",
233
+ "editor.record.form.field.contactsForResource.placeholder": "Choose a contact",
232
234
  "editor.record.form.field.keywords": "Keywords",
233
235
  "editor.record.form.field.legalConstraints": "Legal constraint",
234
236
  "editor.record.form.field.license": "License",
@@ -237,12 +239,12 @@
237
239
  "editor.record.form.field.onlineResource.confirm": "Confirm",
238
240
  "editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
239
241
  "editor.record.form.field.onlineResource.edit.description": "Description",
240
- "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
241
242
  "editor.record.form.field.onlineResource.edit.identifier.error": "Unable to retrieve layers from protocol",
242
243
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Layer name",
243
244
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Process name",
244
245
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Select a layer",
245
246
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Link to the service",
247
+ "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
246
248
  "editor.record.form.field.onlineResource.edit.title": "Title",
247
249
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB}MB",
248
250
  "editor.record.form.field.onlineResource.modify": "Modify",
@@ -250,7 +252,7 @@
250
252
  "editor.record.form.field.onlineResource.toggle.service": "Link to a service",
251
253
  "editor.record.form.field.onlineResources": "Distribution",
252
254
  "editor.record.form.field.otherConstraints": "Other constraint",
253
- "editor.record.form.field.overviews": "Overviews",
255
+ "editor.record.form.field.overviews": "Overview",
254
256
  "editor.record.form.field.recordUpdated": "Record updated",
255
257
  "editor.record.form.field.resourceCreated": "Dataset created",
256
258
  "editor.record.form.field.resourceIdentifier": "Identifier",
@@ -262,6 +264,9 @@
262
264
  "editor.record.form.field.title.placeholder": "Enter a title",
263
265
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
264
266
  "editor.record.form.field.updateFrequency": "Update frequency",
267
+ "editor.record.form.keywords.place.placeholder": "Search for place keywords",
268
+ "editor.record.form.keywords.place.withoutExtent": "This keyword is not associated with any geographical extent",
269
+ "editor.record.form.keywords.placeholder": "Select a keyword",
265
270
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
266
271
  "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
267
272
  "editor.record.form.license.cc-zero": "Creative Commons CC-0",
@@ -273,26 +278,26 @@
273
278
  "editor.record.form.license.unknown": "Unknown or absent",
274
279
  "editor.record.form.page.accessAndContact": "Information for use",
275
280
  "editor.record.form.page.description": "Dataset description",
276
- "editor.record.form.page.ressources": "Resources",
277
- "editor.record.form.section.about.description": "This section describes the dataset.",
281
+ "editor.record.form.page.resources": "Resources",
282
+ "editor.record.form.section.about.description": "This section describes the dataset",
278
283
  "editor.record.form.section.about.label": "About the dataset",
279
284
  "editor.record.form.section.annexes.description": "Annexes are optional resources. They are attached to the dataset, and help understand the data (manual, etc.).",
280
285
  "editor.record.form.section.annexes.label": "Annexes",
281
- "editor.record.form.section.associatedResources.description": "Point out where the data can be found.",
286
+ "editor.record.form.section.associatedResources.description": "Point out where the data can be found",
282
287
  "editor.record.form.section.associatedResources.label": "Associated resources",
283
- "editor.record.form.section.classification.description": "Appropriate keywords help users find the dataset.",
288
+ "editor.record.form.section.classification.description": "Appropriate keywords help users find the dataset",
284
289
  "editor.record.form.section.classification.label": "Keywords",
285
- "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data.",
290
+ "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data",
286
291
  "editor.record.form.section.dataManagers.label": "Data managers",
287
292
  "editor.record.form.section.geographicalCoverage.label": "Geographical coverage",
288
- "editor.record.form.section.metadataPointOfContact.description": "This information concerns the metadata.",
293
+ "editor.record.form.section.metadataPointOfContact.description": "This information concerns the metadata",
289
294
  "editor.record.form.section.metadataPointOfContact.label": "Metadata point of contact",
290
295
  "editor.record.form.section.useAndAccessConditions.label": "Use and access conditions",
291
296
  "editor.record.form.temporalExtents.addDate": "Time instant",
292
297
  "editor.record.form.temporalExtents.addRange": "Time period",
293
298
  "editor.record.form.temporalExtents.date": "Date",
294
299
  "editor.record.form.temporalExtents.range": "Date range",
295
- "editor.record.form.updateFrequency.planned": "This dataset is updated regularly.",
300
+ "editor.record.form.updateFrequency.planned": "This dataset is updated regularly",
296
301
  "editor.record.importFromExternalFile.failure.body": "Failure",
297
302
  "editor.record.importFromExternalFile.failure.title": "The dataset import failed: ",
298
303
  "editor.record.importFromExternalFile.success.body": "Import successful",
@@ -450,6 +455,8 @@
450
455
  "record.metadata.api.form.productTooltip": "",
451
456
  "record.metadata.api.form.reset": "Reset",
452
457
  "record.metadata.api.form.resetTooltip": "Reset all filters",
458
+ "record.metadata.api.form.title": "Generate a custom URL",
459
+ "record.metadata.api.form.title.gpf": "Download data",
453
460
  "record.metadata.api.form.type": "Output format",
454
461
  "record.metadata.api.form.zoneTitle": "Zone",
455
462
  "record.metadata.api.form.zoneTooltip": "Dropdown for selecting a geographic zone",
@@ -518,6 +525,7 @@
518
525
  "record.tab.chart": "Chart",
519
526
  "record.tab.data": "Table",
520
527
  "record.tab.map": "Map",
528
+ "record.was.created.time": "created this dataset {time}",
521
529
  "records": "datasets",
522
530
  "results.layout.selectOne": "Results layout",
523
531
  "results.records.hits.displayedOn": "{displayed, plural, =0{No dataset.} one{1 } other{{displayed} }} {hits, plural, other{displayed on {hits} total.}}",
@@ -581,6 +589,12 @@
581
589
  "share.tab.webComponent": "Integrate",
582
590
  "table.loading.data": "Loading data...",
583
591
  "table.object.count": "Objects in this dataset",
592
+ "table.paginator.firstPage": "First page",
593
+ "table.paginator.itemsPerPage": "Items per page",
594
+ "table.paginator.lastPage": "Last page",
595
+ "table.paginator.nextPage": "Next page",
596
+ "table.paginator.previousPage": "Previous page",
597
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} of {length}",
584
598
  "table.select.data": "Data source",
585
599
  "tooltip.html.copy": "Copy HTML",
586
600
  "tooltip.id.copy": "Copy unique identifier",
@@ -588,6 +602,7 @@
588
602
  "tooltip.url.open": "Open URL",
589
603
  "ui.readLess": "Read less",
590
604
  "ui.readMore": "Read more",
605
+ "wfs.aggregations.notsupported": "Aggregations are currently not supported for WFS services",
591
606
  "wfs.feature.limit": "Too many features to display the WFS layer!",
592
607
  "wfs.featuretype.notfound": "No matching feature type was found in the service",
593
608
  "wfs.geojsongml.notsupported": "This service does not support the GeoJSON or GML format",
@@ -25,7 +25,8 @@
25
25
  "dashboard.createRecord": "",
26
26
  "dashboard.importRecord": "",
27
27
  "dashboard.importRecord.importExternal": "",
28
- "dashboard.importRecord.importExternalLabel": "",
28
+ "dashboard.importRecord.importExternal.subtitle": "",
29
+ "dashboard.importRecord.importExternal.title": "",
29
30
  "dashboard.labels.catalog": "Catálogo",
30
31
  "dashboard.labels.mySpace": "Mi espacio",
31
32
  "dashboard.records.all": "Catálogo",
@@ -194,8 +195,7 @@
194
195
  "downloads.format.unknown": "",
195
196
  "downloads.wfs.featuretype.not.found": "",
196
197
  "dropFile": "",
197
- "editor.form.keywords.placeholder": "",
198
- "editor.form.placeKeywordWithoutExtent": "",
198
+ "editor.new.record.title": "",
199
199
  "editor.record.delete.confirmation.cancelText": "",
200
200
  "editor.record.delete.confirmation.confirmText": "",
201
201
  "editor.record.delete.confirmation.message": "",
@@ -228,7 +228,9 @@
228
228
  "editor.record.form.field.abstract": "",
229
229
  "editor.record.form.field.constraintsShortcuts": "",
230
230
  "editor.record.form.field.contacts.noContact": "",
231
+ "editor.record.form.field.contacts.placeholder": "",
231
232
  "editor.record.form.field.contactsForResource.noContact": "",
233
+ "editor.record.form.field.contactsForResource.placeholder": "",
232
234
  "editor.record.form.field.keywords": "",
233
235
  "editor.record.form.field.legalConstraints": "",
234
236
  "editor.record.form.field.license": "",
@@ -237,12 +239,12 @@
237
239
  "editor.record.form.field.onlineResource.confirm": "",
238
240
  "editor.record.form.field.onlineResource.dialogTitle": "",
239
241
  "editor.record.form.field.onlineResource.edit.description": "",
240
- "editor.record.form.field.onlineResource.edit.protocol": "",
241
242
  "editor.record.form.field.onlineResource.edit.identifier.error": "No se pueden recuperar las capas del protocolo",
242
243
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nombre de la capa",
243
244
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nombre del proceso",
244
245
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Selecciona una capa",
245
246
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Enlace al servicio",
247
+ "editor.record.form.field.onlineResource.edit.protocol": "",
246
248
  "editor.record.form.field.onlineResource.edit.title": "",
247
249
  "editor.record.form.field.onlineResource.fileSize": "",
248
250
  "editor.record.form.field.onlineResource.modify": "",
@@ -262,6 +264,9 @@
262
264
  "editor.record.form.field.title.placeholder": "Introduzca un título",
263
265
  "editor.record.form.field.uniqueIdentifier": "",
264
266
  "editor.record.form.field.updateFrequency": "",
267
+ "editor.record.form.keywords.place.placeholder": "",
268
+ "editor.record.form.keywords.place.withoutExtent": "",
269
+ "editor.record.form.keywords.placeholder": "",
265
270
  "editor.record.form.license.cc-by": "",
266
271
  "editor.record.form.license.cc-by-sa": "",
267
272
  "editor.record.form.license.cc-zero": "",
@@ -273,7 +278,7 @@
273
278
  "editor.record.form.license.unknown": "",
274
279
  "editor.record.form.page.accessAndContact": "",
275
280
  "editor.record.form.page.description": "",
276
- "editor.record.form.page.ressources": "",
281
+ "editor.record.form.page.resources": "",
277
282
  "editor.record.form.section.about.description": "",
278
283
  "editor.record.form.section.about.label": "",
279
284
  "editor.record.form.section.annexes.description": "",
@@ -450,6 +455,8 @@
450
455
  "record.metadata.api.form.productTooltip": "",
451
456
  "record.metadata.api.form.reset": "",
452
457
  "record.metadata.api.form.resetTooltip": "",
458
+ "record.metadata.api.form.title": "",
459
+ "record.metadata.api.form.title.gpf": "",
453
460
  "record.metadata.api.form.type": "",
454
461
  "record.metadata.api.form.zoneTitle": "",
455
462
  "record.metadata.api.form.zoneTooltip": "",
@@ -518,6 +525,7 @@
518
525
  "record.tab.chart": "",
519
526
  "record.tab.data": "",
520
527
  "record.tab.map": "",
528
+ "record.was.created.time": "",
521
529
  "records": "",
522
530
  "results.layout.selectOne": "",
523
531
  "results.records.hits.displayedOn": "",
@@ -581,6 +589,12 @@
581
589
  "share.tab.webComponent": "",
582
590
  "table.loading.data": "",
583
591
  "table.object.count": "",
592
+ "table.paginator.firstPage": "Primera página",
593
+ "table.paginator.itemsPerPage": "Elementos por página",
594
+ "table.paginator.lastPage": "Última página",
595
+ "table.paginator.nextPage": "Página siguiente",
596
+ "table.paginator.previousPage": "Página anterior",
597
+ "table.paginator.rangeLabel": "{startIndex} - {endIndex} de {length}",
584
598
  "table.select.data": "",
585
599
  "tooltip.html.copy": "",
586
600
  "tooltip.id.copy": "",
@@ -588,6 +602,7 @@
588
602
  "tooltip.url.open": "",
589
603
  "ui.readLess": "",
590
604
  "ui.readMore": "",
605
+ "wfs.aggregations.notsupported": "",
591
606
  "wfs.feature.limit": "",
592
607
  "wfs.featuretype.notfound": "",
593
608
  "wfs.geojsongml.notsupported": "",