geonetwork-ui 2.2.0-dev.cbcafed5 → 2.2.0-dev.da2c1f8f
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.
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +27 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +64 -61
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +7 -4
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +25 -17
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +55 -23
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/editor/src/index.mjs +6 -1
- package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +8 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +26 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +30 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +2 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +42 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +13 -0
- package/esm2022/libs/feature/editor/src/lib/expressions.mjs +13 -0
- package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +16 -4
- package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +34 -0
- package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +2 -0
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +15 -11
- package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +22 -44
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
- package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -13
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +3 -3
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +5 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +47 -22
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
- package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +9 -9
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +4 -2
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +1 -1
- package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
- package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +3 -3
- package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +18 -1
- package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
- package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +32 -0
- package/esm2022/translations/de.json +37 -27
- package/esm2022/translations/en.json +32 -22
- package/esm2022/translations/es.json +27 -17
- package/esm2022/translations/fr.json +50 -40
- package/esm2022/translations/it.json +44 -34
- package/esm2022/translations/nl.json +28 -18
- package/esm2022/translations/pt.json +27 -17
- package/fesm2022/geonetwork-ui.mjs +972 -527
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +4 -5
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +7 -6
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +4 -3
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +21 -12
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/editor/src/index.d.ts +5 -0
- package/libs/feature/editor/src/index.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +23 -0
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +15 -0
- package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +19 -0
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.models.d.ts +2 -0
- package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +18 -0
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +15 -0
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/expressions.d.ts +4 -0
- package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/feature-editor.module.d.ts +3 -1
- package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/fields.config.d.ts +3 -0
- package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/models/fields.model.d.ts +15 -0
- package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts +10 -5
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/services/editor.service.d.ts +3 -13
- package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +16 -6
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
- package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
- package/libs/util/i18n/src/lib/i18n.constants.d.ts +17 -0
- package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
- package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +5 -0
- package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +63 -8
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +57 -9
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +229 -24
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +99 -76
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +6 -3
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -5
- package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +30 -21
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +120 -63
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +177 -97
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -1
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +25 -14
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.ts +1 -1
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +52 -10
- package/src/libs/feature/editor/src/index.ts +5 -0
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +24 -0
- package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +49 -0
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +30 -0
- package/src/libs/feature/editor/src/lib/+state/editor.models.ts +1 -0
- package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +68 -0
- package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +39 -0
- package/src/libs/feature/editor/src/lib/expressions.ts +16 -0
- package/src/libs/feature/editor/src/lib/feature-editor.module.ts +11 -0
- package/src/libs/feature/editor/src/lib/fields.config.ts +35 -0
- package/src/libs/feature/editor/src/lib/models/fields.model.ts +29 -0
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.html +9 -7
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +11 -5
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +34 -73
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
- package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +12 -12
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +3 -4
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +2 -2
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.html +5 -1
- package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +169 -52
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +51 -15
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.html +2 -2
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.css +0 -5
- package/src/libs/ui/inputs/src/lib/button/button.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +7 -6
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +3 -1
- package/src/libs/ui/inputs/src/lib/form-field/form-field.component.ts +3 -1
- package/src/libs/ui/inputs/src/lib/form-field/form-field.model.ts +0 -1
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -0
- package/src/libs/ui/widgets/src/lib/badge/badge.component.html +3 -1
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +18 -0
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +32 -0
- package/tailwind.base.css +44 -15
- package/translations/de.json +37 -27
- package/translations/en.json +32 -22
- package/translations/es.json +27 -17
- package/translations/fr.json +50 -40
- package/translations/it.json +44 -34
- package/translations/nl.json +28 -18
- package/translations/pt.json +27 -17
- package/translations/sk.json +118 -108
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
|
|
2
2
|
import format from 'date-fns/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren, inject } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@ngx-translate/core';
|
|
8
8
|
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
|
-
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take,
|
|
11
|
+
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
15
15
|
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
|
|
16
16
|
import { valid, coerce, satisfies, ltr } from 'semver';
|
|
17
17
|
import * as i1$2 from '@ngrx/store';
|
|
18
|
-
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
|
|
18
|
+
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule, Store } from '@ngrx/store';
|
|
19
19
|
import Map$1 from 'ol/Map';
|
|
20
20
|
import * as i2 from '@angular/material/icon';
|
|
21
21
|
import { MatIconModule } from '@angular/material/icon';
|
|
@@ -75,7 +75,7 @@ import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
|
75
75
|
import { MatInputModule } from '@angular/material/input';
|
|
76
76
|
import * as basicLightbox from 'basiclightbox';
|
|
77
77
|
import * as i1$8 from '@ngrx/effects';
|
|
78
|
-
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
78
|
+
import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
|
|
79
79
|
import tippy from 'tippy.js';
|
|
80
80
|
import { valid as valid$1 } from 'geojson-validation';
|
|
81
81
|
import { Polygon } from 'ol/geom';
|
|
@@ -587,6 +587,20 @@ function matchMimeType(format) {
|
|
|
587
587
|
return format || null;
|
|
588
588
|
}
|
|
589
589
|
|
|
590
|
+
function getKeywordTypeFromKeywordTypeCode(typeCode) {
|
|
591
|
+
if (!typeCode)
|
|
592
|
+
return 'other';
|
|
593
|
+
switch (typeCode) {
|
|
594
|
+
case 'theme':
|
|
595
|
+
case 'place':
|
|
596
|
+
case 'temporal':
|
|
597
|
+
case 'other':
|
|
598
|
+
return typeCode;
|
|
599
|
+
default:
|
|
600
|
+
return 'other';
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
590
604
|
function extractCharacterString() {
|
|
591
605
|
return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText());
|
|
592
606
|
}
|
|
@@ -649,28 +663,32 @@ function extractStatus() {
|
|
|
649
663
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
650
664
|
}
|
|
651
665
|
// from gmd:resourceConstraints
|
|
652
|
-
function
|
|
653
|
-
|
|
654
|
-
|
|
666
|
+
function extractLegalConstraints() {
|
|
667
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
|
+
...(url && { url }),
|
|
655
669
|
text,
|
|
656
|
-
type: 'other',
|
|
657
670
|
})));
|
|
658
|
-
|
|
671
|
+
}
|
|
672
|
+
// from gmd:resourceConstraints
|
|
673
|
+
function extractSecurityConstraints() {
|
|
674
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
675
|
+
...(url && { url }),
|
|
659
676
|
text,
|
|
660
|
-
type: 'security',
|
|
661
677
|
})));
|
|
662
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
663
678
|
}
|
|
664
679
|
// from gmd:resourceConstraints
|
|
665
|
-
function
|
|
666
|
-
return pipe(
|
|
680
|
+
function extractOtherConstraints() {
|
|
681
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
682
|
+
...(url && { url }),
|
|
683
|
+
text,
|
|
684
|
+
})));
|
|
667
685
|
}
|
|
668
686
|
// from gmd:resourceConstraints
|
|
669
687
|
function extractLicenses() {
|
|
670
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
688
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
671
689
|
...(url && { url }),
|
|
672
690
|
text,
|
|
673
|
-
})))
|
|
691
|
+
})));
|
|
674
692
|
}
|
|
675
693
|
// from gmd:MD_Distribution
|
|
676
694
|
function extractDatasetDistributions() {
|
|
@@ -814,6 +832,9 @@ function readOwnerOrganization(rootEl) {
|
|
|
814
832
|
function readRecordUpdated(rootEl) {
|
|
815
833
|
return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
|
|
816
834
|
}
|
|
835
|
+
function readRecordPublished(rootEl) {
|
|
836
|
+
return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
|
|
837
|
+
}
|
|
817
838
|
function readTitle(rootEl) {
|
|
818
839
|
return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
|
|
819
840
|
}
|
|
@@ -829,31 +850,55 @@ function readDatasetUpdated(rootEl) {
|
|
|
829
850
|
function readContacts(rootEl) {
|
|
830
851
|
return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
|
|
831
852
|
}
|
|
832
|
-
|
|
833
|
-
|
|
853
|
+
// from gmd:thesaurusName
|
|
854
|
+
function readThesaurus(rootEl) {
|
|
855
|
+
if (!rootEl)
|
|
856
|
+
return null;
|
|
857
|
+
const findIdentifier = findNestedElement('gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code');
|
|
858
|
+
const id = pipe(findIdentifier, extractCharacterString())(rootEl);
|
|
859
|
+
const url = pipe(findIdentifier, extractUrl())(rootEl);
|
|
860
|
+
const name = pipe(findNestedElement('gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
|
|
861
|
+
return {
|
|
862
|
+
id,
|
|
863
|
+
...(name && { name }),
|
|
864
|
+
...(url && { url }),
|
|
865
|
+
};
|
|
866
|
+
}
|
|
867
|
+
// from gmd:MD_Keywords
|
|
868
|
+
function readKeywordGroup(rootEl) {
|
|
869
|
+
const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
|
|
870
|
+
const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
|
|
871
|
+
return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
|
|
872
|
+
const label = extractCharacterString()(el);
|
|
873
|
+
return {
|
|
874
|
+
...(thesaurus ? { thesaurus } : {}),
|
|
875
|
+
label,
|
|
876
|
+
type,
|
|
877
|
+
};
|
|
878
|
+
}))(rootEl);
|
|
834
879
|
}
|
|
835
880
|
function readKeywords(rootEl) {
|
|
836
|
-
return
|
|
837
|
-
}
|
|
838
|
-
function readThemes(rootEl) {
|
|
839
|
-
return readKeywordsOfType(true)(rootEl);
|
|
881
|
+
return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
|
|
840
882
|
}
|
|
841
883
|
function readStatus(rootEl) {
|
|
842
884
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
843
885
|
}
|
|
844
886
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
845
|
-
function
|
|
846
|
-
return pipe(getConstraints, mapArray(
|
|
887
|
+
function readLegalConstraints(rootEl) {
|
|
888
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
847
889
|
}
|
|
848
|
-
function
|
|
849
|
-
return pipe(getConstraints, mapArray(
|
|
890
|
+
function readSecurityConstraints(rootEl) {
|
|
891
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
892
|
+
}
|
|
893
|
+
function readOtherConstraints(rootEl) {
|
|
894
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
850
895
|
}
|
|
851
896
|
function readLicenses(rootEl) {
|
|
852
897
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
853
898
|
}
|
|
854
899
|
// not used yet
|
|
855
900
|
function readIsoTopics(rootEl) {
|
|
856
|
-
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode',
|
|
901
|
+
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
|
|
857
902
|
}
|
|
858
903
|
function readSpatialRepresentation(rootEl) {
|
|
859
904
|
return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
|
|
@@ -1069,33 +1114,50 @@ function updateCitationDate(date, type) {
|
|
|
1069
1114
|
function appendCitationDate(date, type) {
|
|
1070
1115
|
return appendChildren(pipe(createElement('gmd:date'), createChild('gmd:CI_Date'), appendChildren(pipe(createElement('gmd:date'), writeDateTime(date)), pipe(createElement('gmd:dateType'), createChild('gmd:CI_DateTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_DateTypeCode'), addAttribute('codeListValue', type)))));
|
|
1071
1116
|
}
|
|
1072
|
-
function removeKeywords(
|
|
1073
|
-
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1117
|
+
function removeKeywords() {
|
|
1118
|
+
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')));
|
|
1119
|
+
}
|
|
1120
|
+
// returns a <gmd:thesaurusName> element
|
|
1121
|
+
function createThesaurus(thesaurus) {
|
|
1122
|
+
return pipe(createElement('gmd:thesaurusName'), createChild('gmd:CI_Citation'), appendChildren(pipe(createElement('gmd:title'), writeCharacterString(thesaurus.name || thesaurus.id)), pipe(createElement('gmd:identifier'), createChild('gmd:MD_Identifier'), appendChildren(pipe(createElement('gmd:code'), thesaurus.url
|
|
1123
|
+
? writeAnchor(thesaurus.url, thesaurus.id)
|
|
1124
|
+
: writeCharacterString(thesaurus.id))))));
|
|
1125
|
+
}
|
|
1126
|
+
function appendKeywords(keywords) {
|
|
1127
|
+
const keywordsByThesaurus = keywords.reduce((acc, keyword) => {
|
|
1128
|
+
const thesaurusId = keyword.thesaurus?.id;
|
|
1129
|
+
const type = keyword.type;
|
|
1130
|
+
let existingGroup = acc.find((group) => group[0].thesaurus
|
|
1131
|
+
? group[0].thesaurus.id === thesaurusId
|
|
1132
|
+
: group[0].type === type);
|
|
1133
|
+
if (!existingGroup) {
|
|
1134
|
+
existingGroup = [];
|
|
1135
|
+
acc.push(existingGroup);
|
|
1136
|
+
}
|
|
1137
|
+
existingGroup.push(keyword);
|
|
1138
|
+
return acc;
|
|
1139
|
+
}, []);
|
|
1140
|
+
return appendChildren(...keywordsByThesaurus.map((keywords) => pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', keywords[0].type))), keywords[0].thesaurus
|
|
1141
|
+
? appendChildren(createThesaurus(keywords[0].thesaurus))
|
|
1142
|
+
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword.label)))))));
|
|
1143
|
+
}
|
|
1144
|
+
function createConstraint(constraint, type) {
|
|
1145
|
+
if (type === 'security') {
|
|
1090
1146
|
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_SecurityConstraints'), appendChildren(pipe(createElement('gmd:classification'), createChild('gmd:MD_ClassificationCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ClassificationCode'), addAttribute('codeListValue', 'restricted')), pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1091
1147
|
}
|
|
1092
|
-
|
|
1148
|
+
else if (type === 'legal') {
|
|
1149
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
|
|
1150
|
+
}
|
|
1151
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1093
1152
|
}
|
|
1094
|
-
function
|
|
1153
|
+
function removeOtherConstraints() {
|
|
1095
1154
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1096
1155
|
}
|
|
1097
|
-
function
|
|
1098
|
-
return pipe(
|
|
1156
|
+
function removeSecurityConstraints() {
|
|
1157
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1158
|
+
}
|
|
1159
|
+
function removeLegalConstraints() {
|
|
1160
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code !== 'license')))));
|
|
1099
1161
|
}
|
|
1100
1162
|
function removeLicenses() {
|
|
1101
1163
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.some((code) => code === 'license')))));
|
|
@@ -1194,19 +1256,22 @@ function writeContacts(record, rootEl) {
|
|
|
1194
1256
|
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
|
|
1195
1257
|
}
|
|
1196
1258
|
function writeKeywords(record, rootEl) {
|
|
1197
|
-
pipe(findOrCreateIdentification(), removeKeywords(
|
|
1259
|
+
pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
|
|
1198
1260
|
}
|
|
1199
|
-
function
|
|
1200
|
-
pipe(findOrCreateIdentification(),
|
|
1201
|
-
}
|
|
1202
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1203
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1261
|
+
function writeTopics(record, rootEl) {
|
|
1262
|
+
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:topicCategory'), appendChildren(...record.topics.map((topic) => pipe(createElement('gmd:topicCategory'), createChild('gmd:MD_TopicCategoryCode'), setTextContent(topic)))))(rootEl);
|
|
1204
1263
|
}
|
|
1205
1264
|
function writeLicenses(record, rootEl) {
|
|
1206
1265
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1207
1266
|
}
|
|
1208
|
-
function
|
|
1209
|
-
pipe(findOrCreateIdentification(),
|
|
1267
|
+
function writeLegalConstraints(record, rootEl) {
|
|
1268
|
+
pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
|
|
1269
|
+
}
|
|
1270
|
+
function writeSecurityConstraints(record, rootEl) {
|
|
1271
|
+
pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
|
|
1272
|
+
}
|
|
1273
|
+
function writeOtherConstraints(record, rootEl) {
|
|
1274
|
+
pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
|
|
1210
1275
|
}
|
|
1211
1276
|
function writeUpdateFrequency(record, rootEl) {
|
|
1212
1277
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1302,14 +1367,14 @@ function toModel(xml) {
|
|
|
1302
1367
|
const contacts = readContacts(rootEl);
|
|
1303
1368
|
const recordUpdated = readRecordUpdated(rootEl);
|
|
1304
1369
|
const recordCreated = recordUpdated;
|
|
1370
|
+
const recordPublished = readRecordPublished(rootEl);
|
|
1305
1371
|
const keywords = readKeywords(rootEl);
|
|
1306
|
-
const
|
|
1307
|
-
const
|
|
1308
|
-
const
|
|
1372
|
+
const topics = readIsoTopics(rootEl);
|
|
1373
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1374
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1375
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1309
1376
|
const licenses = readLicenses(rootEl);
|
|
1310
1377
|
const overviews = readOverviews(rootEl);
|
|
1311
|
-
// not used yet
|
|
1312
|
-
const isoTopics = readIsoTopics(rootEl);
|
|
1313
1378
|
if (kind === 'dataset') {
|
|
1314
1379
|
const status = readStatus(rootEl);
|
|
1315
1380
|
const datasetCreated = readDatasetCreated(rootEl);
|
|
@@ -1323,8 +1388,10 @@ function toModel(xml) {
|
|
|
1323
1388
|
return {
|
|
1324
1389
|
uniqueIdentifier,
|
|
1325
1390
|
kind,
|
|
1391
|
+
languages: [],
|
|
1326
1392
|
recordCreated,
|
|
1327
1393
|
recordUpdated,
|
|
1394
|
+
recordPublished,
|
|
1328
1395
|
status,
|
|
1329
1396
|
title,
|
|
1330
1397
|
abstract,
|
|
@@ -1332,10 +1399,11 @@ function toModel(xml) {
|
|
|
1332
1399
|
contacts,
|
|
1333
1400
|
contactsForResource: [],
|
|
1334
1401
|
keywords,
|
|
1335
|
-
|
|
1336
|
-
accessConstraints,
|
|
1337
|
-
useLimitations,
|
|
1402
|
+
topics,
|
|
1338
1403
|
licenses,
|
|
1404
|
+
legalConstraints,
|
|
1405
|
+
securityConstraints,
|
|
1406
|
+
otherConstraints,
|
|
1339
1407
|
...(datasetCreated && { datasetCreated }),
|
|
1340
1408
|
...(datasetUpdated && { datasetUpdated }),
|
|
1341
1409
|
lineage,
|
|
@@ -1352,17 +1420,20 @@ function toModel(xml) {
|
|
|
1352
1420
|
return {
|
|
1353
1421
|
uniqueIdentifier,
|
|
1354
1422
|
kind,
|
|
1423
|
+
languages: [],
|
|
1355
1424
|
recordCreated,
|
|
1356
1425
|
recordUpdated,
|
|
1426
|
+
recordPublished,
|
|
1357
1427
|
title,
|
|
1358
1428
|
abstract,
|
|
1359
1429
|
ownerOrganization,
|
|
1360
1430
|
contacts,
|
|
1361
1431
|
keywords,
|
|
1362
|
-
|
|
1363
|
-
accessConstraints,
|
|
1364
|
-
useLimitations,
|
|
1432
|
+
topics,
|
|
1365
1433
|
licenses,
|
|
1434
|
+
legalConstraints,
|
|
1435
|
+
securityConstraints,
|
|
1436
|
+
otherConstraints,
|
|
1366
1437
|
overviews,
|
|
1367
1438
|
onlineResources,
|
|
1368
1439
|
};
|
|
@@ -1387,10 +1458,12 @@ function toXml(record, originalXml) {
|
|
|
1387
1458
|
writeAbstract(record, rootEl);
|
|
1388
1459
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1389
1460
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1390
|
-
fieldChanged('
|
|
1391
|
-
fieldChanged('
|
|
1461
|
+
fieldChanged('topics') && writeTopics(record, rootEl);
|
|
1462
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1463
|
+
fieldChanged('securityConstraints') &&
|
|
1464
|
+
writeSecurityConstraints(record, rootEl);
|
|
1392
1465
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1393
|
-
fieldChanged('
|
|
1466
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1394
1467
|
if (record.kind === 'dataset') {
|
|
1395
1468
|
writeStatus(record, rootEl);
|
|
1396
1469
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -1457,6 +1530,31 @@ const mapContact = (sourceContact, lang3) => {
|
|
|
1457
1530
|
...(phone && { phone }),
|
|
1458
1531
|
};
|
|
1459
1532
|
};
|
|
1533
|
+
const mapKeywords = (thesauri, language) => {
|
|
1534
|
+
const keywords = [];
|
|
1535
|
+
for (const thesaurusId in thesauri) {
|
|
1536
|
+
const rawThesaurus = thesauri[thesaurusId];
|
|
1537
|
+
let thesaurus = null;
|
|
1538
|
+
if (rawThesaurus.id) {
|
|
1539
|
+
const thesaurusSource = { ...rawThesaurus };
|
|
1540
|
+
const url = getAsUrl(selectField(thesaurusSource, 'link'));
|
|
1541
|
+
const name = selectField(thesaurusSource, 'title');
|
|
1542
|
+
thesaurus = {
|
|
1543
|
+
id: rawThesaurus.id,
|
|
1544
|
+
...(name && { name }),
|
|
1545
|
+
...(url && { url }),
|
|
1546
|
+
};
|
|
1547
|
+
}
|
|
1548
|
+
for (const keyword of rawThesaurus.keywords) {
|
|
1549
|
+
keywords.push({
|
|
1550
|
+
label: selectTranslatedValue(keyword, language),
|
|
1551
|
+
type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
|
|
1552
|
+
...(thesaurus && { thesaurus }),
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
return keywords;
|
|
1557
|
+
};
|
|
1460
1558
|
|
|
1461
1559
|
/**
|
|
1462
1560
|
* Custom HttpParameterCodec
|
|
@@ -16443,6 +16541,23 @@ const LANG_3_TO_2_MAPPER = {
|
|
|
16443
16541
|
chi: 'zh',
|
|
16444
16542
|
slo: 'sk',
|
|
16445
16543
|
};
|
|
16544
|
+
const LANGUAGE_NAMES = {
|
|
16545
|
+
en: 'English',
|
|
16546
|
+
nl: 'Nederlands',
|
|
16547
|
+
fr: 'Français',
|
|
16548
|
+
de: 'Deutsch',
|
|
16549
|
+
ko: '한국어',
|
|
16550
|
+
es: 'Español',
|
|
16551
|
+
cs: 'Čeština',
|
|
16552
|
+
ca: 'Català',
|
|
16553
|
+
fi: 'Suomi',
|
|
16554
|
+
is: 'Íslenska',
|
|
16555
|
+
it: 'Italiano',
|
|
16556
|
+
pt: 'Português',
|
|
16557
|
+
ru: 'Русский',
|
|
16558
|
+
zh: '中文',
|
|
16559
|
+
sk: 'Slovenčina',
|
|
16560
|
+
};
|
|
16446
16561
|
// Caution: changing this can break language selection from third parties!
|
|
16447
16562
|
const LANGUAGE_STORAGE_KEY = 'geonetwork-ui-language';
|
|
16448
16563
|
const LANG_2_TO_3_MAPPER = Object.entries(LANG_3_TO_2_MAPPER).reduce((mapperObject, langEntry) => {
|
|
@@ -16565,7 +16680,7 @@ var de = {
|
|
|
16565
16680
|
"chart.type.line": "Liniendiagramm",
|
|
16566
16681
|
"chart.type.lineSmooth": "Geglättes Liniendiagramm",
|
|
16567
16682
|
"chart.type.pie": "Kreisdiagramm",
|
|
16568
|
-
"dashboard.createRecord": "",
|
|
16683
|
+
"dashboard.createRecord": "Neuer Eintrag",
|
|
16569
16684
|
"dashboard.labels.mySpace": "Mein Bereich",
|
|
16570
16685
|
"dashboard.records.all": "Katalog",
|
|
16571
16686
|
"dashboard.records.myDraft": "Meine Entwürfe",
|
|
@@ -16578,8 +16693,8 @@ var de = {
|
|
|
16578
16693
|
"dashboard.records.userEmail": "E-Mail",
|
|
16579
16694
|
"dashboard.records.username": "Benutzername",
|
|
16580
16695
|
"dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
|
|
16581
|
-
"dashboard.results.listMetadata": "",
|
|
16582
|
-
"dashboard.results.listResources": "",
|
|
16696
|
+
"dashboard.results.listMetadata": "Metadaten anzeigen",
|
|
16697
|
+
"dashboard.results.listResources": "Ressourcen anzeigen",
|
|
16583
16698
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
|
|
16584
16699
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
|
|
16585
16700
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
|
|
@@ -16693,6 +16808,8 @@ var de = {
|
|
|
16693
16808
|
"downloads.format.unknown": "unbekannt",
|
|
16694
16809
|
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
16695
16810
|
dropFile: dropFile$6,
|
|
16811
|
+
"editor.record.publish": "",
|
|
16812
|
+
"editor.record.upToDate": "",
|
|
16696
16813
|
"externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
|
|
16697
16814
|
"facets.block.title.OrgForResource": "Organisation",
|
|
16698
16815
|
"facets.block.title.availableInServices": "Verfügbar für",
|
|
@@ -16706,28 +16823,28 @@ var de = {
|
|
|
16706
16823
|
"facets.block.title.tag.default": "Stichwort",
|
|
16707
16824
|
"facets.block.title.th_regions_tree.default": "Regionen",
|
|
16708
16825
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
|
|
16709
|
-
"language.ca": "
|
|
16710
|
-
"language.cs": "
|
|
16826
|
+
"language.ca": "Katalanisch",
|
|
16827
|
+
"language.cs": "Tschechisch",
|
|
16711
16828
|
"language.de": "Deutsch",
|
|
16712
|
-
"language.en": "
|
|
16713
|
-
"language.es": "
|
|
16714
|
-
"language.fi": "
|
|
16715
|
-
"language.fr": "
|
|
16716
|
-
"language.is": "
|
|
16717
|
-
"language.it": "
|
|
16718
|
-
"language.ko": "
|
|
16719
|
-
"language.nl": "
|
|
16720
|
-
"language.pt": "
|
|
16721
|
-
"language.ru": "
|
|
16722
|
-
"language.sk": "
|
|
16723
|
-
"language.zh": "
|
|
16829
|
+
"language.en": "Englisch",
|
|
16830
|
+
"language.es": "Spanisch",
|
|
16831
|
+
"language.fi": "Finnisch",
|
|
16832
|
+
"language.fr": "Französisch",
|
|
16833
|
+
"language.is": "Isländisch",
|
|
16834
|
+
"language.it": "Italienisch",
|
|
16835
|
+
"language.ko": "Koreanisch",
|
|
16836
|
+
"language.nl": "Niederländisch",
|
|
16837
|
+
"language.pt": "Portugiesisch",
|
|
16838
|
+
"language.ru": "Russisch",
|
|
16839
|
+
"language.sk": "Slowakisch",
|
|
16840
|
+
"language.zh": "Chinesisch",
|
|
16724
16841
|
"map.add.layer": "Eine Ebene hinzufügen",
|
|
16725
16842
|
"map.add.layer.catalog": "Aus dem Katalog",
|
|
16726
16843
|
"map.add.layer.file": "Aus einer Datei",
|
|
16727
16844
|
"map.add.layer.wfs": "Aus WFS",
|
|
16728
16845
|
"map.add.layer.wms": "Aus WMS",
|
|
16729
16846
|
"map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
|
|
16730
|
-
"map.geocoding.placeholder": "",
|
|
16847
|
+
"map.geocoding.placeholder": "Nach einem Ort suchen",
|
|
16731
16848
|
"map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
|
|
16732
16849
|
"map.layer.add": "Hinzufügen",
|
|
16733
16850
|
"map.layers.available": "Verfügbare Layer",
|
|
@@ -16771,17 +16888,20 @@ var de = {
|
|
|
16771
16888
|
"record.metadata.author": "Autor",
|
|
16772
16889
|
"record.metadata.catalog": "Katalog",
|
|
16773
16890
|
"record.metadata.contact": "Kontakt",
|
|
16774
|
-
"record.metadata.
|
|
16891
|
+
"record.metadata.creation": "Erstellungsdatum",
|
|
16892
|
+
"record.metadata.details": "Über die Daten",
|
|
16775
16893
|
"record.metadata.download": "Downloads",
|
|
16776
16894
|
"record.metadata.formats": "Formate",
|
|
16777
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16778
16895
|
"record.metadata.keywords": "Stichworte",
|
|
16779
|
-
"record.metadata.
|
|
16896
|
+
"record.metadata.languages": "Sprachen",
|
|
16897
|
+
"record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
|
|
16780
16898
|
"record.metadata.links": "Links",
|
|
16781
16899
|
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16782
|
-
"record.metadata.
|
|
16783
|
-
"record.metadata.owner": "",
|
|
16900
|
+
"record.metadata.otherConstraints": "Zusätzliche Bedingungen",
|
|
16901
|
+
"record.metadata.owner": "Herkunftskatalog",
|
|
16784
16902
|
"record.metadata.preview": "Vorschau",
|
|
16903
|
+
"record.metadata.producer": "Datenproduzent",
|
|
16904
|
+
"record.metadata.publication": "Veröffentlichungsdatum",
|
|
16785
16905
|
"record.metadata.publications": "Veröffentlichungen",
|
|
16786
16906
|
"record.metadata.quality": "Metadatenqualität",
|
|
16787
16907
|
"record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
|
|
@@ -16803,13 +16923,17 @@ var de = {
|
|
|
16803
16923
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
16804
16924
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
16805
16925
|
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
16806
|
-
"record.metadata.status": "",
|
|
16807
|
-
"record.metadata.
|
|
16926
|
+
"record.metadata.status": "Status",
|
|
16927
|
+
"record.metadata.technical": "Technische Informationen",
|
|
16928
|
+
"record.metadata.temporalExtent": "Zeitlicher Umfang",
|
|
16929
|
+
"record.metadata.temporalExtent.fromDateToDate": "Von {start} bis {end}",
|
|
16930
|
+
"record.metadata.temporalExtent.sinceDate": "Seit {start}",
|
|
16931
|
+
"record.metadata.temporalExtent.untilDate": "Bis {end}",
|
|
16808
16932
|
"record.metadata.title": "Titel",
|
|
16933
|
+
"record.metadata.topics": "Kategorien",
|
|
16809
16934
|
"record.metadata.type": "Geographischer Datensatz",
|
|
16810
16935
|
"record.metadata.uniqueId": "Eindeutige Kennung",
|
|
16811
16936
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
16812
|
-
"record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
|
|
16813
16937
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
16814
16938
|
"record.metadata.usage": "Nutzung und Einschränkungen",
|
|
16815
16939
|
"record.more.details": "Weitere Details",
|
|
@@ -16841,6 +16965,7 @@ var de = {
|
|
|
16841
16965
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
16842
16966
|
"search.filters.isSpatial.no": "nicht räumlich",
|
|
16843
16967
|
"search.filters.isSpatial.yes": "räumlich",
|
|
16968
|
+
"search.filters.keyword": "Schlüsselwort",
|
|
16844
16969
|
"search.filters.license": "Lizenz",
|
|
16845
16970
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
16846
16971
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -16871,7 +16996,7 @@ var de = {
|
|
|
16871
16996
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
16872
16997
|
"table.select.data": "Datenquelle",
|
|
16873
16998
|
"tooltip.html.copy": "HTML kopieren",
|
|
16874
|
-
"tooltip.id.copy": "",
|
|
16999
|
+
"tooltip.id.copy": "Eindeutige Kennung kopieren",
|
|
16875
17000
|
"tooltip.url.copy": "URL kopieren",
|
|
16876
17001
|
"tooltip.url.open": "URL öffnen",
|
|
16877
17002
|
"ui.readLess": "Weniger lesen",
|
|
@@ -17033,6 +17158,8 @@ var en = {
|
|
|
17033
17158
|
"downloads.format.unknown": "unknown",
|
|
17034
17159
|
"downloads.wfs.featuretype.not.found": "The layer was not found",
|
|
17035
17160
|
dropFile: dropFile$5,
|
|
17161
|
+
"editor.record.publish": "Publish this record",
|
|
17162
|
+
"editor.record.upToDate": "This record is up to date",
|
|
17036
17163
|
"externalviewer.dataset.unnamed": "Datahub layer",
|
|
17037
17164
|
"facets.block.title.OrgForResource": "Organisation",
|
|
17038
17165
|
"facets.block.title.availableInServices": "Available for",
|
|
@@ -17046,21 +17173,21 @@ var en = {
|
|
|
17046
17173
|
"facets.block.title.tag.default": "Tag",
|
|
17047
17174
|
"facets.block.title.th_regions_tree.default": "Regions",
|
|
17048
17175
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
|
|
17049
|
-
"language.ca": "
|
|
17050
|
-
"language.cs": "
|
|
17051
|
-
"language.de": "
|
|
17176
|
+
"language.ca": "Catalan",
|
|
17177
|
+
"language.cs": "Czech",
|
|
17178
|
+
"language.de": "German",
|
|
17052
17179
|
"language.en": "English",
|
|
17053
|
-
"language.es": "
|
|
17054
|
-
"language.fi": "
|
|
17055
|
-
"language.fr": "
|
|
17056
|
-
"language.is": "
|
|
17057
|
-
"language.it": "
|
|
17058
|
-
"language.ko": "
|
|
17059
|
-
"language.nl": "
|
|
17060
|
-
"language.pt": "
|
|
17061
|
-
"language.ru": "
|
|
17062
|
-
"language.sk": "
|
|
17063
|
-
"language.zh": "
|
|
17180
|
+
"language.es": "Spanish",
|
|
17181
|
+
"language.fi": "Finnish",
|
|
17182
|
+
"language.fr": "French",
|
|
17183
|
+
"language.is": "Icelandic",
|
|
17184
|
+
"language.it": "Italian",
|
|
17185
|
+
"language.ko": "Korean",
|
|
17186
|
+
"language.nl": "Dutch",
|
|
17187
|
+
"language.pt": "Portuguese",
|
|
17188
|
+
"language.ru": "Russian",
|
|
17189
|
+
"language.sk": "Slovak",
|
|
17190
|
+
"language.zh": "Chinese",
|
|
17064
17191
|
"map.add.layer": "Add a layer",
|
|
17065
17192
|
"map.add.layer.catalog": "From the catalog",
|
|
17066
17193
|
"map.add.layer.file": "From a file",
|
|
@@ -17111,17 +17238,20 @@ var en = {
|
|
|
17111
17238
|
"record.metadata.author": "Author",
|
|
17112
17239
|
"record.metadata.catalog": "Catalog",
|
|
17113
17240
|
"record.metadata.contact": "Contact",
|
|
17114
|
-
"record.metadata.
|
|
17241
|
+
"record.metadata.creation": "Date of creation",
|
|
17242
|
+
"record.metadata.details": "About the data",
|
|
17115
17243
|
"record.metadata.download": "Downloads",
|
|
17116
17244
|
"record.metadata.formats": "Formats",
|
|
17117
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17118
17245
|
"record.metadata.keywords": "Keywords",
|
|
17119
|
-
"record.metadata.
|
|
17246
|
+
"record.metadata.languages": "Languages",
|
|
17247
|
+
"record.metadata.lastUpdate": "Last updated on {date}",
|
|
17120
17248
|
"record.metadata.links": "Links",
|
|
17121
17249
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17122
|
-
"record.metadata.
|
|
17250
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17123
17251
|
"record.metadata.owner": "Catalog of origin",
|
|
17124
17252
|
"record.metadata.preview": "Preview",
|
|
17253
|
+
"record.metadata.producer": "Data producer",
|
|
17254
|
+
"record.metadata.publication": "Date of publication",
|
|
17125
17255
|
"record.metadata.publications": "publications",
|
|
17126
17256
|
"record.metadata.quality": "Metadata Quality",
|
|
17127
17257
|
"record.metadata.quality.contact.failed": "Contact is not specified",
|
|
@@ -17144,14 +17274,18 @@ var en = {
|
|
|
17144
17274
|
"record.metadata.related": "Related records",
|
|
17145
17275
|
"record.metadata.sheet": "Original metadata",
|
|
17146
17276
|
"record.metadata.status": "Status",
|
|
17147
|
-
"record.metadata.
|
|
17277
|
+
"record.metadata.technical": "Technical information",
|
|
17278
|
+
"record.metadata.temporalExtent": "Temporal extent",
|
|
17279
|
+
"record.metadata.temporalExtent.fromDateToDate": "From { start } to { end }",
|
|
17280
|
+
"record.metadata.temporalExtent.sinceDate": "Since { start }",
|
|
17281
|
+
"record.metadata.temporalExtent.untilDate": "Until { end }",
|
|
17148
17282
|
"record.metadata.title": "Title",
|
|
17283
|
+
"record.metadata.topics": "Categories",
|
|
17149
17284
|
"record.metadata.type": "Geographical dataset",
|
|
17150
17285
|
"record.metadata.uniqueId": "Unique Identifier",
|
|
17151
17286
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17152
|
-
"record.metadata.
|
|
17153
|
-
"record.metadata.
|
|
17154
|
-
"record.metadata.usage": "Usage & constraints",
|
|
17287
|
+
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17288
|
+
"record.metadata.usage": "License and Conditions",
|
|
17155
17289
|
"record.more.details": "Read more",
|
|
17156
17290
|
"record.tab.chart": "Chart",
|
|
17157
17291
|
"record.tab.data": "Table",
|
|
@@ -17181,6 +17315,7 @@ var en = {
|
|
|
17181
17315
|
"search.filters.isSpatial": "Is spatial data",
|
|
17182
17316
|
"search.filters.isSpatial.no": "non spatial",
|
|
17183
17317
|
"search.filters.isSpatial.yes": "spatial",
|
|
17318
|
+
"search.filters.keyword": "Keyword",
|
|
17184
17319
|
"search.filters.license": "License",
|
|
17185
17320
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
17186
17321
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17373,6 +17508,8 @@ var es = {
|
|
|
17373
17508
|
"downloads.format.unknown": "",
|
|
17374
17509
|
"downloads.wfs.featuretype.not.found": "",
|
|
17375
17510
|
dropFile: dropFile$4,
|
|
17511
|
+
"editor.record.publish": "",
|
|
17512
|
+
"editor.record.upToDate": "",
|
|
17376
17513
|
"externalviewer.dataset.unnamed": "",
|
|
17377
17514
|
"facets.block.title.OrgForResource": "",
|
|
17378
17515
|
"facets.block.title.availableInServices": "",
|
|
@@ -17386,21 +17523,21 @@ var es = {
|
|
|
17386
17523
|
"facets.block.title.tag.default": "",
|
|
17387
17524
|
"facets.block.title.th_regions_tree.default": "",
|
|
17388
17525
|
"favorite.not.authenticated.tooltip": "",
|
|
17389
|
-
"language.ca": "
|
|
17390
|
-
"language.cs": "
|
|
17391
|
-
"language.de": "
|
|
17392
|
-
"language.en": "
|
|
17526
|
+
"language.ca": "Catalán",
|
|
17527
|
+
"language.cs": "Checo",
|
|
17528
|
+
"language.de": "Alemán",
|
|
17529
|
+
"language.en": "Inglés",
|
|
17393
17530
|
"language.es": "Español",
|
|
17394
|
-
"language.fi": "
|
|
17395
|
-
"language.fr": "
|
|
17396
|
-
"language.is": "
|
|
17531
|
+
"language.fi": "Finlandés",
|
|
17532
|
+
"language.fr": "Francés",
|
|
17533
|
+
"language.is": "Islandés",
|
|
17397
17534
|
"language.it": "Italiano",
|
|
17398
|
-
"language.ko": "
|
|
17399
|
-
"language.nl": "
|
|
17400
|
-
"language.pt": "
|
|
17401
|
-
"language.ru": "
|
|
17402
|
-
"language.sk": "
|
|
17403
|
-
"language.zh": "
|
|
17535
|
+
"language.ko": "Coreano",
|
|
17536
|
+
"language.nl": "Neerlandés",
|
|
17537
|
+
"language.pt": "Portugués",
|
|
17538
|
+
"language.ru": "Ruso",
|
|
17539
|
+
"language.sk": "Eslovaco",
|
|
17540
|
+
"language.zh": "Chino",
|
|
17404
17541
|
"map.add.layer": "",
|
|
17405
17542
|
"map.add.layer.catalog": "",
|
|
17406
17543
|
"map.add.layer.file": "",
|
|
@@ -17451,17 +17588,20 @@ var es = {
|
|
|
17451
17588
|
"record.metadata.author": "",
|
|
17452
17589
|
"record.metadata.catalog": "",
|
|
17453
17590
|
"record.metadata.contact": "",
|
|
17591
|
+
"record.metadata.creation": "",
|
|
17454
17592
|
"record.metadata.details": "",
|
|
17455
17593
|
"record.metadata.download": "",
|
|
17456
17594
|
"record.metadata.formats": "",
|
|
17457
|
-
"record.metadata.isOpenData": "",
|
|
17458
17595
|
"record.metadata.keywords": "",
|
|
17596
|
+
"record.metadata.languages": "",
|
|
17459
17597
|
"record.metadata.lastUpdate": "",
|
|
17460
17598
|
"record.metadata.links": "",
|
|
17461
17599
|
"record.metadata.noUsage": "",
|
|
17462
|
-
"record.metadata.
|
|
17600
|
+
"record.metadata.otherConstraints": "",
|
|
17463
17601
|
"record.metadata.owner": "",
|
|
17464
17602
|
"record.metadata.preview": "",
|
|
17603
|
+
"record.metadata.producer": "",
|
|
17604
|
+
"record.metadata.publication": "",
|
|
17465
17605
|
"record.metadata.publications": "",
|
|
17466
17606
|
"record.metadata.quality": "",
|
|
17467
17607
|
"record.metadata.quality.contact.failed": "",
|
|
@@ -17484,12 +17624,16 @@ var es = {
|
|
|
17484
17624
|
"record.metadata.related": "",
|
|
17485
17625
|
"record.metadata.sheet": "",
|
|
17486
17626
|
"record.metadata.status": "",
|
|
17487
|
-
"record.metadata.
|
|
17627
|
+
"record.metadata.technical": "",
|
|
17628
|
+
"record.metadata.temporalExtent": "",
|
|
17629
|
+
"record.metadata.temporalExtent.fromDateToDate": "",
|
|
17630
|
+
"record.metadata.temporalExtent.sinceDate": "",
|
|
17631
|
+
"record.metadata.temporalExtent.untilDate": "",
|
|
17488
17632
|
"record.metadata.title": "",
|
|
17633
|
+
"record.metadata.topics": "",
|
|
17489
17634
|
"record.metadata.type": "",
|
|
17490
17635
|
"record.metadata.uniqueId": "",
|
|
17491
17636
|
"record.metadata.updateFrequency": "",
|
|
17492
|
-
"record.metadata.updateStatus": "",
|
|
17493
17637
|
"record.metadata.updatedOn": "",
|
|
17494
17638
|
"record.metadata.usage": "",
|
|
17495
17639
|
"record.more.details": "",
|
|
@@ -17521,6 +17665,7 @@ var es = {
|
|
|
17521
17665
|
"search.filters.isSpatial": "",
|
|
17522
17666
|
"search.filters.isSpatial.no": "",
|
|
17523
17667
|
"search.filters.isSpatial.yes": "",
|
|
17668
|
+
"search.filters.keyword": "",
|
|
17524
17669
|
"search.filters.license": "",
|
|
17525
17670
|
"search.filters.license.cc-by": "",
|
|
17526
17671
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -17585,7 +17730,7 @@ var fr = {
|
|
|
17585
17730
|
"chart.type.line": "ligne",
|
|
17586
17731
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17587
17732
|
"chart.type.pie": "camembert",
|
|
17588
|
-
"dashboard.createRecord": "",
|
|
17733
|
+
"dashboard.createRecord": "Nouvel enregistrement",
|
|
17589
17734
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17590
17735
|
"dashboard.records.all": "Catalogue",
|
|
17591
17736
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
@@ -17598,8 +17743,8 @@ var fr = {
|
|
|
17598
17743
|
"dashboard.records.userEmail": "Email",
|
|
17599
17744
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17600
17745
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17601
|
-
"dashboard.results.listMetadata": "",
|
|
17602
|
-
"dashboard.results.listResources": "",
|
|
17746
|
+
"dashboard.results.listMetadata": "Afficher les métadonnées",
|
|
17747
|
+
"dashboard.results.listResources": "Afficher les ressources",
|
|
17603
17748
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17604
17749
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17605
17750
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17713,6 +17858,8 @@ var fr = {
|
|
|
17713
17858
|
"downloads.format.unknown": "inconnu",
|
|
17714
17859
|
"downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
|
|
17715
17860
|
dropFile: dropFile$3,
|
|
17861
|
+
"editor.record.publish": "",
|
|
17862
|
+
"editor.record.upToDate": "",
|
|
17716
17863
|
"externalviewer.dataset.unnamed": "Couche du datahub",
|
|
17717
17864
|
"facets.block.title.OrgForResource": "Organisation",
|
|
17718
17865
|
"facets.block.title.availableInServices": "Disponible pour",
|
|
@@ -17726,38 +17873,38 @@ var fr = {
|
|
|
17726
17873
|
"facets.block.title.tag.default": "Tag",
|
|
17727
17874
|
"facets.block.title.th_regions_tree.default": "Régions",
|
|
17728
17875
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Connectez-vous</a> pour avoir accès à cette fonctionnalité</div>",
|
|
17729
|
-
"language.ca": "
|
|
17730
|
-
"language.cs": "
|
|
17731
|
-
"language.de": "
|
|
17732
|
-
"language.en": "
|
|
17733
|
-
"language.es": "
|
|
17734
|
-
"language.fi": "
|
|
17876
|
+
"language.ca": "Catalan",
|
|
17877
|
+
"language.cs": "Tchèque",
|
|
17878
|
+
"language.de": "Allemand",
|
|
17879
|
+
"language.en": "Anglais",
|
|
17880
|
+
"language.es": "Espagnol",
|
|
17881
|
+
"language.fi": "Finnois",
|
|
17735
17882
|
"language.fr": "Français",
|
|
17736
|
-
"language.is": "
|
|
17737
|
-
"language.it": "
|
|
17738
|
-
"language.ko": "
|
|
17739
|
-
"language.nl": "
|
|
17740
|
-
"language.pt": "
|
|
17741
|
-
"language.ru": "
|
|
17742
|
-
"language.sk": "
|
|
17743
|
-
"language.zh": "
|
|
17744
|
-
"map.add.layer": "",
|
|
17745
|
-
"map.add.layer.catalog": "",
|
|
17746
|
-
"map.add.layer.file": "",
|
|
17747
|
-
"map.add.layer.wfs": "",
|
|
17748
|
-
"map.add.layer.wms": "",
|
|
17749
|
-
"map.addFromFile.placeholder": "",
|
|
17750
|
-
"map.geocoding.placeholder": "",
|
|
17751
|
-
"map.help.addFromFile": "",
|
|
17752
|
-
"map.layer.add": "",
|
|
17753
|
-
"map.layers.available": "",
|
|
17754
|
-
"map.layers.list": "",
|
|
17883
|
+
"language.is": "Islandais",
|
|
17884
|
+
"language.it": "Italien",
|
|
17885
|
+
"language.ko": "Coréen",
|
|
17886
|
+
"language.nl": "Néerlandais",
|
|
17887
|
+
"language.pt": "Portugais",
|
|
17888
|
+
"language.ru": "Russe",
|
|
17889
|
+
"language.sk": "Slovaque",
|
|
17890
|
+
"language.zh": "Chinois",
|
|
17891
|
+
"map.add.layer": "Ajouter une couche",
|
|
17892
|
+
"map.add.layer.catalog": "Du catalogue",
|
|
17893
|
+
"map.add.layer.file": "À partir d'un fichier",
|
|
17894
|
+
"map.add.layer.wfs": "Depuis un service WFS",
|
|
17895
|
+
"map.add.layer.wms": "Depuis un service WMS",
|
|
17896
|
+
"map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
|
|
17897
|
+
"map.geocoding.placeholder": "Rechercher un lieu",
|
|
17898
|
+
"map.help.addFromFile": "Cliquez ou glissez-déposez un fichier pour l'ajouter à la carte (supporte actuellement uniquement le format GeoJSON).",
|
|
17899
|
+
"map.layer.add": "Ajouter",
|
|
17900
|
+
"map.layers.available": "Couches disponibles",
|
|
17901
|
+
"map.layers.list": "Couches",
|
|
17755
17902
|
"map.loading.data": "Chargement des données...",
|
|
17756
|
-
"map.loading.service": "",
|
|
17903
|
+
"map.loading.service": "Chargement du service...",
|
|
17757
17904
|
"map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
|
|
17758
17905
|
"map.select.layer": "Source de données",
|
|
17759
|
-
"map.wfs.urlInput.hint": "",
|
|
17760
|
-
"map.wms.urlInput.hint": "",
|
|
17906
|
+
"map.wfs.urlInput.hint": "Entrez l'URL du service WFS",
|
|
17907
|
+
"map.wms.urlInput.hint": "Entrez l'URL du service WMS",
|
|
17761
17908
|
"multiselect.filter.placeholder": "Rechercher",
|
|
17762
17909
|
"nav.back": "Retour",
|
|
17763
17910
|
next: next$3,
|
|
@@ -17791,17 +17938,20 @@ var fr = {
|
|
|
17791
17938
|
"record.metadata.author": "Auteur",
|
|
17792
17939
|
"record.metadata.catalog": "Catalogue",
|
|
17793
17940
|
"record.metadata.contact": "Contact",
|
|
17794
|
-
"record.metadata.
|
|
17941
|
+
"record.metadata.creation": "Date de création",
|
|
17942
|
+
"record.metadata.details": "A propos de la donnée",
|
|
17795
17943
|
"record.metadata.download": "Téléchargements",
|
|
17796
17944
|
"record.metadata.formats": "Formats",
|
|
17797
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17798
17945
|
"record.metadata.keywords": "Mots clés",
|
|
17799
|
-
"record.metadata.
|
|
17946
|
+
"record.metadata.languages": "Langues",
|
|
17947
|
+
"record.metadata.lastUpdate": "Mis à jour le {date}",
|
|
17800
17948
|
"record.metadata.links": "Liens",
|
|
17801
17949
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17802
|
-
"record.metadata.
|
|
17950
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17803
17951
|
"record.metadata.owner": "Catalogue d'origine",
|
|
17804
17952
|
"record.metadata.preview": "Aperçu",
|
|
17953
|
+
"record.metadata.producer": "Producteur de la donnée",
|
|
17954
|
+
"record.metadata.publication": "Date de publication",
|
|
17805
17955
|
"record.metadata.publications": "données",
|
|
17806
17956
|
"record.metadata.quality": "Qualité des métadonnées",
|
|
17807
17957
|
"record.metadata.quality.contact.failed": "Contact n'est pas renseigné",
|
|
@@ -17823,15 +17973,19 @@ var fr = {
|
|
|
17823
17973
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17824
17974
|
"record.metadata.related": "Voir aussi",
|
|
17825
17975
|
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17826
|
-
"record.metadata.status": "",
|
|
17827
|
-
"record.metadata.
|
|
17976
|
+
"record.metadata.status": "Statut",
|
|
17977
|
+
"record.metadata.technical": "Informations techniques",
|
|
17978
|
+
"record.metadata.temporalExtent": "Etendue temporelle",
|
|
17979
|
+
"record.metadata.temporalExtent.fromDateToDate": "Du { start } au { end }",
|
|
17980
|
+
"record.metadata.temporalExtent.sinceDate": "Depuis le { start }",
|
|
17981
|
+
"record.metadata.temporalExtent.untilDate": "Jusqu'au { end }",
|
|
17828
17982
|
"record.metadata.title": "Titre",
|
|
17983
|
+
"record.metadata.topics": "Catégories",
|
|
17829
17984
|
"record.metadata.type": "Donnée géographique",
|
|
17830
17985
|
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17831
17986
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17832
|
-
"record.metadata.
|
|
17833
|
-
"record.metadata.
|
|
17834
|
-
"record.metadata.usage": "Conditions d'utilisation",
|
|
17987
|
+
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17988
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17835
17989
|
"record.more.details": "Détails",
|
|
17836
17990
|
"record.tab.chart": "Graphique",
|
|
17837
17991
|
"record.tab.data": "Tableau",
|
|
@@ -17861,6 +18015,7 @@ var fr = {
|
|
|
17861
18015
|
"search.filters.isSpatial": "Données spatiales",
|
|
17862
18016
|
"search.filters.isSpatial.no": "non-géolocalisées",
|
|
17863
18017
|
"search.filters.isSpatial.yes": "géolocalisées",
|
|
18018
|
+
"search.filters.keyword": "Mot-clé",
|
|
17864
18019
|
"search.filters.license": "Licence",
|
|
17865
18020
|
"search.filters.license.cc-by": "cc-by",
|
|
17866
18021
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -17925,7 +18080,7 @@ var it = {
|
|
|
17925
18080
|
"chart.type.line": "grafico a linee",
|
|
17926
18081
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
17927
18082
|
"chart.type.pie": "grafico a torta",
|
|
17928
|
-
"dashboard.createRecord": "",
|
|
18083
|
+
"dashboard.createRecord": "Crea un record",
|
|
17929
18084
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
17930
18085
|
"dashboard.records.all": "Catalogo",
|
|
17931
18086
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
@@ -17938,8 +18093,8 @@ var it = {
|
|
|
17938
18093
|
"dashboard.records.userEmail": "Email",
|
|
17939
18094
|
"dashboard.records.username": "Nome utente",
|
|
17940
18095
|
"dashboard.records.users": "utenti",
|
|
17941
|
-
"dashboard.results.listMetadata": "",
|
|
17942
|
-
"dashboard.results.listResources": "",
|
|
18096
|
+
"dashboard.results.listMetadata": "Elenco dei metadati",
|
|
18097
|
+
"dashboard.results.listResources": "Elenco delle risorse",
|
|
17943
18098
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
17944
18099
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
17945
18100
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18053,6 +18208,8 @@ var it = {
|
|
|
18053
18208
|
"downloads.format.unknown": "sconosciuto",
|
|
18054
18209
|
"downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
|
|
18055
18210
|
dropFile: dropFile$2,
|
|
18211
|
+
"editor.record.publish": "",
|
|
18212
|
+
"editor.record.upToDate": "",
|
|
18056
18213
|
"externalviewer.dataset.unnamed": "Layer del datahub",
|
|
18057
18214
|
"facets.block.title.OrgForResource": "Organizzazione",
|
|
18058
18215
|
"facets.block.title.availableInServices": "Disponibile per",
|
|
@@ -18066,38 +18223,38 @@ var it = {
|
|
|
18066
18223
|
"facets.block.title.tag.default": "Tag",
|
|
18067
18224
|
"facets.block.title.th_regions_tree.default": "Regioni",
|
|
18068
18225
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
|
|
18069
|
-
"language.ca": "
|
|
18070
|
-
"language.cs": "
|
|
18071
|
-
"language.de": "
|
|
18072
|
-
"language.en": "
|
|
18073
|
-
"language.es": "
|
|
18074
|
-
"language.fi": "
|
|
18075
|
-
"language.fr": "
|
|
18076
|
-
"language.is": "
|
|
18226
|
+
"language.ca": "Catalano",
|
|
18227
|
+
"language.cs": "Ceco",
|
|
18228
|
+
"language.de": "Tedesco",
|
|
18229
|
+
"language.en": "Inglese",
|
|
18230
|
+
"language.es": "Spagnolo",
|
|
18231
|
+
"language.fi": "Finlandese",
|
|
18232
|
+
"language.fr": "Francese",
|
|
18233
|
+
"language.is": "Islandese",
|
|
18077
18234
|
"language.it": "Italiano",
|
|
18078
|
-
"language.ko": "
|
|
18079
|
-
"language.nl": "
|
|
18080
|
-
"language.pt": "
|
|
18081
|
-
"language.ru": "
|
|
18082
|
-
"language.sk": "
|
|
18083
|
-
"language.zh": "
|
|
18235
|
+
"language.ko": "Coreano",
|
|
18236
|
+
"language.nl": "Olandese",
|
|
18237
|
+
"language.pt": "Portoghese",
|
|
18238
|
+
"language.ru": "Russo",
|
|
18239
|
+
"language.sk": "Slovacco",
|
|
18240
|
+
"language.zh": "Cinese",
|
|
18084
18241
|
"map.add.layer": "Aggiungere un layer",
|
|
18085
18242
|
"map.add.layer.catalog": "Dal catalogo",
|
|
18086
18243
|
"map.add.layer.file": "Da un file",
|
|
18087
18244
|
"map.add.layer.wfs": "Da un WFS",
|
|
18088
18245
|
"map.add.layer.wms": "Da un WMS",
|
|
18089
|
-
"map.addFromFile.placeholder": "",
|
|
18090
|
-
"map.geocoding.placeholder": "",
|
|
18091
|
-
"map.help.addFromFile": "",
|
|
18092
|
-
"map.layer.add": "",
|
|
18093
|
-
"map.layers.available": "",
|
|
18246
|
+
"map.addFromFile.placeholder": "Clicca o trascina un file qui",
|
|
18247
|
+
"map.geocoding.placeholder": "Cerca un luogo",
|
|
18248
|
+
"map.help.addFromFile": "Clicca o trascina un file per aggiungerlo alla mappa (attualmente supporta solo il formato GeoJSON)",
|
|
18249
|
+
"map.layer.add": "Aggiungi",
|
|
18250
|
+
"map.layers.available": "Layer disponibili",
|
|
18094
18251
|
"map.layers.list": "Layers",
|
|
18095
18252
|
"map.loading.data": "Caricamento dati...",
|
|
18096
|
-
"map.loading.service": "",
|
|
18253
|
+
"map.loading.service": "Caricamento del servizio...",
|
|
18097
18254
|
"map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
|
|
18098
18255
|
"map.select.layer": "Sorgente dati",
|
|
18099
|
-
"map.wfs.urlInput.hint": "",
|
|
18100
|
-
"map.wms.urlInput.hint": "",
|
|
18256
|
+
"map.wfs.urlInput.hint": "Inserisci URL del servizio WFS",
|
|
18257
|
+
"map.wms.urlInput.hint": "Inserisci URL del servizio WMS",
|
|
18101
18258
|
"multiselect.filter.placeholder": "Cerca",
|
|
18102
18259
|
"nav.back": "Indietro",
|
|
18103
18260
|
next: next$2,
|
|
@@ -18131,17 +18288,20 @@ var it = {
|
|
|
18131
18288
|
"record.metadata.author": "Autore",
|
|
18132
18289
|
"record.metadata.catalog": "Catalogo",
|
|
18133
18290
|
"record.metadata.contact": "Contatto",
|
|
18134
|
-
"record.metadata.
|
|
18291
|
+
"record.metadata.creation": "Data di creazione",
|
|
18292
|
+
"record.metadata.details": "A proposito del dati",
|
|
18135
18293
|
"record.metadata.download": "Download",
|
|
18136
18294
|
"record.metadata.formats": "Formati",
|
|
18137
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18138
18295
|
"record.metadata.keywords": "Parole chiave",
|
|
18139
|
-
"record.metadata.
|
|
18296
|
+
"record.metadata.languages": "Lingue",
|
|
18297
|
+
"record.metadata.lastUpdate": "Ultimo aggiornamento il {date}",
|
|
18140
18298
|
"record.metadata.links": "Collegamenti",
|
|
18141
18299
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18142
|
-
"record.metadata.
|
|
18300
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18143
18301
|
"record.metadata.owner": "Catalogo originale",
|
|
18144
18302
|
"record.metadata.preview": "Anteprima",
|
|
18303
|
+
"record.metadata.producer": "Produttore dei dati",
|
|
18304
|
+
"record.metadata.publication": "Data di pubblicazione",
|
|
18145
18305
|
"record.metadata.publications": "pubblicazioni",
|
|
18146
18306
|
"record.metadata.quality": "Qualità dei metadati",
|
|
18147
18307
|
"record.metadata.quality.contact.failed": "Il contatto non è specificato",
|
|
@@ -18163,15 +18323,19 @@ var it = {
|
|
|
18163
18323
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18164
18324
|
"record.metadata.related": "Vedi anche",
|
|
18165
18325
|
"record.metadata.sheet": "Origine del metadata",
|
|
18166
|
-
"record.metadata.status": "",
|
|
18167
|
-
"record.metadata.
|
|
18326
|
+
"record.metadata.status": "Stato",
|
|
18327
|
+
"record.metadata.technical": "Informazioni tecniche",
|
|
18328
|
+
"record.metadata.temporalExtent": "Periodo di tempo",
|
|
18329
|
+
"record.metadata.temporalExtent.fromDateToDate": "Da {start} a {end}",
|
|
18330
|
+
"record.metadata.temporalExtent.sinceDate": "Dal {start}",
|
|
18331
|
+
"record.metadata.temporalExtent.untilDate": "Fino a {end}",
|
|
18168
18332
|
"record.metadata.title": "Titolo",
|
|
18333
|
+
"record.metadata.topics": "Categorie",
|
|
18169
18334
|
"record.metadata.type": "Dati geografici",
|
|
18170
18335
|
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18171
18336
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18172
|
-
"record.metadata.
|
|
18173
|
-
"record.metadata.
|
|
18174
|
-
"record.metadata.usage": "Condizioni d'uso",
|
|
18337
|
+
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18338
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18175
18339
|
"record.more.details": "Dettagli",
|
|
18176
18340
|
"record.tab.chart": "Grafico",
|
|
18177
18341
|
"record.tab.data": "Tabella",
|
|
@@ -18201,6 +18365,7 @@ var it = {
|
|
|
18201
18365
|
"search.filters.isSpatial": "Dati spaziali",
|
|
18202
18366
|
"search.filters.isSpatial.no": "Non geolocalizzati",
|
|
18203
18367
|
"search.filters.isSpatial.yes": "Geolocalizzati",
|
|
18368
|
+
"search.filters.keyword": "Parola chiave",
|
|
18204
18369
|
"search.filters.license": "Licenza",
|
|
18205
18370
|
"search.filters.license.cc-by": "cc-by",
|
|
18206
18371
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18393,6 +18558,8 @@ var nl = {
|
|
|
18393
18558
|
"downloads.format.unknown": "",
|
|
18394
18559
|
"downloads.wfs.featuretype.not.found": "",
|
|
18395
18560
|
dropFile: dropFile$1,
|
|
18561
|
+
"editor.record.publish": "",
|
|
18562
|
+
"editor.record.upToDate": "",
|
|
18396
18563
|
"externalviewer.dataset.unnamed": "",
|
|
18397
18564
|
"facets.block.title.OrgForResource": "",
|
|
18398
18565
|
"facets.block.title.availableInServices": "",
|
|
@@ -18406,21 +18573,21 @@ var nl = {
|
|
|
18406
18573
|
"facets.block.title.tag.default": "",
|
|
18407
18574
|
"facets.block.title.th_regions_tree.default": "",
|
|
18408
18575
|
"favorite.not.authenticated.tooltip": "",
|
|
18409
|
-
"language.ca": "
|
|
18410
|
-
"language.cs": "
|
|
18411
|
-
"language.de": "
|
|
18412
|
-
"language.en": "
|
|
18413
|
-
"language.es": "
|
|
18414
|
-
"language.fi": "
|
|
18415
|
-
"language.fr": "
|
|
18416
|
-
"language.is": "
|
|
18417
|
-
"language.it": "
|
|
18418
|
-
"language.ko": "
|
|
18576
|
+
"language.ca": "Catalaans",
|
|
18577
|
+
"language.cs": "Tsjechisch",
|
|
18578
|
+
"language.de": "Duits",
|
|
18579
|
+
"language.en": "Engels",
|
|
18580
|
+
"language.es": "Spaans",
|
|
18581
|
+
"language.fi": "Fins",
|
|
18582
|
+
"language.fr": "Frans",
|
|
18583
|
+
"language.is": "IJslands",
|
|
18584
|
+
"language.it": "Italiaans",
|
|
18585
|
+
"language.ko": "Koreaans",
|
|
18419
18586
|
"language.nl": "Nederlands",
|
|
18420
|
-
"language.pt": "
|
|
18421
|
-
"language.ru": "
|
|
18422
|
-
"language.sk": "
|
|
18423
|
-
"language.zh": "
|
|
18587
|
+
"language.pt": "Portugees",
|
|
18588
|
+
"language.ru": "Russisch",
|
|
18589
|
+
"language.sk": "Slowaaks",
|
|
18590
|
+
"language.zh": "Chinees",
|
|
18424
18591
|
"map.add.layer": "",
|
|
18425
18592
|
"map.add.layer.catalog": "",
|
|
18426
18593
|
"map.add.layer.file": "",
|
|
@@ -18471,17 +18638,20 @@ var nl = {
|
|
|
18471
18638
|
"record.metadata.author": "",
|
|
18472
18639
|
"record.metadata.catalog": "",
|
|
18473
18640
|
"record.metadata.contact": "",
|
|
18641
|
+
"record.metadata.creation": "",
|
|
18474
18642
|
"record.metadata.details": "",
|
|
18475
18643
|
"record.metadata.download": "",
|
|
18476
18644
|
"record.metadata.formats": "",
|
|
18477
|
-
"record.metadata.isOpenData": "",
|
|
18478
18645
|
"record.metadata.keywords": "",
|
|
18646
|
+
"record.metadata.languages": "",
|
|
18479
18647
|
"record.metadata.lastUpdate": "",
|
|
18480
18648
|
"record.metadata.links": "",
|
|
18481
18649
|
"record.metadata.noUsage": "",
|
|
18482
|
-
"record.metadata.
|
|
18650
|
+
"record.metadata.otherConstraints": "",
|
|
18483
18651
|
"record.metadata.owner": "",
|
|
18484
18652
|
"record.metadata.preview": "",
|
|
18653
|
+
"record.metadata.producer": "",
|
|
18654
|
+
"record.metadata.publication": "",
|
|
18485
18655
|
"record.metadata.publications": "",
|
|
18486
18656
|
"record.metadata.quality": "",
|
|
18487
18657
|
"record.metadata.quality.contact.failed": "",
|
|
@@ -18504,12 +18674,16 @@ var nl = {
|
|
|
18504
18674
|
"record.metadata.related": "",
|
|
18505
18675
|
"record.metadata.sheet": "",
|
|
18506
18676
|
"record.metadata.status": "",
|
|
18507
|
-
"record.metadata.
|
|
18677
|
+
"record.metadata.technical": "",
|
|
18678
|
+
"record.metadata.temporalExtent": "",
|
|
18679
|
+
"record.metadata.temporalExtent.fromDateToDate": "",
|
|
18680
|
+
"record.metadata.temporalExtent.sinceDate": "",
|
|
18681
|
+
"record.metadata.temporalExtent.untilDate": "",
|
|
18508
18682
|
"record.metadata.title": "",
|
|
18683
|
+
"record.metadata.topics": "",
|
|
18509
18684
|
"record.metadata.type": "",
|
|
18510
18685
|
"record.metadata.uniqueId": "",
|
|
18511
18686
|
"record.metadata.updateFrequency": "",
|
|
18512
|
-
"record.metadata.updateStatus": "",
|
|
18513
18687
|
"record.metadata.updatedOn": "",
|
|
18514
18688
|
"record.metadata.usage": "",
|
|
18515
18689
|
"record.more.details": "",
|
|
@@ -18541,6 +18715,7 @@ var nl = {
|
|
|
18541
18715
|
"search.filters.isSpatial": "",
|
|
18542
18716
|
"search.filters.isSpatial.no": "",
|
|
18543
18717
|
"search.filters.isSpatial.yes": "",
|
|
18718
|
+
"search.filters.keyword": "",
|
|
18544
18719
|
"search.filters.license": "",
|
|
18545
18720
|
"search.filters.license.cc-by": "",
|
|
18546
18721
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18733,6 +18908,8 @@ var pt = {
|
|
|
18733
18908
|
"downloads.format.unknown": "",
|
|
18734
18909
|
"downloads.wfs.featuretype.not.found": "",
|
|
18735
18910
|
dropFile: dropFile,
|
|
18911
|
+
"editor.record.publish": "",
|
|
18912
|
+
"editor.record.upToDate": "",
|
|
18736
18913
|
"externalviewer.dataset.unnamed": "",
|
|
18737
18914
|
"facets.block.title.OrgForResource": "",
|
|
18738
18915
|
"facets.block.title.availableInServices": "",
|
|
@@ -18746,21 +18923,21 @@ var pt = {
|
|
|
18746
18923
|
"facets.block.title.tag.default": "",
|
|
18747
18924
|
"facets.block.title.th_regions_tree.default": "",
|
|
18748
18925
|
"favorite.not.authenticated.tooltip": "",
|
|
18749
|
-
"language.ca": "
|
|
18750
|
-
"language.cs": "
|
|
18751
|
-
"language.de": "
|
|
18752
|
-
"language.en": "
|
|
18753
|
-
"language.es": "
|
|
18754
|
-
"language.fi": "
|
|
18755
|
-
"language.fr": "
|
|
18756
|
-
"language.is": "
|
|
18926
|
+
"language.ca": "Catalão",
|
|
18927
|
+
"language.cs": "Tcheco",
|
|
18928
|
+
"language.de": "Alemão",
|
|
18929
|
+
"language.en": "Inglês",
|
|
18930
|
+
"language.es": "Espanhol",
|
|
18931
|
+
"language.fi": "Finlandês",
|
|
18932
|
+
"language.fr": "Francês",
|
|
18933
|
+
"language.is": "Islandês",
|
|
18757
18934
|
"language.it": "Italiano",
|
|
18758
|
-
"language.ko": "
|
|
18759
|
-
"language.nl": "
|
|
18935
|
+
"language.ko": "Coreano",
|
|
18936
|
+
"language.nl": "Holandês",
|
|
18760
18937
|
"language.pt": "Português",
|
|
18761
|
-
"language.ru": "
|
|
18762
|
-
"language.sk": "
|
|
18763
|
-
"language.zh": "
|
|
18938
|
+
"language.ru": "Russo",
|
|
18939
|
+
"language.sk": "Eslovaco",
|
|
18940
|
+
"language.zh": "Chinês",
|
|
18764
18941
|
"map.add.layer": "",
|
|
18765
18942
|
"map.add.layer.catalog": "",
|
|
18766
18943
|
"map.add.layer.file": "",
|
|
@@ -18811,17 +18988,20 @@ var pt = {
|
|
|
18811
18988
|
"record.metadata.author": "",
|
|
18812
18989
|
"record.metadata.catalog": "",
|
|
18813
18990
|
"record.metadata.contact": "",
|
|
18991
|
+
"record.metadata.creation": "",
|
|
18814
18992
|
"record.metadata.details": "",
|
|
18815
18993
|
"record.metadata.download": "",
|
|
18816
18994
|
"record.metadata.formats": "",
|
|
18817
|
-
"record.metadata.isOpenData": "",
|
|
18818
18995
|
"record.metadata.keywords": "",
|
|
18996
|
+
"record.metadata.languages": "",
|
|
18819
18997
|
"record.metadata.lastUpdate": "",
|
|
18820
18998
|
"record.metadata.links": "",
|
|
18821
18999
|
"record.metadata.noUsage": "",
|
|
18822
|
-
"record.metadata.
|
|
19000
|
+
"record.metadata.otherConstraints": "",
|
|
18823
19001
|
"record.metadata.owner": "",
|
|
18824
19002
|
"record.metadata.preview": "",
|
|
19003
|
+
"record.metadata.producer": "",
|
|
19004
|
+
"record.metadata.publication": "",
|
|
18825
19005
|
"record.metadata.publications": "",
|
|
18826
19006
|
"record.metadata.quality": "",
|
|
18827
19007
|
"record.metadata.quality.contact.failed": "",
|
|
@@ -18844,12 +19024,16 @@ var pt = {
|
|
|
18844
19024
|
"record.metadata.related": "",
|
|
18845
19025
|
"record.metadata.sheet": "",
|
|
18846
19026
|
"record.metadata.status": "",
|
|
18847
|
-
"record.metadata.
|
|
19027
|
+
"record.metadata.technical": "",
|
|
19028
|
+
"record.metadata.temporalExtent": "",
|
|
19029
|
+
"record.metadata.temporalExtent.fromDateToDate": "",
|
|
19030
|
+
"record.metadata.temporalExtent.sinceDate": "",
|
|
19031
|
+
"record.metadata.temporalExtent.untilDate": "",
|
|
18848
19032
|
"record.metadata.title": "",
|
|
19033
|
+
"record.metadata.topics": "",
|
|
18849
19034
|
"record.metadata.type": "",
|
|
18850
19035
|
"record.metadata.uniqueId": "",
|
|
18851
19036
|
"record.metadata.updateFrequency": "",
|
|
18852
|
-
"record.metadata.updateStatus": "",
|
|
18853
19037
|
"record.metadata.updatedOn": "",
|
|
18854
19038
|
"record.metadata.usage": "",
|
|
18855
19039
|
"record.more.details": "",
|
|
@@ -18881,6 +19065,7 @@ var pt = {
|
|
|
18881
19065
|
"search.filters.isSpatial": "",
|
|
18882
19066
|
"search.filters.isSpatial.no": "",
|
|
18883
19067
|
"search.filters.isSpatial.yes": "",
|
|
19068
|
+
"search.filters.keyword": "",
|
|
18884
19069
|
"search.filters.license": "",
|
|
18885
19070
|
"search.filters.license.cc-by": "",
|
|
18886
19071
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18989,8 +19174,8 @@ class Gn4FieldMapper {
|
|
|
18989
19174
|
},
|
|
18990
19175
|
cl_topic: (output, source) => ({
|
|
18991
19176
|
...output,
|
|
18992
|
-
|
|
18993
|
-
...(output.
|
|
19177
|
+
topics: [
|
|
19178
|
+
...(output.topics || []),
|
|
18994
19179
|
...getAsArray(selectField(source, 'cl_topic')).map((topic) => selectTranslatedValue(topic, this.lang3)),
|
|
18995
19180
|
],
|
|
18996
19181
|
}),
|
|
@@ -19014,6 +19199,18 @@ class Gn4FieldMapper {
|
|
|
19014
19199
|
...output,
|
|
19015
19200
|
recordUpdated: toDate(selectField(source, 'changeDate')),
|
|
19016
19201
|
}),
|
|
19202
|
+
publicationDateForResource: (output, source) => ({
|
|
19203
|
+
...output,
|
|
19204
|
+
recordPublished: toDate(selectField(source, 'publicationDateForResource')),
|
|
19205
|
+
}),
|
|
19206
|
+
resourceLanguage: (output, source) => {
|
|
19207
|
+
const langList = getAsArray(selectField(source, 'resourceLanguage'));
|
|
19208
|
+
const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang]);
|
|
19209
|
+
return {
|
|
19210
|
+
...output,
|
|
19211
|
+
languages,
|
|
19212
|
+
};
|
|
19213
|
+
},
|
|
19017
19214
|
link: (output, source) => {
|
|
19018
19215
|
const rawLinks = getAsArray(selectField(source, 'link'));
|
|
19019
19216
|
const distributions = rawLinks
|
|
@@ -19045,31 +19242,22 @@ class Gn4FieldMapper {
|
|
|
19045
19242
|
catalogUuid: selectFallback(selectField(source, 'sourceCatalogue'), 'no title'),
|
|
19046
19243
|
}, output);
|
|
19047
19244
|
},
|
|
19048
|
-
|
|
19245
|
+
allKeywords: (output, source) => ({
|
|
19049
19246
|
...output,
|
|
19050
|
-
keywords:
|
|
19247
|
+
keywords: mapKeywords(selectField(source, 'allKeywords'), this.lang3),
|
|
19051
19248
|
}),
|
|
19052
19249
|
inspireTheme: (output, source) => ({
|
|
19053
19250
|
...output,
|
|
19054
|
-
|
|
19055
|
-
...(output.
|
|
19251
|
+
topics: [
|
|
19252
|
+
...(output.topics || []),
|
|
19056
19253
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19057
19254
|
],
|
|
19058
19255
|
}),
|
|
19059
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19060
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19061
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19062
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19063
|
-
licenseObject: (output, source) => (
|
|
19064
|
-
...output,
|
|
19065
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19066
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19067
|
-
return {
|
|
19068
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19069
|
-
...(link ? { link } : {}),
|
|
19070
|
-
};
|
|
19071
|
-
}),
|
|
19072
|
-
}),
|
|
19256
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19257
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19258
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19259
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19260
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19073
19261
|
lineageObject: (output, source) => ({
|
|
19074
19262
|
...output,
|
|
19075
19263
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19115,8 +19303,8 @@ class Gn4FieldMapper {
|
|
|
19115
19303
|
],
|
|
19116
19304
|
};
|
|
19117
19305
|
},
|
|
19118
|
-
|
|
19119
|
-
const ranges = getAsArray(selectField(source, '
|
|
19306
|
+
resourceTemporalExtentDateRange: (output, source) => {
|
|
19307
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalExtentDateRange'));
|
|
19120
19308
|
return {
|
|
19121
19309
|
...output,
|
|
19122
19310
|
temporalExtents: ranges.map((range) => {
|
|
@@ -19131,31 +19319,42 @@ class Gn4FieldMapper {
|
|
|
19131
19319
|
},
|
|
19132
19320
|
};
|
|
19133
19321
|
this.genericField = (output) => output;
|
|
19134
|
-
this.constraintField = (
|
|
19135
|
-
|
|
19136
|
-
|
|
19137
|
-
|
|
19138
|
-
|
|
19139
|
-
|
|
19140
|
-
|
|
19141
|
-
|
|
19142
|
-
|
|
19143
|
-
|
|
19144
|
-
|
|
19145
|
-
|
|
19146
|
-
|
|
19147
|
-
|
|
19148
|
-
|
|
19149
|
-
|
|
19150
|
-
|
|
19151
|
-
|
|
19152
|
-
|
|
19153
|
-
|
|
19154
|
-
|
|
19155
|
-
|
|
19156
|
-
|
|
19157
|
-
}
|
|
19158
|
-
|
|
19322
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19323
|
+
let outputField;
|
|
19324
|
+
switch (type) {
|
|
19325
|
+
case 'license':
|
|
19326
|
+
outputField = 'licenses';
|
|
19327
|
+
break;
|
|
19328
|
+
case 'legal':
|
|
19329
|
+
outputField = 'legalConstraints';
|
|
19330
|
+
break;
|
|
19331
|
+
case 'security':
|
|
19332
|
+
outputField = 'securityConstraints';
|
|
19333
|
+
break;
|
|
19334
|
+
case 'other':
|
|
19335
|
+
outputField = 'otherConstraints';
|
|
19336
|
+
break;
|
|
19337
|
+
}
|
|
19338
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19339
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19340
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19341
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19342
|
+
return {
|
|
19343
|
+
text,
|
|
19344
|
+
...(url ? { url } : {}),
|
|
19345
|
+
};
|
|
19346
|
+
}));
|
|
19347
|
+
const result = {
|
|
19348
|
+
...output,
|
|
19349
|
+
[outputField]: outputArray,
|
|
19350
|
+
};
|
|
19351
|
+
// avoid legal constraints being duplicates of licenses
|
|
19352
|
+
if ('legalConstraints' in result &&
|
|
19353
|
+
(type === 'legal' || type === 'license')) {
|
|
19354
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19355
|
+
}
|
|
19356
|
+
return result;
|
|
19357
|
+
};
|
|
19159
19358
|
this.mapLink = (sourceLink) => {
|
|
19160
19359
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19161
19360
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19203,17 +19402,6 @@ class Gn4FieldMapper {
|
|
|
19203
19402
|
extras: { ...(output.extras || {}), ...value },
|
|
19204
19403
|
});
|
|
19205
19404
|
}
|
|
19206
|
-
getConstraintsType(indexField) {
|
|
19207
|
-
switch (indexField) {
|
|
19208
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19209
|
-
return 'legal';
|
|
19210
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19211
|
-
return 'security';
|
|
19212
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19213
|
-
default:
|
|
19214
|
-
return 'other';
|
|
19215
|
-
}
|
|
19216
|
-
}
|
|
19217
19405
|
getMappingFn(fieldName) {
|
|
19218
19406
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19219
19407
|
}
|
|
@@ -19273,17 +19461,20 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19273
19461
|
status: null,
|
|
19274
19462
|
lineage: null,
|
|
19275
19463
|
recordUpdated: null,
|
|
19464
|
+
recordPublished: null,
|
|
19276
19465
|
ownerOrganization: null,
|
|
19277
19466
|
licenses: [],
|
|
19467
|
+
legalConstraints: [],
|
|
19468
|
+
securityConstraints: [],
|
|
19469
|
+
otherConstraints: [],
|
|
19278
19470
|
contacts: [],
|
|
19279
19471
|
contactsForResource: [],
|
|
19280
|
-
accessConstraints: [],
|
|
19281
19472
|
keywords: [],
|
|
19282
|
-
|
|
19283
|
-
useLimitations: [],
|
|
19473
|
+
topics: [],
|
|
19284
19474
|
spatialExtents: [],
|
|
19285
19475
|
temporalExtents: [],
|
|
19286
19476
|
overviews: [],
|
|
19477
|
+
languages: [],
|
|
19287
19478
|
};
|
|
19288
19479
|
const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
|
|
19289
19480
|
return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
|
|
@@ -19443,7 +19634,7 @@ class ElasticsearchService {
|
|
|
19443
19634
|
},
|
|
19444
19635
|
};
|
|
19445
19636
|
}
|
|
19446
|
-
getRelatedRecordPayload(title, uuid, size = 6, _source = ES_SOURCE_SUMMARY) {
|
|
19637
|
+
getRelatedRecordPayload(title, uuid, size = 6, _source = [...ES_SOURCE_SUMMARY, 'allKeywords', 'createDate']) {
|
|
19447
19638
|
return {
|
|
19448
19639
|
query: {
|
|
19449
19640
|
bool: {
|
|
@@ -20048,11 +20239,18 @@ class OrganizationsFromMetadataService {
|
|
|
20048
20239
|
if (!allContactOrgs.length)
|
|
20049
20240
|
return of(record);
|
|
20050
20241
|
const ownerOrganization = allContactOrgs[0];
|
|
20051
|
-
|
|
20242
|
+
// read the owner group as well to have a fallback logo
|
|
20243
|
+
const groupId = selectField(source, 'groupOwner');
|
|
20244
|
+
const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
|
|
20245
|
+
return group.id === Number(groupId);
|
|
20246
|
+
})));
|
|
20247
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
|
|
20052
20248
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
20249
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
|
|
20053
20250
|
return {
|
|
20054
20251
|
...record,
|
|
20055
20252
|
ownerOrganization: {
|
|
20253
|
+
logoUrl,
|
|
20056
20254
|
...ownerOrganization,
|
|
20057
20255
|
...recordOrganisation,
|
|
20058
20256
|
},
|
|
@@ -20363,12 +20561,21 @@ class Gn4PlatformMapper {
|
|
|
20363
20561
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
20364
20562
|
return { ...apiUser, id: id.toString() };
|
|
20365
20563
|
}
|
|
20366
|
-
thesaurusFromApi(thesaurus) {
|
|
20564
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
20367
20565
|
return thesaurus.map((keyword) => {
|
|
20368
|
-
|
|
20566
|
+
let key = keyword.uri;
|
|
20567
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
20568
|
+
if (key.indexOf('@@@') > -1) {
|
|
20569
|
+
key = key.split('@@@')[1];
|
|
20570
|
+
}
|
|
20571
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
20572
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
20573
|
+
? keyword.definitions[lang3]
|
|
20574
|
+
: keyword.definition;
|
|
20369
20575
|
return {
|
|
20370
|
-
key
|
|
20371
|
-
label
|
|
20576
|
+
key,
|
|
20577
|
+
label,
|
|
20578
|
+
description,
|
|
20372
20579
|
};
|
|
20373
20580
|
});
|
|
20374
20581
|
}
|
|
@@ -20381,13 +20588,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
20381
20588
|
|
|
20382
20589
|
const minApiVersion = '4.2.2';
|
|
20383
20590
|
class Gn4PlatformService {
|
|
20384
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
|
|
20591
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
20385
20592
|
this.siteApiService = siteApiService;
|
|
20386
20593
|
this.meApi = meApi;
|
|
20387
20594
|
this.usersApi = usersApi;
|
|
20388
20595
|
this.mapper = mapper;
|
|
20389
20596
|
this.toolsApiService = toolsApiService;
|
|
20390
20597
|
this.registriesApiService = registriesApiService;
|
|
20598
|
+
this.langService = langService;
|
|
20391
20599
|
this.type = 'GeoNetwork';
|
|
20392
20600
|
this.keyTranslations$ = this.toolsApiService
|
|
20393
20601
|
.getTranslationsPackage1('gnui')
|
|
@@ -20401,6 +20609,11 @@ class Gn4PlatformService {
|
|
|
20401
20609
|
throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
|
|
20402
20610
|
}
|
|
20403
20611
|
}), shareReplay(1));
|
|
20612
|
+
/**
|
|
20613
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
20614
|
+
* @private
|
|
20615
|
+
*/
|
|
20616
|
+
this.thesauri = {};
|
|
20404
20617
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
20405
20618
|
this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
20406
20619
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
@@ -20427,19 +20640,36 @@ class Gn4PlatformService {
|
|
|
20427
20640
|
return this.users$;
|
|
20428
20641
|
}
|
|
20429
20642
|
translateKey(key) {
|
|
20643
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
20644
|
+
if (key.match(/^https?:\/\//)) {
|
|
20645
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
20646
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
20647
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
|
|
20648
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
|
|
20649
|
+
for (const item of thesaurus) {
|
|
20650
|
+
if (item.key === key)
|
|
20651
|
+
return item.label;
|
|
20652
|
+
}
|
|
20653
|
+
return key;
|
|
20654
|
+
}));
|
|
20655
|
+
}
|
|
20430
20656
|
return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
|
|
20431
20657
|
}
|
|
20432
|
-
|
|
20433
|
-
|
|
20434
|
-
.
|
|
20435
|
-
|
|
20658
|
+
getThesaurusByUri(uri) {
|
|
20659
|
+
if (this.thesauri[uri]) {
|
|
20660
|
+
return this.thesauri[uri];
|
|
20661
|
+
}
|
|
20662
|
+
this.thesauri[uri] = this.registriesApiService
|
|
20663
|
+
.searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
|
|
20664
|
+
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
20665
|
+
return this.thesauri[uri];
|
|
20436
20666
|
}
|
|
20437
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20667
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20438
20668
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
20439
20669
|
}
|
|
20440
20670
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
20441
20671
|
type: Injectable
|
|
20442
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
|
|
20672
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
20443
20673
|
|
|
20444
20674
|
function provideGn4() {
|
|
20445
20675
|
return [
|
|
@@ -20475,7 +20705,7 @@ const MAP_FEATURE_KEY = 'map';
|
|
|
20475
20705
|
const initialMapState = {
|
|
20476
20706
|
layers: [],
|
|
20477
20707
|
};
|
|
20478
|
-
const reducer$
|
|
20708
|
+
const reducer$3 = createReducer(initialMapState, on(addLayer, (state, action) => {
|
|
20479
20709
|
const layers = [...state.layers];
|
|
20480
20710
|
const layerWithInfo = { ...action.layer, loading: false, error: null };
|
|
20481
20711
|
if (!('atIndex' in action))
|
|
@@ -20524,7 +20754,7 @@ const reducer$2 = createReducer(initialMapState, on(addLayer, (state, action) =>
|
|
|
20524
20754
|
: layer),
|
|
20525
20755
|
})));
|
|
20526
20756
|
function mapReducer(state, action) {
|
|
20527
|
-
return reducer$
|
|
20757
|
+
return reducer$3(state, action);
|
|
20528
20758
|
}
|
|
20529
20759
|
|
|
20530
20760
|
// Lookup the 'Map' feature state managed by NgRx
|
|
@@ -20987,6 +21217,38 @@ function createFuzzyFilter(pattern) {
|
|
|
20987
21217
|
};
|
|
20988
21218
|
}
|
|
20989
21219
|
|
|
21220
|
+
function getTemporalRangeUnion(ranges) {
|
|
21221
|
+
let earliestStartDate = Infinity;
|
|
21222
|
+
let latestEndDate = -Infinity;
|
|
21223
|
+
if (ranges.length) {
|
|
21224
|
+
for (let i = 0; i < ranges.length; i++) {
|
|
21225
|
+
const rangeStart = ranges[i].start
|
|
21226
|
+
? new Date(ranges[i].start).getTime()
|
|
21227
|
+
: -Infinity;
|
|
21228
|
+
const rangeEnd = ranges[i].end
|
|
21229
|
+
? new Date(ranges[i].end).getTime()
|
|
21230
|
+
: Infinity;
|
|
21231
|
+
if (rangeStart < earliestStartDate) {
|
|
21232
|
+
earliestStartDate = rangeStart;
|
|
21233
|
+
}
|
|
21234
|
+
if (rangeEnd > latestEndDate) {
|
|
21235
|
+
latestEndDate = rangeEnd;
|
|
21236
|
+
}
|
|
21237
|
+
}
|
|
21238
|
+
return {
|
|
21239
|
+
start: earliestStartDate !== -Infinity
|
|
21240
|
+
? new Date(earliestStartDate).toLocaleDateString()
|
|
21241
|
+
: undefined,
|
|
21242
|
+
end: latestEndDate !== Infinity
|
|
21243
|
+
? new Date(latestEndDate).toLocaleDateString()
|
|
21244
|
+
: undefined,
|
|
21245
|
+
};
|
|
21246
|
+
}
|
|
21247
|
+
else {
|
|
21248
|
+
return undefined;
|
|
21249
|
+
}
|
|
21250
|
+
}
|
|
21251
|
+
|
|
20990
21252
|
marker('downloads.wfs.featuretype.not.found');
|
|
20991
21253
|
const FORMATS = {
|
|
20992
21254
|
csv: {
|
|
@@ -22517,6 +22779,9 @@ class MapContextService {
|
|
|
22517
22779
|
if (mapConfig) {
|
|
22518
22780
|
mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
|
|
22519
22781
|
}
|
|
22782
|
+
else {
|
|
22783
|
+
mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
|
|
22784
|
+
}
|
|
22520
22785
|
if (!mapContext.view?.extent &&
|
|
22521
22786
|
(!mapContext.view?.center || !mapContext.view?.zoom)) {
|
|
22522
22787
|
mapContext.view = this.getFallbackView(mapConfig);
|
|
@@ -22627,6 +22892,11 @@ class MapContextService {
|
|
|
22627
22892
|
}
|
|
22628
22893
|
return view;
|
|
22629
22894
|
}
|
|
22895
|
+
addDefaultBaselayerContext(layers) {
|
|
22896
|
+
return layers.includes(DEFAULT_BASELAYER_CONTEXT)
|
|
22897
|
+
? layers
|
|
22898
|
+
: [DEFAULT_BASELAYER_CONTEXT, ...layers];
|
|
22899
|
+
}
|
|
22630
22900
|
mergeMapConfigWithContext(mapContext, mapConfig) {
|
|
22631
22901
|
return {
|
|
22632
22902
|
...mapContext,
|
|
@@ -23173,11 +23443,11 @@ class ThumbnailComponent {
|
|
|
23173
23443
|
}
|
|
23174
23444
|
}
|
|
23175
23445
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, deps: [{ token: THUMBNAIL_PLACEHOLDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23176
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23446
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center justify-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5 w-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23177
23447
|
}
|
|
23178
23448
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
23179
23449
|
type: Component,
|
|
23180
|
-
args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
|
|
23450
|
+
args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center justify-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5 w-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
|
|
23181
23451
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
23182
23452
|
type: Optional
|
|
23183
23453
|
}, {
|
|
@@ -23305,8 +23575,7 @@ class MetadataQualityComponent {
|
|
|
23305
23575
|
: this.calculatedQualityScore;
|
|
23306
23576
|
}
|
|
23307
23577
|
get calculatedQualityScore() {
|
|
23308
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23309
|
-
this.items.length);
|
|
23578
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23310
23579
|
}
|
|
23311
23580
|
showMenu() {
|
|
23312
23581
|
this.isMenuShown = true;
|
|
@@ -23324,7 +23593,7 @@ class MetadataQualityComponent {
|
|
|
23324
23593
|
this.items = [];
|
|
23325
23594
|
this.add('title', !!this.metadata?.title);
|
|
23326
23595
|
this.add('description', !!this.metadata?.abstract);
|
|
23327
|
-
this.add('topic', this.metadata?.
|
|
23596
|
+
this.add('topic', this.metadata?.topics?.length > 0);
|
|
23328
23597
|
this.add('keywords', this.metadata?.keywords?.length > 0);
|
|
23329
23598
|
this.add('legalConstraints', this.metadata?.legalConstraints?.length > 0);
|
|
23330
23599
|
this.add('organisation', !!contact?.organization);
|
|
@@ -23638,11 +23907,11 @@ class BadgeComponent {
|
|
|
23638
23907
|
this.clickable = false;
|
|
23639
23908
|
}
|
|
23640
23909
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23641
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: BadgeComponent, selector: "gn-ui-badge", inputs: { clickable: "clickable" }, ngImport: i0, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable
|
|
23910
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: BadgeComponent, selector: "gn-ui-badge", inputs: { clickable: "clickable" }, ngImport: i0, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable\n ? 'hover:bg-primary cursor-pointer transition-colors duration-100'\n : ''\n \"\n>\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23642
23911
|
}
|
|
23643
23912
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BadgeComponent, decorators: [{
|
|
23644
23913
|
type: Component,
|
|
23645
|
-
args: [{ selector: 'gn-ui-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable
|
|
23914
|
+
args: [{ selector: 'gn-ui-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable\n ? 'hover:bg-primary cursor-pointer transition-colors duration-100'\n : ''\n \"\n>\n <ng-content></ng-content>\n</div>\n" }]
|
|
23646
23915
|
}], propDecorators: { clickable: [{
|
|
23647
23916
|
type: Input
|
|
23648
23917
|
}] } });
|
|
@@ -23772,6 +24041,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23772
24041
|
type: Input
|
|
23773
24042
|
}] } });
|
|
23774
24043
|
|
|
24044
|
+
class MarkdownParserComponent {
|
|
24045
|
+
get parsedMarkdown() {
|
|
24046
|
+
return marked.parse(this.textContent);
|
|
24047
|
+
}
|
|
24048
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24049
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, isStandalone: true, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24050
|
+
}
|
|
24051
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
24052
|
+
type: Component,
|
|
24053
|
+
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
24054
|
+
}], propDecorators: { textContent: [{
|
|
24055
|
+
type: Input
|
|
24056
|
+
}] } });
|
|
24057
|
+
|
|
23775
24058
|
class ContentGhostComponent {
|
|
23776
24059
|
constructor() {
|
|
23777
24060
|
this.ghostClass = '';
|
|
@@ -23911,14 +24194,16 @@ class MaxLinesComponent {
|
|
|
23911
24194
|
return result;
|
|
23912
24195
|
}
|
|
23913
24196
|
ngOnDestroy() {
|
|
24197
|
+
if (!this.observer)
|
|
24198
|
+
return;
|
|
23914
24199
|
this.observer.unobserve(this.container.nativeElement.children[0]);
|
|
23915
24200
|
}
|
|
23916
24201
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MaxLinesComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23917
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24202
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23918
24203
|
}
|
|
23919
24204
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MaxLinesComponent, decorators: [{
|
|
23920
24205
|
type: Component,
|
|
23921
|
-
args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
|
|
24206
|
+
args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
|
|
23922
24207
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
|
|
23923
24208
|
type: Input
|
|
23924
24209
|
}], container: [{
|
|
@@ -23926,36 +24211,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23926
24211
|
args: ['container']
|
|
23927
24212
|
}] } });
|
|
23928
24213
|
|
|
23929
|
-
class MarkdownParserComponent {
|
|
23930
|
-
get parsedMarkdown() {
|
|
23931
|
-
return marked.parse(this.textContent);
|
|
23932
|
-
}
|
|
23933
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23934
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23935
|
-
}
|
|
23936
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23937
|
-
type: Component,
|
|
23938
|
-
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
23939
|
-
}], propDecorators: { textContent: [{
|
|
23940
|
-
type: Input
|
|
23941
|
-
}] } });
|
|
23942
|
-
|
|
23943
24214
|
class MetadataInfoComponent {
|
|
23944
24215
|
constructor() {
|
|
23945
24216
|
this.keyword = new EventEmitter();
|
|
23946
24217
|
}
|
|
23947
24218
|
get hasUsage() {
|
|
23948
24219
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23949
|
-
this.metadata.
|
|
23950
|
-
|
|
24220
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
24221
|
+
this.legalConstraints.length > 0) ||
|
|
24222
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
24223
|
+
this.otherConstraints.length > 0) ||
|
|
24224
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
24225
|
+
}
|
|
24226
|
+
get legalConstraints() {
|
|
24227
|
+
let array = [];
|
|
24228
|
+
if (this.metadata.legalConstraints?.length) {
|
|
24229
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24230
|
+
}
|
|
24231
|
+
return array;
|
|
23951
24232
|
}
|
|
23952
|
-
get
|
|
24233
|
+
get otherConstraints() {
|
|
23953
24234
|
let array = [];
|
|
23954
|
-
if (this.metadata.
|
|
23955
|
-
array = array.concat(this.metadata.
|
|
24235
|
+
if (this.metadata.otherConstraints?.length) {
|
|
24236
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23956
24237
|
}
|
|
23957
|
-
|
|
23958
|
-
|
|
24238
|
+
return array;
|
|
24239
|
+
}
|
|
24240
|
+
get licenses() {
|
|
24241
|
+
let array = [];
|
|
24242
|
+
if (this.metadata.licenses?.length) {
|
|
24243
|
+
array = array.concat(this.metadata.licenses
|
|
24244
|
+
.filter((c) => c.text)
|
|
24245
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23959
24246
|
}
|
|
23960
24247
|
return array;
|
|
23961
24248
|
}
|
|
@@ -23971,22 +24258,28 @@ class MetadataInfoComponent {
|
|
|
23971
24258
|
return undefined;
|
|
23972
24259
|
}
|
|
23973
24260
|
}
|
|
24261
|
+
get temporalExtent() {
|
|
24262
|
+
const temporalExtents = this.metadata.temporalExtents;
|
|
24263
|
+
return getTemporalRangeUnion(temporalExtents);
|
|
24264
|
+
}
|
|
24265
|
+
get shownOrganization() {
|
|
24266
|
+
return this.metadata.ownerOrganization;
|
|
24267
|
+
}
|
|
24268
|
+
get resourceContact() {
|
|
24269
|
+
return this.metadata.contactsForResource?.[0];
|
|
24270
|
+
}
|
|
23974
24271
|
fieldReady(propName) {
|
|
23975
24272
|
return !this.incomplete || propName in this.metadata;
|
|
23976
24273
|
}
|
|
23977
24274
|
onKeywordClick(keyword) {
|
|
23978
24275
|
this.keyword.emit(keyword);
|
|
23979
24276
|
}
|
|
23980
|
-
copyText() {
|
|
23981
|
-
navigator.clipboard.writeText(this.metadata.uniqueIdentifier);
|
|
23982
|
-
event.target.blur();
|
|
23983
|
-
}
|
|
23984
24277
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23985
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24278
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23986
24279
|
}
|
|
23987
24280
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23988
24281
|
type: Component,
|
|
23989
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-
|
|
24282
|
+
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
|
|
23990
24283
|
}], propDecorators: { metadata: [{
|
|
23991
24284
|
type: Input
|
|
23992
24285
|
}], incomplete: [{
|
|
@@ -24026,23 +24319,23 @@ class ButtonComponent {
|
|
|
24026
24319
|
this.extraClass = '';
|
|
24027
24320
|
this.buttonClick = new EventEmitter();
|
|
24028
24321
|
}
|
|
24029
|
-
// btn-classes are explicited to allow tailwind recognize them and add it in css.
|
|
24030
24322
|
set type(value) {
|
|
24323
|
+
// btn-classes are written in full to be picked up by tailwind
|
|
24031
24324
|
switch (value) {
|
|
24032
24325
|
case 'primary':
|
|
24033
|
-
this.btnClass = 'btn-primary';
|
|
24326
|
+
this.btnClass = 'gn-ui-btn-primary';
|
|
24034
24327
|
break;
|
|
24035
24328
|
case 'secondary':
|
|
24036
|
-
this.btnClass = 'btn-secondary';
|
|
24329
|
+
this.btnClass = 'gn-ui-btn-secondary';
|
|
24037
24330
|
break;
|
|
24038
24331
|
case 'outline':
|
|
24039
|
-
this.btnClass = 'btn-outline';
|
|
24332
|
+
this.btnClass = 'gn-ui-btn-outline';
|
|
24040
24333
|
break;
|
|
24041
24334
|
case 'light':
|
|
24042
|
-
this.btnClass = 'btn-light';
|
|
24335
|
+
this.btnClass = 'gn-ui-btn-light';
|
|
24043
24336
|
break;
|
|
24044
24337
|
default:
|
|
24045
|
-
this.btnClass = 'btn-default';
|
|
24338
|
+
this.btnClass = 'gn-ui-btn-default';
|
|
24046
24339
|
break;
|
|
24047
24340
|
}
|
|
24048
24341
|
}
|
|
@@ -24055,11 +24348,11 @@ class ButtonComponent {
|
|
|
24055
24348
|
propagateToDocumentOnly(event);
|
|
24056
24349
|
}
|
|
24057
24350
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24058
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n
|
|
24351
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24059
24352
|
}
|
|
24060
24353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
24061
24354
|
type: Component,
|
|
24062
|
-
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n
|
|
24355
|
+
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n" }]
|
|
24063
24356
|
}], propDecorators: { type: [{
|
|
24064
24357
|
type: Input
|
|
24065
24358
|
}], disabled: [{
|
|
@@ -24339,11 +24632,11 @@ class CarouselComponent {
|
|
|
24339
24632
|
this.emblaApi.scrollTo(stepIndex);
|
|
24340
24633
|
}
|
|
24341
24634
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24342
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24635
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24343
24636
|
}
|
|
24344
24637
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
24345
24638
|
type: Component,
|
|
24346
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
|
|
24639
|
+
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
|
|
24347
24640
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
|
|
24348
24641
|
type: Input
|
|
24349
24642
|
}], stepsContainerClass: [{
|
|
@@ -24495,11 +24788,11 @@ class MetadataContactComponent {
|
|
|
24495
24788
|
this.organizationClick.emit(this.shownOrganization);
|
|
24496
24789
|
}
|
|
24497
24790
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24498
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24791
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24499
24792
|
}
|
|
24500
24793
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24501
24794
|
type: Component,
|
|
24502
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
24795
|
+
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
24503
24796
|
}], propDecorators: { metadata: [{
|
|
24504
24797
|
type: Input
|
|
24505
24798
|
}], organizationClick: [{
|
|
@@ -24723,11 +25016,11 @@ class DropdownSelectorComponent {
|
|
|
24723
25016
|
}
|
|
24724
25017
|
}
|
|
24725
25018
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24726
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"!p-[8px] !pl-[16px] flex flex-row w-full {{
|
|
25019
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24727
25020
|
}
|
|
24728
25021
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, decorators: [{
|
|
24729
25022
|
type: Component,
|
|
24730
|
-
args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"!p-[8px] !pl-[16px] flex flex-row w-full {{
|
|
25023
|
+
args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n" }]
|
|
24731
25024
|
}], propDecorators: { title: [{
|
|
24732
25025
|
type: Input
|
|
24733
25026
|
}], showTitle: [{
|
|
@@ -24903,11 +25196,11 @@ class DropdownMultiselectComponent {
|
|
|
24903
25196
|
this.setFocus();
|
|
24904
25197
|
}
|
|
24905
25198
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24906
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25199
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24907
25200
|
}
|
|
24908
25201
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24909
25202
|
type: Component,
|
|
24910
|
-
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
25203
|
+
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
24911
25204
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24912
25205
|
type: Input
|
|
24913
25206
|
}], choices: [{
|
|
@@ -25061,11 +25354,11 @@ class TextAreaComponent {
|
|
|
25061
25354
|
this.rawChange.next(value);
|
|
25062
25355
|
}
|
|
25063
25356
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25064
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25357
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25065
25358
|
}
|
|
25066
25359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
25067
25360
|
type: Component,
|
|
25068
|
-
args: [{ selector: 'gn-ui-text-area', template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25361
|
+
args: [{ selector: 'gn-ui-text-area', standalone: true, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25069
25362
|
}], propDecorators: { value: [{
|
|
25070
25363
|
type: Input
|
|
25071
25364
|
}], placeholder: [{
|
|
@@ -25335,11 +25628,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25335
25628
|
|
|
25336
25629
|
class NavigationButtonComponent {
|
|
25337
25630
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25338
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30
|
|
25631
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25339
25632
|
}
|
|
25340
25633
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
25341
25634
|
type: Component,
|
|
25342
|
-
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30
|
|
25635
|
+
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
|
|
25343
25636
|
}], propDecorators: { label: [{
|
|
25344
25637
|
type: Input
|
|
25345
25638
|
}], icon: [{
|
|
@@ -25472,7 +25765,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25472
25765
|
|
|
25473
25766
|
class FormFieldComponent {
|
|
25474
25767
|
set value(v) {
|
|
25475
|
-
this.formControl.setValue(v
|
|
25768
|
+
this.formControl.setValue(v, {
|
|
25769
|
+
emitEvent: false,
|
|
25770
|
+
});
|
|
25476
25771
|
}
|
|
25477
25772
|
constructor() {
|
|
25478
25773
|
this.formControl = new FormControl();
|
|
@@ -25653,10 +25948,8 @@ class UiInputsModule {
|
|
|
25653
25948
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25654
25949
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
25655
25950
|
AutocompleteComponent,
|
|
25656
|
-
ButtonComponent,
|
|
25657
25951
|
TextInputComponent,
|
|
25658
25952
|
DragAndDropFileInputComponent,
|
|
25659
|
-
TextAreaComponent,
|
|
25660
25953
|
ChipsInputComponent,
|
|
25661
25954
|
NavigationButtonComponent,
|
|
25662
25955
|
StarToggleComponent,
|
|
@@ -25689,7 +25982,9 @@ class UiInputsModule {
|
|
|
25689
25982
|
MatInputModule,
|
|
25690
25983
|
MatDatepickerModule,
|
|
25691
25984
|
MatNativeDateModule,
|
|
25692
|
-
EditableLabelDirective
|
|
25985
|
+
EditableLabelDirective,
|
|
25986
|
+
TextAreaComponent,
|
|
25987
|
+
ButtonComponent], exports: [DropdownSelectorComponent,
|
|
25693
25988
|
AutocompleteComponent,
|
|
25694
25989
|
ButtonComponent,
|
|
25695
25990
|
TextInputComponent,
|
|
@@ -25731,10 +26026,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25731
26026
|
declarations: [
|
|
25732
26027
|
DropdownSelectorComponent,
|
|
25733
26028
|
AutocompleteComponent,
|
|
25734
|
-
ButtonComponent,
|
|
25735
26029
|
TextInputComponent,
|
|
25736
26030
|
DragAndDropFileInputComponent,
|
|
25737
|
-
TextAreaComponent,
|
|
25738
26031
|
ChipsInputComponent,
|
|
25739
26032
|
NavigationButtonComponent,
|
|
25740
26033
|
StarToggleComponent,
|
|
@@ -25773,6 +26066,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25773
26066
|
MatDatepickerModule,
|
|
25774
26067
|
MatNativeDateModule,
|
|
25775
26068
|
EditableLabelDirective,
|
|
26069
|
+
TextAreaComponent,
|
|
26070
|
+
ButtonComponent,
|
|
25776
26071
|
],
|
|
25777
26072
|
exports: [
|
|
25778
26073
|
DropdownSelectorComponent,
|
|
@@ -25994,7 +26289,6 @@ class UiElementsModule {
|
|
|
25994
26289
|
PaginationButtonsComponent,
|
|
25995
26290
|
MaxLinesComponent,
|
|
25996
26291
|
RecordApiFormComponent,
|
|
25997
|
-
MarkdownParserComponent,
|
|
25998
26292
|
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
25999
26293
|
MatIconModule,
|
|
26000
26294
|
MatTooltipModule,
|
|
@@ -26003,7 +26297,8 @@ class UiElementsModule {
|
|
|
26003
26297
|
RouterModule,
|
|
26004
26298
|
UiInputsModule,
|
|
26005
26299
|
FormsModule,
|
|
26006
|
-
NgOptimizedImage
|
|
26300
|
+
NgOptimizedImage,
|
|
26301
|
+
MarkdownParserComponent], exports: [MetadataInfoComponent,
|
|
26007
26302
|
ContentGhostComponent,
|
|
26008
26303
|
DownloadItemComponent,
|
|
26009
26304
|
DownloadsListComponent,
|
|
@@ -26050,6 +26345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26050
26345
|
UiInputsModule,
|
|
26051
26346
|
FormsModule,
|
|
26052
26347
|
NgOptimizedImage,
|
|
26348
|
+
MarkdownParserComponent,
|
|
26053
26349
|
],
|
|
26054
26350
|
declarations: [
|
|
26055
26351
|
MetadataInfoComponent,
|
|
@@ -26072,7 +26368,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26072
26368
|
PaginationButtonsComponent,
|
|
26073
26369
|
MaxLinesComponent,
|
|
26074
26370
|
RecordApiFormComponent,
|
|
26075
|
-
MarkdownParserComponent,
|
|
26076
26371
|
ImageOverlayPreviewComponent,
|
|
26077
26372
|
],
|
|
26078
26373
|
exports: [
|
|
@@ -26476,7 +26771,7 @@ const initSearch = () => {
|
|
|
26476
26771
|
const initialState = {
|
|
26477
26772
|
[DEFAULT_SEARCH_KEY]: initSearch(),
|
|
26478
26773
|
};
|
|
26479
|
-
function reducer$
|
|
26774
|
+
function reducer$2(state = initialState, action) {
|
|
26480
26775
|
const { id } = action;
|
|
26481
26776
|
if (id) {
|
|
26482
26777
|
let stateSearch = state[id] || initSearch();
|
|
@@ -27418,11 +27713,11 @@ class FavoriteStarComponent {
|
|
|
27418
27713
|
});
|
|
27419
27714
|
}
|
|
27420
27715
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27421
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row
|
|
27716
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27422
27717
|
}
|
|
27423
27718
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
|
|
27424
27719
|
type: Component,
|
|
27425
|
-
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row
|
|
27720
|
+
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
|
|
27426
27721
|
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
|
|
27427
27722
|
type: Input
|
|
27428
27723
|
}], record: [{
|
|
@@ -27711,10 +28006,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27711
28006
|
class AbstractSearchField {
|
|
27712
28007
|
}
|
|
27713
28008
|
class SimpleSearchField {
|
|
27714
|
-
constructor(esFieldName, order = 'asc',
|
|
28009
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27715
28010
|
this.esFieldName = esFieldName;
|
|
27716
|
-
this.order = order;
|
|
27717
28011
|
this.injector = injector;
|
|
28012
|
+
this.order = order;
|
|
28013
|
+
this.orderType = orderType;
|
|
27718
28014
|
this.repository = this.injector.get(RecordsRepositoryInterface);
|
|
27719
28015
|
// FIXME: this is required to register runtime fields; abstract this as well
|
|
27720
28016
|
this.esService = this.injector.get(ElasticsearchService);
|
|
@@ -27725,12 +28021,12 @@ class SimpleSearchField {
|
|
|
27725
28021
|
type: 'terms',
|
|
27726
28022
|
field: this.esFieldName,
|
|
27727
28023
|
limit: 1000,
|
|
27728
|
-
sort: [this.order,
|
|
28024
|
+
sort: [this.order, this.orderType],
|
|
27729
28025
|
},
|
|
27730
28026
|
};
|
|
27731
28027
|
}
|
|
27732
28028
|
async getBucketLabel(bucket) {
|
|
27733
|
-
return bucket.term;
|
|
28029
|
+
return bucket.term.toString();
|
|
27734
28030
|
}
|
|
27735
28031
|
getAvailableValues() {
|
|
27736
28032
|
return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
|
|
@@ -27758,9 +28054,13 @@ class SimpleSearchField {
|
|
|
27758
28054
|
return of(values);
|
|
27759
28055
|
}
|
|
27760
28056
|
}
|
|
27761
|
-
class
|
|
27762
|
-
constructor() {
|
|
27763
|
-
super(
|
|
28057
|
+
class TranslatedSearchField extends SimpleSearchField {
|
|
28058
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
28059
|
+
super(esFieldName, injector, order, orderType);
|
|
28060
|
+
this.esFieldName = esFieldName;
|
|
28061
|
+
this.injector = injector;
|
|
28062
|
+
this.order = order;
|
|
28063
|
+
this.orderType = orderType;
|
|
27764
28064
|
this.platformService = this.injector.get(PlatformServiceInterface);
|
|
27765
28065
|
}
|
|
27766
28066
|
async getTranslation(key) {
|
|
@@ -27770,26 +28070,36 @@ class KeySearchField extends SimpleSearchField {
|
|
|
27770
28070
|
return (await this.getTranslation(bucket.term)) || bucket.term;
|
|
27771
28071
|
}
|
|
27772
28072
|
getAvailableValues() {
|
|
28073
|
+
if (this.orderType === 'count')
|
|
28074
|
+
return super.getAvailableValues();
|
|
27773
28075
|
// sort values by alphabetical order
|
|
27774
28076
|
return super
|
|
27775
28077
|
.getAvailableValues()
|
|
27776
28078
|
.pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
|
|
27777
28079
|
}
|
|
27778
28080
|
}
|
|
27779
|
-
|
|
27780
|
-
|
|
27781
|
-
|
|
27782
|
-
|
|
28081
|
+
/**
|
|
28082
|
+
* This search field will either target the `.default` field, or a specific `.langxyz` field according
|
|
28083
|
+
* to the defined METADATA_LANGUAGE token
|
|
28084
|
+
* The provided ES field name should not include any prefix such as `.langeng`
|
|
28085
|
+
*/
|
|
28086
|
+
class MultilingualSearchField extends SimpleSearchField {
|
|
28087
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
28088
|
+
super(esFieldName, injector, order, orderType);
|
|
28089
|
+
this.esFieldName = esFieldName;
|
|
28090
|
+
this.injector = injector;
|
|
28091
|
+
this.order = order;
|
|
28092
|
+
this.orderType = orderType;
|
|
27783
28093
|
this.langService = this.injector.get(LangService);
|
|
27784
|
-
this.
|
|
27785
|
-
|
|
27786
|
-
|
|
27787
|
-
|
|
27788
|
-
|
|
27789
|
-
}
|
|
27790
|
-
|
|
27791
|
-
|
|
27792
|
-
|
|
28094
|
+
this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
|
|
28095
|
+
// note: we're excluding the metadata language "current" value because that would produce
|
|
28096
|
+
// permalinks that might not work for different users
|
|
28097
|
+
if (this.searchLanguage && this.searchLanguage !== 'current') {
|
|
28098
|
+
this.esFieldName += `.lang${this.searchLanguage}`;
|
|
28099
|
+
}
|
|
28100
|
+
else {
|
|
28101
|
+
this.esFieldName += '.default';
|
|
28102
|
+
}
|
|
27793
28103
|
}
|
|
27794
28104
|
}
|
|
27795
28105
|
class FullTextSearchField {
|
|
@@ -27809,7 +28119,7 @@ marker('search.filters.isSpatial.yes');
|
|
|
27809
28119
|
marker('search.filters.isSpatial.no');
|
|
27810
28120
|
class IsSpatialSearchField extends SimpleSearchField {
|
|
27811
28121
|
constructor(injector) {
|
|
27812
|
-
super('isSpatial', 'asc'
|
|
28122
|
+
super('isSpatial', injector, 'asc');
|
|
27813
28123
|
this.translateService = this.injector.get(TranslateService);
|
|
27814
28124
|
this.esService.registerRuntimeField('isSpatial', `String result = 'no';
|
|
27815
28125
|
String formats = doc.format.join('|').toLowerCase();
|
|
@@ -27859,7 +28169,7 @@ marker('search.filters.license.unknown');
|
|
|
27859
28169
|
// Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
|
|
27860
28170
|
class LicenseSearchField extends SimpleSearchField {
|
|
27861
28171
|
constructor(injector) {
|
|
27862
|
-
super('license', 'asc'
|
|
28172
|
+
super('license', injector, 'asc');
|
|
27863
28173
|
this.translateService = this.injector.get(TranslateService);
|
|
27864
28174
|
this.esService.registerRuntimeField('license', `String raw = '';
|
|
27865
28175
|
if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
|
|
@@ -27943,7 +28253,7 @@ class OrganizationSearchField {
|
|
|
27943
28253
|
}
|
|
27944
28254
|
class OwnerSearchField extends SimpleSearchField {
|
|
27945
28255
|
constructor(injector) {
|
|
27946
|
-
super('owner', 'asc'
|
|
28256
|
+
super('owner', injector, 'asc');
|
|
27947
28257
|
}
|
|
27948
28258
|
getAvailableValues() {
|
|
27949
28259
|
return of([]);
|
|
@@ -27952,6 +28262,7 @@ class OwnerSearchField extends SimpleSearchField {
|
|
|
27952
28262
|
|
|
27953
28263
|
marker('search.filters.format');
|
|
27954
28264
|
marker('search.filters.inspireKeyword');
|
|
28265
|
+
marker('search.filters.keyword');
|
|
27955
28266
|
marker('search.filters.isSpatial');
|
|
27956
28267
|
marker('search.filters.license');
|
|
27957
28268
|
marker('search.filters.publicationYear');
|
|
@@ -27969,13 +28280,14 @@ class FieldsService {
|
|
|
27969
28280
|
this.injector = injector;
|
|
27970
28281
|
this.fields = {
|
|
27971
28282
|
publisher: new OrganizationSearchField(this.injector),
|
|
27972
|
-
format: new SimpleSearchField('format', 'asc'
|
|
27973
|
-
resourceType: new
|
|
27974
|
-
representationType: new
|
|
27975
|
-
publicationYear: new SimpleSearchField('publicationYearForResource', 'desc'
|
|
27976
|
-
topic: new
|
|
27977
|
-
inspireKeyword: new
|
|
27978
|
-
|
|
28283
|
+
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
28284
|
+
resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
|
|
28285
|
+
representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
|
|
28286
|
+
publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
|
|
28287
|
+
topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
|
|
28288
|
+
inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
|
|
28289
|
+
keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
|
|
28290
|
+
documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
|
|
27979
28291
|
isSpatial: new IsSpatialSearchField(this.injector),
|
|
27980
28292
|
q: new FullTextSearchField(),
|
|
27981
28293
|
license: new LicenseSearchField(this.injector),
|
|
@@ -28083,7 +28395,7 @@ class FeatureSearchModule {
|
|
|
28083
28395
|
},
|
|
28084
28396
|
], imports: [CommonModule,
|
|
28085
28397
|
TranslateModule.forChild(),
|
|
28086
|
-
StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$
|
|
28398
|
+
StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
|
|
28087
28399
|
initialState,
|
|
28088
28400
|
}),
|
|
28089
28401
|
EffectsModule.forFeature([SearchEffects]),
|
|
@@ -28113,7 +28425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28113
28425
|
imports: [
|
|
28114
28426
|
CommonModule,
|
|
28115
28427
|
TranslateModule.forChild(),
|
|
28116
|
-
StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$
|
|
28428
|
+
StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
|
|
28117
28429
|
initialState,
|
|
28118
28430
|
}),
|
|
28119
28431
|
EffectsModule.forFeature([SearchEffects]),
|
|
@@ -28886,7 +29198,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28886
29198
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28887
29199
|
return stateWithoutMd;
|
|
28888
29200
|
}));
|
|
28889
|
-
function reducer(state, action) {
|
|
29201
|
+
function reducer$1(state, action) {
|
|
28890
29202
|
return mdViewReducer(state, action);
|
|
28891
29203
|
}
|
|
28892
29204
|
|
|
@@ -30836,11 +31148,11 @@ class LanguageSwitcherComponent {
|
|
|
30836
31148
|
this.translate.use(value);
|
|
30837
31149
|
}
|
|
30838
31150
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30839
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n
|
|
31151
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
|
|
30840
31152
|
}
|
|
30841
31153
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
30842
31154
|
type: Component,
|
|
30843
|
-
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n
|
|
31155
|
+
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
30844
31156
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30845
31157
|
type: Optional
|
|
30846
31158
|
}, {
|
|
@@ -31167,18 +31479,18 @@ class DataViewPermalinkComponent {
|
|
|
31167
31479
|
if (config) {
|
|
31168
31480
|
const { aggregation, xProperty, yProperty, chartType } = config;
|
|
31169
31481
|
const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
|
|
31170
|
-
url.
|
|
31171
|
-
|
|
31172
|
-
|
|
31173
|
-
|
|
31174
|
-
|
|
31175
|
-
|
|
31176
|
-
|
|
31177
|
-
|
|
31178
|
-
|
|
31179
|
-
|
|
31180
|
-
|
|
31181
|
-
|
|
31482
|
+
url.searchParams.set('v', `${this.version}`);
|
|
31483
|
+
url.searchParams.append('e', `gn-dataset-view-chart`);
|
|
31484
|
+
url.searchParams.append('a', `api-url=${this.config.basePath}`);
|
|
31485
|
+
url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
|
|
31486
|
+
url.searchParams.append('a', `primary-color=#0f4395`);
|
|
31487
|
+
url.searchParams.append('a', `secondary-color=#8bc832`);
|
|
31488
|
+
url.searchParams.append('a', `main-color=#555`);
|
|
31489
|
+
url.searchParams.append('a', `background-color=#fdfbff`);
|
|
31490
|
+
url.searchParams.append('a', `aggregation=${aggregation}`);
|
|
31491
|
+
url.searchParams.append('a', `x-property=${xProperty}`);
|
|
31492
|
+
url.searchParams.append('a', `y-property=${yProperty}`);
|
|
31493
|
+
url.searchParams.append('a', `chart-type=${chartType}`);
|
|
31182
31494
|
return url.toString();
|
|
31183
31495
|
}
|
|
31184
31496
|
return '';
|
|
@@ -31285,7 +31597,7 @@ class FeatureRecordModule {
|
|
|
31285
31597
|
DataViewWebComponentComponent,
|
|
31286
31598
|
DataViewShareComponent] }); }
|
|
31287
31599
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureRecordModule, providers: [MdViewFacade], imports: [CommonModule,
|
|
31288
|
-
StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer),
|
|
31600
|
+
StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
31289
31601
|
EffectsModule.forFeature([MdViewEffects]),
|
|
31290
31602
|
UiLayoutModule,
|
|
31291
31603
|
FeatureMapModule,
|
|
@@ -31313,7 +31625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31313
31625
|
],
|
|
31314
31626
|
imports: [
|
|
31315
31627
|
CommonModule,
|
|
31316
|
-
StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer),
|
|
31628
|
+
StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer$1),
|
|
31317
31629
|
EffectsModule.forFeature([MdViewEffects]),
|
|
31318
31630
|
UiLayoutModule,
|
|
31319
31631
|
FeatureMapModule,
|
|
@@ -31339,6 +31651,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31339
31651
|
}]
|
|
31340
31652
|
}] });
|
|
31341
31653
|
|
|
31654
|
+
const openRecord = createAction('[Editor] Open record', props());
|
|
31655
|
+
const updateRecordField = createAction('[Editor] Update record field', props());
|
|
31656
|
+
const markRecordAsChanged = createAction('[Editor] Mark record as changed');
|
|
31657
|
+
const saveRecord = createAction('[Editor] Save record');
|
|
31658
|
+
const saveRecordSuccess = createAction('[Editor] Save record success');
|
|
31659
|
+
const saveRecordFailure = createAction('[Editor] Save record failure', props());
|
|
31660
|
+
|
|
31661
|
+
const DEFAULT_FIELDS = [
|
|
31662
|
+
{
|
|
31663
|
+
model: 'title',
|
|
31664
|
+
formFieldConfig: {
|
|
31665
|
+
labelKey: 'Metadata title',
|
|
31666
|
+
type: 'text',
|
|
31667
|
+
},
|
|
31668
|
+
},
|
|
31669
|
+
{
|
|
31670
|
+
model: 'abstract',
|
|
31671
|
+
formFieldConfig: {
|
|
31672
|
+
labelKey: 'Abstract',
|
|
31673
|
+
type: 'rich',
|
|
31674
|
+
},
|
|
31675
|
+
},
|
|
31676
|
+
{
|
|
31677
|
+
model: 'uniqueIdentifier',
|
|
31678
|
+
formFieldConfig: {
|
|
31679
|
+
labelKey: 'Unique identifier',
|
|
31680
|
+
type: 'text',
|
|
31681
|
+
locked: true,
|
|
31682
|
+
},
|
|
31683
|
+
},
|
|
31684
|
+
{
|
|
31685
|
+
model: 'recordUpdated',
|
|
31686
|
+
formFieldConfig: {
|
|
31687
|
+
labelKey: 'Record Updated',
|
|
31688
|
+
type: 'text',
|
|
31689
|
+
locked: true,
|
|
31690
|
+
},
|
|
31691
|
+
onSaveProcess: '${dateNow()}',
|
|
31692
|
+
},
|
|
31693
|
+
];
|
|
31694
|
+
|
|
31695
|
+
const EDITOR_FEATURE_KEY = 'editor';
|
|
31696
|
+
const initialEditorState = {
|
|
31697
|
+
record: null,
|
|
31698
|
+
saving: false,
|
|
31699
|
+
saveError: null,
|
|
31700
|
+
changedSinceSave: false,
|
|
31701
|
+
fieldsConfig: DEFAULT_FIELDS,
|
|
31702
|
+
};
|
|
31703
|
+
const reducer = createReducer(initialEditorState, on(openRecord, (state, { record }) => ({
|
|
31704
|
+
...state,
|
|
31705
|
+
changedSinceSave: false,
|
|
31706
|
+
record,
|
|
31707
|
+
})), on(saveRecord, (state) => ({
|
|
31708
|
+
...state,
|
|
31709
|
+
saving: true,
|
|
31710
|
+
saveError: null,
|
|
31711
|
+
})), on(saveRecordSuccess, (state) => ({
|
|
31712
|
+
...state,
|
|
31713
|
+
saving: false,
|
|
31714
|
+
saveError: null,
|
|
31715
|
+
changedSinceSave: false,
|
|
31716
|
+
})), on(saveRecordFailure, (state, { error }) => ({
|
|
31717
|
+
...state,
|
|
31718
|
+
saving: false,
|
|
31719
|
+
saveError: error,
|
|
31720
|
+
})), on(updateRecordField, (state, { field, value }) => ({
|
|
31721
|
+
...state,
|
|
31722
|
+
record: {
|
|
31723
|
+
...state.record,
|
|
31724
|
+
[field]: value,
|
|
31725
|
+
},
|
|
31726
|
+
})), on(markRecordAsChanged, (state) => ({
|
|
31727
|
+
...state,
|
|
31728
|
+
changedSinceSave: true,
|
|
31729
|
+
})));
|
|
31730
|
+
function editorReducer(state, action) {
|
|
31731
|
+
return reducer(state, action);
|
|
31732
|
+
}
|
|
31733
|
+
|
|
31734
|
+
const selectEditorState = createFeatureSelector(EDITOR_FEATURE_KEY);
|
|
31735
|
+
const selectRecord = createSelector(selectEditorState, (state) => state.record);
|
|
31736
|
+
const selectRecordSaving = createSelector(selectEditorState, (state) => state.saving);
|
|
31737
|
+
const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
|
|
31738
|
+
const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
|
|
31739
|
+
const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
|
|
31740
|
+
const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
|
|
31741
|
+
config: fieldConfig,
|
|
31742
|
+
value: state.record?.[fieldConfig.model] || null,
|
|
31743
|
+
})));
|
|
31744
|
+
|
|
31745
|
+
class EditorFacade {
|
|
31746
|
+
constructor() {
|
|
31747
|
+
this.store = inject(Store);
|
|
31748
|
+
this.record$ = this.store.pipe(select(selectRecord));
|
|
31749
|
+
this.saving$ = this.store.pipe(select(selectRecordSaving));
|
|
31750
|
+
this.saveError$ = this.store.pipe(select(selectRecordSaveError));
|
|
31751
|
+
this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
|
|
31752
|
+
this.recordFields$ = this.store.pipe(select(selectRecordFields));
|
|
31753
|
+
}
|
|
31754
|
+
openRecord(record) {
|
|
31755
|
+
this.store.dispatch(openRecord({ record }));
|
|
31756
|
+
}
|
|
31757
|
+
saveRecord() {
|
|
31758
|
+
this.store.dispatch(saveRecord());
|
|
31759
|
+
}
|
|
31760
|
+
updateRecordField(field, value) {
|
|
31761
|
+
this.store.dispatch(updateRecordField({ field, value }));
|
|
31762
|
+
}
|
|
31763
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31764
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade }); }
|
|
31765
|
+
}
|
|
31766
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade, decorators: [{
|
|
31767
|
+
type: Injectable
|
|
31768
|
+
}] });
|
|
31769
|
+
|
|
31342
31770
|
class WizardService {
|
|
31343
31771
|
constructor(translateService) {
|
|
31344
31772
|
this.translateService = translateService;
|
|
@@ -31700,6 +32128,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31700
32128
|
args: [{ selector: 'gn-ui-wizard-summarize', template: "<div>\n <div class=\"text-2xl font-bold title\">\n {{ title | uppercase }}\n </div>\n <div class=\"text-lg font-bold pt-2 abstract\">\n {{ abstract }}\n </div>\n <div class=\"text-lg font-normal\">\n <span translate>datafeeder.wizardSummarize.createdAt</span>\n <span class=\"date\">{{ createdDate }}</span> -\n <span translate>datafeeder.wizardSummarize.scale</span>\n <span class=\"scale\">{{ scale }}</span>\n </div>\n <div class=\"text-lg italic font-normal description\">\n {{ description }}\n </div>\n <div class=\"text-sm font-medium pt-4 tags\">\n <span class=\"icon-tag pr-2\"></span>\n {{ tags }}\n </div>\n</div>\n", styles: [".icon-tag:before{font-size:18px}\n"] }]
|
|
31701
32129
|
}], ctorParameters: function () { return [{ type: WizardService }, { type: i1$1.TranslateService }]; } });
|
|
31702
32130
|
|
|
32131
|
+
function evaluate(expression) {
|
|
32132
|
+
if (expression.match(/^\${.*}$/)) {
|
|
32133
|
+
return evaluate(expression.slice(2, -1));
|
|
32134
|
+
}
|
|
32135
|
+
const operator = expression.split('(')[0];
|
|
32136
|
+
switch (operator) {
|
|
32137
|
+
case 'dateNow':
|
|
32138
|
+
return () => new Date();
|
|
32139
|
+
default:
|
|
32140
|
+
throw new Error(`Unknown operator: ${operator}`);
|
|
32141
|
+
}
|
|
32142
|
+
}
|
|
32143
|
+
|
|
32144
|
+
class EditorService {
|
|
32145
|
+
constructor(http, apiConfiguration) {
|
|
32146
|
+
this.http = http;
|
|
32147
|
+
this.apiConfiguration = apiConfiguration;
|
|
32148
|
+
this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
|
|
32149
|
+
}
|
|
32150
|
+
// TODO: use the catalog repository instead
|
|
32151
|
+
loadRecordByUuid(uuid) {
|
|
32152
|
+
return this.http
|
|
32153
|
+
.get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
|
|
32154
|
+
responseType: 'text',
|
|
32155
|
+
headers: {
|
|
32156
|
+
Accept: 'application/xml',
|
|
32157
|
+
},
|
|
32158
|
+
})
|
|
32159
|
+
.pipe(map$1((response) => toModel(response.toString())));
|
|
32160
|
+
}
|
|
32161
|
+
// returns the record as it was when saved
|
|
32162
|
+
saveRecord(record, fieldsConfig) {
|
|
32163
|
+
const savedRecord = { ...record };
|
|
32164
|
+
// run onSave processes
|
|
32165
|
+
for (const field of fieldsConfig) {
|
|
32166
|
+
if (field.onSaveProcess && field.model) {
|
|
32167
|
+
const evaluator = evaluate(field.onSaveProcess);
|
|
32168
|
+
savedRecord[field.model] = evaluator({
|
|
32169
|
+
config: field,
|
|
32170
|
+
value: record[field.model],
|
|
32171
|
+
});
|
|
32172
|
+
}
|
|
32173
|
+
}
|
|
32174
|
+
// TODO: use the catalog repository instead
|
|
32175
|
+
return this.http
|
|
32176
|
+
.put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, toXml(savedRecord), {
|
|
32177
|
+
headers: {
|
|
32178
|
+
'Content-Type': 'application/xml',
|
|
32179
|
+
},
|
|
32180
|
+
withCredentials: true,
|
|
32181
|
+
})
|
|
32182
|
+
.pipe(map$1(() => savedRecord));
|
|
32183
|
+
}
|
|
32184
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, deps: [{ token: i1.HttpClient }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32185
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
|
|
32186
|
+
}
|
|
32187
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
|
|
32188
|
+
type: Injectable,
|
|
32189
|
+
args: [{
|
|
32190
|
+
providedIn: 'root',
|
|
32191
|
+
}]
|
|
32192
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
|
|
32193
|
+
type: Optional
|
|
32194
|
+
}, {
|
|
32195
|
+
type: Inject,
|
|
32196
|
+
args: [Configuration]
|
|
32197
|
+
}] }]; } });
|
|
32198
|
+
|
|
32199
|
+
class EditorEffects {
|
|
32200
|
+
constructor() {
|
|
32201
|
+
this.actions$ = inject(Actions);
|
|
32202
|
+
this.editorService = inject(EditorService);
|
|
32203
|
+
this.store = inject(Store);
|
|
32204
|
+
this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordFieldsConfig)), switchMap$1(([, record, fieldsConfig]) => this.editorService.saveRecord(record, fieldsConfig).pipe(switchMap$1((newRecord) => of(saveRecordSuccess(), openRecord({ record: newRecord }))), catchError((error) => of(saveRecordFailure({
|
|
32205
|
+
error: error.message,
|
|
32206
|
+
})))))));
|
|
32207
|
+
this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), map$1(() => markRecordAsChanged())));
|
|
32208
|
+
}
|
|
32209
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32210
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects }); }
|
|
32211
|
+
}
|
|
32212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, decorators: [{
|
|
32213
|
+
type: Injectable
|
|
32214
|
+
}] });
|
|
32215
|
+
|
|
31703
32216
|
class FeatureEditorModule {
|
|
31704
32217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
31705
32218
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, declarations: [WizardComponent,
|
|
@@ -31710,8 +32223,8 @@ class FeatureEditorModule {
|
|
|
31710
32223
|
MatNativeDateModule,
|
|
31711
32224
|
MatFormFieldModule,
|
|
31712
32225
|
HttpClientModule,
|
|
31713
|
-
HttpClientXsrfModule], exports: [WizardComponent, WizardSummarizeComponent] }); }
|
|
31714
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, imports: [CommonModule,
|
|
32226
|
+
HttpClientXsrfModule, i1$2.StoreFeatureModule, i1$8.EffectsFeatureModule], exports: [WizardComponent, WizardSummarizeComponent] }); }
|
|
32227
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, providers: [EditorFacade], imports: [CommonModule,
|
|
31715
32228
|
UiInputsModule,
|
|
31716
32229
|
UiWidgetsModule,
|
|
31717
32230
|
TranslateModule.forChild(),
|
|
@@ -31719,7 +32232,9 @@ class FeatureEditorModule {
|
|
|
31719
32232
|
MatNativeDateModule,
|
|
31720
32233
|
MatFormFieldModule,
|
|
31721
32234
|
HttpClientModule,
|
|
31722
|
-
HttpClientXsrfModule
|
|
32235
|
+
HttpClientXsrfModule,
|
|
32236
|
+
StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
|
|
32237
|
+
EffectsModule.forFeature([EditorEffects])] }); }
|
|
31723
32238
|
}
|
|
31724
32239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, decorators: [{
|
|
31725
32240
|
type: NgModule,
|
|
@@ -31739,105 +32254,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31739
32254
|
MatFormFieldModule,
|
|
31740
32255
|
HttpClientModule,
|
|
31741
32256
|
HttpClientXsrfModule,
|
|
32257
|
+
StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
|
|
32258
|
+
EffectsModule.forFeature([EditorEffects]),
|
|
31742
32259
|
],
|
|
31743
32260
|
exports: [WizardComponent, WizardSummarizeComponent],
|
|
32261
|
+
providers: [EditorFacade],
|
|
31744
32262
|
}]
|
|
31745
32263
|
}] });
|
|
31746
32264
|
|
|
31747
|
-
class EditorService {
|
|
31748
|
-
constructor(http, apiConfiguration) {
|
|
31749
|
-
this.http = http;
|
|
31750
|
-
this.apiConfiguration = apiConfiguration;
|
|
31751
|
-
this.record$ = new BehaviorSubject(null);
|
|
31752
|
-
this.fieldsConfig = [
|
|
31753
|
-
{
|
|
31754
|
-
model: 'title',
|
|
31755
|
-
labelKey: 'Metadata title',
|
|
31756
|
-
type: 'text',
|
|
31757
|
-
},
|
|
31758
|
-
{
|
|
31759
|
-
model: 'abstract',
|
|
31760
|
-
labelKey: 'Abstract',
|
|
31761
|
-
type: 'rich',
|
|
31762
|
-
},
|
|
31763
|
-
{
|
|
31764
|
-
model: 'uniqueIdentifier',
|
|
31765
|
-
labelKey: 'Unique identifier',
|
|
31766
|
-
type: 'text',
|
|
31767
|
-
locked: true,
|
|
31768
|
-
},
|
|
31769
|
-
];
|
|
31770
|
-
this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
|
|
31771
|
-
this.fields$ = this.record$.pipe(map$1((record) => this.fieldsConfig.map((fieldConfig) => ({
|
|
31772
|
-
config: fieldConfig,
|
|
31773
|
-
value: record?.[fieldConfig.model] || null,
|
|
31774
|
-
}))));
|
|
31775
|
-
this.saving$ = new BehaviorSubject(false);
|
|
31776
|
-
}
|
|
31777
|
-
loadRecordByUuid(uuid) {
|
|
31778
|
-
return this.http
|
|
31779
|
-
.get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
|
|
31780
|
-
responseType: 'text',
|
|
31781
|
-
headers: {
|
|
31782
|
-
Accept: 'application/xml',
|
|
31783
|
-
},
|
|
31784
|
-
})
|
|
31785
|
-
.pipe(map$1((response) => toModel(response.toString())));
|
|
31786
|
-
}
|
|
31787
|
-
saveCurrentRecord() {
|
|
31788
|
-
return this.record$.pipe(take(1), tap$1((record) => {
|
|
31789
|
-
if (!record)
|
|
31790
|
-
throw new Error('Save record failed: no record currently open');
|
|
31791
|
-
this.saving$.next(true);
|
|
31792
|
-
}), switchMap$1((record) => this.http.put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, toXml(record), {
|
|
31793
|
-
headers: {
|
|
31794
|
-
'Content-Type': 'application/xml',
|
|
31795
|
-
},
|
|
31796
|
-
withCredentials: true,
|
|
31797
|
-
})), map$1(() => undefined), finalize(() => {
|
|
31798
|
-
this.saving$.next(false);
|
|
31799
|
-
}));
|
|
31800
|
-
}
|
|
31801
|
-
setCurrentRecord(record) {
|
|
31802
|
-
this.record$.next(record);
|
|
31803
|
-
}
|
|
31804
|
-
updateRecordField(fieldName, value) {
|
|
31805
|
-
this.record$
|
|
31806
|
-
.pipe(take(1), map$1((record) => ({ ...record, [fieldName]: value })))
|
|
31807
|
-
.subscribe((record) => this.record$.next(record));
|
|
31808
|
-
}
|
|
31809
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, deps: [{ token: i1.HttpClient }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31810
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
|
|
31811
|
-
}
|
|
31812
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
|
|
31813
|
-
type: Injectable,
|
|
31814
|
-
args: [{
|
|
31815
|
-
providedIn: 'root',
|
|
31816
|
-
}]
|
|
31817
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
|
|
31818
|
-
type: Optional
|
|
31819
|
-
}, {
|
|
31820
|
-
type: Inject,
|
|
31821
|
-
args: [Configuration]
|
|
31822
|
-
}] }]; } });
|
|
31823
|
-
|
|
31824
32265
|
class RecordFormComponent {
|
|
31825
|
-
constructor(
|
|
31826
|
-
this.
|
|
32266
|
+
constructor(facade) {
|
|
32267
|
+
this.facade = facade;
|
|
32268
|
+
this.fields$ = this.facade.recordFields$;
|
|
31827
32269
|
}
|
|
31828
|
-
handleFieldValueChange(
|
|
31829
|
-
|
|
32270
|
+
handleFieldValueChange(field, newValue) {
|
|
32271
|
+
if (!field.config.model) {
|
|
32272
|
+
return;
|
|
32273
|
+
}
|
|
32274
|
+
this.facade.updateRecordField(field.config.model, newValue);
|
|
31830
32275
|
}
|
|
31831
32276
|
fieldTracker(index, field) {
|
|
31832
32277
|
return field.config.model;
|
|
31833
32278
|
}
|
|
31834
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token:
|
|
31835
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <
|
|
32279
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32280
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31836
32281
|
}
|
|
31837
32282
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31838
32283
|
type: Component,
|
|
31839
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <
|
|
31840
|
-
}], ctorParameters: function () { return [{ type:
|
|
32284
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
|
|
32285
|
+
}], ctorParameters: function () { return [{ type: EditorFacade }]; } });
|
|
31841
32286
|
|
|
31842
32287
|
const ROUTER_STATE_KEY = 'router';
|
|
31843
32288
|
const ROUTER_ROUTE_SEARCH = 'search';
|
|
@@ -32204,5 +32649,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32204
32649
|
* Generated bundle index. Do not edit.
|
|
32205
32650
|
*/
|
|
32206
32651
|
|
|
32207
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$
|
|
32652
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, editorReducer, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer, updateRecordField };
|
|
32208
32653
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|