geonetwork-ui 2.6.0-dev.600519f47 → 2.6.0-dev.6e0b3d33d

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 (101) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +4 -1
  2. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +45 -15
  3. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  7. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +4 -3
  8. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
  9. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +19 -34
  10. package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
  11. package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +50 -29
  12. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -3
  13. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  14. package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
  15. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +20 -10
  16. package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +15 -49
  17. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
  18. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +5 -3
  19. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +16 -8
  20. package/esm2022/translations/de.json +15 -6
  21. package/esm2022/translations/en.json +15 -6
  22. package/esm2022/translations/es.json +14 -5
  23. package/esm2022/translations/fr.json +15 -6
  24. package/esm2022/translations/it.json +14 -5
  25. package/esm2022/translations/nl.json +14 -5
  26. package/esm2022/translations/pt.json +14 -5
  27. package/fesm2022/geonetwork-ui.mjs +867 -624
  28. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  29. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  30. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +8 -2
  31. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  32. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  33. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  34. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
  35. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  36. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +20 -17
  37. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  38. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -0
  39. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  40. package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
  41. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
  42. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  43. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -6
  44. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  45. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
  46. package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
  47. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
  48. package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
  49. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  50. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  51. package/libs/ui/layout/src/index.d.ts +1 -0
  52. package/libs/ui/layout/src/index.d.ts.map +1 -1
  53. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
  54. package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
  55. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
  56. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  57. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +5 -10
  58. package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
  59. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +2 -1
  60. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  61. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +5 -3
  62. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +7 -0
  65. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +57 -14
  66. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
  67. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
  68. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -14
  69. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +3 -0
  70. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +63 -0
  71. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +1 -1
  72. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +1 -0
  73. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  74. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
  75. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +7 -75
  76. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +20 -51
  77. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
  78. package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
  79. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
  80. package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +60 -29
  81. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -0
  82. package/src/libs/ui/layout/src/index.ts +1 -0
  83. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
  84. package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
  85. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +2 -2
  86. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -6
  87. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
  88. package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +10 -49
  89. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
  90. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +6 -4
  91. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +1 -0
  92. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +14 -20
  93. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +13 -5
  94. package/translations/de.json +15 -6
  95. package/translations/en.json +15 -6
  96. package/translations/es.json +14 -5
  97. package/translations/fr.json +15 -6
  98. package/translations/it.json +14 -5
  99. package/translations/nl.json +14 -5
  100. package/translations/pt.json +14 -5
  101. package/translations/sk.json +14 -5
@@ -1,44 +1,27 @@
1
- <div
2
- class="flex items-center justify-between w-full gap-2"
3
- cdkOverlayOrigin
4
- [class]="extraClass"
5
- #trigger="cdkOverlayOrigin"
1
+ <gn-ui-cell-popin
2
+ #popinRef
3
+ [activePopin]="isTextTruncated"
4
+ [scrollContainer]="scrollContainer"
5
+ [cdkScrollContainer]="cdkScrollContainer"
6
6
  >
7
- <span #textElement class="truncate">
8
- {{ text }}
9
- </span>
10
- <gn-ui-button
11
- *ngIf="isTextTruncated"
12
- type="outline"
13
- extraClass="w-10 h-8 border rounded-lg"
14
- (buttonClick)="toggleOverlay()"
7
+ <div
8
+ cellContent
9
+ class="flex items-center justify-between w-full gap-2"
10
+ [class]="extraClass"
15
11
  >
16
- <ng-icon name="iconoirExpand" size="24"> </ng-icon>
17
- </gn-ui-button>
18
-
19
- <ng-template
20
- cdkConnectedOverlay
21
- [cdkConnectedOverlayOrigin]="trigger"
22
- [cdkConnectedOverlayOpen]="isOpen"
23
- [cdkConnectedOverlayPositions]="[overlayPosition]"
24
- cdkConnectedOverlayPush
25
- [cdkConnectedOverlayWidth]="'auto'"
26
- [cdkConnectedOverlayFlexibleDimensions]="true"
27
- [cdkConnectedOverlayGrowAfterOpen]="true"
28
- (detach)="close()"
29
- >
30
- <div class="bg-white shadow-lg border border-gray-300 flex">
31
- <div class="sm:w-64 xs:w-32">
32
- <p class="m-2">{{ text }}</p>
33
- </div>
34
- <gn-ui-button
35
- class="m-2 flex-shrink-0"
36
- type="light"
37
- (buttonClick)="close()"
38
- extraClass="w-10 h-8 px-1 bg-white"
39
- >
40
- <ng-icon name="iconoirReduce" size="24"> </ng-icon>
41
- </gn-ui-button>
42
- </div>
43
- </ng-template>
44
- </div>
12
+ <span #textElement class="truncate py-3 px-2">
13
+ {{ text }}
14
+ </span>
15
+ <gn-ui-button
16
+ *ngIf="isTextTruncated"
17
+ type="outline"
18
+ extraClass="w-10 h-8 border rounded-lg mr-2"
19
+ (buttonClick)="popinRef.openOverlay()"
20
+ >
21
+ <ng-icon name="iconoirExpand" size="24"> </ng-icon>
22
+ </gn-ui-button>
23
+ </div>
24
+ <div popinContent class="sm:w-64 xs:w-32 py-4 pl-6 pr-9">
25
+ <p>{{ text }}</p>
26
+ </div>
27
+ </gn-ui-cell-popin>
@@ -10,16 +10,17 @@ import {
10
10
  } from '@angular/core'
11
11
  import { CommonModule } from '@angular/common'
12
12
  import { provideIcons, NgIconComponent } from '@ng-icons/core'
13
- import { iconoirExpand, iconoirReduce } from '@ng-icons/iconoir'
13
+ import { iconoirExpand } from '@ng-icons/iconoir'
14
14
  import { TranslateModule } from '@ngx-translate/core'
15
15
  import { MatButtonModule } from '@angular/material/button'
16
16
  import {
17
+ CdkScrollable,
17
18
  OverlayModule,
18
19
  ViewportRuler,
19
20
  ConnectedPosition,
20
21
  } from '@angular/cdk/overlay'
21
22
  import { ButtonComponent } from '../../../../../../libs/ui/inputs/src'
22
- import { Subscription } from 'rxjs'
23
+ import { CellPopinComponent } from '../cell-popin/cell-popin.component'
23
24
 
24
25
  @Component({
25
26
  selector: 'gn-ui-truncated-text',
@@ -30,33 +31,29 @@ import { Subscription } from 'rxjs'
30
31
  MatButtonModule,
31
32
  OverlayModule,
32
33
  ButtonComponent,
34
+ CellPopinComponent,
33
35
  NgIconComponent,
34
36
  ],
35
- providers: [provideIcons({ iconoirExpand, iconoirReduce })],
37
+ providers: [provideIcons({ iconoirExpand })],
36
38
  templateUrl: './truncated-text.component.html',
37
39
  styles: [],
38
40
  })
39
41
  export class TruncatedTextComponent implements AfterViewInit, OnDestroy {
40
42
  @Input() text = ''
41
43
  @Input() extraClass = ''
44
+ @Input() scrollContainer!: ElementRef
45
+ @Input() cdkScrollContainer!: CdkScrollable
42
46
 
43
47
  @ViewChild('textElement') textElement: ElementRef<HTMLElement>
48
+
44
49
  isTextTruncated = false
45
- isOpen = false
46
- overlayPosition: ConnectedPosition = {
47
- originX: 'end',
48
- originY: 'top',
49
- overlayX: 'end',
50
- overlayY: 'top',
51
- }
50
+
52
51
  private readonly resizeObserver: ResizeObserver
53
52
  private readonly mutationObserver: MutationObserver
54
- private readonly viewportSubscription: Subscription
55
53
 
56
54
  constructor(
57
55
  private readonly cd: ChangeDetectorRef,
58
- private readonly ngZone: NgZone,
59
- private readonly viewportRuler: ViewportRuler
56
+ private readonly ngZone: NgZone
60
57
  ) {
61
58
  this.resizeObserver = new ResizeObserver(() => {
62
59
  this.ngZone.run(() => this.checkTextTruncation())
@@ -65,15 +62,8 @@ export class TruncatedTextComponent implements AfterViewInit, OnDestroy {
65
62
  this.mutationObserver = new MutationObserver(() => {
66
63
  this.ngZone.run(() => {
67
64
  this.checkTextTruncation()
68
- this.close()
69
65
  })
70
66
  })
71
-
72
- this.viewportSubscription = this.viewportRuler.change().subscribe(() => {
73
- if (this.isOpen) {
74
- this.updateOverlayPosition()
75
- }
76
- })
77
67
  }
78
68
 
79
69
  ngAfterViewInit() {
@@ -90,35 +80,6 @@ export class TruncatedTextComponent implements AfterViewInit, OnDestroy {
90
80
  ngOnDestroy() {
91
81
  this.resizeObserver?.disconnect()
92
82
  this.mutationObserver?.disconnect()
93
- this.viewportSubscription?.unsubscribe()
94
- this.close()
95
- }
96
-
97
- toggleOverlay() {
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
- }
118
- }
119
-
120
- close() {
121
- this.isOpen = false
122
83
  }
123
84
 
124
85
  private checkTextTruncation() {
@@ -1,9 +1,9 @@
1
1
  import { NgModule } from '@angular/core'
2
2
  import { CommonModule } from '@angular/common'
3
3
  import { TranslateModule } from '@ngx-translate/core'
4
+ import { NgIconComponent } from '@ng-icons/core'
4
5
  import { StickyHeaderComponent } from './sticky-header/sticky-header.component'
5
6
  import { AnchorLinkDirective } from './anchor-link/anchor-link.directive'
6
- import { NgIconComponent, provideNgIconsConfig } from '@ng-icons/core'
7
7
 
8
8
  @NgModule({
9
9
  imports: [CommonModule, TranslateModule.forChild(), NgIconComponent],
@@ -13,11 +13,13 @@
13
13
  [disabled]="!canDuplicate"
14
14
  data-test="record-menu-duplicate-button"
15
15
  >
16
- <span *ngIf="canDuplicate" translate>record.action.duplicate</span>
17
- <span *ngIf="!canDuplicate" translate
16
+ <span *ngIf="isDuplicating; else notDuplicating" translate
18
17
  >record.action.duplicating</span
19
- ></gn-ui-button
20
- >
18
+ >
19
+ <ng-template #notDuplicating>
20
+ <span translate>record.action.duplicate</span>
21
+ </ng-template>
22
+ </gn-ui-button>
21
23
  <gn-ui-button
22
24
  *ngIf="page === 'record'"
23
25
  type="light"
@@ -31,6 +31,7 @@ type ActionMenuPage = 'mainMenu' | 'deleteMenu' | 'rollbackMenu'
31
31
  })
32
32
  export class ActionMenuComponent {
33
33
  @Input() canDuplicate = true
34
+ @Input() isDuplicating: boolean
34
35
  @Input() canDelete = true
35
36
  @Input() page: 'draft' | 'main' | 'record'
36
37
  @Output() duplicate = new EventEmitter<void>()
@@ -1,5 +1,6 @@
1
1
  <gn-ui-interactive-table
2
2
  [items]="records"
3
+ [canEditItem]="canEdit"
3
4
  [isDraftPage]="isDraftPage"
4
5
  (itemClick)="handleRecordClick($event)"
5
6
  >
@@ -9,15 +10,16 @@
9
10
  <ng-icon
10
11
  name="iconoirLock"
11
12
  class="text-purple"
12
- *ngIf="(!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'"
13
+ *ngIf="(canEdit(item) | async) === false; else selectCheckbox"
13
14
  ></ng-icon>
14
- <gn-ui-checkbox
15
- *ngIf="(item.extras?.edit || isDraftPage) && item.kind === 'dataset'"
16
- [checked]="isChecked(item)"
17
- (changed)="handleRecordSelectedChange($event, item)"
18
- class="-m-2"
19
- type="default"
20
- ></gn-ui-checkbox>
15
+ <ng-template #selectCheckbox>
16
+ <gn-ui-checkbox
17
+ [checked]="isChecked(item)"
18
+ (changed)="handleRecordSelectedChange($event, item)"
19
+ class="-m-2"
20
+ type="default"
21
+ ></gn-ui-checkbox>
22
+ </ng-template>
21
23
  </ng-template>
22
24
  </gn-ui-interactive-table-column>
23
25
 
@@ -158,23 +160,15 @@
158
160
  (buttonClick)="openActionMenu(item, template)"
159
161
  type="light"
160
162
  data-test="record-menu-button"
161
- [disabled]="
162
- (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset'
163
- "
164
163
  >
165
- <ng-icon
166
- [ngClass]="{
167
- 'text-purple-light':
168
- (!item.extras?.edit && !isDraftPage) || item.kind !== 'dataset',
169
- }"
170
- name="matMoreVert"
171
- ></ng-icon>
164
+ <ng-icon name="matMoreVert"></ng-icon>
172
165
  </gn-ui-button>
173
166
  </div>
174
167
  <ng-template #template>
175
168
  <gn-ui-action-menu
176
- [canDuplicate]="canDuplicate(item) && !isDuplicating"
177
- [canDelete]="canDelete(item)"
169
+ [canDuplicate]="canDuplicate(item)"
170
+ [isDuplicating]="isDuplicating"
171
+ [canDelete]="canDelete(item) | async"
178
172
  [page]="isDraftPage ? 'draft' : 'main'"
179
173
  (duplicate)="handleDuplicate(item)"
180
174
  (delete)="handleDelete(item)"
@@ -35,6 +35,7 @@ import { iconoirUser, iconoirLock, iconoirTranslate } from '@ng-icons/iconoir'
35
35
  import { CdkOverlayOrigin, Overlay, OverlayRef } from '@angular/cdk/overlay'
36
36
  import { TemplatePortal } from '@angular/cdk/portal'
37
37
  import { matMoreVert } from '@ng-icons/material-icons/baseline'
38
+ import { Observable, of, take } from 'rxjs'
38
39
 
39
40
  @Component({
40
41
  selector: 'gn-ui-results-table',
@@ -62,7 +63,10 @@ export class ResultsTableComponent {
62
63
  @Input() sortOrder: SortByField = null
63
64
  @Input() hasDraft: (record: CatalogRecord) => boolean = () => false
64
65
  @Input() canDuplicate: (record: CatalogRecord) => boolean = () => true
65
- @Input() canDelete: (record: CatalogRecord) => boolean = () => true
66
+ @Input() canDelete: (record: CatalogRecord) => Observable<boolean> = () =>
67
+ of(true)
68
+ @Input() canEdit: (record: CatalogRecord) => Observable<boolean> = () =>
69
+ of(true)
66
70
  @Input() isDraftPage = false
67
71
  @Input() isDuplicating = false
68
72
 
@@ -171,10 +175,14 @@ export class ResultsTableComponent {
171
175
  return getBadgeColor(format)
172
176
  }
173
177
 
174
- handleRecordClick(item: CatalogRecord) {
175
- if ((item?.extras?.edit || this.isDraftPage) && item.kind === 'dataset') {
176
- this.recordClick.emit(item as CatalogRecord)
177
- }
178
+ handleRecordClick(item: unknown) {
179
+ this.canEdit(item as CatalogRecord)
180
+ .pipe(take(1))
181
+ .subscribe((canEdit) => {
182
+ if (canEdit) {
183
+ this.recordClick.emit(item as CatalogRecord)
184
+ }
185
+ })
178
186
  }
179
187
 
180
188
  handleDuplicate(item: unknown) {
@@ -241,8 +241,9 @@
241
241
  "editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
242
242
  "editor.record.loadError.closeMessage": "Verstanden",
243
243
  "editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
244
- "editor.record.lock.format": "",
245
- "editor.record.lock.reason": "",
244
+ "editor.record.lock.harvested": "",
245
+ "editor.record.lock.owner": "",
246
+ "editor.record.lock.resourceType": "",
246
247
  "editor.record.multilingual.confirmation.cancelText": "",
247
248
  "editor.record.multilingual.confirmation.confirmText": "",
248
249
  "editor.record.multilingual.confirmation.message": "",
@@ -293,6 +294,11 @@
293
294
  "facets.block.title.tag.default": "Stichwort",
294
295
  "facets.block.title.th_regions_tree.default": "Regionen",
295
296
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
297
+ "feature.catalog.attribute.code": "Code",
298
+ "feature.catalog.attribute.definition": "Beschreibung",
299
+ "feature.catalog.attribute.name": "Name",
300
+ "feature.catalog.attribute.type": "Typ",
301
+ "feature.catalog.attribute.values": "Werte",
296
302
  "input.file.dropFileLabel": "",
297
303
  "input.file.orInputUrl": "",
298
304
  "input.file.selectFileLabel": "",
@@ -430,9 +436,15 @@
430
436
  "record.metadata.download": "Downloads",
431
437
  "record.metadata.feature.catalog": "",
432
438
  "record.metadata.formats": "Formate",
439
+ "record.metadata.isGeographical": "Geographischer Datensatz",
433
440
  "record.metadata.keywords": "Stichworte",
434
441
  "record.metadata.languages": "Sprachen",
435
442
  "record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
443
+ "record.metadata.linked.datasets": "Verknüpfte Datensätze",
444
+ "record.metadata.linked.records": "Verknüpfte Inhalte",
445
+ "record.metadata.linked.reuses": "Verknüpfte Wiederverwendungen",
446
+ "record.metadata.linked.services": "Verknüpfte Dienste",
447
+ "record.metadata.linked.sourceDatasets": "Quelldatensätze",
436
448
  "record.metadata.links": "Links",
437
449
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
438
450
  "record.metadata.otherConstraints": "Zusätzliche Bedingungen",
@@ -459,8 +471,7 @@
459
471
  "record.metadata.quality.topic.success": "Thema angegeben",
460
472
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
461
473
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
462
- "record.metadata.related": "Ähnliche Datensätze",
463
- "record.metadata.related.contents": "",
474
+ "record.metadata.related": "Entdecken Sie den Katalog",
464
475
  "record.metadata.ressources.and.links": "Ressourcen und Links",
465
476
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
466
477
  "record.metadata.status": "Status",
@@ -472,7 +483,6 @@
472
483
  "record.metadata.temporalExtent.untilDate": "Bis {end}",
473
484
  "record.metadata.title": "Titel",
474
485
  "record.metadata.topics": "Kategorien",
475
- "record.metadata.isGeographical": "Geographischer Datensatz",
476
486
  "record.metadata.uniqueId": "Eindeutige Kennung",
477
487
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
478
488
  "record.metadata.updatedOn": "Geändert am",
@@ -592,7 +602,6 @@
592
602
  "tooltip.html.copy": "HTML kopieren",
593
603
  "tooltip.id.copy": "Eindeutige Kennung kopieren",
594
604
  "tooltip.url.copy": "URL kopieren",
595
- "tooltip.url.open": "URL öffnen",
596
605
  "ui.readLess": "Weniger lesen",
597
606
  "ui.readMore": "Weiterlesen",
598
607
  "wfs.feature.limit": "Zu viele Features, um den WFS-Layer anzuzeigen!",
@@ -241,8 +241,9 @@
241
241
  "editor.record.loadError.body": "The dataset could not be loaded:",
242
242
  "editor.record.loadError.closeMessage": "Understood",
243
243
  "editor.record.loadError.title": "Error loading dataset",
244
- "editor.record.lock.format": "Record with the format 'service' or 'reuse' are not editable",
245
- "editor.record.lock.reason": "You are not an editor of the allowed groups",
244
+ "editor.record.lock.harvested": "Datasets harvested from an external catalog are not editable",
245
+ "editor.record.lock.owner": "You are not an editor of the allowed groups",
246
+ "editor.record.lock.resourceType": "Records of a type other than dataset are not editable",
246
247
  "editor.record.multilingual.confirmation.cancelText": "Keep the language(s)",
247
248
  "editor.record.multilingual.confirmation.confirmText": "Remove the language(s)",
248
249
  "editor.record.multilingual.confirmation.message": "You are about to remove one or several languages, which will delete all of the related translations and is irreversible. Do you want to proceed?",
@@ -293,6 +294,11 @@
293
294
  "facets.block.title.tag.default": "Tag",
294
295
  "facets.block.title.th_regions_tree.default": "Regions",
295
296
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
297
+ "feature.catalog.attribute.code": "Code",
298
+ "feature.catalog.attribute.definition": "Description",
299
+ "feature.catalog.attribute.name": "Name",
300
+ "feature.catalog.attribute.type": "Type",
301
+ "feature.catalog.attribute.values": "Values",
296
302
  "input.file.dropFileLabel": "or drop it here",
297
303
  "input.file.orInputUrl": "or create a link to an external resource",
298
304
  "input.file.selectFileLabel": "Select a file ({sizeMB} MB max.)",
@@ -430,9 +436,15 @@
430
436
  "record.metadata.download": "Downloads",
431
437
  "record.metadata.feature.catalog": "Feature catalog",
432
438
  "record.metadata.formats": "Formats",
439
+ "record.metadata.isGeographical": "Geographical dataset",
433
440
  "record.metadata.keywords": "Keywords",
434
441
  "record.metadata.languages": "Languages",
435
442
  "record.metadata.lastUpdate": "Last updated on {date}",
443
+ "record.metadata.linked.datasets": "Associated datasets",
444
+ "record.metadata.linked.records": "Associated content",
445
+ "record.metadata.linked.reuses": "Associated reuses",
446
+ "record.metadata.linked.services": "Associated services",
447
+ "record.metadata.linked.sourceDatasets": "Source datasets",
436
448
  "record.metadata.links": "Links",
437
449
  "record.metadata.noUsage": "No usage conditions specified for this dataset.",
438
450
  "record.metadata.otherConstraints": "Additional Conditions",
@@ -459,8 +471,7 @@
459
471
  "record.metadata.quality.topic.success": "Topic is specified",
460
472
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
461
473
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
462
- "record.metadata.related": "Related records",
463
- "record.metadata.related.contents": "Related content",
474
+ "record.metadata.related": "Explore the catalog",
464
475
  "record.metadata.ressources.and.links": "Resources and links",
465
476
  "record.metadata.sheet": "Original metadata",
466
477
  "record.metadata.status": "Status",
@@ -472,7 +483,6 @@
472
483
  "record.metadata.temporalExtent.untilDate": "Until { end }",
473
484
  "record.metadata.title": "Title",
474
485
  "record.metadata.topics": "Categories",
475
- "record.metadata.isGeographical": "Geographical dataset",
476
486
  "record.metadata.uniqueId": "Unique Identifier",
477
487
  "record.metadata.updateFrequency": "Data Update Frequency",
478
488
  "record.metadata.updatedOn": "Updated on",
@@ -592,7 +602,6 @@
592
602
  "tooltip.html.copy": "Copy HTML",
593
603
  "tooltip.id.copy": "Copy unique identifier",
594
604
  "tooltip.url.copy": "Copy URL",
595
- "tooltip.url.open": "Open URL",
596
605
  "ui.readLess": "Read less",
597
606
  "ui.readMore": "Read more",
598
607
  "wfs.feature.limit": "Too many features to display the WFS layer!",
@@ -241,8 +241,9 @@
241
241
  "editor.record.loadError.body": "",
242
242
  "editor.record.loadError.closeMessage": "",
243
243
  "editor.record.loadError.title": "",
244
- "editor.record.lock.format": "",
245
- "editor.record.lock.reason": "",
244
+ "editor.record.lock.harvested": "",
245
+ "editor.record.lock.owner": "",
246
+ "editor.record.lock.resourceType": "",
246
247
  "editor.record.multilingual.confirmation.cancelText": "",
247
248
  "editor.record.multilingual.confirmation.confirmText": "",
248
249
  "editor.record.multilingual.confirmation.message": "",
@@ -293,6 +294,11 @@
293
294
  "facets.block.title.tag.default": "",
294
295
  "facets.block.title.th_regions_tree.default": "",
295
296
  "favorite.not.authenticated.tooltip": "",
297
+ "feature.catalog.attribute.code": "Código",
298
+ "feature.catalog.attribute.definition": "Descripción",
299
+ "feature.catalog.attribute.name": "Nombre",
300
+ "feature.catalog.attribute.type": "Tipo",
301
+ "feature.catalog.attribute.values": "Valores",
296
302
  "input.file.dropFileLabel": "",
297
303
  "input.file.orInputUrl": "",
298
304
  "input.file.selectFileLabel": "",
@@ -430,9 +436,15 @@
430
436
  "record.metadata.download": "",
431
437
  "record.metadata.feature.catalog": "",
432
438
  "record.metadata.formats": "",
439
+ "record.metadata.isGeographical": "",
433
440
  "record.metadata.keywords": "",
434
441
  "record.metadata.languages": "",
435
442
  "record.metadata.lastUpdate": "",
443
+ "record.metadata.linked.datasets": "",
444
+ "record.metadata.linked.records": "",
445
+ "record.metadata.linked.reuses": "",
446
+ "record.metadata.linked.services": "",
447
+ "record.metadata.linked.sourceDatasets": "",
436
448
  "record.metadata.links": "",
437
449
  "record.metadata.noUsage": "",
438
450
  "record.metadata.otherConstraints": "",
@@ -460,7 +472,6 @@
460
472
  "record.metadata.quality.updateFrequency.failed": "",
461
473
  "record.metadata.quality.updateFrequency.success": "",
462
474
  "record.metadata.related": "",
463
- "record.metadata.related.contents": "",
464
475
  "record.metadata.ressources.and.links": "Recursos y enlaces",
465
476
  "record.metadata.sheet": "",
466
477
  "record.metadata.status": "",
@@ -472,7 +483,6 @@
472
483
  "record.metadata.temporalExtent.untilDate": "",
473
484
  "record.metadata.title": "",
474
485
  "record.metadata.topics": "",
475
- "record.metadata.isGeographical": "",
476
486
  "record.metadata.uniqueId": "",
477
487
  "record.metadata.updateFrequency": "",
478
488
  "record.metadata.updatedOn": "",
@@ -592,7 +602,6 @@
592
602
  "tooltip.html.copy": "",
593
603
  "tooltip.id.copy": "",
594
604
  "tooltip.url.copy": "",
595
- "tooltip.url.open": "",
596
605
  "ui.readLess": "",
597
606
  "ui.readMore": "",
598
607
  "wfs.feature.limit": "",
@@ -241,8 +241,9 @@
241
241
  "editor.record.loadError.body": "Le jeu de données n'a pas pu être chargé :",
242
242
  "editor.record.loadError.closeMessage": "Compris",
243
243
  "editor.record.loadError.title": "Erreur lors du chargement",
244
- "editor.record.lock.format": "Les jeux de données de type 'service' et 'reuse' ne sont pas éditables",
245
- "editor.record.lock.reason": "Vous n'êtes pas éditeur d'un des groupes autorisés.",
244
+ "editor.record.lock.harvested": "Les jeux de données moissonnés ne sont pas éditables",
245
+ "editor.record.lock.owner": "Vous n'êtes pas éditeur d'un des groupes autorisés",
246
+ "editor.record.lock.resourceType": "Les fiches d'un type autre que jeu de données ne sont pas éditables",
246
247
  "editor.record.multilingual.confirmation.cancelText": "Garder le(s) language(s)",
247
248
  "editor.record.multilingual.confirmation.confirmText": "Supprimer le(s) language(s)",
248
249
  "editor.record.multilingual.confirmation.message": "Vous allez supprimer un ou plusieurs languages, ce qui supprimera toutes les traductions qui y sont liées et est irréversible. Voulez-vous procéder ?",
@@ -293,6 +294,11 @@
293
294
  "facets.block.title.tag.default": "Tag",
294
295
  "facets.block.title.th_regions_tree.default": "Régions",
295
296
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Connectez-vous</a> pour avoir accès à cette fonctionnalité</div>",
297
+ "feature.catalog.attribute.code": "Code",
298
+ "feature.catalog.attribute.definition": "Description",
299
+ "feature.catalog.attribute.name": "Nom",
300
+ "feature.catalog.attribute.type": "Type",
301
+ "feature.catalog.attribute.values": "Valeurs",
296
302
  "input.file.dropFileLabel": "ou glissez-le ici",
297
303
  "input.file.orInputUrl": "ou créez un lien vers une ressource externe",
298
304
  "input.file.selectFileLabel": "Sélectionnez un fichier ({sizeMB} Mo max.)",
@@ -430,9 +436,15 @@
430
436
  "record.metadata.download": "Téléchargements",
431
437
  "record.metadata.feature.catalog": "Catalogue d'attributs",
432
438
  "record.metadata.formats": "Formats",
439
+ "record.metadata.isGeographical": "Donnée géographique",
433
440
  "record.metadata.keywords": "Mots-clés",
434
441
  "record.metadata.languages": "Langues",
435
442
  "record.metadata.lastUpdate": "Mis à jour le {date}",
443
+ "record.metadata.linked.datasets": "Jeux de données associés",
444
+ "record.metadata.linked.records": "Contenus associés",
445
+ "record.metadata.linked.reuses": "Réutilisations associées",
446
+ "record.metadata.linked.services": "Services associés",
447
+ "record.metadata.linked.sourceDatasets": "Jeux de données sources",
436
448
  "record.metadata.links": "Liens",
437
449
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
438
450
  "record.metadata.otherConstraints": "Limitations d'usage",
@@ -459,8 +471,7 @@
459
471
  "record.metadata.quality.topic.success": "Le thème est renseigné",
460
472
  "record.metadata.quality.updateFrequency.failed": "La fréquence de mise à jour n'est pas renseignée",
461
473
  "record.metadata.quality.updateFrequency.success": "La fréquence de mise à jour est renseignée",
462
- "record.metadata.related": "Voir aussi",
463
- "record.metadata.related.contents": "Contenu associé",
474
+ "record.metadata.related": "Explorez le catalogue",
464
475
  "record.metadata.ressources.and.links": "Ressources et liens",
465
476
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
466
477
  "record.metadata.status": "Statut",
@@ -472,7 +483,6 @@
472
483
  "record.metadata.temporalExtent.untilDate": "Jusqu'au { end }",
473
484
  "record.metadata.title": "Intitulé",
474
485
  "record.metadata.topics": "Catégories",
475
- "record.metadata.isGeographical": "Donnée géographique",
476
486
  "record.metadata.uniqueId": "Identificateur de ressource unique",
477
487
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
478
488
  "record.metadata.updatedOn": "Modifié le",
@@ -592,7 +602,6 @@
592
602
  "tooltip.html.copy": "Copier le HTML",
593
603
  "tooltip.id.copy": "Copier l'identifiant unique",
594
604
  "tooltip.url.copy": "Copier l'URL",
595
- "tooltip.url.open": "Ouvrir l'URL",
596
605
  "ui.readLess": "Réduire",
597
606
  "ui.readMore": "Lire la suite",
598
607
  "wfs.feature.limit": "Trop d'objets pour afficher la couche WFS !",
@@ -241,8 +241,9 @@
241
241
  "editor.record.loadError.body": "Impossibile caricare il dataset:",
242
242
  "editor.record.loadError.closeMessage": "Capito",
243
243
  "editor.record.loadError.title": "Errore durante il caricamento",
244
- "editor.record.lock.format": "I record con il formato 'servizio' o 'riutilizzo' non sono modificabili",
245
- "editor.record.lock.reason": "Non è un editore di uno dei gruppi autorizzati",
244
+ "editor.record.lock.harvested": "",
245
+ "editor.record.lock.owner": "Non è un editore di uno dei gruppi autorizzati",
246
+ "editor.record.lock.resourceType": "I record con il formato 'servizio' o 'riutilizzo' non sono modificabili",
246
247
  "editor.record.multilingual.confirmation.cancelText": "",
247
248
  "editor.record.multilingual.confirmation.confirmText": "",
248
249
  "editor.record.multilingual.confirmation.message": "",
@@ -293,6 +294,11 @@
293
294
  "facets.block.title.tag.default": "Tag",
294
295
  "facets.block.title.th_regions_tree.default": "Regioni",
295
296
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
297
+ "feature.catalog.attribute.code": "Codice",
298
+ "feature.catalog.attribute.definition": "Descrizione",
299
+ "feature.catalog.attribute.name": "Nome",
300
+ "feature.catalog.attribute.type": "Tipo",
301
+ "feature.catalog.attribute.values": "Valori",
296
302
  "input.file.dropFileLabel": "oppure trascinalo qui",
297
303
  "input.file.orInputUrl": "o collegamento a una risorsa esterna",
298
304
  "input.file.selectFileLabel": "Seleziona un file ({sizeMB} MB max.)",
@@ -430,9 +436,15 @@
430
436
  "record.metadata.download": "Download",
431
437
  "record.metadata.feature.catalog": "Catalogo dei oggetti",
432
438
  "record.metadata.formats": "Formati",
439
+ "record.metadata.isGeographical": "Dati geografici",
433
440
  "record.metadata.keywords": "Parole chiave",
434
441
  "record.metadata.languages": "Lingue",
435
442
  "record.metadata.lastUpdate": "Ultimo aggiornamento il {date}",
443
+ "record.metadata.linked.datasets": "",
444
+ "record.metadata.linked.records": "",
445
+ "record.metadata.linked.reuses": "",
446
+ "record.metadata.linked.services": "",
447
+ "record.metadata.linked.sourceDatasets": "",
436
448
  "record.metadata.links": "Collegamenti",
437
449
  "record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
438
450
  "record.metadata.otherConstraints": "Limitazioni di uso",
@@ -460,7 +472,6 @@
460
472
  "record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
461
473
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
462
474
  "record.metadata.related": "Vedi anche",
463
- "record.metadata.related.contents": "Contenuti correlati",
464
475
  "record.metadata.ressources.and.links": "Risorse e collegamenti",
465
476
  "record.metadata.sheet": "Origine del metadata",
466
477
  "record.metadata.status": "Stato",
@@ -472,7 +483,6 @@
472
483
  "record.metadata.temporalExtent.untilDate": "Fino a {end}",
473
484
  "record.metadata.title": "Titolo",
474
485
  "record.metadata.topics": "Categorie",
475
- "record.metadata.isGeographical": "Dati geografici",
476
486
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
477
487
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
478
488
  "record.metadata.updatedOn": "Modificato il",
@@ -592,7 +602,6 @@
592
602
  "tooltip.html.copy": "Copiare il HTML",
593
603
  "tooltip.id.copy": "Copiare l'identificatore unico",
594
604
  "tooltip.url.copy": "Copiare l'URL",
595
- "tooltip.url.open": "Aprire l'URL",
596
605
  "ui.readLess": "Ridurre",
597
606
  "ui.readMore": "Leggere di più",
598
607
  "wfs.feature.limit": "Troppi oggetti per visualizzare il WFS layer!",