geonetwork-ui 2.11.0-dev.c42282af5 → 2.11.0-dev.cf22e64cf

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 (41) hide show
  1. package/fesm2022/geonetwork-ui.mjs +1093 -1233
  2. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  3. package/index.d.ts +61 -54
  4. package/index.d.ts.map +1 -1
  5. package/package.json +1 -1
  6. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +15 -2
  7. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +4 -1
  8. package/src/libs/feature/map/src/index.ts +0 -2
  9. package/src/libs/feature/map/src/lib/feature-map.module.ts +1 -8
  10. package/src/libs/feature/notify-reuse/src/lib/notify-reuse-form/notify-reuse-form.component.ts +8 -3
  11. package/src/libs/feature/search/src/index.ts +2 -0
  12. package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +8 -3
  13. package/src/libs/feature/{map/src/lib → search/src/lib/geocoding}/geocoding.service.ts +16 -7
  14. package/src/libs/feature/search/src/lib/location-search/location-search.component.html +8 -0
  15. package/src/libs/feature/search/src/lib/location-search/location-search.component.ts +40 -0
  16. package/src/libs/feature/search/src/lib/search-filters-summary-item/search-filters-summary-item.component.ts +1 -0
  17. package/src/libs/feature/search/src/lib/state/reducer.ts +1 -4
  18. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +6 -0
  19. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +10 -1
  20. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +8 -0
  21. package/src/libs/ui/inputs/src/lib/spatial-extent-dropdown/spatial-extent-dropdown.component.html +2 -2
  22. package/src/libs/ui/inputs/src/lib/spatial-extent-dropdown/spatial-extent-dropdown.component.ts +8 -2
  23. package/src/libs/ui/layout/src/lib/block-list/block-list.component.css +1 -0
  24. package/src/libs/util/app-config/src/lib/app-config.ts +20 -0
  25. package/src/libs/util/app-config/src/lib/fixtures.ts +16 -1
  26. package/src/libs/util/app-config/src/lib/model.ts +14 -1
  27. package/src/libs/util/shared/src/lib/utils/geojson.ts +16 -0
  28. package/translations/de.json +4 -2
  29. package/translations/en.json +6 -4
  30. package/translations/es.json +4 -2
  31. package/translations/fr.json +11 -9
  32. package/translations/it.json +4 -2
  33. package/translations/nl.json +4 -2
  34. package/translations/pt.json +4 -2
  35. package/translations/sk.json +4 -2
  36. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
  37. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +0 -41
  38. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +0 -112
  39. package/src/libs/feature/map/src/lib/style/index.ts +0 -2
  40. package/src/libs/feature/map/src/lib/style/map-style.fixtures.ts +0 -47
  41. package/src/libs/feature/map/src/lib/style/map-style.service.ts +0 -108
@@ -5,22 +5,31 @@ import {
5
5
  GeocodingResult,
6
6
  queryGeonames,
7
7
  GeonamesOptions,
8
- DataGouvFrOptions,
9
- queryDataGouvFr,
8
+ GeoplateformeOptions,
9
+ queryGeoplateforme,
10
10
  } from '@geospatial-sdk/geocoding'
11
11
  import { from, Observable, throwError } from 'rxjs'
12
12
  import { catchError } from 'rxjs/operators'
13
13
 
14
14
  type GeoadminGeocodingProvider = ['geoadmin', GeoadminOptions]
15
15
  type GeonamesGeocodingProvider = ['geonames', GeonamesOptions]
16
- type DataGouvFrGeocodingProvider = ['data-gouv-fr', DataGouvFrOptions]
16
+ type GeoplateformeGeocodingProvider = ['geoplateforme', GeoplateformeOptions]
17
17
  export type GeocodingProvider =
18
18
  | GeoadminGeocodingProvider
19
19
  | GeonamesGeocodingProvider
20
- | DataGouvFrGeocodingProvider
20
+ | GeoplateformeGeocodingProvider
21
+
22
+ export const DEFAULT_GEOCODING_PROVIDER = [
23
+ 'geonames',
24
+ { maxRows: 5 },
25
+ ] as GeocodingProvider
21
26
 
22
27
  export const GEOCODING_PROVIDER = new InjectionToken<GeocodingProvider>(
23
- 'geocoding-provider'
28
+ 'geocoding-provider',
29
+ {
30
+ providedIn: 'root',
31
+ factory: (): GeocodingProvider => DEFAULT_GEOCODING_PROVIDER,
32
+ }
24
33
  )
25
34
 
26
35
  @Injectable({
@@ -42,9 +51,9 @@ export class GeocodingService {
42
51
  queryGeonames(text, this.provider[1] as GeonamesOptions)
43
52
  )
44
53
  break
45
- case 'data-gouv-fr':
54
+ case 'geoplateforme':
46
55
  queryObservable = from(
47
- queryDataGouvFr(text, this.provider[1] as DataGouvFrOptions)
56
+ queryGeoplateforme(text, this.provider[1] as GeoplateformeOptions)
48
57
  )
49
58
  break
50
59
  default:
@@ -0,0 +1,8 @@
1
+ <gn-ui-autocomplete
2
+ [action]="searchAction"
3
+ [displayWithFn]="displayWithFn"
4
+ [placeholder]="placeholder"
5
+ [displayWithTemplate]="displayWithTemplate"
6
+ (itemSelected)="handleItemSelected($event)"
7
+ >
8
+ </gn-ui-autocomplete>
@@ -0,0 +1,40 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ EventEmitter,
5
+ inject,
6
+ Input,
7
+ Output,
8
+ TemplateRef,
9
+ } from '@angular/core'
10
+ import { Observable } from 'rxjs'
11
+ import { GeocodingResult } from '@geospatial-sdk/geocoding'
12
+ import {
13
+ AutocompleteComponent,
14
+ AutocompleteItem,
15
+ } from '../../../../../../libs/ui/inputs/src'
16
+ import { GeocodingService } from '../geocoding/geocoding.service'
17
+
18
+ @Component({
19
+ selector: 'gn-ui-location-search',
20
+ templateUrl: './location-search.component.html',
21
+ changeDetection: ChangeDetectionStrategy.OnPush,
22
+ standalone: true,
23
+ imports: [AutocompleteComponent],
24
+ })
25
+ export class LocationSearchComponent {
26
+ private geocodingService = inject(GeocodingService)
27
+
28
+ @Input() placeholder = ''
29
+ @Input() displayWithTemplate?: TemplateRef<{ $implicit: GeocodingResult }>
30
+ @Output() resultSelected = new EventEmitter<GeocodingResult>()
31
+
32
+ displayWithFn = (item: AutocompleteItem) => (item as GeocodingResult).label
33
+
34
+ searchAction = (text: string): Observable<AutocompleteItem[]> =>
35
+ this.geocodingService.query(text)
36
+
37
+ handleItemSelected(item: AutocompleteItem) {
38
+ this.resultSelected.emit(item as GeocodingResult)
39
+ }
40
+ }
@@ -21,6 +21,7 @@ import { marker } from '@biesbjerg/ngx-translate-extract-marker'
21
21
  marker('search.filters.summaryLabel.user')
22
22
  marker('search.filters.summaryLabel.changeDate')
23
23
  marker('search.filters.summaryLabel.resourceCreationRevisionDate')
24
+ marker('search.filters.summaryLabel.temporalExtent')
24
25
 
25
26
  const OPEN_BOUND = '…'
26
27
 
@@ -8,7 +8,6 @@ import {
8
8
  SortByField,
9
9
  } from '../../../../../../libs/common/domain/src/lib/model/search'
10
10
  import { DEFAULT_PAGE_SIZE, FIELDS_SUMMARY } from '../constants'
11
- import { getOptionalSearchConfig } from '../../../../../../libs/util/app-config/src'
12
11
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
13
12
 
14
13
  export const SEARCH_FEATURE_KEY = 'searchState'
@@ -56,9 +55,7 @@ export const initSearch = (): SearchStateSearch => {
56
55
  },
57
56
  params: {
58
57
  filters: {},
59
- pageSize: getOptionalSearchConfig()?.LIMIT
60
- ? getOptionalSearchConfig().LIMIT
61
- : DEFAULT_PAGE_SIZE,
58
+ pageSize: DEFAULT_PAGE_SIZE,
62
59
  currentPage: 0,
63
60
  favoritesOnly: false,
64
61
  useSpatialFilter: true,
@@ -45,6 +45,7 @@ marker('search.filters.publisherOrg')
45
45
  marker('search.filters.user')
46
46
  marker('search.filters.changeDate')
47
47
  marker('search.filters.resourceCreationRevisionDate')
48
+ marker('search.filters.temporalExtent')
48
49
  marker('search.filters.spatialExtent')
49
50
  @Injectable({
50
51
  providedIn: 'root',
@@ -101,6 +102,11 @@ export class FieldsService {
101
102
  this.injector,
102
103
  'desc'
103
104
  ),
105
+ temporalExtent: new DateRangeSearchField(
106
+ 'resourceTemporalExtentDateRange',
107
+ this.injector,
108
+ 'desc'
109
+ ),
104
110
  availableServices: new AvailableServicesField(this.injector),
105
111
  spatialExtent: new BoundingBoxSearchField('spatialExtent', this.injector),
106
112
  } as Record<string, AbstractSearchField>
@@ -83,7 +83,16 @@
83
83
  >
84
84
  @for (suggestion of suggestions$ | async; track suggestion) {
85
85
  <mat-option [value]="suggestion" class="p-2 suggestion text-start">
86
- {{ displayWithFnInternal(suggestion) }}
86
+ @if (displayWithTemplate) {
87
+ <ng-container
88
+ *ngTemplateOutlet="
89
+ displayWithTemplate;
90
+ context: { $implicit: suggestion }
91
+ "
92
+ ></ng-container>
93
+ } @else {
94
+ {{ displayWithFnInternal(suggestion) }}
95
+ }
87
96
  </mat-option>
88
97
  }
89
98
  </mat-autocomplete>
@@ -11,6 +11,7 @@ import {
11
11
  OnInit,
12
12
  Output,
13
13
  SimpleChanges,
14
+ TemplateRef,
14
15
  ViewChild,
15
16
  inject,
16
17
  } from '@angular/core'
@@ -97,6 +98,13 @@ export class AutocompleteComponent
97
98
  @ViewChild(MatAutocompleteTrigger) triggerRef: MatAutocompleteTrigger
98
99
  @ViewChild(MatAutocomplete) autocomplete: MatAutocomplete
99
100
  @ViewChild('searchInput') inputRef: ElementRef<HTMLInputElement>
101
+ /**
102
+ * Custom template to render each suggestion. Takes precedence over
103
+ * `displayWithFn` when set.
104
+ */
105
+ @Input() displayWithTemplate?: TemplateRef<{
106
+ $implicit: AutocompleteItem
107
+ }>
100
108
 
101
109
  searching: boolean
102
110
  control = new UntypedFormControl()
@@ -58,7 +58,7 @@
58
58
  [class]="
59
59
  (hasSelection
60
60
  ? 'border-b-[1px] border-gray-400 pb-[20px]'
61
- : 'pb-[8px]') + ' text-black'
61
+ : 'pb-[12px]') + ' text-black'
62
62
  "
63
63
  >
64
64
  <gn-ui-drag-and-drop-file-input
@@ -68,7 +68,7 @@
68
68
  [showFileName]="false"
69
69
  textClass="text-black truncate"
70
70
  dropzoneBackgroundColor="transparent"
71
- icon="iconoirImport"
71
+ icon="iconoirUpload"
72
72
  extraClass="gn-ui-gray-outline-input w-full !h-[32px] px-[8px] py-[4px] justify-between"
73
73
  (fileChange)="handleFileSelected($event)"
74
74
  (errorChange)="handleFileError($event)"
@@ -20,9 +20,9 @@ import { ButtonComponent } from '../button/button.component'
20
20
  import { NgIcon, provideIcons } from '@ng-icons/core'
21
21
  import {
22
22
  iconoirCheckCircle,
23
- iconoirImport,
24
23
  iconoirSquareDashed,
25
24
  iconoirTrash,
25
+ iconoirUpload,
26
26
  } from '@ng-icons/iconoir'
27
27
  import {
28
28
  matClose,
@@ -35,6 +35,7 @@ import {
35
35
  BoundingBox,
36
36
  getGeometryBoundingBox,
37
37
  getGeometryFromGeoJSON,
38
+ isBoundingBoxWithinWorldExtent,
38
39
  propagateToDocumentOnly,
39
40
  readFileAsText,
40
41
  } from '../../../../../../libs/util/shared/src'
@@ -46,6 +47,7 @@ import {
46
47
  marker('search.filters.spatialExtent.import')
47
48
  marker('search.filters.spatialExtent.helpText')
48
49
  marker('search.filters.spatialExtent.error.title')
50
+ marker('search.filters.spatialExtent.error.outOfBounds')
49
51
 
50
52
  const LABEL_FROM_FILE = marker('search.filters.spatialExtent.bboxFromFile')
51
53
  const LABEL_FROM_FILE_DELETE = marker(
@@ -74,9 +76,9 @@ export interface SpatialExtentDropdownError {
74
76
  providers: [
75
77
  provideIcons({
76
78
  iconoirCheckCircle,
77
- iconoirImport,
78
79
  iconoirSquareDashed,
79
80
  iconoirTrash,
81
+ iconoirUpload,
80
82
  matClose,
81
83
  matExpandLess,
82
84
  matExpandMore,
@@ -178,6 +180,10 @@ export class SpatialExtentDropdownComponent {
178
180
  return
179
181
  }
180
182
  const bbox = getGeometryBoundingBox(geometry)
183
+ if (!isBoundingBoxWithinWorldExtent(bbox)) {
184
+ this.setError(marker('search.filters.spatialExtent.error.outOfBounds'))
185
+ return
186
+ }
181
187
  this.bbox = bbox
182
188
  this.fileName = file.name
183
189
  this.bboxChange.emit(bbox)
@@ -3,6 +3,7 @@
3
3
  }
4
4
 
5
5
  :host {
6
+ display: block;
6
7
  position: relative;
7
8
  }
8
9
 
@@ -253,6 +253,8 @@ export function loadAppConfig(configUrl = 'assets/configuration/default.toml') {
253
253
  'advanced_filters',
254
254
  'limit',
255
255
  'spatial_extent_max_file_size',
256
+ 'geocoding_provider',
257
+ 'geocoding_provider_options',
256
258
  ],
257
259
  warnings,
258
260
  errors
@@ -265,6 +267,14 @@ export function loadAppConfig(configUrl = 'assets/configuration/default.toml') {
265
267
  warnings,
266
268
  errors
267
269
  )
270
+ const parsedCustomFilters = parseMultiConfigSection(
271
+ parsed,
272
+ 'custom_filter',
273
+ ['name', 'base_filter'],
274
+ ['exclude_values', 'include_values', 'label_key'],
275
+ warnings,
276
+ errors
277
+ )
268
278
  searchConfig =
269
279
  parsedSearchSection === null
270
280
  ? null
@@ -281,9 +291,19 @@ export function loadAppConfig(configUrl = 'assets/configuration/default.toml') {
281
291
  filters: param.filters,
282
292
  })),
283
293
  ADVANCED_FILTERS: parsedSearchSection.advanced_filters,
294
+ CUSTOM_FILTERS: parsedCustomFilters.map((customFilter) => ({
295
+ name: customFilter.name,
296
+ baseFilter: customFilter.base_filter,
297
+ excludeValues: customFilter.exclude_values,
298
+ includeValues: customFilter.include_values,
299
+ labelKey: customFilter.label_key,
300
+ })),
284
301
  LIMIT: parsedSearchSection.limit,
285
302
  SPATIAL_EXTENT_MAX_FILE_SIZE:
286
303
  parsedSearchSection.spatial_extent_max_file_size,
304
+ GEOCODING_PROVIDER: parsedSearchSection.geocoding_provider,
305
+ GEOCODING_PROVIDER_OPTIONS:
306
+ parsedSearchSection.geocoding_provider_options,
287
307
  } as SearchConfig)
288
308
 
289
309
  const parsedMetadataQualitySection = parseConfigSection(
@@ -41,7 +41,22 @@ fonts_stylesheet_url = "https://fonts.googleapis.com/css2?family=Open+Sans"
41
41
  record_kind_quick_filter = false
42
42
  filter_geometry_url = 'https://my.domain.org/geom.json'
43
43
  do_not_use_default_search_preset = false
44
- advanced_filters = ['publicationYear', 'documentStandard', 'inspireKeyword', 'topic', 'license']
44
+ geocoding_provider = "geoplateforme"
45
+ geocoding_provider_options.category = "administratif"
46
+ geocoding_provider_options.limit = 5
47
+ advanced_filters = ['publicationYear', 'documentStandard', 'inspireKeyword', 'topic', 'license', 'myOrg:firstCustomFilter', 'myOrg:secondCustomFilter']
48
+
49
+ [[custom_filter]]
50
+ name = 'myOrg:firstCustomFilter'
51
+ base_filter = 'keyword'
52
+ exclude_values = ['my keyword 1', 'my keyword 2']
53
+ label_key = 'myOrg.firstCustomFilter'
54
+
55
+ [[custom_filter]]
56
+ name = 'myOrg:secondCustomFilter'
57
+ base_filter = 'keyword'
58
+ include_values = ['my keyword 3', 'my keyword 4']
59
+ label_key = 'myOrg.secondCustomFilter'
45
60
 
46
61
  [[search_preset]]
47
62
  sort = "-createDate"
@@ -55,15 +55,28 @@ export interface SearchPreset {
55
55
  filters: Record<string, string[] | string>
56
56
  }
57
57
 
58
+ export type GeocodingProviderName = 'geoadmin' | 'geonames' | 'geoplateforme'
59
+
60
+ export interface CustomSearchFilterField {
61
+ name: string
62
+ baseFilter: string
63
+ excludeValues?: string[]
64
+ includeValues?: string[]
65
+ labelKey?: string
66
+ }
67
+
58
68
  export interface SearchConfig {
59
69
  RECORD_KIND_QUICK_FILTER?: boolean
60
70
  FILTER_GEOMETRY_URL?: string
61
71
  FILTER_GEOMETRY_DATA?: string
62
72
  DO_NOT_USE_DEFAULT_SEARCH_PRESET?: boolean
63
73
  SEARCH_PRESET?: SearchPreset[]
64
- ADVANCED_FILTERS?: []
74
+ ADVANCED_FILTERS?: string[]
75
+ CUSTOM_FILTERS?: CustomSearchFilterField[]
65
76
  LIMIT?: number
66
77
  SPATIAL_EXTENT_MAX_FILE_SIZE?: number
78
+ GEOCODING_PROVIDER?: GeocodingProviderName
79
+ GEOCODING_PROVIDER_OPTIONS?: Record<string, string | number>
67
80
  }
68
81
 
69
82
  export interface MetadataQualityConfig {
@@ -46,6 +46,22 @@ export function isBoundingBox(value: unknown): value is BoundingBox {
46
46
  )
47
47
  }
48
48
 
49
+ /**
50
+ * Checks that a bounding box's coordinates stay within the valid
51
+ * longitude (-180/180) and latitude (-90/90) ranges.
52
+ */
53
+ export function isBoundingBoxWithinWorldExtent(bbox: BoundingBox): boolean {
54
+ const [minX, minY, maxX, maxY] = bbox
55
+ return (
56
+ minX >= -180 &&
57
+ maxX <= 180 &&
58
+ minY >= -90 &&
59
+ maxY <= 90 &&
60
+ minX <= maxX &&
61
+ minY <= maxY
62
+ )
63
+ }
64
+
49
65
  export function getGeometryBoundingBox(geometry: Geometry): BoundingBox {
50
66
  // use the bounding box if specified in the GeoJSON object
51
67
  if (geometry.bbox) {
@@ -425,7 +425,6 @@
425
425
  "map.add.layer.wms": "Aus WMS",
426
426
  "map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
427
427
  "map.dropdown.placeholder": "Kein Vorschaulayer verfügbar",
428
- "map.geocoding.placeholder": "Nach einem Ort suchen",
429
428
  "map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
430
429
  "map.layer.add": "Hinzufügen",
431
430
  "map.layers.available": "Verfügbare Layer",
@@ -692,7 +691,6 @@
692
691
  "search.filters.representationType": "Repräsentationstyp",
693
692
  "search.filters.resourceCreationRevisionDate": "Ressourcendatum",
694
693
  "search.filters.resourceType": "Ressourcentyp",
695
- "search.filters.spatialExtent": "",
696
694
  "search.filters.spatialExtent.bboxFromFile": "",
697
695
  "search.filters.spatialExtent.bboxFromFileDelete": "",
698
696
  "search.filters.spatialExtent.bboxInitial": "",
@@ -700,13 +698,17 @@
700
698
  "search.filters.spatialExtent.error.fileTooLarge": "",
701
699
  "search.filters.spatialExtent.error.invalidFormat": "",
702
700
  "search.filters.spatialExtent.error.noGeometry": "",
701
+ "search.filters.spatialExtent.error.outOfBounds": "",
703
702
  "search.filters.spatialExtent.error.title": "",
703
+ "search.filters.spatialExtent": "",
704
704
  "search.filters.spatialExtent.helpText": "",
705
705
  "search.filters.spatialExtent.import": "",
706
706
  "search.filters.standard": "Standard",
707
707
  "search.filters.summaryLabel.changeDate": "Geändert am: ",
708
708
  "search.filters.summaryLabel.resourceCreationRevisionDate": "Ressourcendatum: ",
709
+ "search.filters.summaryLabel.temporalExtent": "Zeitlicher Umfang: ",
709
710
  "search.filters.summaryLabel.user": "Geändert von: ",
711
+ "search.filters.temporalExtent": "Zeitlicher Umfang",
710
712
  "search.filters.title": "Ergebnisse filtern",
711
713
  "search.filters.topic": "Themen",
712
714
  "search.filters.useSpatialFilter": "Zuerst Ressourcen im Interessenbereich anzeigen",
@@ -425,7 +425,6 @@
425
425
  "map.add.layer.wms": "From WMS",
426
426
  "map.addFromFile.placeholder": "Click or drop a file here",
427
427
  "map.dropdown.placeholder": "No preview layer available",
428
- "map.geocoding.placeholder": "Search for a place",
429
428
  "map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
430
429
  "map.layer.add": "Add",
431
430
  "map.layers.available": "Available Layers",
@@ -692,21 +691,24 @@
692
691
  "search.filters.representationType": "Representation type",
693
692
  "search.filters.resourceCreationRevisionDate": "Resource date",
694
693
  "search.filters.resourceType": "Resource type",
695
- "search.filters.spatialExtent": "Spatial extent",
696
- "search.filters.spatialExtent.bboxFromFile": "extent from {fileName}",
694
+ "search.filters.spatialExtent.bboxFromFile": "Extent from {fileName}",
697
695
  "search.filters.spatialExtent.bboxFromFileDelete": "Delete {fileName}",
698
696
  "search.filters.spatialExtent.bboxInitial": "Pre-selected extent",
699
697
  "search.filters.spatialExtent.bboxInitialDelete": "Delete selection",
700
698
  "search.filters.spatialExtent.error.fileTooLarge": "The file exceeds the maximum allowed size ({maxSize} MB)",
701
699
  "search.filters.spatialExtent.error.invalidFormat": "The file could not be read as a valid GeoJSON",
702
700
  "search.filters.spatialExtent.error.noGeometry": "No geometry could be found in the file",
701
+ "search.filters.spatialExtent.error.outOfBounds": "The geometry of the GeoJSON file is not compliant; either some coordinates are out of bounds ([-180, 180] for longitude and [-90, 90] for latitude), or the file uses projected coordinates instead of longitude and latitude",
703
702
  "search.filters.spatialExtent.error.title": "GeoJSON import error",
704
- "search.filters.spatialExtent.helpText": "The selected item for the spatial extent will be converted to a bbox",
703
+ "search.filters.spatialExtent": "Spatial extent",
704
+ "search.filters.spatialExtent.helpText": "The extent of the selected geometry will be used",
705
705
  "search.filters.spatialExtent.import": "Import a GeoJSON",
706
706
  "search.filters.standard": "Standard",
707
707
  "search.filters.summaryLabel.changeDate": "Updated: ",
708
708
  "search.filters.summaryLabel.resourceCreationRevisionDate": "Resource date: ",
709
+ "search.filters.summaryLabel.temporalExtent": "Temporal extent: ",
709
710
  "search.filters.summaryLabel.user": "Editor: ",
711
+ "search.filters.temporalExtent": "Temporal extent",
710
712
  "search.filters.title": "Filter your results",
711
713
  "search.filters.topic": "Topics",
712
714
  "search.filters.useSpatialFilter": "Show records in the area of interest first",
@@ -425,7 +425,6 @@
425
425
  "map.add.layer.wms": "",
426
426
  "map.addFromFile.placeholder": "",
427
427
  "map.dropdown.placeholder": "",
428
- "map.geocoding.placeholder": "",
429
428
  "map.help.addFromFile": "",
430
429
  "map.layer.add": "",
431
430
  "map.layers.available": "",
@@ -692,7 +691,6 @@
692
691
  "search.filters.representationType": "",
693
692
  "search.filters.resourceCreationRevisionDate": "",
694
693
  "search.filters.resourceType": "",
695
- "search.filters.spatialExtent": "",
696
694
  "search.filters.spatialExtent.bboxFromFile": "",
697
695
  "search.filters.spatialExtent.bboxFromFileDelete": "",
698
696
  "search.filters.spatialExtent.bboxInitial": "",
@@ -700,13 +698,17 @@
700
698
  "search.filters.spatialExtent.error.fileTooLarge": "",
701
699
  "search.filters.spatialExtent.error.invalidFormat": "",
702
700
  "search.filters.spatialExtent.error.noGeometry": "",
701
+ "search.filters.spatialExtent.error.outOfBounds": "",
703
702
  "search.filters.spatialExtent.error.title": "",
703
+ "search.filters.spatialExtent": "",
704
704
  "search.filters.spatialExtent.helpText": "",
705
705
  "search.filters.spatialExtent.import": "",
706
706
  "search.filters.standard": "",
707
707
  "search.filters.summaryLabel.changeDate": "",
708
708
  "search.filters.summaryLabel.resourceCreationRevisionDate": "",
709
+ "search.filters.summaryLabel.temporalExtent": "",
709
710
  "search.filters.summaryLabel.user": "",
711
+ "search.filters.temporalExtent": "",
710
712
  "search.filters.title": "",
711
713
  "search.filters.topic": "",
712
714
  "search.filters.useSpatialFilter": "",
@@ -77,13 +77,13 @@
77
77
  "domain.contact.role.editor": "Éditeur",
78
78
  "domain.contact.role.funder": "Financeur",
79
79
  "domain.contact.role.mediator": "Médiateur",
80
- "domain.contact.role.originator": "Créateur",
80
+ "domain.contact.role.originator": "Producteur",
81
81
  "domain.contact.role.other": "Autre",
82
82
  "domain.contact.role.owner": "Propriétaire",
83
83
  "domain.contact.role.point_of_contact": "Point de contact",
84
- "domain.contact.role.principal_investigator": "Chercheur principal",
85
- "domain.contact.role.processor": "Processeur",
86
- "domain.contact.role.publisher": "Producteur",
84
+ "domain.contact.role.principal_investigator": "Investigateur principal",
85
+ "domain.contact.role.processor": "Exécutant",
86
+ "domain.contact.role.publisher": "Editeur (publication)",
87
87
  "domain.contact.role.resource_provider": "Fournisseur",
88
88
  "domain.contact.role.rights_holder": "Détenteur des droits",
89
89
  "domain.contact.role.sponsor": "Sponsor",
@@ -425,7 +425,6 @@
425
425
  "map.add.layer.wms": "Depuis un service WMS",
426
426
  "map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
427
427
  "map.dropdown.placeholder": "Aucune couche d'aperçu disponible",
428
- "map.geocoding.placeholder": "Rechercher un lieu",
429
428
  "map.help.addFromFile": "Cliquez ou glissez-déposez un fichier pour l'ajouter à la carte (supporte actuellement uniquement le format GeoJSON).",
430
429
  "map.layer.add": "Ajouter",
431
430
  "map.layers.available": "Couches disponibles",
@@ -692,21 +691,24 @@
692
691
  "search.filters.representationType": "Type de représentation",
693
692
  "search.filters.resourceCreationRevisionDate": "Date de la ressource",
694
693
  "search.filters.resourceType": "Type de ressource",
695
- "search.filters.spatialExtent": "Étendue spatiale",
696
- "search.filters.spatialExtent.bboxFromFile": "étendue de {fileName}",
694
+ "search.filters.spatialExtent.bboxFromFile": "Étendue de {fileName}",
697
695
  "search.filters.spatialExtent.bboxFromFileDelete": "Supprimer {fileName}",
698
- "search.filters.spatialExtent.bboxInitial": "étendue présélectionnée",
696
+ "search.filters.spatialExtent.bboxInitial": "Étendue présélectionnée",
699
697
  "search.filters.spatialExtent.bboxInitialDelete": "Supprimer la sélection",
700
698
  "search.filters.spatialExtent.error.fileTooLarge": "Le fichier dépasse la taille maximale autorisée ({maxSize} Mo)",
701
699
  "search.filters.spatialExtent.error.invalidFormat": "Le fichier n'a pas pu être lu comme un GeoJSON valide",
702
700
  "search.filters.spatialExtent.error.noGeometry": "Aucune géométrie n'a pu être trouvée dans le fichier",
701
+ "search.filters.spatialExtent.error.outOfBounds": "La géométrie du fichier GeoJSON n'est pas conforme ; soit certaines coordonnées sont hors limites ([-180, 180] pour la longitude et [-90, 90] pour la latitude), soit le fichier utilise des coordonnées projetées au lieu de la longitude et de la latitude.",
703
702
  "search.filters.spatialExtent.error.title": "Erreur d'importation GeoJSON",
704
- "search.filters.spatialExtent.helpText": "L’élément sélectionné pour l'étendue sera converti en bbox",
703
+ "search.filters.spatialExtent": "Étendue spatiale",
704
+ "search.filters.spatialExtent.helpText": "L'étendue de la géométrie sélectionnée sera utilisée",
705
705
  "search.filters.spatialExtent.import": "Importer un GeoJSON",
706
706
  "search.filters.standard": "Standard",
707
707
  "search.filters.summaryLabel.changeDate": "Mise à jour : ",
708
708
  "search.filters.summaryLabel.resourceCreationRevisionDate": "Date de la ressource : ",
709
+ "search.filters.summaryLabel.temporalExtent": "Étendue temporelle : ",
709
710
  "search.filters.summaryLabel.user": "Éditeur : ",
711
+ "search.filters.temporalExtent": "Étendue temporelle",
710
712
  "search.filters.title": "Affiner votre recherche",
711
713
  "search.filters.topic": "Thèmes",
712
714
  "search.filters.useSpatialFilter": "Mettre en avant les ressources sur la zone d'intérêt",
@@ -425,7 +425,6 @@
425
425
  "map.add.layer.wms": "Da un WMS",
426
426
  "map.addFromFile.placeholder": "Clicca o trascina un file qui",
427
427
  "map.dropdown.placeholder": "Nessun livello di anteprima disponibile",
428
- "map.geocoding.placeholder": "Cerca un luogo",
429
428
  "map.help.addFromFile": "Clicca o trascina un file per aggiungerlo alla mappa (attualmente supporta solo il formato GeoJSON)",
430
429
  "map.layer.add": "Aggiungi",
431
430
  "map.layers.available": "Layer disponibili",
@@ -692,7 +691,6 @@
692
691
  "search.filters.representationType": "Tipo di rappresentazione",
693
692
  "search.filters.resourceCreationRevisionDate": "Data della risorsa",
694
693
  "search.filters.resourceType": "Tipo di risorsa",
695
- "search.filters.spatialExtent": "",
696
694
  "search.filters.spatialExtent.bboxFromFile": "",
697
695
  "search.filters.spatialExtent.bboxFromFileDelete": "",
698
696
  "search.filters.spatialExtent.bboxInitial": "",
@@ -700,13 +698,17 @@
700
698
  "search.filters.spatialExtent.error.fileTooLarge": "",
701
699
  "search.filters.spatialExtent.error.invalidFormat": "",
702
700
  "search.filters.spatialExtent.error.noGeometry": "",
701
+ "search.filters.spatialExtent.error.outOfBounds": "",
703
702
  "search.filters.spatialExtent.error.title": "",
703
+ "search.filters.spatialExtent": "",
704
704
  "search.filters.spatialExtent.helpText": "",
705
705
  "search.filters.spatialExtent.import": "",
706
706
  "search.filters.standard": "Standard",
707
707
  "search.filters.summaryLabel.changeDate": "Aggiornato: ",
708
708
  "search.filters.summaryLabel.resourceCreationRevisionDate": "Data della risorsa: ",
709
+ "search.filters.summaryLabel.temporalExtent": "Estensione temporale: ",
709
710
  "search.filters.summaryLabel.user": "Editor: ",
711
+ "search.filters.temporalExtent": "Estensione temporale",
710
712
  "search.filters.title": "Affina la sua ricerca",
711
713
  "search.filters.topic": "Argomenti",
712
714
  "search.filters.useSpatialFilter": "Evidenzia le risorse nell'area di interesse",
@@ -425,7 +425,6 @@
425
425
  "map.add.layer.wms": "",
426
426
  "map.addFromFile.placeholder": "",
427
427
  "map.dropdown.placeholder": "",
428
- "map.geocoding.placeholder": "",
429
428
  "map.help.addFromFile": "",
430
429
  "map.layer.add": "",
431
430
  "map.layers.available": "",
@@ -692,7 +691,6 @@
692
691
  "search.filters.representationType": "",
693
692
  "search.filters.resourceCreationRevisionDate": "",
694
693
  "search.filters.resourceType": "",
695
- "search.filters.spatialExtent": "",
696
694
  "search.filters.spatialExtent.bboxFromFile": "",
697
695
  "search.filters.spatialExtent.bboxFromFileDelete": "",
698
696
  "search.filters.spatialExtent.bboxInitial": "",
@@ -700,13 +698,17 @@
700
698
  "search.filters.spatialExtent.error.fileTooLarge": "",
701
699
  "search.filters.spatialExtent.error.invalidFormat": "",
702
700
  "search.filters.spatialExtent.error.noGeometry": "",
701
+ "search.filters.spatialExtent.error.outOfBounds": "",
703
702
  "search.filters.spatialExtent.error.title": "",
703
+ "search.filters.spatialExtent": "",
704
704
  "search.filters.spatialExtent.helpText": "",
705
705
  "search.filters.spatialExtent.import": "",
706
706
  "search.filters.standard": "",
707
707
  "search.filters.summaryLabel.changeDate": "",
708
708
  "search.filters.summaryLabel.resourceCreationRevisionDate": "",
709
+ "search.filters.summaryLabel.temporalExtent": "",
709
710
  "search.filters.summaryLabel.user": "",
711
+ "search.filters.temporalExtent": "",
710
712
  "search.filters.title": "",
711
713
  "search.filters.topic": "",
712
714
  "search.filters.useSpatialFilter": "",