geonetwork-ui 2.6.0-dev.5b83cdcc5 → 2.6.0-dev.6681b0ab3

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 (99) hide show
  1. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +5 -2
  2. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  3. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +45 -9
  4. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +2 -2
  5. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +25 -6
  6. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +3 -3
  7. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +3 -3
  8. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +7 -1
  9. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +5 -3
  10. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +11 -6
  11. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  12. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  13. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +3 -3
  14. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +51 -0
  15. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +1 -1
  16. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  17. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +68 -0
  18. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +34 -13
  19. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +65 -14
  20. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +29 -4
  21. package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +2 -1
  22. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
  23. package/esm2022/translations/de.json +8 -0
  24. package/esm2022/translations/en.json +8 -0
  25. package/esm2022/translations/es.json +8 -0
  26. package/esm2022/translations/fr.json +8 -0
  27. package/esm2022/translations/it.json +8 -0
  28. package/esm2022/translations/nl.json +8 -0
  29. package/esm2022/translations/pt.json +8 -0
  30. package/fesm2022/geonetwork-ui.mjs +380 -55
  31. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  32. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  33. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +3 -0
  34. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  35. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +12 -8
  36. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  37. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +5 -2
  38. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  39. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +4 -0
  40. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  41. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +2 -1
  42. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts.map +1 -1
  43. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +6 -1
  44. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  45. package/libs/ui/elements/src/index.d.ts +1 -0
  46. package/libs/ui/elements/src/index.d.ts.map +1 -1
  47. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +16 -0
  48. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
  49. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  50. package/libs/ui/inputs/src/index.d.ts +1 -0
  51. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  52. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
  53. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
  54. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts +15 -8
  55. package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
  56. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +15 -6
  57. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  58. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +6 -2
  59. package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
  60. package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.d.ts.map +1 -1
  61. package/package.json +2 -2
  62. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +4 -1
  63. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +7 -2
  64. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +12 -9
  65. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +54 -10
  66. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -0
  67. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +27 -1
  68. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -0
  69. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +4 -1
  70. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +7 -0
  71. package/src/libs/ui/dataviz/src/lib/chart/chart.component.ts +2 -1
  72. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +6 -3
  73. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +5 -4
  74. package/src/libs/ui/elements/src/index.ts +1 -0
  75. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +6 -3
  76. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +4 -0
  77. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +48 -0
  78. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +52 -0
  79. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +0 -1
  80. package/src/libs/ui/inputs/src/index.ts +1 -0
  81. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.css +0 -0
  82. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
  83. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +77 -0
  84. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.html +24 -8
  85. package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
  86. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +8 -10
  87. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +75 -7
  88. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +3 -3
  89. package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +27 -3
  90. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +1 -0
  91. package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
  92. package/translations/de.json +8 -0
  93. package/translations/en.json +8 -0
  94. package/translations/es.json +8 -0
  95. package/translations/fr.json +8 -0
  96. package/translations/it.json +8 -0
  97. package/translations/nl.json +8 -0
  98. package/translations/pt.json +8 -0
  99. package/translations/sk.json +8 -0
@@ -1,9 +1,14 @@
1
1
  import {
2
2
  ChangeDetectionStrategy,
3
3
  Component,
4
+ ContentChild,
4
5
  ElementRef,
5
6
  Input,
7
+ TemplateRef,
6
8
  ViewChild,
9
+ OnDestroy,
10
+ ChangeDetectorRef,
11
+ AfterViewInit,
7
12
  } from '@angular/core'
8
13
  import { NgIcon, provideIcons } from '@ng-icons/core'
9
14
  import { CommonModule } from '@angular/common'
@@ -18,20 +23,41 @@ import { matAdd, matRemove } from '@ng-icons/material-icons/baseline'
18
23
  imports: [CommonModule, NgIcon],
19
24
  viewProviders: [provideIcons({ matAdd, matRemove })],
20
25
  })
21
- export class ExpandablePanelComponent {
22
- @Input() title: string
23
- @Input() collapsed = true
24
- @ViewChild('contentDiv') contentDiv: ElementRef
25
- maxHeight = this.setMaxHeight()
26
+ export class ExpandablePanelComponent implements AfterViewInit, OnDestroy {
27
+ @Input() title?: string
28
+ @Input() iconColor? = ''
29
+ @ContentChild('titleTemplate') titleTemplate?: TemplateRef<HTMLElement>
30
+ @ViewChild('contentDiv') contentDiv?: ElementRef
31
+
32
+ private _collapsed = true
33
+ private contentObserver?: ResizeObserver
34
+
35
+ constructor(private readonly changeDetector: ChangeDetectorRef) {}
36
+
37
+ ngAfterViewInit() {
38
+ if (this.contentDiv) {
39
+ this.contentObserver = new ResizeObserver(() => {
40
+ this.changeDetector.detectChanges()
41
+ })
42
+ this.contentObserver.observe(this.contentDiv.nativeElement)
43
+ }
44
+ }
45
+
46
+ @Input() set collapsed(value: boolean) {
47
+ this._collapsed = value
48
+ }
49
+
50
+ get collapsed(): boolean {
51
+ return this._collapsed
52
+ }
26
53
 
27
54
  toggle(): void {
28
55
  this.collapsed = !this.collapsed
29
- this.maxHeight = this.setMaxHeight()
30
56
  }
31
57
 
32
- setMaxHeight() {
33
- return `${
34
- this.collapsed ? '0' : this.contentDiv.nativeElement.scrollHeight
35
- }px`
58
+ ngOnDestroy() {
59
+ if (this.contentObserver) {
60
+ this.contentObserver.disconnect()
61
+ }
36
62
  }
37
63
  }
@@ -1,6 +1,7 @@
1
1
  <div
2
2
  class="flex items-center justify-between w-full gap-2"
3
3
  cdkOverlayOrigin
4
+ [class]="extraClass"
4
5
  #trigger="cdkOverlayOrigin"
5
6
  >
6
7
  <span #textElement class="truncate">
@@ -19,18 +20,15 @@
19
20
  cdkConnectedOverlay
20
21
  [cdkConnectedOverlayOrigin]="trigger"
21
22
  [cdkConnectedOverlayOpen]="isOpen"
22
- [cdkConnectedOverlayPositions]="[
23
- {
24
- originX: 'end',
25
- originY: 'top',
26
- overlayX: 'end',
27
- overlayY: 'top',
28
- },
29
- ]"
30
- (detach)="isOpen = false"
23
+ [cdkConnectedOverlayPositions]="[overlayPosition]"
24
+ cdkConnectedOverlayPush
25
+ [cdkConnectedOverlayWidth]="'auto'"
26
+ [cdkConnectedOverlayFlexibleDimensions]="true"
27
+ [cdkConnectedOverlayGrowAfterOpen]="true"
28
+ (detach)="close()"
31
29
  >
32
30
  <div class="bg-white shadow-lg border border-gray-300 flex">
33
- <div class="w-64">
31
+ <div class="sm:w-64 xs:w-32">
34
32
  <p class="m-2">{{ text }}</p>
35
33
  </div>
36
34
  <gn-ui-button
@@ -4,16 +4,22 @@ import {
4
4
  Component,
5
5
  ElementRef,
6
6
  Input,
7
+ OnDestroy,
7
8
  ViewChild,
9
+ NgZone,
8
10
  } from '@angular/core'
9
11
  import { CommonModule } from '@angular/common'
10
- import { provideIcons } from '@ng-icons/core'
12
+ import { provideIcons, NgIconComponent } from '@ng-icons/core'
11
13
  import { iconoirExpand, iconoirReduce } from '@ng-icons/iconoir'
12
14
  import { TranslateModule } from '@ngx-translate/core'
13
15
  import { MatButtonModule } from '@angular/material/button'
14
- import { OverlayModule } from '@angular/cdk/overlay'
16
+ import {
17
+ OverlayModule,
18
+ ViewportRuler,
19
+ ConnectedPosition,
20
+ } from '@angular/cdk/overlay'
15
21
  import { ButtonComponent } from '../../../../../../libs/ui/inputs/src'
16
- import { NgIconComponent } from '@ng-icons/core'
22
+ import { Subscription } from 'rxjs'
17
23
 
18
24
  @Component({
19
25
  selector: 'gn-ui-truncated-text',
@@ -30,24 +36,85 @@ import { NgIconComponent } from '@ng-icons/core'
30
36
  templateUrl: './truncated-text.component.html',
31
37
  styles: [],
32
38
  })
33
- export class TruncatedTextComponent implements AfterViewInit {
39
+ export class TruncatedTextComponent implements AfterViewInit, OnDestroy {
34
40
  @Input() text = ''
41
+ @Input() extraClass = ''
42
+
35
43
  @ViewChild('textElement') textElement: ElementRef<HTMLElement>
36
44
  isTextTruncated = false
37
45
  isOpen = false
46
+ overlayPosition: ConnectedPosition = {
47
+ originX: 'end',
48
+ originY: 'top',
49
+ overlayX: 'end',
50
+ overlayY: 'top',
51
+ }
52
+ private readonly resizeObserver: ResizeObserver
53
+ private readonly mutationObserver: MutationObserver
54
+ private readonly viewportSubscription: Subscription
55
+
56
+ constructor(
57
+ private readonly cd: ChangeDetectorRef,
58
+ private readonly ngZone: NgZone,
59
+ private readonly viewportRuler: ViewportRuler
60
+ ) {
61
+ this.resizeObserver = new ResizeObserver(() => {
62
+ this.ngZone.run(() => this.checkTextTruncation())
63
+ })
38
64
 
39
- constructor(private cd: ChangeDetectorRef) {}
65
+ this.mutationObserver = new MutationObserver(() => {
66
+ this.ngZone.run(() => {
67
+ this.checkTextTruncation()
68
+ this.close()
69
+ })
70
+ })
71
+
72
+ this.viewportSubscription = this.viewportRuler.change().subscribe(() => {
73
+ if (this.isOpen) {
74
+ this.updateOverlayPosition()
75
+ }
76
+ })
77
+ }
40
78
 
41
79
  ngAfterViewInit() {
80
+ const element = this.textElement.nativeElement
81
+ this.resizeObserver?.observe(element)
82
+ this.mutationObserver?.observe(element.parentElement, {
83
+ attributes: true,
84
+ childList: true,
85
+ subtree: true,
86
+ })
42
87
  this.checkTextTruncation()
43
88
  }
44
89
 
45
- ngOnChange() {
46
- this.checkTextTruncation()
90
+ ngOnDestroy() {
91
+ this.resizeObserver?.disconnect()
92
+ this.mutationObserver?.disconnect()
93
+ this.viewportSubscription?.unsubscribe()
94
+ this.close()
47
95
  }
48
96
 
49
97
  toggleOverlay() {
50
98
  this.isOpen = !this.isOpen
99
+ if (this.isOpen) {
100
+ this.updateOverlayPosition()
101
+ }
102
+ }
103
+
104
+ private updateOverlayPosition() {
105
+ const element = this.textElement.nativeElement
106
+ const rect = element.getBoundingClientRect()
107
+ const viewportWidth = this.viewportRuler.getViewportSize().width
108
+ const isMobile = viewportWidth < 640
109
+ const overlayWidth = isMobile ? 190 : 320
110
+ const isNearLeftEdge = rect.left < overlayWidth
111
+
112
+ this.overlayPosition = {
113
+ originX: isNearLeftEdge ? 'start' : 'end',
114
+ originY: 'top',
115
+ overlayX: isNearLeftEdge ? 'start' : 'end',
116
+ overlayY: 'top',
117
+ }
51
118
  }
52
119
 
53
120
  close() {
@@ -56,6 +123,7 @@ export class TruncatedTextComponent implements AfterViewInit {
56
123
 
57
124
  private checkTextTruncation() {
58
125
  const element = this.textElement.nativeElement
126
+
59
127
  this.isTextTruncated = element.scrollWidth > element.clientWidth
60
128
  this.cd.detectChanges()
61
129
  }
@@ -1,6 +1,6 @@
1
1
  <div *ngIf="feature" class="root">
2
- <div class="property" *ngFor="let propName of properties">
3
- <div>{{ propName }}</div>
4
- <div class="font-bold">{{ feature.properties[propName] }}</div>
2
+ <div class="property" *ngFor="let prop of properties | keyvalue">
3
+ <div>{{ prop.key }}</div>
4
+ <div class="font-bold">{{ prop.value }}</div>
5
5
  </div>
6
6
  </div>
@@ -1,6 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
2
2
  import { CommonModule } from '@angular/common'
3
3
  import type { Feature } from 'geojson'
4
+ import { DatasetFeatureCatalog } from '../../../../../../../libs/common/domain/src/lib/model/record'
4
5
 
5
6
  const geometryKeys = ['geometry', 'the_geom']
6
7
 
@@ -14,11 +15,34 @@ const geometryKeys = ['geometry', 'the_geom']
14
15
  })
15
16
  export class FeatureDetailComponent {
16
17
  @Input() feature: Feature
18
+ _featureAttributes = []
19
+ @Input() set featureCatalog(value: DatasetFeatureCatalog) {
20
+ if (value) this._featureAttributes = value.featureTypes[0].attributes
21
+ }
17
22
 
18
23
  get properties() {
19
24
  if (!this.feature) return []
20
- return Object.keys(this.feature.properties).filter(
21
- (prop) => !geometryKeys.includes(prop)
22
- )
25
+ return this.setProperties()
26
+ }
27
+
28
+ setProperties() {
29
+ const properties = Object.keys(this.feature.properties)
30
+ .filter((p) => !geometryKeys.includes(p))
31
+ .reduce((acc, p) => {
32
+ let key = p
33
+ if (this._featureAttributes.length) {
34
+ const matchingAttribute = this._featureAttributes.find(
35
+ (attr) => attr.name === p
36
+ )
37
+
38
+ if (matchingAttribute && matchingAttribute.code) {
39
+ key = matchingAttribute.code
40
+ }
41
+ }
42
+ acc[key] = this.feature.properties[p]
43
+ return acc
44
+ }, {})
45
+
46
+ return properties
23
47
  }
24
48
  }
@@ -57,6 +57,7 @@ export class SpatialExtentComponent {
57
57
  style: {
58
58
  'stroke-color': 'black',
59
59
  'stroke-width': 2,
60
+ 'fill-color': 'rgba(153, 153, 153, 0.3)',
60
61
  },
61
62
  }
62
63
  const view = await createViewFromLayer(layer)
@@ -12,6 +12,7 @@
12
12
  (mdSelect)="mdSelect.emit($event)"
13
13
  [favoriteTemplate]="favoriteTemplate"
14
14
  [linkHref]="recordUrlGetter(record)"
15
+ [attr.data-cy]="record.uniqueIdentifier"
15
16
  ></gn-ui-results-list-item>
16
17
  </div>
17
18
  </div>
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "Stichwort",
285
285
  "facets.block.title.th_regions_tree.default": "Regionen",
286
286
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
287
+ "feature.catalog.attribute.code": "",
288
+ "feature.catalog.attribute.description": "",
289
+ "feature.catalog.attribute.name": "",
290
+ "feature.catalog.attribute.type": "",
287
291
  "input.file.dropFileLabel": "",
288
292
  "input.file.orInputUrl": "",
289
293
  "input.file.selectFileLabel": "",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "Anzeigen",
362
366
  "record.card.metadata.contact": "",
363
367
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
368
+ "record.metadata.feature.catalog": "",
369
+ "record.feature.catalog.number.total.attribute": "",
370
+ "record.feature.catalog.number.total.object": "",
364
371
  "record.feature.limit": "Die Vorschau wurde aufgrund zu vieler Elemente deaktiviert",
365
372
  "record.kind.data": "",
366
373
  "record.kind.dataset": "",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
489
496
  "search.field.any.placeholder": "Suche im katalog ...",
490
497
  "search.field.sortBy": "Sortieren nach:",
498
+ "search.filter.into.feature.catalog": "",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "Letzte Aktualisierung",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "Tag",
285
285
  "facets.block.title.th_regions_tree.default": "Regions",
286
286
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
287
+ "feature.catalog.attribute.code": "Code",
288
+ "feature.catalog.attribute.description": "Description",
289
+ "feature.catalog.attribute.name": "Name",
290
+ "feature.catalog.attribute.type": "Type",
287
291
  "input.file.dropFileLabel": "or drop it here",
288
292
  "input.file.orInputUrl": "or create a link to an external resource",
289
293
  "input.file.selectFileLabel": "Select a file ({sizeMB} MB max.)",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "View",
362
366
  "record.card.metadata.contact": "Metadata Contact",
363
367
  "record.externalViewer.open": "Open in the external map viewer",
368
+ "record.metadata.feature.catalog": "Feature catalog",
369
+ "record.feature.catalog.number.total.attribute": "Total amount of objects",
370
+ "record.feature.catalog.number.total.object": "Total amount of attributes",
364
371
  "record.feature.limit": "Preview disabled due to too many elements",
365
372
  "record.kind.data": "Data",
366
373
  "record.kind.dataset": "Dataset",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "The dataset with identifier \"{ id }\" could not be found.",
489
496
  "search.field.any.placeholder": "Search in the catalog ...",
490
497
  "search.field.sortBy": "Sort by:",
498
+ "search.filter.into.feature.catalog": "Search a term",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "Updated",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "",
285
285
  "facets.block.title.th_regions_tree.default": "",
286
286
  "favorite.not.authenticated.tooltip": "",
287
+ "feature.catalog.attribute.code": "",
288
+ "feature.catalog.attribute.description": "",
289
+ "feature.catalog.attribute.name": "",
290
+ "feature.catalog.attribute.type": "",
287
291
  "input.file.dropFileLabel": "",
288
292
  "input.file.orInputUrl": "",
289
293
  "input.file.selectFileLabel": "",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "",
362
366
  "record.card.metadata.contact": "",
363
367
  "record.externalViewer.open": "",
368
+ "record.feature.catalog": "",
369
+ "record.feature.catalog.number.total.attribute": "",
370
+ "record.feature.catalog.number.total.object": "",
364
371
  "record.feature.limit": "",
365
372
  "record.kind.data": "",
366
373
  "record.kind.dataset": "",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "",
489
496
  "search.field.any.placeholder": "",
490
497
  "search.field.sortBy": "",
498
+ "search.filter.into.feature.catalog": "",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "Última actualización",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "Tag",
285
285
  "facets.block.title.th_regions_tree.default": "Régions",
286
286
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Connectez-vous</a> pour avoir accès à cette fonctionnalité</div>",
287
+ "feature.catalog.attribute.code": "Code",
288
+ "feature.catalog.attribute.description": "Description",
289
+ "feature.catalog.attribute.name": "Nom",
290
+ "feature.catalog.attribute.type": "Type",
287
291
  "input.file.dropFileLabel": "ou glissez-le ici",
288
292
  "input.file.orInputUrl": "ou créez un lien vers une ressource externe",
289
293
  "input.file.selectFileLabel": "Sélectionnez un fichier ({sizeMB} Mo max.)",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "Voir",
362
366
  "record.card.metadata.contact": "Contact de la métadonnée ",
363
367
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
368
+ "record.metadata.feature.catalog": "Catalogue d'attributs",
369
+ "record.feature.catalog.number.total.attribute": "Nombre total d'attributs",
370
+ "record.feature.catalog.number.total.object": "Nombre total d'objets",
364
371
  "record.feature.limit": "L’aperçu a été désactivé en raison d’un trop grand nombre d'éléments",
365
372
  "record.kind.data": "Donnée",
366
373
  "record.kind.dataset": "Donnée",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
489
496
  "search.field.any.placeholder": "Rechercher dans le catalogue...",
490
497
  "search.field.sortBy": "Trier par :",
498
+ "search.filter.into.feature.catalog": "Rechercher un terme",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "Mise à jour",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "Tag",
285
285
  "facets.block.title.th_regions_tree.default": "Regioni",
286
286
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
287
+ "feature.catalog.attribute.code": "",
288
+ "feature.catalog.attribute.description": "",
289
+ "feature.catalog.attribute.name": "",
290
+ "feature.catalog.attribute.type": "",
287
291
  "input.file.dropFileLabel": "oppure trascinalo qui",
288
292
  "input.file.orInputUrl": "o collegamento a una risorsa esterna",
289
293
  "input.file.selectFileLabel": "Seleziona un file ({sizeMB} MB max.)",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "Visualizza",
362
366
  "record.card.metadata.contact": "",
363
367
  "record.externalViewer.open": "Aprire nel visualizzatore esterno",
368
+ "record.feature.catalog": "",
369
+ "record.feature.catalog.number.total.attribute": "",
370
+ "record.feature.catalog.number.total.object": "",
364
371
  "record.feature.limit": "La visualizzazione è stata disabilitata a causa di troppi elementi ",
365
372
  "record.kind.data": "",
366
373
  "record.kind.dataset": "",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "Impossibile trovare questi dati.",
489
496
  "search.field.any.placeholder": "Cerca del catalogo...",
490
497
  "search.field.sortBy": "Ordina per:",
498
+ "search.filter.into.feature.catalog": "",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "Aggiornato",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "",
285
285
  "facets.block.title.th_regions_tree.default": "",
286
286
  "favorite.not.authenticated.tooltip": "",
287
+ "feature.catalog.attribute.code": "",
288
+ "feature.catalog.attribute.description": "",
289
+ "feature.catalog.attribute.name": "",
290
+ "feature.catalog.attribute.type": "",
287
291
  "input.file.dropFileLabel": "",
288
292
  "input.file.orInputUrl": "",
289
293
  "input.file.selectFileLabel": "",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "",
362
366
  "record.card.metadata.contact": "",
363
367
  "record.externalViewer.open": "",
368
+ "record.feature.catalog": "",
369
+ "record.feature.catalog.number.total.attribute": "",
370
+ "record.feature.catalog.number.total.object": "",
364
371
  "record.feature.limit": "",
365
372
  "record.kind.data": "",
366
373
  "record.kind.dataset": "",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "",
489
496
  "search.field.any.placeholder": "",
490
497
  "search.field.sortBy": "",
498
+ "search.filter.into.feature.catalog": "",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "",
285
285
  "facets.block.title.th_regions_tree.default": "",
286
286
  "favorite.not.authenticated.tooltip": "",
287
+ "feature.catalog.attribute.code": "",
288
+ "feature.catalog.attribute.description": "",
289
+ "feature.catalog.attribute.name": "",
290
+ "feature.catalog.attribute.type": "",
287
291
  "input.file.dropFileLabel": "",
288
292
  "input.file.orInputUrl": "",
289
293
  "input.file.selectFileLabel": "",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "",
362
366
  "record.card.metadata.contact": "",
363
367
  "record.externalViewer.open": "",
368
+ "record.feature.catalog": "",
369
+ "record.feature.catalog.number.total.attribute": "",
370
+ "record.feature.catalog.number.total.object": "",
364
371
  "record.feature.limit": "",
365
372
  "record.kind.data": "",
366
373
  "record.kind.dataset": "",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "",
489
496
  "search.field.any.placeholder": "",
490
497
  "search.field.sortBy": "",
498
+ "search.filter.into.feature.catalog": "",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "",
@@ -284,6 +284,10 @@
284
284
  "facets.block.title.tag.default": "Štítok",
285
285
  "facets.block.title.th_regions_tree.default": "Regióny",
286
286
  "favorite.not.authenticated.tooltip": "<div><a href='{link}'>Prihlásiť sa</a> pre prístup k tejto funkcii</div>",
287
+ "feature.catalog.attribute.code": "",
288
+ "feature.catalog.attribute.description": "",
289
+ "feature.catalog.attribute.name": "",
290
+ "feature.catalog.attribute.type": "",
287
291
  "input.file.dropFileLabel": "",
288
292
  "input.file.orInputUrl": "",
289
293
  "input.file.selectFileLabel": "",
@@ -361,6 +365,9 @@
361
365
  "record.action.view": "Zobraziť",
362
366
  "record.card.metadata.contact": "",
363
367
  "record.externalViewer.open": "Otvoriť v externom mapovom prehliadači",
368
+ "record.feature.catalog": "",
369
+ "record.feature.catalog.number.total.attribute": "",
370
+ "record.feature.catalog.number.total.object": "",
364
371
  "record.feature.limit": "",
365
372
  "record.kind.data": "",
366
373
  "record.kind.dataset": "",
@@ -488,6 +495,7 @@
488
495
  "search.error.recordNotFound": "Záznam s identifikátorom \"{ id }\" sa nepodarilo nájsť.",
489
496
  "search.field.any.placeholder": "Hľadať datasety ...",
490
497
  "search.field.sortBy": "Zoradiť podľa:",
498
+ "search.filter.into.feature.catalog": "",
491
499
  "search.filters.availableServices.download": "",
492
500
  "search.filters.availableServices.view": "",
493
501
  "search.filters.changeDate": "",