geonetwork-ui 2.3.0-dev.6e2b8bea → 2.3.0-dev.b46332e6
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/gn4.field.mapper.mjs +5 -1
- package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +35 -7
- package/esm2022/libs/data-access/gn4/src/openapi/model/models.mjs +1 -2
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +2 -2
- package/esm2022/libs/feature/editor/src/index.mjs +2 -2
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.mjs +11 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.mjs +28 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.mjs +11 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +45 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +50 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +11 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.mjs +11 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +93 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +2 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +10 -0
- package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +39 -0
- package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +10 -10
- package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +1 -1
- package/esm2022/libs/ui/elements/src/index.mjs +14 -15
- package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +45 -0
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +4 -3
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +6 -5
- package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/files-drop/files-drop.directive.mjs +59 -0
- package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +183 -0
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +10 -23
- package/esm2022/libs/ui/layout/src/index.mjs +6 -5
- package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +18 -0
- package/esm2022/libs/util/shared/src/lib/utils/bytes-convert.mjs +4 -0
- package/esm2022/libs/util/shared/src/lib/utils/image-resize.mjs +60 -0
- package/esm2022/libs/util/shared/src/lib/utils/index.mjs +8 -6
- package/esm2022/translations/de.json +10 -0
- package/esm2022/translations/en.json +10 -0
- package/esm2022/translations/es.json +10 -0
- package/esm2022/translations/fr.json +10 -0
- package/esm2022/translations/it.json +10 -0
- package/esm2022/translations/nl.json +10 -0
- package/esm2022/translations/pt.json +10 -0
- package/fesm2022/geonetwork-ui.mjs +1772 -1317
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +9 -5
- package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
- package/libs/data-access/gn4/src/openapi/model/models.d.ts +0 -1
- package/libs/data-access/gn4/src/openapi/model/models.d.ts.map +1 -1
- package/libs/feature/editor/src/index.d.ts +1 -1
- package/libs/feature/editor/src/index.d.ts.map +1 -1
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.d.ts +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.d.ts.map +1 -0
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.d.ts +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.d.ts.map +1 -0
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.d.ts +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts +16 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -0
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.d.ts +2 -2
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts.map +1 -0
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -0
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts +1 -1
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts.map +1 -0
- package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.d.ts +4 -3
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/{record-form → components/record-form}/record-form.component.d.ts +3 -3
- package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/feature-editor.module.d.ts +1 -1
- package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/models/fields.model.d.ts +1 -1
- package/libs/ui/elements/src/index.d.ts +13 -14
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts +13 -0
- package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +20 -20
- package/libs/ui/inputs/src/index.d.ts +0 -1
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/files-drop/files-drop.directive.d.ts +14 -0
- package/libs/ui/inputs/src/lib/files-drop/files-drop.directive.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts +44 -0
- package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +26 -33
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +5 -4
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts +8 -0
- package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts.map +1 -0
- package/libs/util/shared/src/lib/utils/bytes-convert.d.ts +2 -0
- package/libs/util/shared/src/lib/utils/bytes-convert.d.ts.map +1 -0
- package/libs/util/shared/src/lib/utils/image-resize.d.ts +3 -0
- package/libs/util/shared/src/lib/utils/image-resize.d.ts.map +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts +7 -5
- package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +6 -0
- package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +43 -12
- package/src/libs/data-access/gn4/src/openapi/model/models.ts +0 -1
- package/src/libs/data-access/gn4/src/spec.yaml +1 -1
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +1 -1
- package/src/libs/feature/editor/src/index.ts +1 -1
- package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.html +8 -0
- package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.ts +70 -0
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.ts +1 -0
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.ts +4 -1
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.ts +1 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.css +5 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +20 -0
- package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +44 -0
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.ts +4 -1
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +1 -0
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.ts +1 -0
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.html +4 -4
- package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.ts +31 -5
- package/src/libs/feature/editor/src/lib/{record-form → components/record-form}/record-form.component.html +1 -0
- package/src/libs/feature/editor/src/lib/{record-form → components/record-form}/record-form.component.ts +23 -4
- package/src/libs/feature/editor/src/lib/feature-editor.module.ts +9 -9
- package/src/libs/feature/editor/src/lib/models/fields.model.ts +1 -1
- package/src/libs/ui/elements/src/index.ts +13 -14
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +0 -5
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +0 -21
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -14
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +5 -3
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
- package/src/libs/ui/inputs/src/index.ts +0 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -1
- package/src/libs/ui/inputs/src/lib/files-drop/files-drop.directive.ts +45 -0
- package/src/libs/ui/inputs/src/lib/image-input/image-input.component.css +0 -0
- package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +146 -0
- package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +193 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -19
- package/src/libs/ui/layout/src/index.ts +5 -4
- package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.css +5 -0
- package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +18 -0
- package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +16 -0
- package/src/libs/util/shared/src/lib/utils/bytes-convert.ts +3 -0
- package/src/libs/util/shared/src/lib/utils/image-resize.ts +72 -0
- package/src/libs/util/shared/src/lib/utils/index.ts +7 -5
- package/translations/de.json +10 -0
- package/translations/en.json +10 -0
- package/translations/es.json +10 -0
- package/translations/fr.json +10 -0
- package/translations/it.json +10 -0
- package/translations/nl.json +10 -0
- package/translations/pt.json +10 -0
- package/translations/sk.json +10 -0
- package/esm2022/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.mjs +0 -13
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +0 -30
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-array/form-field-array.component.mjs +0 -11
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-file/form-field-file.component.mjs +0 -27
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-object/form-field-object.component.mjs +0 -11
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.mjs +0 -27
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-simple/form-field-simple.component.mjs +0 -49
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +0 -11
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-temporal-extent/form-field-temporal-extent.component.mjs +0 -11
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +0 -76
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +0 -2
- package/esm2022/libs/ui/inputs/src/lib/form-field/index.mjs +0 -10
- package/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.d.ts +0 -18
- package/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.d.ts.map +0 -1
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-array/form-field-array.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-file/form-field-file.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-object/form-field-object.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.d.ts +0 -11
- package/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-simple/form-field-simple.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +0 -1
- package/libs/ui/inputs/src/lib/form-field/index.d.ts.map +0 -1
- package/src/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.ts +0 -18
- package/src/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.html +0 -11
- package/src/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.ts +0 -15
- /package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.model.d.ts +0 -0
- /package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/index.d.ts +0 -0
- /package/src/libs/feature/editor/src/lib/{record-form/record-form.component.css → components/overview-upload/overview-upload.component.css} +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.html +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.html +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.html +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.html +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.html +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.css +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.model.ts +0 -0
- /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/index.ts +0 -0
- /package/src/libs/{ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.css → feature/editor/src/lib/components/record-form/record-form.component.css} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
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, ElementRef, ViewChildren, ViewContainerRef,
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ElementRef, ViewChildren, ViewContainerRef, HostBinding, ContentChild, ContentChildren, TemplateRef, Host, 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';
|
|
@@ -70,9 +70,9 @@ import { MatInputModule } from '@angular/material/input';
|
|
|
70
70
|
import * as i1$7 from '@angular/router';
|
|
71
71
|
import { RouterModule, RouterLink, RouteReuseStrategy } from '@angular/router';
|
|
72
72
|
import Duration from 'duration-relativetimeformat';
|
|
73
|
+
import * as basicLightbox from 'basiclightbox';
|
|
73
74
|
import { marked } from 'marked';
|
|
74
75
|
import EmblaCarousel from 'embla-carousel';
|
|
75
|
-
import * as basicLightbox from 'basiclightbox';
|
|
76
76
|
import * as i1$8 from '@ngrx/effects';
|
|
77
77
|
import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
|
|
78
78
|
import tippy from 'tippy.js';
|
|
@@ -6008,6 +6008,19 @@ class RecordsApiService {
|
|
|
6008
6008
|
}
|
|
6009
6009
|
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
|
|
6010
6010
|
}
|
|
6011
|
+
/**
|
|
6012
|
+
* @param consumes string[] mime-types
|
|
6013
|
+
* @return true: consumes contains 'multipart/form-data', false: otherwise
|
|
6014
|
+
*/
|
|
6015
|
+
canConsumeForm(consumes) {
|
|
6016
|
+
const form = 'multipart/form-data';
|
|
6017
|
+
for (const consume of consumes) {
|
|
6018
|
+
if (form === consume) {
|
|
6019
|
+
return true;
|
|
6020
|
+
}
|
|
6021
|
+
}
|
|
6022
|
+
return false;
|
|
6023
|
+
}
|
|
6011
6024
|
addToHttpParams(httpParams, value, key) {
|
|
6012
6025
|
if (typeof value === 'object' && value instanceof Date === false) {
|
|
6013
6026
|
httpParams = this.addToHttpParamsRecursive(httpParams, value);
|
|
@@ -8981,10 +8994,13 @@ class RecordsApiService {
|
|
|
8981
8994
|
reportProgress: reportProgress,
|
|
8982
8995
|
});
|
|
8983
8996
|
}
|
|
8984
|
-
putResource(metadataUuid, visibility, approved,
|
|
8997
|
+
putResource(metadataUuid, file, visibility, approved, observe = 'body', reportProgress = false, options) {
|
|
8985
8998
|
if (metadataUuid === null || metadataUuid === undefined) {
|
|
8986
8999
|
throw new Error('Required parameter metadataUuid was null or undefined when calling putResource.');
|
|
8987
9000
|
}
|
|
9001
|
+
if (file === null || file === undefined) {
|
|
9002
|
+
throw new Error('Required parameter file was null or undefined when calling putResource.');
|
|
9003
|
+
}
|
|
8988
9004
|
let queryParameters = new HttpParams({ encoder: this.encoder });
|
|
8989
9005
|
if (visibility !== undefined && visibility !== null) {
|
|
8990
9006
|
queryParameters = this.addToHttpParams(queryParameters, visibility, 'visibility');
|
|
@@ -9004,17 +9020,29 @@ class RecordsApiService {
|
|
|
9004
9020
|
headers = headers.set('Accept', httpHeaderAcceptSelected);
|
|
9005
9021
|
}
|
|
9006
9022
|
// to determine the Content-Type header
|
|
9007
|
-
const consumes = ['
|
|
9008
|
-
const
|
|
9009
|
-
|
|
9010
|
-
|
|
9023
|
+
const consumes = ['multipart/form-data'];
|
|
9024
|
+
const canConsumeForm = this.canConsumeForm(consumes);
|
|
9025
|
+
let formParams;
|
|
9026
|
+
let useForm = false;
|
|
9027
|
+
let convertFormParamsToString = false;
|
|
9028
|
+
// use FormData to transmit files using content-type "multipart/form-data"
|
|
9029
|
+
// see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
|
|
9030
|
+
useForm = canConsumeForm;
|
|
9031
|
+
if (useForm) {
|
|
9032
|
+
formParams = new FormData();
|
|
9033
|
+
}
|
|
9034
|
+
else {
|
|
9035
|
+
formParams = new HttpParams({ encoder: this.encoder });
|
|
9036
|
+
}
|
|
9037
|
+
if (file !== undefined) {
|
|
9038
|
+
formParams = formParams.append('file', file) || formParams;
|
|
9011
9039
|
}
|
|
9012
9040
|
let responseType_ = 'json';
|
|
9013
9041
|
if (httpHeaderAcceptSelected &&
|
|
9014
9042
|
httpHeaderAcceptSelected.startsWith('text')) {
|
|
9015
9043
|
responseType_ = 'text';
|
|
9016
9044
|
}
|
|
9017
|
-
return this.httpClient.post(`${this.configuration.basePath}/records/${encodeURIComponent(String(metadataUuid))}/attachments`,
|
|
9045
|
+
return this.httpClient.post(`${this.configuration.basePath}/records/${encodeURIComponent(String(metadataUuid))}/attachments`, convertFormParamsToString ? formParams.toString() : formParams, {
|
|
9018
9046
|
params: queryParameters,
|
|
9019
9047
|
responseType: responseType_,
|
|
9020
9048
|
withCredentials: this.configuration.withCredentials,
|
|
@@ -16235,303 +16263,291 @@ var GroupPrivilegeApiModel;
|
|
|
16235
16263
|
* https://openapi-generator.tech
|
|
16236
16264
|
* Do not edit the class manually.
|
|
16237
16265
|
*/
|
|
16238
|
-
|
|
16239
|
-
/**
|
|
16240
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16241
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16242
|
-
*
|
|
16243
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16244
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16245
|
-
*
|
|
16246
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16247
|
-
* https://openapi-generator.tech
|
|
16248
|
-
* Do not edit the class manually.
|
|
16249
|
-
*/
|
|
16250
|
-
|
|
16251
|
-
|
|
16252
|
-
|
|
16253
|
-
|
|
16254
|
-
|
|
16255
|
-
|
|
16256
|
-
|
|
16257
|
-
|
|
16258
|
-
|
|
16259
|
-
|
|
16260
|
-
|
|
16261
|
-
|
|
16262
|
-
|
|
16263
|
-
(
|
|
16264
|
-
|
|
16265
|
-
|
|
16266
|
-
|
|
16267
|
-
|
|
16268
|
-
|
|
16269
|
-
|
|
16270
|
-
|
|
16271
|
-
|
|
16272
|
-
|
|
16273
|
-
|
|
16274
|
-
|
|
16275
|
-
|
|
16276
|
-
|
|
16277
|
-
|
|
16278
|
-
|
|
16279
|
-
|
|
16280
|
-
|
|
16281
|
-
|
|
16282
|
-
|
|
16283
|
-
|
|
16284
|
-
|
|
16285
|
-
|
|
16286
|
-
*
|
|
16287
|
-
|
|
16288
|
-
|
|
16289
|
-
|
|
16290
|
-
|
|
16291
|
-
|
|
16292
|
-
|
|
16293
|
-
|
|
16294
|
-
|
|
16295
|
-
|
|
16296
|
-
|
|
16297
|
-
/**
|
|
16298
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16299
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16300
|
-
*
|
|
16301
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16302
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16303
|
-
*
|
|
16304
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16305
|
-
* https://openapi-generator.tech
|
|
16306
|
-
* Do not edit the class manually.
|
|
16307
|
-
*/
|
|
16308
|
-
|
|
16309
|
-
/**
|
|
16310
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16311
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16312
|
-
*
|
|
16313
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16314
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16315
|
-
*
|
|
16316
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16317
|
-
* https://openapi-generator.tech
|
|
16318
|
-
* Do not edit the class manually.
|
|
16319
|
-
*/
|
|
16320
|
-
|
|
16321
|
-
/**
|
|
16322
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16323
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16324
|
-
*
|
|
16325
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16326
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16327
|
-
*
|
|
16328
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16329
|
-
* https://openapi-generator.tech
|
|
16330
|
-
* Do not edit the class manually.
|
|
16331
|
-
*/
|
|
16332
|
-
|
|
16333
|
-
/**
|
|
16334
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16335
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16336
|
-
*
|
|
16337
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16338
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16339
|
-
*
|
|
16340
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16341
|
-
* https://openapi-generator.tech
|
|
16342
|
-
* Do not edit the class manually.
|
|
16343
|
-
*/
|
|
16344
|
-
|
|
16345
|
-
/**
|
|
16346
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16347
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16348
|
-
*
|
|
16349
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16350
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16351
|
-
*
|
|
16352
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16353
|
-
* https://openapi-generator.tech
|
|
16354
|
-
* Do not edit the class manually.
|
|
16355
|
-
*/
|
|
16356
|
-
|
|
16357
|
-
/**
|
|
16358
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16359
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16360
|
-
*
|
|
16361
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16362
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16363
|
-
*
|
|
16364
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16365
|
-
* https://openapi-generator.tech
|
|
16366
|
-
* Do not edit the class manually.
|
|
16367
|
-
*/
|
|
16368
|
-
|
|
16369
|
-
/**
|
|
16370
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16371
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16372
|
-
*
|
|
16373
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16374
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16375
|
-
*
|
|
16376
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16377
|
-
* https://openapi-generator.tech
|
|
16378
|
-
* Do not edit the class manually.
|
|
16379
|
-
*/
|
|
16380
|
-
|
|
16381
|
-
/**
|
|
16382
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16383
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16384
|
-
*
|
|
16385
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16386
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16387
|
-
*
|
|
16388
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16389
|
-
* https://openapi-generator.tech
|
|
16390
|
-
* Do not edit the class manually.
|
|
16391
|
-
*/
|
|
16392
|
-
|
|
16393
|
-
/**
|
|
16394
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16395
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16396
|
-
*
|
|
16397
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16398
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16399
|
-
*
|
|
16400
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16401
|
-
* https://openapi-generator.tech
|
|
16402
|
-
* Do not edit the class manually.
|
|
16403
|
-
*/
|
|
16404
|
-
|
|
16405
|
-
|
|
16406
|
-
|
|
16407
|
-
|
|
16408
|
-
|
|
16409
|
-
|
|
16410
|
-
|
|
16411
|
-
|
|
16412
|
-
|
|
16413
|
-
|
|
16414
|
-
*
|
|
16415
|
-
|
|
16416
|
-
|
|
16417
|
-
|
|
16418
|
-
|
|
16419
|
-
|
|
16420
|
-
|
|
16421
|
-
|
|
16422
|
-
|
|
16423
|
-
|
|
16424
|
-
|
|
16425
|
-
|
|
16426
|
-
|
|
16427
|
-
|
|
16428
|
-
|
|
16429
|
-
|
|
16430
|
-
|
|
16431
|
-
|
|
16432
|
-
|
|
16433
|
-
|
|
16434
|
-
*
|
|
16435
|
-
|
|
16436
|
-
|
|
16437
|
-
|
|
16438
|
-
|
|
16439
|
-
|
|
16440
|
-
|
|
16441
|
-
|
|
16442
|
-
|
|
16443
|
-
|
|
16444
|
-
|
|
16445
|
-
|
|
16446
|
-
|
|
16447
|
-
|
|
16448
|
-
|
|
16449
|
-
|
|
16450
|
-
|
|
16451
|
-
|
|
16452
|
-
|
|
16453
|
-
|
|
16454
|
-
*
|
|
16455
|
-
|
|
16456
|
-
|
|
16457
|
-
|
|
16458
|
-
|
|
16459
|
-
|
|
16460
|
-
|
|
16461
|
-
|
|
16462
|
-
|
|
16463
|
-
|
|
16464
|
-
|
|
16465
|
-
|
|
16466
|
-
|
|
16467
|
-
|
|
16468
|
-
|
|
16469
|
-
|
|
16470
|
-
|
|
16471
|
-
|
|
16472
|
-
|
|
16473
|
-
|
|
16474
|
-
|
|
16475
|
-
|
|
16476
|
-
|
|
16477
|
-
|
|
16478
|
-
|
|
16479
|
-
|
|
16480
|
-
|
|
16481
|
-
|
|
16482
|
-
|
|
16483
|
-
|
|
16484
|
-
|
|
16485
|
-
|
|
16486
|
-
|
|
16487
|
-
|
|
16488
|
-
/**
|
|
16489
|
-
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16490
|
-
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16491
|
-
*
|
|
16492
|
-
* The version of the OpenAPI document: 4.2.7
|
|
16493
|
-
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16494
|
-
*
|
|
16495
|
-
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16496
|
-
* https://openapi-generator.tech
|
|
16497
|
-
* Do not edit the class manually.
|
|
16498
|
-
*/
|
|
16499
|
-
|
|
16500
|
-
|
|
16501
|
-
|
|
16502
|
-
|
|
16503
|
-
|
|
16504
|
-
|
|
16505
|
-
|
|
16506
|
-
|
|
16507
|
-
|
|
16508
|
-
|
|
16509
|
-
|
|
16510
|
-
|
|
16511
|
-
|
|
16512
|
-
|
|
16513
|
-
|
|
16514
|
-
|
|
16515
|
-
|
|
16516
|
-
|
|
16517
|
-
|
|
16518
|
-
|
|
16519
|
-
|
|
16520
|
-
|
|
16521
|
-
};
|
|
16522
|
-
|
|
16523
|
-
Public: 'PUBLIC',
|
|
16524
|
-
PublicOnly: 'PUBLIC_ONLY',
|
|
16525
|
-
Private: 'PRIVATE',
|
|
16526
|
-
Hidden: 'HIDDEN',
|
|
16527
|
-
};
|
|
16528
|
-
PagePropertiesApiModel.FormatEnum = {
|
|
16529
|
-
Link: 'LINK',
|
|
16530
|
-
Html: 'HTML',
|
|
16531
|
-
Htmlpage: 'HTMLPAGE',
|
|
16532
|
-
Text: 'TEXT',
|
|
16533
|
-
};
|
|
16534
|
-
})(PagePropertiesApiModel || (PagePropertiesApiModel = {}));
|
|
16266
|
+
|
|
16267
|
+
/**
|
|
16268
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16269
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16270
|
+
*
|
|
16271
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16272
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16273
|
+
*
|
|
16274
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16275
|
+
* https://openapi-generator.tech
|
|
16276
|
+
* Do not edit the class manually.
|
|
16277
|
+
*/
|
|
16278
|
+
var JsonNodeApiModel;
|
|
16279
|
+
(function (JsonNodeApiModel) {
|
|
16280
|
+
JsonNodeApiModel.NodeTypeEnum = {
|
|
16281
|
+
Array: 'ARRAY',
|
|
16282
|
+
Binary: 'BINARY',
|
|
16283
|
+
Boolean: 'BOOLEAN',
|
|
16284
|
+
Missing: 'MISSING',
|
|
16285
|
+
Null: 'NULL',
|
|
16286
|
+
Number: 'NUMBER',
|
|
16287
|
+
Object: 'OBJECT',
|
|
16288
|
+
Pojo: 'POJO',
|
|
16289
|
+
String: 'STRING',
|
|
16290
|
+
};
|
|
16291
|
+
})(JsonNodeApiModel || (JsonNodeApiModel = {}));
|
|
16292
|
+
|
|
16293
|
+
/**
|
|
16294
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16295
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16296
|
+
*
|
|
16297
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16298
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16299
|
+
*
|
|
16300
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16301
|
+
* https://openapi-generator.tech
|
|
16302
|
+
* Do not edit the class manually.
|
|
16303
|
+
*/
|
|
16304
|
+
|
|
16305
|
+
var LinkApiModel;
|
|
16306
|
+
(function (LinkApiModel) {
|
|
16307
|
+
LinkApiModel.LinkTypeEnum = {
|
|
16308
|
+
Http: 'HTTP',
|
|
16309
|
+
Metadata: 'METADATA',
|
|
16310
|
+
};
|
|
16311
|
+
})(LinkApiModel || (LinkApiModel = {}));
|
|
16312
|
+
|
|
16313
|
+
/**
|
|
16314
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16315
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16316
|
+
*
|
|
16317
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16318
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16319
|
+
*
|
|
16320
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16321
|
+
* https://openapi-generator.tech
|
|
16322
|
+
* Do not edit the class manually.
|
|
16323
|
+
*/
|
|
16324
|
+
|
|
16325
|
+
/**
|
|
16326
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16327
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16328
|
+
*
|
|
16329
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16330
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16331
|
+
*
|
|
16332
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16333
|
+
* https://openapi-generator.tech
|
|
16334
|
+
* Do not edit the class manually.
|
|
16335
|
+
*/
|
|
16336
|
+
|
|
16337
|
+
/**
|
|
16338
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16339
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16340
|
+
*
|
|
16341
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16342
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16343
|
+
*
|
|
16344
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16345
|
+
* https://openapi-generator.tech
|
|
16346
|
+
* Do not edit the class manually.
|
|
16347
|
+
*/
|
|
16348
|
+
|
|
16349
|
+
/**
|
|
16350
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16351
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16352
|
+
*
|
|
16353
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16354
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16355
|
+
*
|
|
16356
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16357
|
+
* https://openapi-generator.tech
|
|
16358
|
+
* Do not edit the class manually.
|
|
16359
|
+
*/
|
|
16360
|
+
|
|
16361
|
+
/**
|
|
16362
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16363
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16364
|
+
*
|
|
16365
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16366
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16367
|
+
*
|
|
16368
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16369
|
+
* https://openapi-generator.tech
|
|
16370
|
+
* Do not edit the class manually.
|
|
16371
|
+
*/
|
|
16372
|
+
|
|
16373
|
+
/**
|
|
16374
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16375
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16376
|
+
*
|
|
16377
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16378
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16379
|
+
*
|
|
16380
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16381
|
+
* https://openapi-generator.tech
|
|
16382
|
+
* Do not edit the class manually.
|
|
16383
|
+
*/
|
|
16384
|
+
|
|
16385
|
+
/**
|
|
16386
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16387
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16388
|
+
*
|
|
16389
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16390
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16391
|
+
*
|
|
16392
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16393
|
+
* https://openapi-generator.tech
|
|
16394
|
+
* Do not edit the class manually.
|
|
16395
|
+
*/
|
|
16396
|
+
|
|
16397
|
+
/**
|
|
16398
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16399
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16400
|
+
*
|
|
16401
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16402
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16403
|
+
*
|
|
16404
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16405
|
+
* https://openapi-generator.tech
|
|
16406
|
+
* Do not edit the class manually.
|
|
16407
|
+
*/
|
|
16408
|
+
|
|
16409
|
+
/**
|
|
16410
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16411
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16412
|
+
*
|
|
16413
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16414
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16415
|
+
*
|
|
16416
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16417
|
+
* https://openapi-generator.tech
|
|
16418
|
+
* Do not edit the class manually.
|
|
16419
|
+
*/
|
|
16420
|
+
|
|
16421
|
+
/**
|
|
16422
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16423
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16424
|
+
*
|
|
16425
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16426
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16427
|
+
*
|
|
16428
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16429
|
+
* https://openapi-generator.tech
|
|
16430
|
+
* Do not edit the class manually.
|
|
16431
|
+
*/
|
|
16432
|
+
|
|
16433
|
+
var MetadataResourceApiModel;
|
|
16434
|
+
(function (MetadataResourceApiModel) {
|
|
16435
|
+
MetadataResourceApiModel.VisibilityEnum = {
|
|
16436
|
+
Public: 'public',
|
|
16437
|
+
Private: 'private',
|
|
16438
|
+
};
|
|
16439
|
+
})(MetadataResourceApiModel || (MetadataResourceApiModel = {}));
|
|
16440
|
+
|
|
16441
|
+
/**
|
|
16442
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16443
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16444
|
+
*
|
|
16445
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16446
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16447
|
+
*
|
|
16448
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16449
|
+
* https://openapi-generator.tech
|
|
16450
|
+
* Do not edit the class manually.
|
|
16451
|
+
*/
|
|
16452
|
+
var MetadataResourceExternalManagementPropertiesApiModel;
|
|
16453
|
+
(function (MetadataResourceExternalManagementPropertiesApiModel) {
|
|
16454
|
+
MetadataResourceExternalManagementPropertiesApiModel.ValidationStatusEnum = {
|
|
16455
|
+
Unknown: 'UNKNOWN',
|
|
16456
|
+
Valid: 'VALID',
|
|
16457
|
+
Incomplete: 'INCOMPLETE',
|
|
16458
|
+
};
|
|
16459
|
+
})(MetadataResourceExternalManagementPropertiesApiModel || (MetadataResourceExternalManagementPropertiesApiModel = {}));
|
|
16460
|
+
|
|
16461
|
+
/**
|
|
16462
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16463
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16464
|
+
*
|
|
16465
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16466
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16467
|
+
*
|
|
16468
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16469
|
+
* https://openapi-generator.tech
|
|
16470
|
+
* Do not edit the class manually.
|
|
16471
|
+
*/
|
|
16472
|
+
var MetadataStatusParameterApiModel;
|
|
16473
|
+
(function (MetadataStatusParameterApiModel) {
|
|
16474
|
+
MetadataStatusParameterApiModel.TypeEnum = {
|
|
16475
|
+
Workflow: 'workflow',
|
|
16476
|
+
Task: 'task',
|
|
16477
|
+
Event: 'event',
|
|
16478
|
+
};
|
|
16479
|
+
})(MetadataStatusParameterApiModel || (MetadataStatusParameterApiModel = {}));
|
|
16480
|
+
|
|
16481
|
+
/**
|
|
16482
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16483
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16484
|
+
*
|
|
16485
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16486
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16487
|
+
*
|
|
16488
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16489
|
+
* https://openapi-generator.tech
|
|
16490
|
+
* Do not edit the class manually.
|
|
16491
|
+
*/
|
|
16492
|
+
var OperationApiModel;
|
|
16493
|
+
(function (OperationApiModel) {
|
|
16494
|
+
OperationApiModel.ReservedOperationEnum = {
|
|
16495
|
+
View: 'view',
|
|
16496
|
+
Download: 'download',
|
|
16497
|
+
Editing: 'editing',
|
|
16498
|
+
Notify: 'notify',
|
|
16499
|
+
Dynamic: 'dynamic',
|
|
16500
|
+
Featured: 'featured',
|
|
16501
|
+
};
|
|
16502
|
+
})(OperationApiModel || (OperationApiModel = {}));
|
|
16503
|
+
|
|
16504
|
+
/**
|
|
16505
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16506
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16507
|
+
*
|
|
16508
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16509
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16510
|
+
*
|
|
16511
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16512
|
+
* https://openapi-generator.tech
|
|
16513
|
+
* Do not edit the class manually.
|
|
16514
|
+
*/
|
|
16515
|
+
|
|
16516
|
+
/**
|
|
16517
|
+
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
16518
|
+
* This is the description of the GeoNetwork OpenAPI. Use this API to manage your catalog.
|
|
16519
|
+
*
|
|
16520
|
+
* The version of the OpenAPI document: 4.2.7
|
|
16521
|
+
* Contact: geonetwork-users@lists.sourceforge.net
|
|
16522
|
+
*
|
|
16523
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
16524
|
+
* https://openapi-generator.tech
|
|
16525
|
+
* Do not edit the class manually.
|
|
16526
|
+
*/
|
|
16527
|
+
var PagePropertiesApiModel;
|
|
16528
|
+
(function (PagePropertiesApiModel) {
|
|
16529
|
+
PagePropertiesApiModel.SectionsEnum = {
|
|
16530
|
+
Top: 'TOP',
|
|
16531
|
+
Footer: 'FOOTER',
|
|
16532
|
+
Menu: 'MENU',
|
|
16533
|
+
Submenu: 'SUBMENU',
|
|
16534
|
+
CustomMenu1: 'CUSTOM_MENU1',
|
|
16535
|
+
CustomMenu2: 'CUSTOM_MENU2',
|
|
16536
|
+
CustomMenu3: 'CUSTOM_MENU3',
|
|
16537
|
+
};
|
|
16538
|
+
PagePropertiesApiModel.StatusEnum = {
|
|
16539
|
+
Public: 'PUBLIC',
|
|
16540
|
+
PublicOnly: 'PUBLIC_ONLY',
|
|
16541
|
+
Private: 'PRIVATE',
|
|
16542
|
+
Hidden: 'HIDDEN',
|
|
16543
|
+
};
|
|
16544
|
+
PagePropertiesApiModel.FormatEnum = {
|
|
16545
|
+
Link: 'LINK',
|
|
16546
|
+
Html: 'HTML',
|
|
16547
|
+
Htmlpage: 'HTMLPAGE',
|
|
16548
|
+
Text: 'TEXT',
|
|
16549
|
+
};
|
|
16550
|
+
})(PagePropertiesApiModel || (PagePropertiesApiModel = {}));
|
|
16535
16551
|
|
|
16536
16552
|
/**
|
|
16537
16553
|
* GeoNetwork 4.2.7 OpenAPI Documentation
|
|
@@ -17414,6 +17430,16 @@ var de = {
|
|
|
17414
17430
|
"facets.block.title.tag.default": "Stichwort",
|
|
17415
17431
|
"facets.block.title.th_regions_tree.default": "Regionen",
|
|
17416
17432
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
|
|
17433
|
+
"input.image.altTextPlaceholder": "",
|
|
17434
|
+
"input.image.delete": "",
|
|
17435
|
+
"input.image.displayAltTextInput": "",
|
|
17436
|
+
"input.image.displayUrlInput": "",
|
|
17437
|
+
"input.image.dropFileLabel": "",
|
|
17438
|
+
"input.image.selectFileLabel": "",
|
|
17439
|
+
"input.image.uploadErrorLabel": "",
|
|
17440
|
+
"input.image.uploadErrorRetry": "",
|
|
17441
|
+
"input.image.uploadProgressCancel": "",
|
|
17442
|
+
"input.image.uploadProgressLabel": "",
|
|
17417
17443
|
"language.ca": "Katalanisch",
|
|
17418
17444
|
"language.cs": "Tschechisch",
|
|
17419
17445
|
"language.de": "Deutsch",
|
|
@@ -17766,6 +17792,16 @@ var en = {
|
|
|
17766
17792
|
"facets.block.title.tag.default": "Tag",
|
|
17767
17793
|
"facets.block.title.th_regions_tree.default": "Regions",
|
|
17768
17794
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
|
|
17795
|
+
"input.image.altTextPlaceholder": "Image alternate text",
|
|
17796
|
+
"input.image.delete": "Delete",
|
|
17797
|
+
"input.image.displayAltTextInput": "Alternate text",
|
|
17798
|
+
"input.image.displayUrlInput": "Enter a URL",
|
|
17799
|
+
"input.image.dropFileLabel": "or drop it here",
|
|
17800
|
+
"input.image.selectFileLabel": "Select an image",
|
|
17801
|
+
"input.image.uploadErrorLabel": "The image could not be uploaded",
|
|
17802
|
+
"input.image.uploadErrorRetry": "Retry",
|
|
17803
|
+
"input.image.uploadProgressCancel": "Cancel",
|
|
17804
|
+
"input.image.uploadProgressLabel": "Upload in progress...",
|
|
17769
17805
|
"language.ca": "Catalan",
|
|
17770
17806
|
"language.cs": "Czech",
|
|
17771
17807
|
"language.de": "German",
|
|
@@ -18118,6 +18154,16 @@ var es = {
|
|
|
18118
18154
|
"facets.block.title.tag.default": "",
|
|
18119
18155
|
"facets.block.title.th_regions_tree.default": "",
|
|
18120
18156
|
"favorite.not.authenticated.tooltip": "",
|
|
18157
|
+
"input.image.altTextPlaceholder": "",
|
|
18158
|
+
"input.image.delete": "",
|
|
18159
|
+
"input.image.displayAltTextInput": "",
|
|
18160
|
+
"input.image.displayUrlInput": "",
|
|
18161
|
+
"input.image.dropFileLabel": "",
|
|
18162
|
+
"input.image.selectFileLabel": "",
|
|
18163
|
+
"input.image.uploadErrorLabel": "",
|
|
18164
|
+
"input.image.uploadErrorRetry": "",
|
|
18165
|
+
"input.image.uploadProgressCancel": "",
|
|
18166
|
+
"input.image.uploadProgressLabel": "",
|
|
18121
18167
|
"language.ca": "Catalán",
|
|
18122
18168
|
"language.cs": "Checo",
|
|
18123
18169
|
"language.de": "Alemán",
|
|
@@ -18470,6 +18516,16 @@ var fr = {
|
|
|
18470
18516
|
"facets.block.title.tag.default": "Tag",
|
|
18471
18517
|
"facets.block.title.th_regions_tree.default": "Régions",
|
|
18472
18518
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Connectez-vous</a> pour avoir accès à cette fonctionnalité</div>",
|
|
18519
|
+
"input.image.altTextPlaceholder": "Texte alternatif de l'image",
|
|
18520
|
+
"input.image.delete": "Supprimer",
|
|
18521
|
+
"input.image.displayAltTextInput": "Texte alternatif",
|
|
18522
|
+
"input.image.displayUrlInput": "Saisir une URL",
|
|
18523
|
+
"input.image.dropFileLabel": "ou la glisser ici",
|
|
18524
|
+
"input.image.selectFileLabel": "Sélectionner une image",
|
|
18525
|
+
"input.image.uploadErrorLabel": "L'image n'a pas pu être chargée",
|
|
18526
|
+
"input.image.uploadErrorRetry": "Réessayer",
|
|
18527
|
+
"input.image.uploadProgressCancel": "Annuler",
|
|
18528
|
+
"input.image.uploadProgressLabel": "Chargement en cours...",
|
|
18473
18529
|
"language.ca": "Catalan",
|
|
18474
18530
|
"language.cs": "Tchèque",
|
|
18475
18531
|
"language.de": "Allemand",
|
|
@@ -18822,6 +18878,16 @@ var it = {
|
|
|
18822
18878
|
"facets.block.title.tag.default": "Tag",
|
|
18823
18879
|
"facets.block.title.th_regions_tree.default": "Regioni",
|
|
18824
18880
|
"favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
|
|
18881
|
+
"input.image.altTextPlaceholder": "",
|
|
18882
|
+
"input.image.delete": "",
|
|
18883
|
+
"input.image.displayAltTextInput": "",
|
|
18884
|
+
"input.image.displayUrlInput": "",
|
|
18885
|
+
"input.image.dropFileLabel": "",
|
|
18886
|
+
"input.image.selectFileLabel": "",
|
|
18887
|
+
"input.image.uploadErrorLabel": "",
|
|
18888
|
+
"input.image.uploadErrorRetry": "",
|
|
18889
|
+
"input.image.uploadProgressCancel": "",
|
|
18890
|
+
"input.image.uploadProgressLabel": "",
|
|
18825
18891
|
"language.ca": "Catalano",
|
|
18826
18892
|
"language.cs": "Ceco",
|
|
18827
18893
|
"language.de": "Tedesco",
|
|
@@ -19174,6 +19240,16 @@ var nl = {
|
|
|
19174
19240
|
"facets.block.title.tag.default": "",
|
|
19175
19241
|
"facets.block.title.th_regions_tree.default": "",
|
|
19176
19242
|
"favorite.not.authenticated.tooltip": "",
|
|
19243
|
+
"input.image.altTextPlaceholder": "",
|
|
19244
|
+
"input.image.delete": "",
|
|
19245
|
+
"input.image.displayAltTextInput": "",
|
|
19246
|
+
"input.image.displayUrlInput": "",
|
|
19247
|
+
"input.image.dropFileLabel": "",
|
|
19248
|
+
"input.image.selectFileLabel": "",
|
|
19249
|
+
"input.image.uploadErrorLabel": "",
|
|
19250
|
+
"input.image.uploadErrorRetry": "",
|
|
19251
|
+
"input.image.uploadProgressCancel": "",
|
|
19252
|
+
"input.image.uploadProgressLabel": "",
|
|
19177
19253
|
"language.ca": "Catalaans",
|
|
19178
19254
|
"language.cs": "Tsjechisch",
|
|
19179
19255
|
"language.de": "Duits",
|
|
@@ -19526,6 +19602,16 @@ var pt = {
|
|
|
19526
19602
|
"facets.block.title.tag.default": "",
|
|
19527
19603
|
"facets.block.title.th_regions_tree.default": "",
|
|
19528
19604
|
"favorite.not.authenticated.tooltip": "",
|
|
19605
|
+
"input.image.altTextPlaceholder": "",
|
|
19606
|
+
"input.image.delete": "",
|
|
19607
|
+
"input.image.displayAltTextInput": "",
|
|
19608
|
+
"input.image.displayUrlInput": "",
|
|
19609
|
+
"input.image.dropFileLabel": "",
|
|
19610
|
+
"input.image.selectFileLabel": "",
|
|
19611
|
+
"input.image.uploadErrorLabel": "",
|
|
19612
|
+
"input.image.uploadErrorRetry": "",
|
|
19613
|
+
"input.image.uploadProgressCancel": "",
|
|
19614
|
+
"input.image.uploadProgressLabel": "",
|
|
19529
19615
|
"language.ca": "Catalão",
|
|
19530
19616
|
"language.cs": "Tcheco",
|
|
19531
19617
|
"language.de": "Alemão",
|
|
@@ -19796,6 +19882,10 @@ class Gn4FieldMapper {
|
|
|
19796
19882
|
...output,
|
|
19797
19883
|
datasetCreated: toDate(getFirstValue(selectField(source, 'creationDateForResource'))),
|
|
19798
19884
|
}),
|
|
19885
|
+
revisionDateForResource: (output, source) => ({
|
|
19886
|
+
...output,
|
|
19887
|
+
datasetUpdated: toDate(getFirstValue(selectField(source, 'revisionDateForResource'))),
|
|
19888
|
+
}),
|
|
19799
19889
|
createDate: (output, source) => ({
|
|
19800
19890
|
...output,
|
|
19801
19891
|
recordCreated: toDate(selectField(source, 'createDate')),
|
|
@@ -21663,6 +21753,130 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21663
21753
|
args: [PROXY_PATH]
|
|
21664
21754
|
}] }]; } });
|
|
21665
21755
|
|
|
21756
|
+
function megabytesToBytes(megabytes) {
|
|
21757
|
+
return megabytes * 1048576;
|
|
21758
|
+
}
|
|
21759
|
+
|
|
21760
|
+
/**
|
|
21761
|
+
* This should be called instead of event.stopPropagation()
|
|
21762
|
+
* to make sure that the document receives the event
|
|
21763
|
+
* @param event
|
|
21764
|
+
*/
|
|
21765
|
+
function propagateToDocumentOnly(event) {
|
|
21766
|
+
event.stopPropagation();
|
|
21767
|
+
setTimeout(() => {
|
|
21768
|
+
window.document.dispatchEvent(event);
|
|
21769
|
+
}, 0);
|
|
21770
|
+
}
|
|
21771
|
+
|
|
21772
|
+
function normalize(input) {
|
|
21773
|
+
return input
|
|
21774
|
+
.toLowerCase()
|
|
21775
|
+
.normalize('NFD') // explode composite chars (e.g. é) into multiple chars
|
|
21776
|
+
.replace(/[\u0300-\u036f]/g, '') // remove accents
|
|
21777
|
+
.replace(/œ/g, 'oe') // remove accents
|
|
21778
|
+
.replace(/[^a-z0-9\s]/g, ' '); // replace special characters with space
|
|
21779
|
+
}
|
|
21780
|
+
function asNormalizedParts(input) {
|
|
21781
|
+
return normalize(input)
|
|
21782
|
+
.split(/\s+/)
|
|
21783
|
+
.map((part) => part.trim())
|
|
21784
|
+
.filter((part) => part.length > 0);
|
|
21785
|
+
}
|
|
21786
|
+
/**
|
|
21787
|
+
* This creates a filter function based on a pattern (typically a user-input
|
|
21788
|
+
* search text).
|
|
21789
|
+
* @param pattern
|
|
21790
|
+
*/
|
|
21791
|
+
function createFuzzyFilter(pattern) {
|
|
21792
|
+
const patternParts = asNormalizedParts(pattern);
|
|
21793
|
+
return (input) => {
|
|
21794
|
+
const inputParts = asNormalizedParts(input);
|
|
21795
|
+
return patternParts.every((patternPart) => inputParts.some((part) => part.includes(patternPart)));
|
|
21796
|
+
};
|
|
21797
|
+
}
|
|
21798
|
+
|
|
21799
|
+
function getGeometryFromGeoJSON(data) {
|
|
21800
|
+
if (data.type === 'FeatureCollection') {
|
|
21801
|
+
return data?.features?.[0]?.geometry || null;
|
|
21802
|
+
}
|
|
21803
|
+
if (data.type === 'Feature') {
|
|
21804
|
+
return data?.geometry || null;
|
|
21805
|
+
}
|
|
21806
|
+
if (data.type === 'GeometryCollection') {
|
|
21807
|
+
return data?.geometries?.[0] || null;
|
|
21808
|
+
}
|
|
21809
|
+
if (data.type === 'Polygon' ||
|
|
21810
|
+
data.type === 'Point' ||
|
|
21811
|
+
data.type === 'LineString' ||
|
|
21812
|
+
data.type === 'MultiPolygon' ||
|
|
21813
|
+
data.type === 'MultiPoint' ||
|
|
21814
|
+
data.type === 'MultiLineString') {
|
|
21815
|
+
return data || null;
|
|
21816
|
+
}
|
|
21817
|
+
return null;
|
|
21818
|
+
}
|
|
21819
|
+
|
|
21820
|
+
function downsizeImage(blob, maxWidth, maxHeight) {
|
|
21821
|
+
return new Promise((resolve, reject) => {
|
|
21822
|
+
const image = new Image();
|
|
21823
|
+
image.src = URL.createObjectURL(blob);
|
|
21824
|
+
image.onload = () => {
|
|
21825
|
+
let width = image.width;
|
|
21826
|
+
let height = image.height;
|
|
21827
|
+
if (width > maxWidth || height > maxHeight) {
|
|
21828
|
+
if (width > height) {
|
|
21829
|
+
height = height * (maxWidth / width);
|
|
21830
|
+
width = maxWidth;
|
|
21831
|
+
}
|
|
21832
|
+
else {
|
|
21833
|
+
width = width * (maxHeight / height);
|
|
21834
|
+
height = maxHeight;
|
|
21835
|
+
}
|
|
21836
|
+
}
|
|
21837
|
+
const canvas = document.createElement('canvas');
|
|
21838
|
+
canvas.width = width;
|
|
21839
|
+
canvas.height = height;
|
|
21840
|
+
const context = canvas.getContext('2d');
|
|
21841
|
+
context.drawImage(image, 0, 0, width, height);
|
|
21842
|
+
canvas.toBlob(resolve, blob.type);
|
|
21843
|
+
};
|
|
21844
|
+
image.onerror = reject;
|
|
21845
|
+
});
|
|
21846
|
+
}
|
|
21847
|
+
function downgradeImage(blob, maxSizeBytes) {
|
|
21848
|
+
return new Promise((resolve, reject) => {
|
|
21849
|
+
const image = new Image();
|
|
21850
|
+
image.src = URL.createObjectURL(blob);
|
|
21851
|
+
image.onload = () => {
|
|
21852
|
+
const width = image.width;
|
|
21853
|
+
const height = image.height;
|
|
21854
|
+
let quality = 1.0;
|
|
21855
|
+
const canvas = document.createElement('canvas');
|
|
21856
|
+
canvas.width = width;
|
|
21857
|
+
canvas.height = height;
|
|
21858
|
+
const context = canvas.getContext('2d');
|
|
21859
|
+
context.drawImage(image, 0, 0, width, height);
|
|
21860
|
+
const compressAndResolveBlob = (blobToCompress) => {
|
|
21861
|
+
if (blobToCompress.size <= maxSizeBytes) {
|
|
21862
|
+
resolve(blobToCompress);
|
|
21863
|
+
}
|
|
21864
|
+
else {
|
|
21865
|
+
quality -= 0.1;
|
|
21866
|
+
if (quality >= 0) {
|
|
21867
|
+
canvas.toBlob(compressAndResolveBlob, blob.type, quality);
|
|
21868
|
+
}
|
|
21869
|
+
else {
|
|
21870
|
+
reject('Unable to compress image below max size');
|
|
21871
|
+
}
|
|
21872
|
+
}
|
|
21873
|
+
};
|
|
21874
|
+
canvas.toBlob(compressAndResolveBlob, blob.type, quality);
|
|
21875
|
+
};
|
|
21876
|
+
image.onerror = reject;
|
|
21877
|
+
});
|
|
21878
|
+
}
|
|
21879
|
+
|
|
21666
21880
|
/*
|
|
21667
21881
|
* Implement AngularJS $parse
|
|
21668
21882
|
* delimiter is `^^^^` cause object properties can contain `.`
|
|
@@ -21696,38 +21910,10 @@ const parse = (path) => {
|
|
|
21696
21910
|
return fn;
|
|
21697
21911
|
};
|
|
21698
21912
|
|
|
21699
|
-
const stripHtml = function (html) {
|
|
21700
|
-
if (!html)
|
|
21701
|
-
return undefined;
|
|
21702
|
-
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
21703
|
-
return doc.body.textContent || '';
|
|
21704
|
-
};
|
|
21705
|
-
|
|
21706
21913
|
const removeWhitespace = function (str) {
|
|
21707
21914
|
return str?.replace(/\s+/g, ' ').trim();
|
|
21708
21915
|
};
|
|
21709
21916
|
|
|
21710
|
-
function getGeometryFromGeoJSON(data) {
|
|
21711
|
-
if (data.type === 'FeatureCollection') {
|
|
21712
|
-
return data?.features?.[0]?.geometry || null;
|
|
21713
|
-
}
|
|
21714
|
-
if (data.type === 'Feature') {
|
|
21715
|
-
return data?.geometry || null;
|
|
21716
|
-
}
|
|
21717
|
-
if (data.type === 'GeometryCollection') {
|
|
21718
|
-
return data?.geometries?.[0] || null;
|
|
21719
|
-
}
|
|
21720
|
-
if (data.type === 'Polygon' ||
|
|
21721
|
-
data.type === 'Point' ||
|
|
21722
|
-
data.type === 'LineString' ||
|
|
21723
|
-
data.type === 'MultiPolygon' ||
|
|
21724
|
-
data.type === 'MultiPoint' ||
|
|
21725
|
-
data.type === 'MultiLineString') {
|
|
21726
|
-
return data || null;
|
|
21727
|
-
}
|
|
21728
|
-
return null;
|
|
21729
|
-
}
|
|
21730
|
-
|
|
21731
21917
|
function sortByToStrings(sortBy) {
|
|
21732
21918
|
const array = Array.isArray(sortBy[0]) ? sortBy : [sortBy];
|
|
21733
21919
|
return array.map((param) => `${param[0] === 'desc' ? '-' : ''}${param[1]}`);
|
|
@@ -21742,62 +21928,12 @@ function sortByFromString(sortByString) {
|
|
|
21742
21928
|
];
|
|
21743
21929
|
}
|
|
21744
21930
|
|
|
21745
|
-
|
|
21746
|
-
|
|
21747
|
-
|
|
21748
|
-
|
|
21749
|
-
|
|
21750
|
-
|
|
21751
|
-
const toDelete = [];
|
|
21752
|
-
const urlObj = new URL(url, window.location.toString());
|
|
21753
|
-
const keysLower = searchParams.map((p) => p.toLowerCase());
|
|
21754
|
-
for (const param of urlObj.searchParams.keys()) {
|
|
21755
|
-
if (keysLower.indexOf(param.toLowerCase()) > -1) {
|
|
21756
|
-
toDelete.push(param);
|
|
21757
|
-
}
|
|
21758
|
-
}
|
|
21759
|
-
toDelete.map((param) => urlObj.searchParams.delete(param));
|
|
21760
|
-
return urlObj.toString();
|
|
21761
|
-
}
|
|
21762
|
-
|
|
21763
|
-
/**
|
|
21764
|
-
* This should be called instead of event.stopPropagation()
|
|
21765
|
-
* to make sure that the document receives the event
|
|
21766
|
-
* @param event
|
|
21767
|
-
*/
|
|
21768
|
-
function propagateToDocumentOnly(event) {
|
|
21769
|
-
event.stopPropagation();
|
|
21770
|
-
setTimeout(() => {
|
|
21771
|
-
window.document.dispatchEvent(event);
|
|
21772
|
-
}, 0);
|
|
21773
|
-
}
|
|
21774
|
-
|
|
21775
|
-
function normalize(input) {
|
|
21776
|
-
return input
|
|
21777
|
-
.toLowerCase()
|
|
21778
|
-
.normalize('NFD') // explode composite chars (e.g. é) into multiple chars
|
|
21779
|
-
.replace(/[\u0300-\u036f]/g, '') // remove accents
|
|
21780
|
-
.replace(/œ/g, 'oe') // remove accents
|
|
21781
|
-
.replace(/[^a-z0-9\s]/g, ' '); // replace special characters with space
|
|
21782
|
-
}
|
|
21783
|
-
function asNormalizedParts(input) {
|
|
21784
|
-
return normalize(input)
|
|
21785
|
-
.split(/\s+/)
|
|
21786
|
-
.map((part) => part.trim())
|
|
21787
|
-
.filter((part) => part.length > 0);
|
|
21788
|
-
}
|
|
21789
|
-
/**
|
|
21790
|
-
* This creates a filter function based on a pattern (typically a user-input
|
|
21791
|
-
* search text).
|
|
21792
|
-
* @param pattern
|
|
21793
|
-
*/
|
|
21794
|
-
function createFuzzyFilter(pattern) {
|
|
21795
|
-
const patternParts = asNormalizedParts(pattern);
|
|
21796
|
-
return (input) => {
|
|
21797
|
-
const inputParts = asNormalizedParts(input);
|
|
21798
|
-
return patternParts.every((patternPart) => inputParts.some((part) => part.includes(patternPart)));
|
|
21799
|
-
};
|
|
21800
|
-
}
|
|
21931
|
+
const stripHtml = function (html) {
|
|
21932
|
+
if (!html)
|
|
21933
|
+
return undefined;
|
|
21934
|
+
const doc = new DOMParser().parseFromString(html, 'text/html');
|
|
21935
|
+
return doc.body.textContent || '';
|
|
21936
|
+
};
|
|
21801
21937
|
|
|
21802
21938
|
function getTemporalRangeUnion(ranges) {
|
|
21803
21939
|
let earliestStartDate = Infinity;
|
|
@@ -21831,6 +21967,24 @@ function getTemporalRangeUnion(ranges) {
|
|
|
21831
21967
|
}
|
|
21832
21968
|
}
|
|
21833
21969
|
|
|
21970
|
+
/**
|
|
21971
|
+
* Removes the given search params from the URL completely; this is case-insensitive
|
|
21972
|
+
* @param url
|
|
21973
|
+
* @param searchParams
|
|
21974
|
+
*/
|
|
21975
|
+
function removeSearchParams(url, searchParams) {
|
|
21976
|
+
const toDelete = [];
|
|
21977
|
+
const urlObj = new URL(url, window.location.toString());
|
|
21978
|
+
const keysLower = searchParams.map((p) => p.toLowerCase());
|
|
21979
|
+
for (const param of urlObj.searchParams.keys()) {
|
|
21980
|
+
if (keysLower.indexOf(param.toLowerCase()) > -1) {
|
|
21981
|
+
toDelete.push(param);
|
|
21982
|
+
}
|
|
21983
|
+
}
|
|
21984
|
+
toDelete.map((param) => urlObj.searchParams.delete(param));
|
|
21985
|
+
return urlObj.toString();
|
|
21986
|
+
}
|
|
21987
|
+
|
|
21834
21988
|
marker('downloads.wfs.featuretype.not.found');
|
|
21835
21989
|
const FORMATS = {
|
|
21836
21990
|
csv: {
|
|
@@ -23602,6 +23756,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23602
23756
|
|
|
23603
23757
|
class ButtonComponent {
|
|
23604
23758
|
constructor() {
|
|
23759
|
+
this.btnClass = 'gn-ui-btn-default';
|
|
23605
23760
|
this.disabled = false;
|
|
23606
23761
|
this.extraClass = '';
|
|
23607
23762
|
this.buttonClick = new EventEmitter();
|
|
@@ -24653,192 +24808,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24653
24808
|
}]
|
|
24654
24809
|
}] });
|
|
24655
24810
|
|
|
24656
|
-
class FormFieldSimpleComponent {
|
|
24657
|
-
constructor() {
|
|
24658
|
-
this.readonly = false;
|
|
24659
|
-
this.invalid = false;
|
|
24660
|
-
this.placeholder = '';
|
|
24661
|
-
}
|
|
24662
|
-
get inputType() {
|
|
24663
|
-
switch (this.type) {
|
|
24664
|
-
case 'url':
|
|
24665
|
-
case 'text':
|
|
24666
|
-
return 'text';
|
|
24667
|
-
case 'date':
|
|
24668
|
-
return 'datetime-local';
|
|
24669
|
-
case 'number':
|
|
24670
|
-
return 'number';
|
|
24671
|
-
case 'toggle':
|
|
24672
|
-
return 'checkbox';
|
|
24673
|
-
default:
|
|
24674
|
-
return '';
|
|
24675
|
-
}
|
|
24676
|
-
}
|
|
24677
|
-
get isSelect() {
|
|
24678
|
-
return this.type === 'list';
|
|
24679
|
-
}
|
|
24680
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24681
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: { type: "type", control: "control", readonly: "readonly", invalid: "invalid", placeholder: "placeholder", options: "options" }, ngImport: i0, template: "<input\n *ngIf=\"!isSelect\"\n [type]=\"inputType\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n<select\n *ngIf=\"isSelect\"\n [formControl]=\"control\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.label }}\n </option>\n</select>\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: "directive", type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24682
|
-
}
|
|
24683
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSimpleComponent, decorators: [{
|
|
24684
|
-
type: Component,
|
|
24685
|
-
args: [{ selector: 'gn-ui-form-field-simple', changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n *ngIf=\"!isSelect\"\n [type]=\"inputType\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n<select\n *ngIf=\"isSelect\"\n [formControl]=\"control\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.label }}\n </option>\n</select>\n" }]
|
|
24686
|
-
}], propDecorators: { type: [{
|
|
24687
|
-
type: Input
|
|
24688
|
-
}], control: [{
|
|
24689
|
-
type: Input
|
|
24690
|
-
}], readonly: [{
|
|
24691
|
-
type: Input
|
|
24692
|
-
}], invalid: [{
|
|
24693
|
-
type: Input
|
|
24694
|
-
}], placeholder: [{
|
|
24695
|
-
type: Input
|
|
24696
|
-
}], options: [{
|
|
24697
|
-
type: Input
|
|
24698
|
-
}] } });
|
|
24699
|
-
|
|
24700
|
-
class FormFieldFileComponent {
|
|
24701
|
-
constructor() {
|
|
24702
|
-
this.readonly = false;
|
|
24703
|
-
this.invalid = false;
|
|
24704
|
-
this.placeholder = '';
|
|
24705
|
-
}
|
|
24706
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24707
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldFileComponent, selector: "gn-ui-form-field-file", inputs: { control: "control", readonly: "readonly", invalid: "invalid", placeholder: "placeholder" }, ngImport: i0, template: "<input\n type=\"file\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24708
|
-
}
|
|
24709
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldFileComponent, decorators: [{
|
|
24710
|
-
type: Component,
|
|
24711
|
-
args: [{ selector: 'gn-ui-form-field-file', changeDetection: ChangeDetectionStrategy.OnPush, template: "<input\n type=\"file\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n" }]
|
|
24712
|
-
}], propDecorators: { control: [{
|
|
24713
|
-
type: Input
|
|
24714
|
-
}], readonly: [{
|
|
24715
|
-
type: Input
|
|
24716
|
-
}], invalid: [{
|
|
24717
|
-
type: Input
|
|
24718
|
-
}], placeholder: [{
|
|
24719
|
-
type: Input
|
|
24720
|
-
}] } });
|
|
24721
|
-
|
|
24722
|
-
class FormFieldRichComponent {
|
|
24723
|
-
constructor() {
|
|
24724
|
-
this.readonly = false;
|
|
24725
|
-
this.invalid = false;
|
|
24726
|
-
this.placeholder = '';
|
|
24727
|
-
}
|
|
24728
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldRichComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24729
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: { control: "control", readonly: "readonly", invalid: "invalid", placeholder: "placeholder" }, ngImport: i0, template: "<textarea\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white h-full resize-none transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n></textarea>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24730
|
-
}
|
|
24731
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldRichComponent, decorators: [{
|
|
24732
|
-
type: Component,
|
|
24733
|
-
args: [{ selector: 'gn-ui-form-field-rich', changeDetection: ChangeDetectionStrategy.OnPush, template: "<textarea\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white h-full resize-none transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n></textarea>\n" }]
|
|
24734
|
-
}], propDecorators: { control: [{
|
|
24735
|
-
type: Input
|
|
24736
|
-
}], readonly: [{
|
|
24737
|
-
type: Input
|
|
24738
|
-
}], invalid: [{
|
|
24739
|
-
type: Input
|
|
24740
|
-
}], placeholder: [{
|
|
24741
|
-
type: Input
|
|
24742
|
-
}] } });
|
|
24743
|
-
|
|
24744
|
-
class FormFieldObjectComponent {
|
|
24745
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldObjectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24746
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldObjectComponent, selector: "gn-ui-form-field-object", ngImport: i0, template: "<p>form-field-object works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24747
|
-
}
|
|
24748
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldObjectComponent, decorators: [{
|
|
24749
|
-
type: Component,
|
|
24750
|
-
args: [{ selector: 'gn-ui-form-field-object', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p>form-field-object works!</p>\n" }]
|
|
24751
|
-
}] });
|
|
24752
|
-
|
|
24753
|
-
class FormFieldArrayComponent {
|
|
24754
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24755
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldArrayComponent, selector: "gn-ui-form-field-array", ngImport: i0, template: "<p>form-field-array works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24756
|
-
}
|
|
24757
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldArrayComponent, decorators: [{
|
|
24758
|
-
type: Component,
|
|
24759
|
-
args: [{ selector: 'gn-ui-form-field-array', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p>form-field-array works!</p>\n" }]
|
|
24760
|
-
}] });
|
|
24761
|
-
|
|
24762
|
-
class FormFieldSpatialExtentComponent {
|
|
24763
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSpatialExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24764
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<p>form-field-spatial-extent works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24765
|
-
}
|
|
24766
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSpatialExtentComponent, decorators: [{
|
|
24767
|
-
type: Component,
|
|
24768
|
-
args: [{ selector: 'gn-ui-form-field-spatial-extent', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p>form-field-spatial-extent works!</p>\n" }]
|
|
24769
|
-
}] });
|
|
24770
|
-
|
|
24771
|
-
class FormFieldTemporalExtentComponent {
|
|
24772
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldTemporalExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24773
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldTemporalExtentComponent, selector: "gn-ui-form-field-temporal-extent", ngImport: i0, template: "<p>form-field-temporal-extent works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24774
|
-
}
|
|
24775
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldTemporalExtentComponent, decorators: [{
|
|
24776
|
-
type: Component,
|
|
24777
|
-
args: [{ selector: 'gn-ui-form-field-temporal-extent', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p>form-field-temporal-extent works!</p>\n" }]
|
|
24778
|
-
}] });
|
|
24779
|
-
|
|
24780
|
-
class FormFieldComponent {
|
|
24781
|
-
set value(v) {
|
|
24782
|
-
this.formControl.setValue(v, {
|
|
24783
|
-
emitEvent: false,
|
|
24784
|
-
});
|
|
24785
|
-
}
|
|
24786
|
-
constructor() {
|
|
24787
|
-
this.formControl = new FormControl();
|
|
24788
|
-
this.valueChange = this.formControl.valueChanges;
|
|
24789
|
-
}
|
|
24790
|
-
get simpleType() {
|
|
24791
|
-
return this.config.type;
|
|
24792
|
-
}
|
|
24793
|
-
get isSimpleField() {
|
|
24794
|
-
return (this.config.type === 'text' ||
|
|
24795
|
-
this.config.type === 'number' ||
|
|
24796
|
-
this.config.type === 'date' ||
|
|
24797
|
-
this.config.type === 'list' ||
|
|
24798
|
-
this.config.type === 'url' ||
|
|
24799
|
-
this.config.type === 'toggle');
|
|
24800
|
-
}
|
|
24801
|
-
get isRichField() {
|
|
24802
|
-
return this.config.type === 'rich';
|
|
24803
|
-
}
|
|
24804
|
-
get isFileField() {
|
|
24805
|
-
return this.config.type === 'file';
|
|
24806
|
-
}
|
|
24807
|
-
get isSpatialExtentField() {
|
|
24808
|
-
return this.config.type === 'spatial_extent';
|
|
24809
|
-
}
|
|
24810
|
-
get isTemporalExtentField() {
|
|
24811
|
-
return this.config.type === 'temporal_extent';
|
|
24812
|
-
}
|
|
24813
|
-
get isArrayField() {
|
|
24814
|
-
return this.config.type === 'array';
|
|
24815
|
-
}
|
|
24816
|
-
get isObjectField() {
|
|
24817
|
-
return this.config.type === 'object';
|
|
24818
|
-
}
|
|
24819
|
-
get isFieldOk() {
|
|
24820
|
-
return !this.config.locked && !this.config.invalid;
|
|
24821
|
-
}
|
|
24822
|
-
get isFieldLocked() {
|
|
24823
|
-
return this.config.locked;
|
|
24824
|
-
}
|
|
24825
|
-
get isFieldInvalid() {
|
|
24826
|
-
return !this.config.locked && this.config.invalid;
|
|
24827
|
-
}
|
|
24828
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24829
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: { config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <div class=\"mb-2 flex flex-row\">\n <label class=\"grow\">\n <span class=\"font-medium field-label\">{{\n config.labelKey | translate\n }}</span>\n <span *ngIf=\"config.hintKey\" class=\"text-gray-900 text-sm\">\n - {{ config.hintKey | translate }}\n </span>\n </label>\n <mat-icon\n *ngIf=\"isFieldOk\"\n class=\"material-symbols-outlined text-[#c6d950] icon-ok\"\n >check_circle</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldLocked\"\n class=\"material-symbols-outlined text-blue-400 icon-locked\"\n >lock</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldInvalid\"\n class=\"material-symbols-outlined text-pink-500 icon-invalid\"\n >cancel</mat-icon\n >\n </div>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n [type]=\"simpleType\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isFileField\">\n <gn-ui-form-field-file\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-file>\n </ng-container>\n <ng-container *ngIf=\"isRichField\">\n <gn-ui-form-field-rich\n class=\"grow\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isArrayField\">\n <gn-ui-form-field-array></gn-ui-form-field-array>\n </ng-container>\n <ng-container *ngIf=\"isObjectField\">\n <gn-ui-form-field-object></gn-ui-form-field-object>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtentField\">\n <gn-ui-form-field-temporal-extent></gn-ui-form-field-temporal-extent>\n </ng-container>\n <div\n *ngIf=\"isFieldInvalid && config.invalidHintKey\"\n class=\"mt-2 text-pink-500 text-sm field-invalid-hint\"\n >\n {{ config.invalidHintKey | translate }}\n </div>\n</div>\n", styles: [""], dependencies: [{ 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: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldArrayComponent, selector: "gn-ui-form-field-array" }, { kind: "component", type: FormFieldObjectComponent, selector: "gn-ui-form-field-object" }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "readonly", "invalid", "placeholder"] }, { kind: "component", type: FormFieldFileComponent, selector: "gn-ui-form-field-file", inputs: ["control", "readonly", "invalid", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldTemporalExtentComponent, selector: "gn-ui-form-field-temporal-extent" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24830
|
-
}
|
|
24831
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
24832
|
-
type: Component,
|
|
24833
|
-
args: [{ selector: 'gn-ui-form-field', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col h-full\">\n <div class=\"mb-2 flex flex-row\">\n <label class=\"grow\">\n <span class=\"font-medium field-label\">{{\n config.labelKey | translate\n }}</span>\n <span *ngIf=\"config.hintKey\" class=\"text-gray-900 text-sm\">\n - {{ config.hintKey | translate }}\n </span>\n </label>\n <mat-icon\n *ngIf=\"isFieldOk\"\n class=\"material-symbols-outlined text-[#c6d950] icon-ok\"\n >check_circle</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldLocked\"\n class=\"material-symbols-outlined text-blue-400 icon-locked\"\n >lock</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldInvalid\"\n class=\"material-symbols-outlined text-pink-500 icon-invalid\"\n >cancel</mat-icon\n >\n </div>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n [type]=\"simpleType\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isFileField\">\n <gn-ui-form-field-file\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-file>\n </ng-container>\n <ng-container *ngIf=\"isRichField\">\n <gn-ui-form-field-rich\n class=\"grow\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isArrayField\">\n <gn-ui-form-field-array></gn-ui-form-field-array>\n </ng-container>\n <ng-container *ngIf=\"isObjectField\">\n <gn-ui-form-field-object></gn-ui-form-field-object>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtentField\">\n <gn-ui-form-field-temporal-extent></gn-ui-form-field-temporal-extent>\n </ng-container>\n <div\n *ngIf=\"isFieldInvalid && config.invalidHintKey\"\n class=\"mt-2 text-pink-500 text-sm field-invalid-hint\"\n >\n {{ config.invalidHintKey | translate }}\n </div>\n</div>\n" }]
|
|
24834
|
-
}], ctorParameters: function () { return []; }, propDecorators: { config: [{
|
|
24835
|
-
type: Input
|
|
24836
|
-
}], value: [{
|
|
24837
|
-
type: Input
|
|
24838
|
-
}], valueChange: [{
|
|
24839
|
-
type: Output
|
|
24840
|
-
}] } });
|
|
24841
|
-
|
|
24842
24811
|
class CopyTextButtonComponent {
|
|
24843
24812
|
constructor() {
|
|
24844
24813
|
this.displayText = true;
|
|
@@ -24983,6 +24952,229 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24983
24952
|
type: Input
|
|
24984
24953
|
}] } });
|
|
24985
24954
|
|
|
24955
|
+
class FilesDropDirective {
|
|
24956
|
+
constructor() {
|
|
24957
|
+
this.dragFilesOver = new EventEmitter();
|
|
24958
|
+
this.dropFiles = new EventEmitter();
|
|
24959
|
+
this.dragEnterCounter = 0;
|
|
24960
|
+
}
|
|
24961
|
+
_onDragEnter(event) {
|
|
24962
|
+
event.preventDefault();
|
|
24963
|
+
this.dragEnterCounter++;
|
|
24964
|
+
this.dragFilesOver.emit(true);
|
|
24965
|
+
}
|
|
24966
|
+
_onDragOver(event) {
|
|
24967
|
+
event.preventDefault();
|
|
24968
|
+
}
|
|
24969
|
+
_onDragLeave(event) {
|
|
24970
|
+
event.preventDefault();
|
|
24971
|
+
this.dragEnterCounter = Math.max(0, this.dragEnterCounter - 1);
|
|
24972
|
+
if (this.dragEnterCounter === 0) {
|
|
24973
|
+
this.dragFilesOver.emit(false);
|
|
24974
|
+
}
|
|
24975
|
+
}
|
|
24976
|
+
_onDrop(event) {
|
|
24977
|
+
event.preventDefault();
|
|
24978
|
+
this.dragEnterCounter = 0;
|
|
24979
|
+
this.dragFilesOver.emit(false);
|
|
24980
|
+
const files = Array.from(event.dataTransfer.files);
|
|
24981
|
+
if (files.length > 0) {
|
|
24982
|
+
this.dropFiles.emit(files);
|
|
24983
|
+
}
|
|
24984
|
+
}
|
|
24985
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FilesDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
24986
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: FilesDropDirective, isStandalone: true, selector: "[gnUiFilesDrop]", outputs: { dragFilesOver: "dragFilesOver", dropFiles: "dropFiles" }, host: { listeners: { "dragenter": "_onDragEnter($event)", "dragover": "_onDragOver($event)", "dragleave": "_onDragLeave($event)", "drop": "_onDrop($event)" } }, ngImport: i0 }); }
|
|
24987
|
+
}
|
|
24988
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FilesDropDirective, decorators: [{
|
|
24989
|
+
type: Directive,
|
|
24990
|
+
args: [{
|
|
24991
|
+
selector: '[gnUiFilesDrop]',
|
|
24992
|
+
standalone: true,
|
|
24993
|
+
}]
|
|
24994
|
+
}], propDecorators: { dragFilesOver: [{
|
|
24995
|
+
type: Output
|
|
24996
|
+
}], dropFiles: [{
|
|
24997
|
+
type: Output
|
|
24998
|
+
}], _onDragEnter: [{
|
|
24999
|
+
type: HostListener,
|
|
25000
|
+
args: ['dragenter', ['$event']]
|
|
25001
|
+
}], _onDragOver: [{
|
|
25002
|
+
type: HostListener,
|
|
25003
|
+
args: ['dragover', ['$event']]
|
|
25004
|
+
}], _onDragLeave: [{
|
|
25005
|
+
type: HostListener,
|
|
25006
|
+
args: ['dragleave', ['$event']]
|
|
25007
|
+
}], _onDrop: [{
|
|
25008
|
+
type: HostListener,
|
|
25009
|
+
args: ['drop', ['$event']]
|
|
25010
|
+
}] } });
|
|
25011
|
+
|
|
25012
|
+
class ImageInputComponent {
|
|
25013
|
+
constructor(http, cd) {
|
|
25014
|
+
this.http = http;
|
|
25015
|
+
this.cd = cd;
|
|
25016
|
+
this.fileChange = new EventEmitter();
|
|
25017
|
+
this.urlChange = new EventEmitter();
|
|
25018
|
+
this.uploadCancel = new EventEmitter();
|
|
25019
|
+
this.delete = new EventEmitter();
|
|
25020
|
+
this.altTextChange = new EventEmitter();
|
|
25021
|
+
this.dragFilesOver = false;
|
|
25022
|
+
this.showUrlInput = false;
|
|
25023
|
+
this.downloadError = false;
|
|
25024
|
+
this.showAltTextInput = false;
|
|
25025
|
+
}
|
|
25026
|
+
getPrimaryText() {
|
|
25027
|
+
if (this.uploadError) {
|
|
25028
|
+
return marker('input.image.uploadErrorLabel');
|
|
25029
|
+
}
|
|
25030
|
+
if (this.uploadProgress) {
|
|
25031
|
+
return marker('input.image.uploadProgressLabel');
|
|
25032
|
+
}
|
|
25033
|
+
return marker('input.image.selectFileLabel');
|
|
25034
|
+
}
|
|
25035
|
+
getSecondaryText() {
|
|
25036
|
+
if (this.uploadError) {
|
|
25037
|
+
return marker('input.image.uploadErrorRetry');
|
|
25038
|
+
}
|
|
25039
|
+
if (this.uploadProgress) {
|
|
25040
|
+
return marker('input.image.uploadProgressCancel');
|
|
25041
|
+
}
|
|
25042
|
+
return marker('input.image.dropFileLabel');
|
|
25043
|
+
}
|
|
25044
|
+
handleDragFilesOver(dragFilesOver) {
|
|
25045
|
+
if (!this.showUrlInput) {
|
|
25046
|
+
this.dragFilesOver = dragFilesOver;
|
|
25047
|
+
this.cd.markForCheck();
|
|
25048
|
+
}
|
|
25049
|
+
}
|
|
25050
|
+
handleDropFiles(files) {
|
|
25051
|
+
if (!this.showUrlInput) {
|
|
25052
|
+
const validFiles = this.filterTypeImage(files);
|
|
25053
|
+
if (validFiles.length > 0) {
|
|
25054
|
+
this.resizeAndEmit(validFiles[0]);
|
|
25055
|
+
}
|
|
25056
|
+
}
|
|
25057
|
+
}
|
|
25058
|
+
handleFileInput(event) {
|
|
25059
|
+
const inputFiles = Array.from(event.target.files);
|
|
25060
|
+
const validFiles = this.filterTypeImage(inputFiles);
|
|
25061
|
+
if (validFiles.length > 0) {
|
|
25062
|
+
this.resizeAndEmit(validFiles[0]);
|
|
25063
|
+
}
|
|
25064
|
+
}
|
|
25065
|
+
displayUrlInput() {
|
|
25066
|
+
this.uploadCancel.emit();
|
|
25067
|
+
this.showUrlInput = true;
|
|
25068
|
+
}
|
|
25069
|
+
handleUrlChange(event) {
|
|
25070
|
+
this.downloadError = false;
|
|
25071
|
+
this.urlInputValue = event.target.value;
|
|
25072
|
+
}
|
|
25073
|
+
async downloadUrl() {
|
|
25074
|
+
const name = this.urlInputValue.split('/').pop();
|
|
25075
|
+
try {
|
|
25076
|
+
const response = await firstValueFrom(this.http.head(this.urlInputValue, { observe: 'response' }));
|
|
25077
|
+
if (response.headers.get('content-type')?.startsWith('image/') &&
|
|
25078
|
+
parseInt(response.headers.get('content-length')) <
|
|
25079
|
+
megabytesToBytes(this.maxSizeMB)) {
|
|
25080
|
+
this.http.get(this.urlInputValue, { responseType: 'blob' }).subscribe({
|
|
25081
|
+
next: (blob) => {
|
|
25082
|
+
this.cd.markForCheck();
|
|
25083
|
+
const file = new File([blob], name);
|
|
25084
|
+
this.fileChange.emit(file);
|
|
25085
|
+
},
|
|
25086
|
+
error: () => {
|
|
25087
|
+
this.downloadError = true;
|
|
25088
|
+
this.cd.markForCheck();
|
|
25089
|
+
this.urlChange.emit(this.urlInputValue);
|
|
25090
|
+
},
|
|
25091
|
+
});
|
|
25092
|
+
}
|
|
25093
|
+
}
|
|
25094
|
+
catch {
|
|
25095
|
+
this.downloadError = true;
|
|
25096
|
+
this.cd.markForCheck();
|
|
25097
|
+
return;
|
|
25098
|
+
}
|
|
25099
|
+
}
|
|
25100
|
+
handleSecondaryTextClick() {
|
|
25101
|
+
if (this.uploadError) {
|
|
25102
|
+
this.handleRetry();
|
|
25103
|
+
}
|
|
25104
|
+
else if (this.uploadProgress) {
|
|
25105
|
+
this.handleCancel();
|
|
25106
|
+
}
|
|
25107
|
+
}
|
|
25108
|
+
handleCancel() {
|
|
25109
|
+
this.uploadCancel.emit();
|
|
25110
|
+
}
|
|
25111
|
+
handleRetry() {
|
|
25112
|
+
switch (this.lastUploadType) {
|
|
25113
|
+
case 'file':
|
|
25114
|
+
this.fileChange.emit(this.lastUploadContent);
|
|
25115
|
+
break;
|
|
25116
|
+
case 'url':
|
|
25117
|
+
this.urlChange.emit(this.lastUploadContent);
|
|
25118
|
+
break;
|
|
25119
|
+
}
|
|
25120
|
+
}
|
|
25121
|
+
handleDelete() {
|
|
25122
|
+
this.delete.emit();
|
|
25123
|
+
}
|
|
25124
|
+
toggleAltTextInput() {
|
|
25125
|
+
this.showAltTextInput = !this.showAltTextInput;
|
|
25126
|
+
}
|
|
25127
|
+
handleAltTextChange(event) {
|
|
25128
|
+
const input = event.target;
|
|
25129
|
+
this.altTextChange.emit(input.value);
|
|
25130
|
+
}
|
|
25131
|
+
filterTypeImage(files) {
|
|
25132
|
+
return files.filter((file) => {
|
|
25133
|
+
return file.type.startsWith('image/');
|
|
25134
|
+
});
|
|
25135
|
+
}
|
|
25136
|
+
resizeAndEmit(imageToResize) {
|
|
25137
|
+
const maxSizeBytes = megabytesToBytes(this.maxSizeMB);
|
|
25138
|
+
downgradeImage(imageToResize, maxSizeBytes).then((resizedImage) => {
|
|
25139
|
+
const fileToEmit = new File([resizedImage], imageToResize.name);
|
|
25140
|
+
this.fileChange.emit(fileToEmit);
|
|
25141
|
+
});
|
|
25142
|
+
}
|
|
25143
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageInputComponent, deps: [{ token: i1.HttpClient }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25144
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageInputComponent, isStandalone: true, selector: "gn-ui-image-input", inputs: { maxSizeMB: "maxSizeMB", previewUrl: "previewUrl", altText: "altText", uploadProgress: "uploadProgress", uploadError: "uploadError" }, outputs: { fileChange: "fileChange", urlChange: "urlChange", uploadCancel: "uploadCancel", delete: "delete", altTextChange: "altTextChange" }, ngImport: i0, template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <div class=\"flex-1 group relative\">\n <img\n class=\"w-full h-full object-cover border-2 border-gray-300 rounded-lg\"\n [alt]=\"altText\"\n loading=\"lazy\"\n [src]=\"previewUrl\"\n />\n <gn-ui-button\n [extraClass]=\"\n 'bg-gray-200 absolute right-2 bottom-2 invisible group-hover:visible'\n \"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined\">delete</mat-icon>\n </gn-ui-button>\n </div>\n <input\n *ngIf=\"showAltTextInput\"\n type=\"text\"\n class=\"py-3 px-2 border-2 border-gray-300 rounded-lg text-sm font-medium\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText\"\n (change)=\"handleAltTextChange($event)\"\n />\n <div class=\"flex flex-row gap-2\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">delete</mat-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">add</mat-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"block flex-1 border-2 border-dashed border-gray-300 rounded-lg p-6 flex flex-col items-center justify-center gap-4\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div class=\"w-14 h-14 rounded-md bg-gray-200 grid\">\n <mat-icon\n *ngIf=\"!dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >image</mat-icon\n >\n <mat-icon\n *ngIf=\"dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >add_box</mat-icon\n >\n <div *ngIf=\"uploadProgress\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n [mode]=\"'determinate'\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n <span\n class=\"text-sm font-medium relative inline-block width-[30px] bottom-[40px] left-[15px]\"\n >\n {{ uploadProgress }}%\n </span>\n </div>\n <mat-icon\n *ngIf=\"uploadError\"\n class=\"material-symbols-outlined place-self-center text-rose-500\"\n >broken_image</mat-icon\n >\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n uploadProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick()\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"showUrlInput || uploadProgress || uploadError\"\n />\n </label>\n <div *ngIf=\"!showUrlInput\" class=\"flex-none\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"displayUrlInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">link</mat-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n <div *ngIf=\"showUrlInput\" class=\"flex-none flex flex-col gap-2\">\n <div class=\"h-2\"></div>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex-1 flex rounded-lg\">\n <span\n class=\"material-symbols-outlined px-4 inline-flex items-center min-w-fit rounded-s-lg border-2 border-e-0 border-gray-300\"\n >link</span\n >\n <input\n type=\"text\"\n class=\"py-3 ps-1 block w-full border-2 border-s-0 border-e-0 border-gray-300 text-sm font-medium\"\n placeholder=\"https://exemple.com/image.jpg\"\n (change)=\"handleUrlChange($event)\"\n />\n <gn-ui-button\n class=\"px-1 inline-flex items-center min-w-fit rounded-e-lg border-2 border-s-0 border-gray-300 text-white\"\n [extraClass]=\"\n urlInputValue && !downloadError ? 'bg-blue-500' : 'bg-gray-500'\n \"\n [disabled]=\"!urlInputValue || downloadError\"\n (buttonClick)=\"downloadUrl()\"\n >\n <mat-icon class=\"material-symbols-outlined\">arrow_upward</mat-icon>\n </gn-ui-button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: FilesDropDirective, selector: "[gnUiFilesDrop]", outputs: ["dragFilesOver", "dropFiles"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25145
|
+
}
|
|
25146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageInputComponent, decorators: [{
|
|
25147
|
+
type: Component,
|
|
25148
|
+
args: [{ selector: 'gn-ui-image-input', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
25149
|
+
CommonModule,
|
|
25150
|
+
ButtonComponent,
|
|
25151
|
+
MatIconModule,
|
|
25152
|
+
FilesDropDirective,
|
|
25153
|
+
MatProgressSpinnerModule,
|
|
25154
|
+
TranslateModule,
|
|
25155
|
+
], template: "<ng-container *ngIf=\"previewUrl; then withImage; else withoutImage\">\n</ng-container>\n\n<ng-template #withImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <div class=\"flex-1 group relative\">\n <img\n class=\"w-full h-full object-cover border-2 border-gray-300 rounded-lg\"\n [alt]=\"altText\"\n loading=\"lazy\"\n [src]=\"previewUrl\"\n />\n <gn-ui-button\n [extraClass]=\"\n 'bg-gray-200 absolute right-2 bottom-2 invisible group-hover:visible'\n \"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined\">delete</mat-icon>\n </gn-ui-button>\n </div>\n <input\n *ngIf=\"showAltTextInput\"\n type=\"text\"\n class=\"py-3 px-2 border-2 border-gray-300 rounded-lg text-sm font-medium\"\n [placeholder]=\"'input.image.altTextPlaceholder' | translate\"\n [value]=\"altText\"\n (change)=\"handleAltTextChange($event)\"\n />\n <div class=\"flex flex-row gap-2\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"handleDelete()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">delete</mat-icon>\n {{ 'input.image.delete' | translate }}\n </gn-ui-button>\n <gn-ui-button\n *ngIf=\"!showAltTextInput\"\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"toggleAltTextInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">add</mat-icon>\n {{ 'input.image.displayAltTextInput' | translate }}\n </gn-ui-button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #withoutImage>\n <div class=\"w-full h-full flex flex-col gap-2\">\n <label\n gnUiFilesDrop\n class=\"block flex-1 border-2 border-dashed border-gray-300 rounded-lg p-6 flex flex-col items-center justify-center gap-4\"\n (dragFilesOver)=\"handleDragFilesOver($event)\"\n (dropFiles)=\"handleDropFiles($event)\"\n >\n <div class=\"w-14 h-14 rounded-md bg-gray-200 grid\">\n <mat-icon\n *ngIf=\"!dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >image</mat-icon\n >\n <mat-icon\n *ngIf=\"dragFilesOver && !uploadProgress && !uploadError\"\n class=\"material-symbols-outlined place-self-center text-blue-500\"\n >add_box</mat-icon\n >\n <div *ngIf=\"uploadProgress\">\n <mat-progress-spinner\n class=\"place-self-center\"\n [diameter]=\"56\"\n [mode]=\"'determinate'\"\n [value]=\"uploadProgress\"\n ></mat-progress-spinner>\n <span\n class=\"text-sm font-medium relative inline-block width-[30px] bottom-[40px] left-[15px]\"\n >\n {{ uploadProgress }}%\n </span>\n </div>\n <mat-icon\n *ngIf=\"uploadError\"\n class=\"material-symbols-outlined place-self-center text-rose-500\"\n >broken_image</mat-icon\n >\n </div>\n <div class=\"flex flex-col items-center gap-1\">\n <p class=\"font-medium\">{{ getPrimaryText() | translate }}</p>\n <p\n class=\"text-sm\"\n [class]=\"\n uploadProgress || uploadError\n ? 'font-bold text-blue-500 cursor-pointer'\n : 'font-medium text-gray-500'\n \"\n (click)=\"handleSecondaryTextClick()\"\n >\n {{ getSecondaryText() | translate }}\n </p>\n </div>\n <input\n type=\"file\"\n class=\"hidden\"\n (change)=\"handleFileInput($event)\"\n [disabled]=\"showUrlInput || uploadProgress || uploadError\"\n />\n </label>\n <div *ngIf=\"!showUrlInput\" class=\"flex-none\">\n <gn-ui-button\n [extraClass]=\"'bg-gray-200 font-bold'\"\n (buttonClick)=\"displayUrlInput()\"\n >\n <mat-icon class=\"material-symbols-outlined me-1\">link</mat-icon>\n {{ 'input.image.displayUrlInput' | translate }}\n </gn-ui-button>\n </div>\n <div *ngIf=\"showUrlInput\" class=\"flex-none flex flex-col gap-2\">\n <div class=\"h-2\"></div>\n <div class=\"flex gap-2 items-center\">\n <div class=\"flex-1 flex rounded-lg\">\n <span\n class=\"material-symbols-outlined px-4 inline-flex items-center min-w-fit rounded-s-lg border-2 border-e-0 border-gray-300\"\n >link</span\n >\n <input\n type=\"text\"\n class=\"py-3 ps-1 block w-full border-2 border-s-0 border-e-0 border-gray-300 text-sm font-medium\"\n placeholder=\"https://exemple.com/image.jpg\"\n (change)=\"handleUrlChange($event)\"\n />\n <gn-ui-button\n class=\"px-1 inline-flex items-center min-w-fit rounded-e-lg border-2 border-s-0 border-gray-300 text-white\"\n [extraClass]=\"\n urlInputValue && !downloadError ? 'bg-blue-500' : 'bg-gray-500'\n \"\n [disabled]=\"!urlInputValue || downloadError\"\n (buttonClick)=\"downloadUrl()\"\n >\n <mat-icon class=\"material-symbols-outlined\">arrow_upward</mat-icon>\n </gn-ui-button>\n </div>\n </div>\n </div>\n </div>\n</ng-template>\n" }]
|
|
25156
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { maxSizeMB: [{
|
|
25157
|
+
type: Input
|
|
25158
|
+
}], previewUrl: [{
|
|
25159
|
+
type: Input
|
|
25160
|
+
}], altText: [{
|
|
25161
|
+
type: Input
|
|
25162
|
+
}], uploadProgress: [{
|
|
25163
|
+
type: Input
|
|
25164
|
+
}], uploadError: [{
|
|
25165
|
+
type: Input
|
|
25166
|
+
}], fileChange: [{
|
|
25167
|
+
type: Output
|
|
25168
|
+
}], urlChange: [{
|
|
25169
|
+
type: Output
|
|
25170
|
+
}], uploadCancel: [{
|
|
25171
|
+
type: Output
|
|
25172
|
+
}], delete: [{
|
|
25173
|
+
type: Output
|
|
25174
|
+
}], altTextChange: [{
|
|
25175
|
+
type: Output
|
|
25176
|
+
}] } });
|
|
25177
|
+
|
|
24986
25178
|
class UiInputsModule {
|
|
24987
25179
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
24988
25180
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
@@ -24994,14 +25186,6 @@ class UiInputsModule {
|
|
|
24994
25186
|
StarToggleComponent,
|
|
24995
25187
|
DropdownMultiselectComponent,
|
|
24996
25188
|
ViewportIntersectorComponent,
|
|
24997
|
-
FormFieldComponent,
|
|
24998
|
-
FormFieldSimpleComponent,
|
|
24999
|
-
FormFieldArrayComponent,
|
|
25000
|
-
FormFieldObjectComponent,
|
|
25001
|
-
FormFieldRichComponent,
|
|
25002
|
-
FormFieldFileComponent,
|
|
25003
|
-
FormFieldSpatialExtentComponent,
|
|
25004
|
-
FormFieldTemporalExtentComponent,
|
|
25005
25189
|
CheckToggleComponent,
|
|
25006
25190
|
CopyTextButtonComponent,
|
|
25007
25191
|
CheckboxComponent,
|
|
@@ -25023,7 +25207,8 @@ class UiInputsModule {
|
|
|
25023
25207
|
MatNativeDateModule,
|
|
25024
25208
|
EditableLabelDirective,
|
|
25025
25209
|
TextAreaComponent,
|
|
25026
|
-
ButtonComponent
|
|
25210
|
+
ButtonComponent,
|
|
25211
|
+
ImageInputComponent], exports: [DropdownSelectorComponent,
|
|
25027
25212
|
AutocompleteComponent,
|
|
25028
25213
|
ButtonComponent,
|
|
25029
25214
|
TextInputComponent,
|
|
@@ -25034,13 +25219,13 @@ class UiInputsModule {
|
|
|
25034
25219
|
StarToggleComponent,
|
|
25035
25220
|
DropdownMultiselectComponent,
|
|
25036
25221
|
ViewportIntersectorComponent,
|
|
25037
|
-
FormFieldComponent,
|
|
25038
25222
|
CheckToggleComponent,
|
|
25039
25223
|
CopyTextButtonComponent,
|
|
25040
25224
|
CheckboxComponent,
|
|
25041
25225
|
SearchInputComponent,
|
|
25042
25226
|
DateRangePickerComponent,
|
|
25043
|
-
EditableLabelDirective
|
|
25227
|
+
EditableLabelDirective,
|
|
25228
|
+
ImageInputComponent] }); }
|
|
25044
25229
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25045
25230
|
TranslateModule.forChild(),
|
|
25046
25231
|
NgxDropzoneModule,
|
|
@@ -25057,7 +25242,8 @@ class UiInputsModule {
|
|
|
25057
25242
|
MatFormFieldModule,
|
|
25058
25243
|
MatInputModule,
|
|
25059
25244
|
MatDatepickerModule,
|
|
25060
|
-
MatNativeDateModule
|
|
25245
|
+
MatNativeDateModule,
|
|
25246
|
+
ImageInputComponent] }); }
|
|
25061
25247
|
}
|
|
25062
25248
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, decorators: [{
|
|
25063
25249
|
type: NgModule,
|
|
@@ -25072,14 +25258,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25072
25258
|
StarToggleComponent,
|
|
25073
25259
|
DropdownMultiselectComponent,
|
|
25074
25260
|
ViewportIntersectorComponent,
|
|
25075
|
-
FormFieldComponent,
|
|
25076
|
-
FormFieldSimpleComponent,
|
|
25077
|
-
FormFieldArrayComponent,
|
|
25078
|
-
FormFieldObjectComponent,
|
|
25079
|
-
FormFieldRichComponent,
|
|
25080
|
-
FormFieldFileComponent,
|
|
25081
|
-
FormFieldSpatialExtentComponent,
|
|
25082
|
-
FormFieldTemporalExtentComponent,
|
|
25083
25261
|
CheckToggleComponent,
|
|
25084
25262
|
CopyTextButtonComponent,
|
|
25085
25263
|
CheckboxComponent,
|
|
@@ -25107,6 +25285,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25107
25285
|
EditableLabelDirective,
|
|
25108
25286
|
TextAreaComponent,
|
|
25109
25287
|
ButtonComponent,
|
|
25288
|
+
ImageInputComponent,
|
|
25110
25289
|
],
|
|
25111
25290
|
exports: [
|
|
25112
25291
|
DropdownSelectorComponent,
|
|
@@ -25120,13 +25299,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25120
25299
|
StarToggleComponent,
|
|
25121
25300
|
DropdownMultiselectComponent,
|
|
25122
25301
|
ViewportIntersectorComponent,
|
|
25123
|
-
FormFieldComponent,
|
|
25124
25302
|
CheckToggleComponent,
|
|
25125
25303
|
CopyTextButtonComponent,
|
|
25126
25304
|
CheckboxComponent,
|
|
25127
25305
|
SearchInputComponent,
|
|
25128
25306
|
DateRangePickerComponent,
|
|
25129
25307
|
EditableLabelDirective,
|
|
25308
|
+
ImageInputComponent,
|
|
25130
25309
|
],
|
|
25131
25310
|
}]
|
|
25132
25311
|
}] });
|
|
@@ -25620,11 +25799,11 @@ class ThumbnailComponent {
|
|
|
25620
25799
|
}
|
|
25621
25800
|
}
|
|
25622
25801
|
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 }); }
|
|
25623
|
-
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 }); }
|
|
25802
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, isStandalone: true, 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: "ngmodule", type: CommonModule }, { 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 }); }
|
|
25624
25803
|
}
|
|
25625
25804
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
25626
25805
|
type: Component,
|
|
25627
|
-
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" }]
|
|
25806
|
+
args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], 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" }]
|
|
25628
25807
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
25629
25808
|
type: Optional
|
|
25630
25809
|
}, {
|
|
@@ -25919,44 +26098,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25919
26098
|
type: Output
|
|
25920
26099
|
}] } });
|
|
25921
26100
|
|
|
25922
|
-
class
|
|
26101
|
+
class ApiCardComponent {
|
|
25923
26102
|
constructor() {
|
|
25924
|
-
this.
|
|
25925
|
-
this.
|
|
26103
|
+
this.currentlyActive = false;
|
|
26104
|
+
this.openRecordApiForm = new EventEmitter();
|
|
25926
26105
|
}
|
|
25927
|
-
|
|
25928
|
-
this.
|
|
25929
|
-
|
|
26106
|
+
ngOnInit() {
|
|
26107
|
+
this.displayApiFormButton =
|
|
26108
|
+
this.link.accessServiceProtocol === 'ogcFeatures' ? true : false;
|
|
25930
26109
|
}
|
|
25931
|
-
|
|
25932
|
-
|
|
26110
|
+
ngOnChanges(changes) {
|
|
26111
|
+
this.currentlyActive =
|
|
26112
|
+
changes.currentLink.currentValue === this.link ? true : false;
|
|
25933
26113
|
}
|
|
25934
|
-
|
|
25935
|
-
|
|
26114
|
+
openRecordApiFormPanel() {
|
|
26115
|
+
if (this.displayApiFormButton) {
|
|
26116
|
+
this.currentlyActive = !this.currentlyActive;
|
|
26117
|
+
this.openRecordApiForm.emit(this.currentlyActive ? this.link : undefined);
|
|
26118
|
+
}
|
|
26119
|
+
}
|
|
26120
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ApiCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26121
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ApiCardComponent, selector: "gn-ui-api-card", inputs: { link: "link", currentLink: "currentLink" }, outputs: { openRecordApiForm: "openRecordApiForm" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\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: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25936
26122
|
}
|
|
25937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ApiCardComponent, decorators: [{
|
|
25938
26124
|
type: Component,
|
|
25939
|
-
args: [{ selector: 'gn-ui-
|
|
25940
|
-
}], propDecorators: {
|
|
26125
|
+
args: [{ selector: 'gn-ui-api-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex flex-col justify-between h-40 pt-5 pb-6 px-7 rounded filter overflow-hidden\"\n [ngClass]=\"{ 'cursor-pointer': displayApiFormButton }\"\n (click)=\"openRecordApiFormPanel()\"\n>\n <div\n class=\"font-title font-medium text-21 text-black text-ellipsis overflow-hidden break-words pb-5 h-[4.5rem]\"\n >\n {{ link.name || link.description }}\n </div>\n <div class=\"\">\n <div class=\"flex flex-row justify-between\">\n <span\n class=\"bg-primary-opacity-50 uppercase inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded text-primary-lightest group-hover:bg-primary transition-colors\"\n [ngClass]=\"{\n '!bg-primary': currentlyActive\n }\"\n >{{ link.accessServiceProtocol }}</span\n >\n <gn-ui-copy-text-button\n *ngIf=\"!displayApiFormButton\"\n [text]=\"link.url.toString()\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <button\n *ngIf=\"displayApiFormButton\"\n type=\"button\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"\n !currentlyActive\n ? ('record.metadata.api.form.openForm' | translate)\n : ('record.metadata.api.form.closeForm' | translate)\n \"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n [ngClass]=\"{\n 'text-secondary opacity-100': currentlyActive\n }\"\n >more_horiz</mat-icon\n >\n </button>\n </div>\n </div>\n</div>\n" }]
|
|
26126
|
+
}], propDecorators: { link: [{
|
|
25941
26127
|
type: Input
|
|
25942
|
-
}],
|
|
26128
|
+
}], currentLink: [{
|
|
25943
26129
|
type: Input
|
|
25944
|
-
}],
|
|
25945
|
-
type:
|
|
25946
|
-
args: ['contentDiv']
|
|
26130
|
+
}], openRecordApiForm: [{
|
|
26131
|
+
type: Output
|
|
25947
26132
|
}] } });
|
|
25948
26133
|
|
|
25949
|
-
class
|
|
25950
|
-
|
|
25951
|
-
|
|
26134
|
+
class AvatarComponent {
|
|
26135
|
+
hideImage() {
|
|
26136
|
+
this.avatarUrl = this.avatarPlaceholder;
|
|
25952
26137
|
}
|
|
25953
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
25954
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
26138
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26139
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AvatarComponent, selector: "gn-ui-avatar", inputs: { avatarUrl: "avatarUrl", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<img\n *ngIf=\"avatarUrl\"\n class=\"rounded-full object-cover\"\n [src]=\"avatarUrl\"\n (error)=\"hideImage()\"\n/>\n<div\n *ngIf=\"!avatarUrl\"\n class=\"w-full h-full rounded-full bg-gradient-to-tr from-primary to-slate-200\"\n></div>\n", dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25955
26140
|
}
|
|
25956
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AvatarComponent, decorators: [{
|
|
25957
26142
|
type: Component,
|
|
25958
|
-
args: [{ selector: 'gn-ui-
|
|
25959
|
-
}], propDecorators: {
|
|
26143
|
+
args: [{ selector: 'gn-ui-avatar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<img\n *ngIf=\"avatarUrl\"\n class=\"rounded-full object-cover\"\n [src]=\"avatarUrl\"\n (error)=\"hideImage()\"\n/>\n<div\n *ngIf=\"!avatarUrl\"\n class=\"w-full h-full rounded-full bg-gradient-to-tr from-primary to-slate-200\"\n></div>\n" }]
|
|
26144
|
+
}], propDecorators: { avatarUrl: [{
|
|
26145
|
+
type: Input
|
|
26146
|
+
}], avatarPlaceholder: [{
|
|
25960
26147
|
type: Input
|
|
25961
26148
|
}] } });
|
|
25962
26149
|
|
|
@@ -25976,80 +26163,183 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25976
26163
|
type: Input
|
|
25977
26164
|
}] } });
|
|
25978
26165
|
|
|
25979
|
-
|
|
25980
|
-
|
|
25981
|
-
|
|
25982
|
-
this.el = el;
|
|
25983
|
-
this.renderer = renderer;
|
|
26166
|
+
class DownloadItemComponent {
|
|
26167
|
+
constructor() {
|
|
26168
|
+
this.exportUrl = new EventEmitter();
|
|
25984
26169
|
}
|
|
25985
|
-
|
|
25986
|
-
|
|
25987
|
-
this.processLinks(this.el.nativeElement);
|
|
25988
|
-
}, 0);
|
|
26170
|
+
openUrl() {
|
|
26171
|
+
this.exportUrl.emit(this.link.url.toString());
|
|
25989
26172
|
}
|
|
25990
|
-
|
|
25991
|
-
|
|
25992
|
-
|
|
25993
|
-
|
|
25994
|
-
|
|
25995
|
-
|
|
25996
|
-
|
|
25997
|
-
|
|
25998
|
-
|
|
25999
|
-
|
|
26000
|
-
|
|
26001
|
-
|
|
26002
|
-
|
|
26003
|
-
|
|
26004
|
-
|
|
26005
|
-
|
|
26006
|
-
|
|
26007
|
-
|
|
26008
|
-
|
|
26009
|
-
|
|
26010
|
-
|
|
26011
|
-
|
|
26173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26174
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: { link: "link", color: "color", format: "format", isFromWfs: "isFromWfs" }, outputs: { exportUrl: "exportUrl" }, ngImport: i0, template: "<a\n href=\"{{ link.url }}\"\n target=\"_blank\"\n class=\"group flex justify-between card-shadow px-6 py-5 cursor-pointer\"\n rel=\"noopener\"\n>\n <div class=\"grow-1 w-full overflow-hidden\">\n <div\n class=\"text-21 text-black truncate font-title w-11/12\"\n [title]=\"link.description || link.name\"\n >\n {{ link.description || link.name }}\n </div>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"color\"\n data-cy=\"download-format\"\n >{{ format || ('downloads.format.unknown' | translate) }}</span\n >\n <span\n class=\"pl-2 inline-flex items-center text-gray-800 text-sm\"\n *ngIf=\"isFromWfs\"\n translate=\"\"\n >datahub.search.filter.generatedByWfs</span\n >\n </div>\n </div>\n <div class=\"shrink-1 w-14 flex flex-col justify-center items-center\">\n <mat-icon class=\"!w-8 !h-8 card-icon text-3xl material-symbols-outlined\">\n cloud_download\n </mat-icon>\n </div>\n</a>\n", styles: [""], dependencies: [{ 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: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26175
|
+
}
|
|
26176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadItemComponent, decorators: [{
|
|
26177
|
+
type: Component,
|
|
26178
|
+
args: [{ selector: 'gn-ui-download-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n href=\"{{ link.url }}\"\n target=\"_blank\"\n class=\"group flex justify-between card-shadow px-6 py-5 cursor-pointer\"\n rel=\"noopener\"\n>\n <div class=\"grow-1 w-full overflow-hidden\">\n <div\n class=\"text-21 text-black truncate font-title w-11/12\"\n [title]=\"link.description || link.name\"\n >\n {{ link.description || link.name }}\n </div>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"color\"\n data-cy=\"download-format\"\n >{{ format || ('downloads.format.unknown' | translate) }}</span\n >\n <span\n class=\"pl-2 inline-flex items-center text-gray-800 text-sm\"\n *ngIf=\"isFromWfs\"\n translate=\"\"\n >datahub.search.filter.generatedByWfs</span\n >\n </div>\n </div>\n <div class=\"shrink-1 w-14 flex flex-col justify-center items-center\">\n <mat-icon class=\"!w-8 !h-8 card-icon text-3xl material-symbols-outlined\">\n cloud_download\n </mat-icon>\n </div>\n</a>\n" }]
|
|
26179
|
+
}], propDecorators: { link: [{
|
|
26180
|
+
type: Input
|
|
26181
|
+
}], color: [{
|
|
26182
|
+
type: Input
|
|
26183
|
+
}], format: [{
|
|
26184
|
+
type: Input
|
|
26185
|
+
}], isFromWfs: [{
|
|
26186
|
+
type: Input
|
|
26187
|
+
}], exportUrl: [{
|
|
26188
|
+
type: Output
|
|
26189
|
+
}] } });
|
|
26190
|
+
|
|
26191
|
+
marker('datahub.search.filter.all');
|
|
26192
|
+
marker('datahub.search.filter.others');
|
|
26193
|
+
const FILTER_FORMATS = ['all', 'csv', 'excel', 'json', 'shp', 'others'];
|
|
26194
|
+
class DownloadsListComponent {
|
|
26195
|
+
constructor(translateService) {
|
|
26196
|
+
this.translateService = translateService;
|
|
26197
|
+
this.activeFilterFormats = ['all'];
|
|
26012
26198
|
}
|
|
26013
|
-
|
|
26014
|
-
|
|
26015
|
-
|
|
26199
|
+
get filteredLinks() {
|
|
26200
|
+
return this.links.filter((link) => this.activeFilterFormats.some((format) => this.isLinkOfFormat(link, format)));
|
|
26201
|
+
}
|
|
26202
|
+
get visibleFormats() {
|
|
26203
|
+
return FILTER_FORMATS.filter((format) => this.links.some((link) => this.isLinkOfFormat(link, format)));
|
|
26204
|
+
}
|
|
26205
|
+
toggleFilterFormat(format) {
|
|
26206
|
+
if (format === 'all') {
|
|
26207
|
+
this.activeFilterFormats = ['all'];
|
|
26208
|
+
return;
|
|
26209
|
+
}
|
|
26210
|
+
if (this.isFilterActive(format)) {
|
|
26211
|
+
this.activeFilterFormats = this.activeFilterFormats.filter((f) => format !== f);
|
|
26016
26212
|
}
|
|
26017
26213
|
else {
|
|
26018
|
-
|
|
26019
|
-
|
|
26020
|
-
|
|
26021
|
-
|
|
26022
|
-
|
|
26023
|
-
|
|
26024
|
-
|
|
26025
|
-
});
|
|
26026
|
-
});
|
|
26027
|
-
}
|
|
26214
|
+
this.activeFilterFormats = [
|
|
26215
|
+
...this.activeFilterFormats.filter((f) => f !== 'all'),
|
|
26216
|
+
format,
|
|
26217
|
+
];
|
|
26218
|
+
}
|
|
26219
|
+
if (this.activeFilterFormats.length === 0) {
|
|
26220
|
+
this.activeFilterFormats = ['all'];
|
|
26028
26221
|
}
|
|
26029
|
-
return displayValue;
|
|
26030
26222
|
}
|
|
26031
|
-
|
|
26032
|
-
|
|
26033
|
-
div.innerHTML = htmlContent;
|
|
26034
|
-
const fragment = document.createDocumentFragment();
|
|
26035
|
-
Array.from(div.childNodes).forEach((childNode) => {
|
|
26036
|
-
fragment.appendChild(childNode);
|
|
26037
|
-
});
|
|
26038
|
-
container.insertBefore(fragment, node);
|
|
26039
|
-
container.removeChild(node);
|
|
26223
|
+
isFilterActive(filter) {
|
|
26224
|
+
return this.activeFilterFormats.includes(filter);
|
|
26040
26225
|
}
|
|
26041
|
-
|
|
26042
|
-
|
|
26226
|
+
getFilterFormatTitle(format) {
|
|
26227
|
+
if (format === 'all' || format === 'others') {
|
|
26228
|
+
return this.translateService.instant(`datahub.search.filter.${format}`);
|
|
26229
|
+
}
|
|
26230
|
+
return format;
|
|
26043
26231
|
}
|
|
26044
|
-
|
|
26045
|
-
|
|
26232
|
+
isLinkOfFormat(link, format) {
|
|
26233
|
+
if (format === 'all') {
|
|
26234
|
+
return true;
|
|
26235
|
+
}
|
|
26236
|
+
if (getFileFormat(link) === null) {
|
|
26237
|
+
return format === 'others';
|
|
26238
|
+
}
|
|
26239
|
+
if (format === 'others') {
|
|
26240
|
+
const knownFormats = FILTER_FORMATS.filter((format) => format !== 'all' && format !== 'others');
|
|
26241
|
+
return knownFormats.every((knownFormat) => !getFileFormat(link).includes(knownFormat));
|
|
26242
|
+
}
|
|
26243
|
+
return getFileFormat(link).includes(format);
|
|
26244
|
+
}
|
|
26245
|
+
getLinkFormat(link) {
|
|
26246
|
+
return getFileFormat(link);
|
|
26247
|
+
}
|
|
26248
|
+
getLinkColor(link) {
|
|
26249
|
+
return getBadgeColor(getFileFormat(link));
|
|
26250
|
+
}
|
|
26251
|
+
isFromWfs(link) {
|
|
26252
|
+
return link.type === 'service' && link.accessServiceProtocol === 'wfs';
|
|
26253
|
+
}
|
|
26254
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26255
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26046
26256
|
}
|
|
26047
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26048
|
-
type:
|
|
26049
|
-
args: [{
|
|
26050
|
-
|
|
26051
|
-
|
|
26052
|
-
|
|
26257
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
|
|
26258
|
+
type: Component,
|
|
26259
|
+
args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
|
|
26260
|
+
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
|
|
26261
|
+
type: Input
|
|
26262
|
+
}] } });
|
|
26263
|
+
|
|
26264
|
+
class ImageOverlayPreviewComponent {
|
|
26265
|
+
constructor() {
|
|
26266
|
+
this.isPlaceholderShown = new EventEmitter();
|
|
26267
|
+
}
|
|
26268
|
+
openLightbox(src) {
|
|
26269
|
+
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
26270
|
+
}
|
|
26271
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26272
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], dependencies: [{ 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: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }] }); }
|
|
26273
|
+
}
|
|
26274
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
26275
|
+
type: Component,
|
|
26276
|
+
args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
|
|
26277
|
+
}], propDecorators: { imageUrl: [{
|
|
26278
|
+
type: Input
|
|
26279
|
+
}], isPlaceholderShown: [{
|
|
26280
|
+
type: Output
|
|
26281
|
+
}] } });
|
|
26282
|
+
|
|
26283
|
+
class LinkCardComponent {
|
|
26284
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26285
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, selector: "gn-ui-link-card", inputs: { link: "link" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group h-40 grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden lg:w-80\"\n>\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\">open_in_new</mat-icon>\n </div>\n</a>\n", styles: [""], dependencies: [{ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26286
|
+
}
|
|
26287
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, decorators: [{
|
|
26288
|
+
type: Component,
|
|
26289
|
+
args: [{ selector: 'gn-ui-link-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group h-40 grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden lg:w-80\"\n>\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\">open_in_new</mat-icon>\n </div>\n</a>\n" }]
|
|
26290
|
+
}], propDecorators: { link: [{
|
|
26291
|
+
type: Input
|
|
26292
|
+
}] } });
|
|
26293
|
+
|
|
26294
|
+
class MarkdownParserComponent {
|
|
26295
|
+
get parsedMarkdown() {
|
|
26296
|
+
return marked.parse(this.textContent);
|
|
26297
|
+
}
|
|
26298
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26299
|
+
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 }); }
|
|
26300
|
+
}
|
|
26301
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
26302
|
+
type: Component,
|
|
26303
|
+
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"] }]
|
|
26304
|
+
}], propDecorators: { textContent: [{
|
|
26305
|
+
type: Input
|
|
26306
|
+
}] } });
|
|
26307
|
+
|
|
26308
|
+
class MarkdownEditorComponent {
|
|
26309
|
+
constructor() {
|
|
26310
|
+
this.preview = false;
|
|
26311
|
+
this.textContentChanged = new EventEmitter();
|
|
26312
|
+
}
|
|
26313
|
+
textContentChangedHandler(textContent) {
|
|
26314
|
+
this.textContent = textContent;
|
|
26315
|
+
this.textContentChanged.emit(this.textContent);
|
|
26316
|
+
}
|
|
26317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26318
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownEditorComponent, isStandalone: true, selector: "gn-ui-markdown-editor", inputs: { preview: "preview", helperText: "helperText", placeholder: "placeholder", textContent: "textContent" }, outputs: { textContentChanged: "textContentChanged" }, ngImport: i0, template: "<div class=\"h-full flex flex-col\">\n <p class=\"flex-none mb-2 font-medium text-sm text-gray-900\">\n {{ helperText }}\n </p>\n <div class=\"flex-1\" [hidden]=\"preview\">\n <gn-ui-text-area\n [placeholder]=\"placeholder\"\n [value]=\"textContent\"\n (valueChange)=\"textContentChangedHandler($event)\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"flex-1 border border-gray-800 rounded overflow-y-scroll\"\n [hidden]=\"!preview\"\n >\n <gn-ui-markdown-parser [textContent]=\"textContent\"></gn-ui-markdown-parser>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26319
|
+
}
|
|
26320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownEditorComponent, decorators: [{
|
|
26321
|
+
type: Component,
|
|
26322
|
+
args: [{ selector: 'gn-ui-markdown-editor', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
26323
|
+
CommonModule,
|
|
26324
|
+
FormsModule,
|
|
26325
|
+
MatIconModule,
|
|
26326
|
+
MatTooltipModule,
|
|
26327
|
+
ButtonComponent,
|
|
26328
|
+
TextAreaComponent,
|
|
26329
|
+
MarkdownParserComponent,
|
|
26330
|
+
TranslateModule,
|
|
26331
|
+
], template: "<div class=\"h-full flex flex-col\">\n <p class=\"flex-none mb-2 font-medium text-sm text-gray-900\">\n {{ helperText }}\n </p>\n <div class=\"flex-1\" [hidden]=\"preview\">\n <gn-ui-text-area\n [placeholder]=\"placeholder\"\n [value]=\"textContent\"\n (valueChange)=\"textContentChangedHandler($event)\"\n ></gn-ui-text-area>\n </div>\n <div\n class=\"flex-1 border border-gray-800 rounded overflow-y-scroll\"\n [hidden]=\"!preview\"\n >\n <gn-ui-markdown-parser [textContent]=\"textContent\"></gn-ui-markdown-parser>\n </div>\n</div>\n" }]
|
|
26332
|
+
}], propDecorators: { preview: [{
|
|
26333
|
+
type: Input
|
|
26334
|
+
}], helperText: [{
|
|
26335
|
+
type: Input
|
|
26336
|
+
}], placeholder: [{
|
|
26337
|
+
type: Input
|
|
26338
|
+
}], textContent: [{
|
|
26339
|
+
type: Input
|
|
26340
|
+
}], textContentChanged: [{
|
|
26341
|
+
type: Output
|
|
26342
|
+
}] } });
|
|
26053
26343
|
|
|
26054
26344
|
class MaxLinesComponent {
|
|
26055
26345
|
constructor(cdr) {
|
|
@@ -26116,6 +26406,155 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26116
26406
|
args: ['container']
|
|
26117
26407
|
}] } });
|
|
26118
26408
|
|
|
26409
|
+
class MetadataCatalogComponent {
|
|
26410
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataCatalogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26411
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataCatalogComponent, selector: "gn-ui-metadata-catalog", inputs: { sourceLabel: "sourceLabel" }, ngImport: i0, template: "<div>\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.catalog\n </p>\n <p class=\"text-primary font-title text-21 mb-1\">\n {{ sourceLabel }}\n </p>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26412
|
+
}
|
|
26413
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataCatalogComponent, decorators: [{
|
|
26414
|
+
type: Component,
|
|
26415
|
+
args: [{ selector: 'gn-ui-metadata-catalog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.catalog\n </p>\n <p class=\"text-primary font-title text-21 mb-1\">\n {{ sourceLabel }}\n </p>\n</div>\n" }]
|
|
26416
|
+
}], propDecorators: { sourceLabel: [{
|
|
26417
|
+
type: Input
|
|
26418
|
+
}] } });
|
|
26419
|
+
|
|
26420
|
+
class MetadataContactComponent {
|
|
26421
|
+
constructor() {
|
|
26422
|
+
this.organizationClick = new EventEmitter();
|
|
26423
|
+
this.contactClick = new EventEmitter();
|
|
26424
|
+
}
|
|
26425
|
+
get shownOrganization() {
|
|
26426
|
+
return this.metadata.ownerOrganization;
|
|
26427
|
+
}
|
|
26428
|
+
get contacts() {
|
|
26429
|
+
return ((this.metadata.kind === 'dataset'
|
|
26430
|
+
? this.metadata.contactsForResource
|
|
26431
|
+
: this.metadata.contacts) || []);
|
|
26432
|
+
}
|
|
26433
|
+
get address() {
|
|
26434
|
+
const addressParts = this.contacts[0].address
|
|
26435
|
+
.split(',')
|
|
26436
|
+
.map((part) => part.trim());
|
|
26437
|
+
return addressParts;
|
|
26438
|
+
}
|
|
26439
|
+
onOrganizationClick() {
|
|
26440
|
+
this.organizationClick.emit(this.shownOrganization);
|
|
26441
|
+
}
|
|
26442
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26443
|
+
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 }); }
|
|
26444
|
+
}
|
|
26445
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
26446
|
+
type: Component,
|
|
26447
|
+
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" }]
|
|
26448
|
+
}], propDecorators: { metadata: [{
|
|
26449
|
+
type: Input
|
|
26450
|
+
}], organizationClick: [{
|
|
26451
|
+
type: Output
|
|
26452
|
+
}], contactClick: [{
|
|
26453
|
+
type: Output
|
|
26454
|
+
}] } });
|
|
26455
|
+
|
|
26456
|
+
class ExpandablePanelComponent {
|
|
26457
|
+
constructor() {
|
|
26458
|
+
this.collapsed = true;
|
|
26459
|
+
this.maxHeight = this.setMaxHeight();
|
|
26460
|
+
}
|
|
26461
|
+
toggle() {
|
|
26462
|
+
this.collapsed = !this.collapsed;
|
|
26463
|
+
this.maxHeight = this.setMaxHeight();
|
|
26464
|
+
}
|
|
26465
|
+
setMaxHeight() {
|
|
26466
|
+
return `${this.collapsed ? '0' : this.contentDiv.nativeElement.scrollHeight}px`;
|
|
26467
|
+
}
|
|
26468
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ExpandablePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26469
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: { title: "title", collapsed: "collapsed" }, viewQueries: [{ propertyName: "contentDiv", first: true, predicate: ["contentDiv"], descendants: true }], ngImport: i0, template: "<div\n class=\"group flex align-middle title border-b border-gray-100 cursor-pointer pt-2.5\"\n (click)=\"toggle()\"\n>\n <div class=\"grow font-medium text-black text-sm\">\n {{ title }}\n </div>\n <div\n class=\"w-8 opacity-25 text-primary group-hover:opacity-100 transition-opacity\"\n >\n <mat-icon class=\"material-symbols-outlined\" *ngIf=\"collapsed\">add</mat-icon>\n <mat-icon class=\"material-symbols-outlined\" *ngIf=\"!collapsed\"\n >remove</mat-icon\n >\n </div>\n</div>\n<div\n class=\"content overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"collapsed ? 'ease-out' : 'ease-in'\"\n [style.maxHeight]=\"maxHeight\"\n #contentDiv\n>\n <ng-content></ng-content>\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: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26470
|
+
}
|
|
26471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ExpandablePanelComponent, decorators: [{
|
|
26472
|
+
type: Component,
|
|
26473
|
+
args: [{ selector: 'gn-ui-expandable-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"group flex align-middle title border-b border-gray-100 cursor-pointer pt-2.5\"\n (click)=\"toggle()\"\n>\n <div class=\"grow font-medium text-black text-sm\">\n {{ title }}\n </div>\n <div\n class=\"w-8 opacity-25 text-primary group-hover:opacity-100 transition-opacity\"\n >\n <mat-icon class=\"material-symbols-outlined\" *ngIf=\"collapsed\">add</mat-icon>\n <mat-icon class=\"material-symbols-outlined\" *ngIf=\"!collapsed\"\n >remove</mat-icon\n >\n </div>\n</div>\n<div\n class=\"content overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"collapsed ? 'ease-out' : 'ease-in'\"\n [style.maxHeight]=\"maxHeight\"\n #contentDiv\n>\n <ng-content></ng-content>\n</div>\n" }]
|
|
26474
|
+
}], propDecorators: { title: [{
|
|
26475
|
+
type: Input
|
|
26476
|
+
}], collapsed: [{
|
|
26477
|
+
type: Input
|
|
26478
|
+
}], contentDiv: [{
|
|
26479
|
+
type: ViewChild,
|
|
26480
|
+
args: ['contentDiv']
|
|
26481
|
+
}] } });
|
|
26482
|
+
|
|
26483
|
+
/* eslint-disable @angular-eslint/directive-selector */
|
|
26484
|
+
class GnUiLinkifyDirective {
|
|
26485
|
+
constructor(el, renderer) {
|
|
26486
|
+
this.el = el;
|
|
26487
|
+
this.renderer = renderer;
|
|
26488
|
+
}
|
|
26489
|
+
ngOnInit() {
|
|
26490
|
+
setTimeout(() => {
|
|
26491
|
+
this.processLinks(this.el.nativeElement);
|
|
26492
|
+
}, 0);
|
|
26493
|
+
}
|
|
26494
|
+
processLinks(container) {
|
|
26495
|
+
const nodes = Array.from(container.childNodes);
|
|
26496
|
+
nodes.forEach((node) => {
|
|
26497
|
+
if (node instanceof Text) {
|
|
26498
|
+
const textNode = node;
|
|
26499
|
+
const linkified = this.linkifyNode(textNode.nodeValue);
|
|
26500
|
+
if (linkified) {
|
|
26501
|
+
this.createLinkElements(container, linkified, node);
|
|
26502
|
+
}
|
|
26503
|
+
}
|
|
26504
|
+
else if (node instanceof HTMLAnchorElement) {
|
|
26505
|
+
const url = node.href;
|
|
26506
|
+
const displayValue = node.innerHTML;
|
|
26507
|
+
const linkified = this.linkifyNode(displayValue, url);
|
|
26508
|
+
if (linkified) {
|
|
26509
|
+
this.createLinkElements(container, linkified, node);
|
|
26510
|
+
}
|
|
26511
|
+
}
|
|
26512
|
+
else {
|
|
26513
|
+
this.processLinks(node);
|
|
26514
|
+
}
|
|
26515
|
+
});
|
|
26516
|
+
}
|
|
26517
|
+
linkifyNode(displayValue, url) {
|
|
26518
|
+
if (url) {
|
|
26519
|
+
displayValue = this.createLink(displayValue, url);
|
|
26520
|
+
}
|
|
26521
|
+
else {
|
|
26522
|
+
const urlRegex = /\bhttps?:\/\/(?:\([^\s()]+\)|[^\s()]+)+/g;
|
|
26523
|
+
const matches = displayValue.match(urlRegex);
|
|
26524
|
+
if (matches && matches.length > 0) {
|
|
26525
|
+
matches.forEach((match) => {
|
|
26526
|
+
url = match;
|
|
26527
|
+
displayValue = displayValue.replace(match, (match) => {
|
|
26528
|
+
return this.createLink(match, url);
|
|
26529
|
+
});
|
|
26530
|
+
});
|
|
26531
|
+
}
|
|
26532
|
+
}
|
|
26533
|
+
return displayValue;
|
|
26534
|
+
}
|
|
26535
|
+
createLinkElements(container, htmlContent, node) {
|
|
26536
|
+
const div = this.renderer.createElement('div');
|
|
26537
|
+
div.innerHTML = htmlContent;
|
|
26538
|
+
const fragment = document.createDocumentFragment();
|
|
26539
|
+
Array.from(div.childNodes).forEach((childNode) => {
|
|
26540
|
+
fragment.appendChild(childNode);
|
|
26541
|
+
});
|
|
26542
|
+
container.insertBefore(fragment, node);
|
|
26543
|
+
container.removeChild(node);
|
|
26544
|
+
}
|
|
26545
|
+
createLink(displayValue, url) {
|
|
26546
|
+
return `<a href="${url}" target="_blank" class="text-primary cursor-pointer hover:underline">${displayValue} <mat-icon class="material-symbols-outlined !w-[12px] !h-[14px] !text-[14px] opacity-75">open_in_new</mat-icon></a>`;
|
|
26547
|
+
}
|
|
26548
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GnUiLinkifyDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
26549
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]", ngImport: i0 }); }
|
|
26550
|
+
}
|
|
26551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GnUiLinkifyDirective, decorators: [{
|
|
26552
|
+
type: Directive,
|
|
26553
|
+
args: [{
|
|
26554
|
+
selector: '[gnUiLinkify]',
|
|
26555
|
+
}]
|
|
26556
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; } });
|
|
26557
|
+
|
|
26119
26558
|
class MetadataInfoComponent {
|
|
26120
26559
|
constructor() {
|
|
26121
26560
|
this.keyword = new EventEmitter();
|
|
@@ -26180,7 +26619,7 @@ class MetadataInfoComponent {
|
|
|
26180
26619
|
this.keyword.emit(keyword);
|
|
26181
26620
|
}
|
|
26182
26621
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26183
|
-
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 }); }
|
|
26622
|
+
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: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { 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: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26184
26623
|
}
|
|
26185
26624
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
26186
26625
|
type: Component,
|
|
@@ -26193,210 +26632,210 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26193
26632
|
type: Output
|
|
26194
26633
|
}] } });
|
|
26195
26634
|
|
|
26196
|
-
class
|
|
26635
|
+
class PaginationButtonsComponent {
|
|
26197
26636
|
constructor() {
|
|
26198
|
-
this.
|
|
26199
|
-
|
|
26200
|
-
openUrl() {
|
|
26201
|
-
this.exportUrl.emit(this.link.url.toString());
|
|
26202
|
-
}
|
|
26203
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26204
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: { link: "link", color: "color", format: "format", isFromWfs: "isFromWfs" }, outputs: { exportUrl: "exportUrl" }, ngImport: i0, template: "<a\n href=\"{{ link.url }}\"\n target=\"_blank\"\n class=\"group flex justify-between card-shadow px-6 py-5 cursor-pointer\"\n rel=\"noopener\"\n>\n <div class=\"grow-1 w-full overflow-hidden\">\n <div\n class=\"text-21 text-black truncate font-title w-11/12\"\n [title]=\"link.description || link.name\"\n >\n {{ link.description || link.name }}\n </div>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"color\"\n data-cy=\"download-format\"\n >{{ format || ('downloads.format.unknown' | translate) }}</span\n >\n <span\n class=\"pl-2 inline-flex items-center text-gray-800 text-sm\"\n *ngIf=\"isFromWfs\"\n translate=\"\"\n >datahub.search.filter.generatedByWfs</span\n >\n </div>\n </div>\n <div class=\"shrink-1 w-14 flex flex-col justify-center items-center\">\n <mat-icon class=\"!w-8 !h-8 card-icon text-3xl material-symbols-outlined\">\n cloud_download\n </mat-icon>\n </div>\n</a>\n", styles: [""], dependencies: [{ 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: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26205
|
-
}
|
|
26206
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadItemComponent, decorators: [{
|
|
26207
|
-
type: Component,
|
|
26208
|
-
args: [{ selector: 'gn-ui-download-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n href=\"{{ link.url }}\"\n target=\"_blank\"\n class=\"group flex justify-between card-shadow px-6 py-5 cursor-pointer\"\n rel=\"noopener\"\n>\n <div class=\"grow-1 w-full overflow-hidden\">\n <div\n class=\"text-21 text-black truncate font-title w-11/12\"\n [title]=\"link.description || link.name\"\n >\n {{ link.description || link.name }}\n </div>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"color\"\n data-cy=\"download-format\"\n >{{ format || ('downloads.format.unknown' | translate) }}</span\n >\n <span\n class=\"pl-2 inline-flex items-center text-gray-800 text-sm\"\n *ngIf=\"isFromWfs\"\n translate=\"\"\n >datahub.search.filter.generatedByWfs</span\n >\n </div>\n </div>\n <div class=\"shrink-1 w-14 flex flex-col justify-center items-center\">\n <mat-icon class=\"!w-8 !h-8 card-icon text-3xl material-symbols-outlined\">\n cloud_download\n </mat-icon>\n </div>\n</a>\n" }]
|
|
26209
|
-
}], propDecorators: { link: [{
|
|
26210
|
-
type: Input
|
|
26211
|
-
}], color: [{
|
|
26212
|
-
type: Input
|
|
26213
|
-
}], format: [{
|
|
26214
|
-
type: Input
|
|
26215
|
-
}], isFromWfs: [{
|
|
26216
|
-
type: Input
|
|
26217
|
-
}], exportUrl: [{
|
|
26218
|
-
type: Output
|
|
26219
|
-
}] } });
|
|
26220
|
-
|
|
26221
|
-
marker('datahub.search.filter.all');
|
|
26222
|
-
marker('datahub.search.filter.others');
|
|
26223
|
-
const FILTER_FORMATS = ['all', 'csv', 'excel', 'json', 'shp', 'others'];
|
|
26224
|
-
class DownloadsListComponent {
|
|
26225
|
-
constructor(translateService) {
|
|
26226
|
-
this.translateService = translateService;
|
|
26227
|
-
this.activeFilterFormats = ['all'];
|
|
26228
|
-
}
|
|
26229
|
-
get filteredLinks() {
|
|
26230
|
-
return this.links.filter((link) => this.activeFilterFormats.some((format) => this.isLinkOfFormat(link, format)));
|
|
26637
|
+
this.visiblePages = [];
|
|
26638
|
+
this.newCurrentPageEvent = new EventEmitter();
|
|
26231
26639
|
}
|
|
26232
|
-
|
|
26233
|
-
|
|
26640
|
+
ngOnChanges() {
|
|
26641
|
+
this.calculateVisiblePages();
|
|
26234
26642
|
}
|
|
26235
|
-
|
|
26236
|
-
|
|
26237
|
-
|
|
26238
|
-
|
|
26239
|
-
|
|
26240
|
-
|
|
26241
|
-
|
|
26242
|
-
|
|
26243
|
-
|
|
26244
|
-
|
|
26245
|
-
|
|
26246
|
-
format,
|
|
26247
|
-
];
|
|
26643
|
+
calculateVisiblePages() {
|
|
26644
|
+
const maxVisiblePages = 5;
|
|
26645
|
+
const halfVisible = Math.floor(maxVisiblePages / 2);
|
|
26646
|
+
const startPage = Math.max(this.currentPage - halfVisible, 1);
|
|
26647
|
+
const endPage = Math.min(this.currentPage + halfVisible, this.totalPages);
|
|
26648
|
+
const visiblePages = [];
|
|
26649
|
+
if (startPage > 1) {
|
|
26650
|
+
visiblePages.push(1);
|
|
26651
|
+
if (startPage > 2) {
|
|
26652
|
+
visiblePages.push('...');
|
|
26653
|
+
}
|
|
26248
26654
|
}
|
|
26249
|
-
|
|
26250
|
-
|
|
26655
|
+
for (let page = startPage; page <= endPage; page++) {
|
|
26656
|
+
visiblePages.push(page);
|
|
26251
26657
|
}
|
|
26252
|
-
|
|
26253
|
-
|
|
26254
|
-
|
|
26255
|
-
|
|
26256
|
-
|
|
26257
|
-
if (format === 'all' || format === 'others') {
|
|
26258
|
-
return this.translateService.instant(`datahub.search.filter.${format}`);
|
|
26658
|
+
if (endPage < this.totalPages) {
|
|
26659
|
+
if (endPage < this.totalPages - 1) {
|
|
26660
|
+
visiblePages.push('...');
|
|
26661
|
+
}
|
|
26662
|
+
visiblePages.push(this.totalPages);
|
|
26259
26663
|
}
|
|
26260
|
-
|
|
26664
|
+
this.visiblePages = visiblePages;
|
|
26261
26665
|
}
|
|
26262
|
-
|
|
26263
|
-
|
|
26264
|
-
return true;
|
|
26265
|
-
}
|
|
26266
|
-
if (getFileFormat(link) === null) {
|
|
26267
|
-
return format === 'others';
|
|
26268
|
-
}
|
|
26269
|
-
if (format === 'others') {
|
|
26270
|
-
const knownFormats = FILTER_FORMATS.filter((format) => format !== 'all' && format !== 'others');
|
|
26271
|
-
return knownFormats.every((knownFormat) => !getFileFormat(link).includes(knownFormat));
|
|
26272
|
-
}
|
|
26273
|
-
return getFileFormat(link).includes(format);
|
|
26666
|
+
changePage(page) {
|
|
26667
|
+
this.setPage(page);
|
|
26274
26668
|
}
|
|
26275
|
-
|
|
26276
|
-
|
|
26669
|
+
nextPage() {
|
|
26670
|
+
this.setPage(this.currentPage + 1);
|
|
26277
26671
|
}
|
|
26278
|
-
|
|
26279
|
-
|
|
26672
|
+
previousPage() {
|
|
26673
|
+
this.setPage(this.currentPage - 1);
|
|
26280
26674
|
}
|
|
26281
|
-
|
|
26282
|
-
|
|
26675
|
+
setPage(newPage) {
|
|
26676
|
+
if (!Number.isInteger(newPage))
|
|
26677
|
+
return;
|
|
26678
|
+
this.currentPage = newPage;
|
|
26679
|
+
this.calculateVisiblePages();
|
|
26680
|
+
this.newCurrentPageEvent.emit(this.currentPage);
|
|
26283
26681
|
}
|
|
26284
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26285
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
26682
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PaginationButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26683
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PaginationButtonsComponent, selector: "gn-ui-pagination-buttons", inputs: { currentPage: "currentPage", totalPages: "totalPages" }, outputs: { newCurrentPageEvent: "newCurrentPageEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <div class=\"flex flex-row gap-[5px] items-center\">\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === 1\"\n (buttonClick)=\"previousPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_left</mat-icon>\n </gn-ui-button>\n <ng-container *ngFor=\"let page of visiblePages\">\n <ng-container *ngIf=\"page === '...'\">\n <span class=\"mx-[5px]\">{{ page }}</span>\n </ng-container>\n <ng-container *ngIf=\"page !== '...'\">\n <gn-ui-button\n [type]=\"page === currentPage ? 'primary' : 'light'\"\n [disabled]=\"page === currentPage\"\n (buttonClick)=\"changePage(page)\"\n >{{ page }}</gn-ui-button\n >\n </ng-container>\n </ng-container>\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === totalPages\"\n (buttonClick)=\"nextPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_right</mat-icon>\n </gn-ui-button>\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: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }] }); }
|
|
26286
26684
|
}
|
|
26287
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26685
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PaginationButtonsComponent, decorators: [{
|
|
26288
26686
|
type: Component,
|
|
26289
|
-
args: [{ selector: 'gn-ui-
|
|
26290
|
-
}],
|
|
26687
|
+
args: [{ selector: 'gn-ui-pagination-buttons', template: "<div class=\"relative\">\n <div class=\"flex flex-row gap-[5px] items-center\">\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === 1\"\n (buttonClick)=\"previousPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_left</mat-icon>\n </gn-ui-button>\n <ng-container *ngFor=\"let page of visiblePages\">\n <ng-container *ngIf=\"page === '...'\">\n <span class=\"mx-[5px]\">{{ page }}</span>\n </ng-container>\n <ng-container *ngIf=\"page !== '...'\">\n <gn-ui-button\n [type]=\"page === currentPage ? 'primary' : 'light'\"\n [disabled]=\"page === currentPage\"\n (buttonClick)=\"changePage(page)\"\n >{{ page }}</gn-ui-button\n >\n </ng-container>\n </ng-container>\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === totalPages\"\n (buttonClick)=\"nextPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_right</mat-icon>\n </gn-ui-button>\n </div>\n</div>\n" }]
|
|
26688
|
+
}], propDecorators: { currentPage: [{
|
|
26291
26689
|
type: Input
|
|
26690
|
+
}], totalPages: [{
|
|
26691
|
+
type: Input
|
|
26692
|
+
}], newCurrentPageEvent: [{
|
|
26693
|
+
type: Output
|
|
26292
26694
|
}] } });
|
|
26293
26695
|
|
|
26294
|
-
class
|
|
26696
|
+
class PaginationComponent {
|
|
26295
26697
|
constructor() {
|
|
26296
|
-
this.
|
|
26297
|
-
this.
|
|
26698
|
+
this.currentPage = 1;
|
|
26699
|
+
this.nPages = 1;
|
|
26700
|
+
this.hideButton = false;
|
|
26701
|
+
this.newCurrentPageEvent = new EventEmitter();
|
|
26298
26702
|
}
|
|
26299
|
-
|
|
26300
|
-
this
|
|
26301
|
-
|
|
26703
|
+
applyPageBounds() {
|
|
26704
|
+
// make sure this works with NaN inputs as well by adding `|| 1`
|
|
26705
|
+
this.nPages = Math.max(1, this.nPages || 1);
|
|
26706
|
+
this.currentPage = Math.max(1, Math.min(this.nPages, this.currentPage || 1));
|
|
26302
26707
|
}
|
|
26303
26708
|
ngOnChanges(changes) {
|
|
26304
|
-
|
|
26305
|
-
|
|
26306
|
-
|
|
26307
|
-
openRecordApiFormPanel() {
|
|
26308
|
-
if (this.displayApiFormButton) {
|
|
26309
|
-
this.currentlyActive = !this.currentlyActive;
|
|
26310
|
-
this.openRecordApiForm.emit(this.currentlyActive ? this.link : undefined);
|
|
26709
|
+
// make sure the inputs are valid
|
|
26710
|
+
if ('currentPage' in changes || 'nPages' in changes) {
|
|
26711
|
+
this.applyPageBounds();
|
|
26311
26712
|
}
|
|
26312
26713
|
}
|
|
26313
|
-
|
|
26314
|
-
|
|
26714
|
+
setPage(newPage) {
|
|
26715
|
+
if (!Number.isInteger(newPage))
|
|
26716
|
+
return;
|
|
26717
|
+
this.currentPage = newPage;
|
|
26718
|
+
this.applyPageBounds();
|
|
26719
|
+
this.newCurrentPageEvent.emit(this.currentPage);
|
|
26720
|
+
}
|
|
26721
|
+
nextPage() {
|
|
26722
|
+
this.setPage(this.currentPage + 1);
|
|
26723
|
+
}
|
|
26724
|
+
previousPage() {
|
|
26725
|
+
this.setPage(this.currentPage - 1);
|
|
26726
|
+
}
|
|
26727
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26728
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PaginationComponent, selector: "gn-ui-pagination", inputs: { currentPage: "currentPage", nPages: "nPages", hideButton: "hideButton" }, outputs: { newCurrentPageEvent: "newCurrentPageEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <div class=\"sm:absolute sm:inset-0\" *ngIf=\"!hideButton\">\n <gn-ui-button\n (buttonClick)=\"nextPage()\"\n type=\"secondary\"\n [disabled]=\"currentPage === nPages\"\n extraClass=\"lg:m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >pagination.nextPage</span\n >\n </gn-ui-button>\n </div>\n <div\n class=\"relative pointer-events-none flex flex-row justify-start sm:justify-end\"\n >\n <div class=\"pointer-events-auto flex flex-row items-center py-[13px]\">\n <span class=\"mr-3 capitalize text-sm text-gray-900\" translate\n >pagination.page</span\n >\n <input\n type=\"number\"\n [ngModel]=\"currentPage\"\n [min]=\"1\"\n [max]=\"nPages\"\n (ngModelChange)=\"setPage($event)\"\n class=\"border border-gray-300 rounded w-[54px] h-[34px] pl-[12px] mr-3 text-center\"\n />\n <span class=\"mr-3 text-sm text-gray-900\"\n ><span translate>pagination.pageOf</span> {{ nPages }}</span\n >\n <gn-ui-button\n (buttonClick)=\"previousPage()\"\n id=\"navigate_previous\"\n class=\"mr-2\"\n [disabled]=\"currentPage === 1\"\n [type]=\"'light'\"\n extraClass=\"!px-[3px]\"\n data-cy=\"prev-page\"\n >\n <mat-icon class=\"material-symbols-outlined\">navigate_before</mat-icon>\n </gn-ui-button>\n <gn-ui-button\n (buttonClick)=\"nextPage()\"\n id=\"navigate_next\"\n [disabled]=\"currentPage === nPages\"\n [type]=\"'light'\"\n extraClass=\"!px-[3px]\"\n data-cy=\"next-page\"\n >\n <mat-icon class=\"material-symbols-outlined\">navigate_next</mat-icon>\n </gn-ui-button>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ 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: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2$1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26315
26729
|
}
|
|
26316
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26730
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PaginationComponent, decorators: [{
|
|
26317
26731
|
type: Component,
|
|
26318
|
-
args: [{ selector: 'gn-ui-
|
|
26319
|
-
}], propDecorators: {
|
|
26732
|
+
args: [{ selector: 'gn-ui-pagination', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <div class=\"sm:absolute sm:inset-0\" *ngIf=\"!hideButton\">\n <gn-ui-button\n (buttonClick)=\"nextPage()\"\n type=\"secondary\"\n [disabled]=\"currentPage === nPages\"\n extraClass=\"lg:m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >pagination.nextPage</span\n >\n </gn-ui-button>\n </div>\n <div\n class=\"relative pointer-events-none flex flex-row justify-start sm:justify-end\"\n >\n <div class=\"pointer-events-auto flex flex-row items-center py-[13px]\">\n <span class=\"mr-3 capitalize text-sm text-gray-900\" translate\n >pagination.page</span\n >\n <input\n type=\"number\"\n [ngModel]=\"currentPage\"\n [min]=\"1\"\n [max]=\"nPages\"\n (ngModelChange)=\"setPage($event)\"\n class=\"border border-gray-300 rounded w-[54px] h-[34px] pl-[12px] mr-3 text-center\"\n />\n <span class=\"mr-3 text-sm text-gray-900\"\n ><span translate>pagination.pageOf</span> {{ nPages }}</span\n >\n <gn-ui-button\n (buttonClick)=\"previousPage()\"\n id=\"navigate_previous\"\n class=\"mr-2\"\n [disabled]=\"currentPage === 1\"\n [type]=\"'light'\"\n extraClass=\"!px-[3px]\"\n data-cy=\"prev-page\"\n >\n <mat-icon class=\"material-symbols-outlined\">navigate_before</mat-icon>\n </gn-ui-button>\n <gn-ui-button\n (buttonClick)=\"nextPage()\"\n id=\"navigate_next\"\n [disabled]=\"currentPage === nPages\"\n [type]=\"'light'\"\n extraClass=\"!px-[3px]\"\n data-cy=\"next-page\"\n >\n <mat-icon class=\"material-symbols-outlined\">navigate_next</mat-icon>\n </gn-ui-button>\n </div>\n </div>\n</div>\n" }]
|
|
26733
|
+
}], propDecorators: { currentPage: [{
|
|
26320
26734
|
type: Input
|
|
26321
|
-
}],
|
|
26735
|
+
}], nPages: [{
|
|
26322
26736
|
type: Input
|
|
26323
|
-
}],
|
|
26737
|
+
}], hideButton: [{
|
|
26738
|
+
type: Input
|
|
26739
|
+
}], newCurrentPageEvent: [{
|
|
26324
26740
|
type: Output
|
|
26325
26741
|
}] } });
|
|
26326
26742
|
|
|
26327
|
-
|
|
26328
|
-
|
|
26329
|
-
|
|
26330
|
-
|
|
26331
|
-
|
|
26332
|
-
|
|
26333
|
-
|
|
26334
|
-
|
|
26335
|
-
|
|
26336
|
-
|
|
26337
|
-
|
|
26338
|
-
|
|
26339
|
-
|
|
26340
|
-
|
|
26743
|
+
const DEFAULT_PARAMS = {
|
|
26744
|
+
OFFSET: '',
|
|
26745
|
+
LIMIT: '-1',
|
|
26746
|
+
FORMAT: 'json',
|
|
26747
|
+
};
|
|
26748
|
+
class RecordApiFormComponent {
|
|
26749
|
+
constructor() {
|
|
26750
|
+
this.offset$ = new BehaviorSubject('');
|
|
26751
|
+
this.limit$ = new BehaviorSubject('');
|
|
26752
|
+
this.format$ = new BehaviorSubject('');
|
|
26753
|
+
this.formatsList = [
|
|
26754
|
+
{ label: 'JSON', value: 'json' },
|
|
26755
|
+
{ label: 'CSV', value: 'csv' },
|
|
26756
|
+
];
|
|
26757
|
+
this.apiQueryUrl$ = combineLatest([this.offset$, this.limit$, this.format$]).pipe(map$2(([offset, limit, format]) => {
|
|
26758
|
+
let outputUrl;
|
|
26759
|
+
if (this.apiBaseUrl) {
|
|
26760
|
+
const url = new URL(this.apiBaseUrl);
|
|
26761
|
+
const params = { offset: offset, limit: limit, f: format };
|
|
26762
|
+
for (const [key, value] of Object.entries(params)) {
|
|
26763
|
+
if (value && value !== '0') {
|
|
26764
|
+
url.searchParams.set(key, value);
|
|
26765
|
+
}
|
|
26766
|
+
else {
|
|
26767
|
+
url.searchParams.delete(key);
|
|
26768
|
+
}
|
|
26769
|
+
}
|
|
26770
|
+
outputUrl = url.toString();
|
|
26771
|
+
}
|
|
26772
|
+
return outputUrl;
|
|
26773
|
+
}));
|
|
26774
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26775
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
26341
26776
|
}
|
|
26342
|
-
|
|
26343
|
-
this.
|
|
26344
|
-
|
|
26345
|
-
})
|
|
26346
|
-
.pipe(throttleTime(0, animationFrameScheduler, {
|
|
26347
|
-
leading: true,
|
|
26348
|
-
trailing: true,
|
|
26349
|
-
}))
|
|
26350
|
-
.subscribe(this.updateSize.bind(this));
|
|
26777
|
+
set apiLink(value) {
|
|
26778
|
+
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
26779
|
+
this.resetUrl();
|
|
26351
26780
|
}
|
|
26352
|
-
|
|
26353
|
-
this.
|
|
26354
|
-
this.placeholderEl.style.position = 'absolute';
|
|
26355
|
-
this.placeholderEl.classList.add('sticky-header-placeholder');
|
|
26356
|
-
this.hostEl.nativeElement.insertAdjacentElement('beforebegin', this.placeholderEl);
|
|
26781
|
+
setOffset(value) {
|
|
26782
|
+
this.offset$.next(value);
|
|
26357
26783
|
}
|
|
26358
|
-
|
|
26359
|
-
|
|
26784
|
+
setLimit(value) {
|
|
26785
|
+
const newLimit = value === '' ? '-1' : value;
|
|
26786
|
+
this.limit$.next(newLimit);
|
|
26360
26787
|
}
|
|
26361
|
-
|
|
26362
|
-
this.
|
|
26363
|
-
this.placeholderEl.remove();
|
|
26788
|
+
setFormat(value) {
|
|
26789
|
+
this.format$.next(String(value));
|
|
26364
26790
|
}
|
|
26365
|
-
|
|
26366
|
-
this.
|
|
26367
|
-
|
|
26368
|
-
|
|
26369
|
-
this.parentScroll = window.scrollY;
|
|
26370
|
-
const offsetTop = Math.max(0, this.parentScroll - this.placeholderEl.offsetTop);
|
|
26371
|
-
const newHeightPx = Math.max(this.minHeightPx, this.fullHeightPx - offsetTop);
|
|
26372
|
-
this.innerContainer.nativeElement.style.transform = `translate(0, ${newHeightPx - this.fullHeightPx}px)`;
|
|
26373
|
-
this.expandRatio =
|
|
26374
|
-
(newHeightPx - this.minHeightPx) /
|
|
26375
|
-
(this.fullHeightPx - this.minHeightPx);
|
|
26376
|
-
this.changeDetector.detectChanges();
|
|
26377
|
-
});
|
|
26791
|
+
resetUrl() {
|
|
26792
|
+
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
26793
|
+
this.limit$.next(DEFAULT_PARAMS.LIMIT);
|
|
26794
|
+
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
26378
26795
|
}
|
|
26379
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26380
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
26796
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26797
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26381
26798
|
}
|
|
26382
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26799
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
26383
26800
|
type: Component,
|
|
26384
|
-
args: [{ selector: 'gn-ui-
|
|
26385
|
-
}],
|
|
26386
|
-
type: Host
|
|
26387
|
-
}] }, { type: i0.NgZone }]; }, propDecorators: { minHeightPx: [{
|
|
26801
|
+
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
26802
|
+
}], propDecorators: { apiLink: [{
|
|
26388
26803
|
type: Input
|
|
26389
|
-
}]
|
|
26804
|
+
}] } });
|
|
26805
|
+
|
|
26806
|
+
class RelatedRecordCardComponent {
|
|
26807
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26808
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$7.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26809
|
+
}
|
|
26810
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
26811
|
+
type: Component,
|
|
26812
|
+
args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
|
|
26813
|
+
}], propDecorators: { record: [{
|
|
26814
|
+
type: Input
|
|
26815
|
+
}] } });
|
|
26816
|
+
|
|
26817
|
+
var ErrorType;
|
|
26818
|
+
(function (ErrorType) {
|
|
26819
|
+
ErrorType[ErrorType["COULD_NOT_REACH_API"] = 0] = "COULD_NOT_REACH_API";
|
|
26820
|
+
ErrorType[ErrorType["RECEIVED_ERROR"] = 1] = "RECEIVED_ERROR";
|
|
26821
|
+
ErrorType[ErrorType["RECORD_NOT_FOUND"] = 2] = "RECORD_NOT_FOUND";
|
|
26822
|
+
})(ErrorType || (ErrorType = {}));
|
|
26823
|
+
class SearchResultsErrorComponent {
|
|
26824
|
+
constructor() {
|
|
26825
|
+
this.types = ErrorType;
|
|
26826
|
+
}
|
|
26827
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchResultsErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26828
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div *ngIf=\"type === types.COULD_NOT_REACH_API\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.RECORD_NOT_FOUND\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"], dependencies: [{ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26829
|
+
}
|
|
26830
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchResultsErrorComponent, decorators: [{
|
|
26831
|
+
type: Component,
|
|
26832
|
+
args: [{ selector: 'gn-ui-search-results-error', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div *ngIf=\"type === types.COULD_NOT_REACH_API\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.RECORD_NOT_FOUND\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"] }]
|
|
26833
|
+
}], propDecorators: { type: [{
|
|
26834
|
+
type: Input
|
|
26835
|
+
}], error: [{
|
|
26836
|
+
type: Input
|
|
26837
|
+
}], recordId: [{
|
|
26390
26838
|
type: Input
|
|
26391
|
-
}], template: [{
|
|
26392
|
-
type: ContentChild,
|
|
26393
|
-
args: [TemplateRef]
|
|
26394
|
-
}], outerContainer: [{
|
|
26395
|
-
type: ViewChild,
|
|
26396
|
-
args: ['outerContainer']
|
|
26397
|
-
}], innerContainer: [{
|
|
26398
|
-
type: ViewChild,
|
|
26399
|
-
args: ['innerContainer']
|
|
26400
26839
|
}] } });
|
|
26401
26840
|
|
|
26402
26841
|
class AnchorLinkDirective {
|
|
@@ -26501,39 +26940,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26501
26940
|
args: ['carouselOverflowContainer']
|
|
26502
26941
|
}] } });
|
|
26503
26942
|
|
|
26504
|
-
class
|
|
26505
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26506
|
-
static { this.ɵ
|
|
26507
|
-
StickyHeaderComponent,
|
|
26508
|
-
AnchorLinkDirective,
|
|
26509
|
-
ExpandablePanelButtonComponent,
|
|
26510
|
-
CarouselComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
26511
|
-
StickyHeaderComponent,
|
|
26512
|
-
AnchorLinkDirective,
|
|
26513
|
-
ExpandablePanelButtonComponent,
|
|
26514
|
-
CarouselComponent] }); }
|
|
26515
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, imports: [CommonModule, MatIconModule, TranslateModule.forChild()] }); }
|
|
26943
|
+
class FormFieldWrapperComponent {
|
|
26944
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldWrapperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26945
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldWrapperComponent, isStandalone: true, selector: "gn-ui-form-field-wrapper", inputs: { label: "label", hint: "hint" }, ngImport: i0, template: "<div class=\"h-full flex flex-col\">\n <div class=\"flex-none w-full flex flex-row items-center\">\n <span class=\"flex-none font-bold\">{{ label }}</span>\n <div class=\"flex-1 flex justify-end items-center\">\n <ng-content select=\"[form-field-interaction]\"></ng-content>\n <span\n class=\"material-symbols-outlined m-2 icon-small\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n <div class=\"flex-1\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".icon-small{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3$1.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26516
26946
|
}
|
|
26517
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26518
|
-
type:
|
|
26519
|
-
args: [{
|
|
26520
|
-
|
|
26521
|
-
|
|
26522
|
-
|
|
26523
|
-
|
|
26524
|
-
|
|
26525
|
-
ExpandablePanelButtonComponent,
|
|
26526
|
-
CarouselComponent,
|
|
26527
|
-
],
|
|
26528
|
-
exports: [
|
|
26529
|
-
ExpandablePanelComponent,
|
|
26530
|
-
StickyHeaderComponent,
|
|
26531
|
-
AnchorLinkDirective,
|
|
26532
|
-
ExpandablePanelButtonComponent,
|
|
26533
|
-
CarouselComponent,
|
|
26534
|
-
],
|
|
26535
|
-
}]
|
|
26536
|
-
}] });
|
|
26947
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldWrapperComponent, decorators: [{
|
|
26948
|
+
type: Component,
|
|
26949
|
+
args: [{ selector: 'gn-ui-form-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [MatIconModule, MatTooltipModule], template: "<div class=\"h-full flex flex-col\">\n <div class=\"flex-none w-full flex flex-row items-center\">\n <span class=\"flex-none font-bold\">{{ label }}</span>\n <div class=\"flex-1 flex justify-end items-center\">\n <ng-content select=\"[form-field-interaction]\"></ng-content>\n <span\n class=\"material-symbols-outlined m-2 icon-small\"\n [matTooltip]=\"hint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n <div class=\"flex-1\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".icon-small{font-size:16px;height:16px;width:16px}\n"] }]
|
|
26950
|
+
}], propDecorators: { label: [{
|
|
26951
|
+
type: Input
|
|
26952
|
+
}], hint: [{
|
|
26953
|
+
type: Input
|
|
26954
|
+
}] } });
|
|
26537
26955
|
|
|
26538
26956
|
class InteractiveTableColumnComponent {
|
|
26539
26957
|
constructor() {
|
|
@@ -26598,161 +27016,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26598
27016
|
type: Output
|
|
26599
27017
|
}] } });
|
|
26600
27018
|
|
|
26601
|
-
|
|
26602
|
-
|
|
26603
|
-
|
|
26604
|
-
|
|
26605
|
-
|
|
26606
|
-
|
|
26607
|
-
|
|
26608
|
-
|
|
26609
|
-
|
|
26610
|
-
|
|
26611
|
-
|
|
26612
|
-
|
|
26613
|
-
|
|
26614
|
-
|
|
26615
|
-
}
|
|
26616
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
26617
|
-
type: Component,
|
|
26618
|
-
args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
|
|
26619
|
-
}], propDecorators: { record: [{
|
|
26620
|
-
type: Input
|
|
26621
|
-
}] } });
|
|
26622
|
-
|
|
26623
|
-
class MetadataContactComponent {
|
|
26624
|
-
constructor() {
|
|
26625
|
-
this.organizationClick = new EventEmitter();
|
|
26626
|
-
this.contactClick = new EventEmitter();
|
|
26627
|
-
}
|
|
26628
|
-
get shownOrganization() {
|
|
26629
|
-
return this.metadata.ownerOrganization;
|
|
26630
|
-
}
|
|
26631
|
-
get contacts() {
|
|
26632
|
-
return ((this.metadata.kind === 'dataset'
|
|
26633
|
-
? this.metadata.contactsForResource
|
|
26634
|
-
: this.metadata.contacts) || []);
|
|
26635
|
-
}
|
|
26636
|
-
get address() {
|
|
26637
|
-
const addressParts = this.contacts[0].address
|
|
26638
|
-
.split(',')
|
|
26639
|
-
.map((part) => part.trim());
|
|
26640
|
-
return addressParts;
|
|
26641
|
-
}
|
|
26642
|
-
onOrganizationClick() {
|
|
26643
|
-
this.organizationClick.emit(this.shownOrganization);
|
|
26644
|
-
}
|
|
26645
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26646
|
-
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 }); }
|
|
26647
|
-
}
|
|
26648
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
26649
|
-
type: Component,
|
|
26650
|
-
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" }]
|
|
26651
|
-
}], propDecorators: { metadata: [{
|
|
26652
|
-
type: Input
|
|
26653
|
-
}], organizationClick: [{
|
|
26654
|
-
type: Output
|
|
26655
|
-
}], contactClick: [{
|
|
26656
|
-
type: Output
|
|
26657
|
-
}] } });
|
|
26658
|
-
|
|
26659
|
-
class MetadataCatalogComponent {
|
|
26660
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataCatalogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26661
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataCatalogComponent, selector: "gn-ui-metadata-catalog", inputs: { sourceLabel: "sourceLabel" }, ngImport: i0, template: "<div>\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.catalog\n </p>\n <p class=\"text-primary font-title text-21 mb-1\">\n {{ sourceLabel }}\n </p>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26662
|
-
}
|
|
26663
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataCatalogComponent, decorators: [{
|
|
26664
|
-
type: Component,
|
|
26665
|
-
args: [{ selector: 'gn-ui-metadata-catalog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.catalog\n </p>\n <p class=\"text-primary font-title text-21 mb-1\">\n {{ sourceLabel }}\n </p>\n</div>\n" }]
|
|
26666
|
-
}], propDecorators: { sourceLabel: [{
|
|
26667
|
-
type: Input
|
|
26668
|
-
}] } });
|
|
26669
|
-
|
|
26670
|
-
var ErrorType;
|
|
26671
|
-
(function (ErrorType) {
|
|
26672
|
-
ErrorType[ErrorType["COULD_NOT_REACH_API"] = 0] = "COULD_NOT_REACH_API";
|
|
26673
|
-
ErrorType[ErrorType["RECEIVED_ERROR"] = 1] = "RECEIVED_ERROR";
|
|
26674
|
-
ErrorType[ErrorType["RECORD_NOT_FOUND"] = 2] = "RECORD_NOT_FOUND";
|
|
26675
|
-
})(ErrorType || (ErrorType = {}));
|
|
26676
|
-
class SearchResultsErrorComponent {
|
|
26677
|
-
constructor() {
|
|
26678
|
-
this.types = ErrorType;
|
|
26679
|
-
}
|
|
26680
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchResultsErrorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26681
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: { type: "type", error: "error", recordId: "recordId" }, ngImport: i0, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div *ngIf=\"type === types.COULD_NOT_REACH_API\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.RECORD_NOT_FOUND\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"], dependencies: [{ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26682
|
-
}
|
|
26683
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchResultsErrorComponent, decorators: [{
|
|
26684
|
-
type: Component,
|
|
26685
|
-
args: [{ selector: 'gn-ui-search-results-error', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"p-[1.7em] bg-red-50 text-red-800 text-[1.5em] text-center rounded-lg\"\n>\n <div *ngIf=\"type === types.COULD_NOT_REACH_API\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">face</mat-icon>\n <mat-icon class=\"material-symbols-outlined question-mark1\"\n >question_mark</mat-icon\n >\n <mat-icon class=\"material-symbols-outlined question-mark2\"\n >question_mark</mat-icon\n >\n </div>\n <div translate>search.error.couldNotReachApi</div>\n </div>\n <div *ngIf=\"type === types.RECEIVED_ERROR\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined face\">mood_bad</mat-icon>\n </div>\n <div translate>search.error.receivedError</div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n <div *ngIf=\"type === types.RECORD_NOT_FOUND\">\n <div class=\"relative opacity-40\">\n <mat-icon class=\"material-symbols-outlined computer\">computer</mat-icon>\n <mat-icon class=\"material-symbols-outlined computer-question-mark\"\n >question_mark</mat-icon\n >\n </div>\n <div translate [translateParams]=\"{ id: recordId }\">\n search.error.recordNotFound\n </div>\n <div *ngIf=\"error\">{{ error }}</div>\n </div>\n</div>\n", styles: ["mat-icon{width:auto;height:auto}mat-icon.face{font-size:3em}mat-icon.question-mark1{position:absolute;bottom:1.1em;left:calc(50% + .7em);font-size:1.7em}mat-icon.question-mark2{position:absolute;bottom:1.6em;left:calc(50% + 1.6em);font-size:1.4em}.computer{font-size:3em}.computer-question-mark{position:absolute;top:.6em;left:calc(50% - .5em);font-size:1.2em}\n"] }]
|
|
26686
|
-
}], propDecorators: { type: [{
|
|
26687
|
-
type: Input
|
|
26688
|
-
}], error: [{
|
|
26689
|
-
type: Input
|
|
26690
|
-
}], recordId: [{
|
|
26691
|
-
type: Input
|
|
26692
|
-
}] } });
|
|
26693
|
-
|
|
26694
|
-
class PaginationComponent {
|
|
26695
|
-
constructor() {
|
|
26696
|
-
this.currentPage = 1;
|
|
26697
|
-
this.nPages = 1;
|
|
26698
|
-
this.hideButton = false;
|
|
26699
|
-
this.newCurrentPageEvent = new EventEmitter();
|
|
27019
|
+
/**
|
|
27020
|
+
* This component will make a block that will stay sticky on the top of the page,
|
|
27021
|
+
* but will also shrink down to a minimum height when scrolling.
|
|
27022
|
+
* The ratio between minimum and nominal height is stored in the shrinkRatio
|
|
27023
|
+
* property, and can be used to change e.g. the opacity or size of child elements.
|
|
27024
|
+
* This component renders at z-index: 50 by default.
|
|
27025
|
+
* The first parent element with an overflow of `scroll` or `overflow` is considered
|
|
27026
|
+
* for scroll events.
|
|
27027
|
+
*/
|
|
27028
|
+
class StickyHeaderComponent {
|
|
27029
|
+
constructor(changeDetector, hostEl, zone) {
|
|
27030
|
+
this.changeDetector = changeDetector;
|
|
27031
|
+
this.hostEl = hostEl;
|
|
27032
|
+
this.zone = zone;
|
|
26700
27033
|
}
|
|
26701
|
-
|
|
26702
|
-
|
|
26703
|
-
|
|
26704
|
-
|
|
27034
|
+
ngAfterViewInit() {
|
|
27035
|
+
this.scrollSub = fromEvent(window, 'scroll', {
|
|
27036
|
+
passive: true,
|
|
27037
|
+
})
|
|
27038
|
+
.pipe(throttleTime(0, animationFrameScheduler, {
|
|
27039
|
+
leading: true,
|
|
27040
|
+
trailing: true,
|
|
27041
|
+
}))
|
|
27042
|
+
.subscribe(this.updateSize.bind(this));
|
|
26705
27043
|
}
|
|
26706
|
-
|
|
26707
|
-
|
|
26708
|
-
|
|
26709
|
-
|
|
26710
|
-
|
|
27044
|
+
ngOnInit() {
|
|
27045
|
+
this.placeholderEl = document.createElement('div');
|
|
27046
|
+
this.placeholderEl.style.position = 'absolute';
|
|
27047
|
+
this.placeholderEl.classList.add('sticky-header-placeholder');
|
|
27048
|
+
this.hostEl.nativeElement.insertAdjacentElement('beforebegin', this.placeholderEl);
|
|
26711
27049
|
}
|
|
26712
|
-
|
|
26713
|
-
|
|
26714
|
-
return;
|
|
26715
|
-
this.currentPage = newPage;
|
|
26716
|
-
this.applyPageBounds();
|
|
26717
|
-
this.newCurrentPageEvent.emit(this.currentPage);
|
|
27050
|
+
ngAfterViewChecked() {
|
|
27051
|
+
this.updateSize();
|
|
26718
27052
|
}
|
|
26719
|
-
|
|
26720
|
-
this.
|
|
27053
|
+
ngOnDestroy() {
|
|
27054
|
+
this.scrollSub.unsubscribe();
|
|
27055
|
+
this.placeholderEl.remove();
|
|
26721
27056
|
}
|
|
26722
|
-
|
|
26723
|
-
this.
|
|
27057
|
+
updateSize() {
|
|
27058
|
+
this.zone.runOutsideAngular(() => {
|
|
27059
|
+
if (window.scrollY === this.parentScroll)
|
|
27060
|
+
return;
|
|
27061
|
+
this.parentScroll = window.scrollY;
|
|
27062
|
+
const offsetTop = Math.max(0, this.parentScroll - this.placeholderEl.offsetTop);
|
|
27063
|
+
const newHeightPx = Math.max(this.minHeightPx, this.fullHeightPx - offsetTop);
|
|
27064
|
+
this.innerContainer.nativeElement.style.transform = `translate(0, ${newHeightPx - this.fullHeightPx}px)`;
|
|
27065
|
+
this.expandRatio =
|
|
27066
|
+
(newHeightPx - this.minHeightPx) /
|
|
27067
|
+
(this.fullHeightPx - this.minHeightPx);
|
|
27068
|
+
this.changeDetector.detectChanges();
|
|
27069
|
+
});
|
|
26724
27070
|
}
|
|
26725
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26726
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type:
|
|
27071
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StickyHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef, host: true }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27072
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StickyHeaderComponent, selector: "gn-ui-sticky-header", inputs: { minHeightPx: "minHeightPx", fullHeightPx: "fullHeightPx" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], viewQueries: [{ propertyName: "outerContainer", first: true, predicate: ["outerContainer"], descendants: true }, { propertyName: "innerContainer", first: true, predicate: ["innerContainer"], descendants: true }], ngImport: i0, template: "<div\n #outerContainer\n class=\"sticky pointer-events-none z-50 top-0\"\n [style.height]=\"fullHeightPx + 'px'\"\n>\n <div\n #innerContainer\n class=\"relative pointer-events-auto\"\n [style.height]=\"fullHeightPx + 'px'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{ $implicit: expandRatio }\"\n ></ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26727
27073
|
}
|
|
26728
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
27074
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StickyHeaderComponent, decorators: [{
|
|
26729
27075
|
type: Component,
|
|
26730
|
-
args: [{ selector: 'gn-ui-
|
|
26731
|
-
}],
|
|
26732
|
-
|
|
26733
|
-
|
|
27076
|
+
args: [{ selector: 'gn-ui-sticky-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #outerContainer\n class=\"sticky pointer-events-none z-50 top-0\"\n [style.height]=\"fullHeightPx + 'px'\"\n>\n <div\n #innerContainer\n class=\"relative pointer-events-auto\"\n [style.height]=\"fullHeightPx + 'px'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{ $implicit: expandRatio }\"\n ></ng-container>\n </div>\n</div>\n" }]
|
|
27077
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef, decorators: [{
|
|
27078
|
+
type: Host
|
|
27079
|
+
}] }, { type: i0.NgZone }]; }, propDecorators: { minHeightPx: [{
|
|
26734
27080
|
type: Input
|
|
26735
|
-
}],
|
|
27081
|
+
}], fullHeightPx: [{
|
|
26736
27082
|
type: Input
|
|
26737
|
-
}],
|
|
26738
|
-
type:
|
|
27083
|
+
}], template: [{
|
|
27084
|
+
type: ContentChild,
|
|
27085
|
+
args: [TemplateRef]
|
|
27086
|
+
}], outerContainer: [{
|
|
27087
|
+
type: ViewChild,
|
|
27088
|
+
args: ['outerContainer']
|
|
27089
|
+
}], innerContainer: [{
|
|
27090
|
+
type: ViewChild,
|
|
27091
|
+
args: ['innerContainer']
|
|
26739
27092
|
}] } });
|
|
26740
27093
|
|
|
26741
|
-
class
|
|
26742
|
-
|
|
26743
|
-
|
|
26744
|
-
|
|
26745
|
-
|
|
26746
|
-
|
|
27094
|
+
class UiLayoutModule {
|
|
27095
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
27096
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, declarations: [ExpandablePanelComponent,
|
|
27097
|
+
StickyHeaderComponent,
|
|
27098
|
+
AnchorLinkDirective,
|
|
27099
|
+
ExpandablePanelButtonComponent,
|
|
27100
|
+
CarouselComponent], imports: [CommonModule, MatIconModule, i1$1.TranslateModule], exports: [ExpandablePanelComponent,
|
|
27101
|
+
StickyHeaderComponent,
|
|
27102
|
+
AnchorLinkDirective,
|
|
27103
|
+
ExpandablePanelButtonComponent,
|
|
27104
|
+
CarouselComponent] }); }
|
|
27105
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, imports: [CommonModule, MatIconModule, TranslateModule.forChild()] }); }
|
|
26747
27106
|
}
|
|
26748
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type:
|
|
26749
|
-
type:
|
|
26750
|
-
args: [{
|
|
26751
|
-
|
|
26752
|
-
|
|
26753
|
-
|
|
26754
|
-
|
|
26755
|
-
|
|
27107
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiLayoutModule, decorators: [{
|
|
27108
|
+
type: NgModule,
|
|
27109
|
+
args: [{
|
|
27110
|
+
imports: [CommonModule, MatIconModule, TranslateModule.forChild()],
|
|
27111
|
+
declarations: [
|
|
27112
|
+
ExpandablePanelComponent,
|
|
27113
|
+
StickyHeaderComponent,
|
|
27114
|
+
AnchorLinkDirective,
|
|
27115
|
+
ExpandablePanelButtonComponent,
|
|
27116
|
+
CarouselComponent,
|
|
27117
|
+
],
|
|
27118
|
+
exports: [
|
|
27119
|
+
ExpandablePanelComponent,
|
|
27120
|
+
StickyHeaderComponent,
|
|
27121
|
+
AnchorLinkDirective,
|
|
27122
|
+
ExpandablePanelButtonComponent,
|
|
27123
|
+
CarouselComponent,
|
|
27124
|
+
],
|
|
27125
|
+
}]
|
|
27126
|
+
}] });
|
|
26756
27127
|
|
|
26757
27128
|
class UserPreviewComponent {
|
|
26758
27129
|
get userFullName() {
|
|
@@ -26770,149 +27141,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26770
27141
|
type: Input
|
|
26771
27142
|
}] } });
|
|
26772
27143
|
|
|
26773
|
-
class PaginationButtonsComponent {
|
|
26774
|
-
constructor() {
|
|
26775
|
-
this.visiblePages = [];
|
|
26776
|
-
this.newCurrentPageEvent = new EventEmitter();
|
|
26777
|
-
}
|
|
26778
|
-
ngOnChanges() {
|
|
26779
|
-
this.calculateVisiblePages();
|
|
26780
|
-
}
|
|
26781
|
-
calculateVisiblePages() {
|
|
26782
|
-
const maxVisiblePages = 5;
|
|
26783
|
-
const halfVisible = Math.floor(maxVisiblePages / 2);
|
|
26784
|
-
const startPage = Math.max(this.currentPage - halfVisible, 1);
|
|
26785
|
-
const endPage = Math.min(this.currentPage + halfVisible, this.totalPages);
|
|
26786
|
-
const visiblePages = [];
|
|
26787
|
-
if (startPage > 1) {
|
|
26788
|
-
visiblePages.push(1);
|
|
26789
|
-
if (startPage > 2) {
|
|
26790
|
-
visiblePages.push('...');
|
|
26791
|
-
}
|
|
26792
|
-
}
|
|
26793
|
-
for (let page = startPage; page <= endPage; page++) {
|
|
26794
|
-
visiblePages.push(page);
|
|
26795
|
-
}
|
|
26796
|
-
if (endPage < this.totalPages) {
|
|
26797
|
-
if (endPage < this.totalPages - 1) {
|
|
26798
|
-
visiblePages.push('...');
|
|
26799
|
-
}
|
|
26800
|
-
visiblePages.push(this.totalPages);
|
|
26801
|
-
}
|
|
26802
|
-
this.visiblePages = visiblePages;
|
|
26803
|
-
}
|
|
26804
|
-
changePage(page) {
|
|
26805
|
-
this.setPage(page);
|
|
26806
|
-
}
|
|
26807
|
-
nextPage() {
|
|
26808
|
-
this.setPage(this.currentPage + 1);
|
|
26809
|
-
}
|
|
26810
|
-
previousPage() {
|
|
26811
|
-
this.setPage(this.currentPage - 1);
|
|
26812
|
-
}
|
|
26813
|
-
setPage(newPage) {
|
|
26814
|
-
if (!Number.isInteger(newPage))
|
|
26815
|
-
return;
|
|
26816
|
-
this.currentPage = newPage;
|
|
26817
|
-
this.calculateVisiblePages();
|
|
26818
|
-
this.newCurrentPageEvent.emit(this.currentPage);
|
|
26819
|
-
}
|
|
26820
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PaginationButtonsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26821
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: PaginationButtonsComponent, selector: "gn-ui-pagination-buttons", inputs: { currentPage: "currentPage", totalPages: "totalPages" }, outputs: { newCurrentPageEvent: "newCurrentPageEvent" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <div class=\"flex flex-row gap-[5px] items-center\">\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === 1\"\n (buttonClick)=\"previousPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_left</mat-icon>\n </gn-ui-button>\n <ng-container *ngFor=\"let page of visiblePages\">\n <ng-container *ngIf=\"page === '...'\">\n <span class=\"mx-[5px]\">{{ page }}</span>\n </ng-container>\n <ng-container *ngIf=\"page !== '...'\">\n <gn-ui-button\n [type]=\"page === currentPage ? 'primary' : 'light'\"\n [disabled]=\"page === currentPage\"\n (buttonClick)=\"changePage(page)\"\n >{{ page }}</gn-ui-button\n >\n </ng-container>\n </ng-container>\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === totalPages\"\n (buttonClick)=\"nextPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_right</mat-icon>\n </gn-ui-button>\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: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }] }); }
|
|
26822
|
-
}
|
|
26823
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: PaginationButtonsComponent, decorators: [{
|
|
26824
|
-
type: Component,
|
|
26825
|
-
args: [{ selector: 'gn-ui-pagination-buttons', template: "<div class=\"relative\">\n <div class=\"flex flex-row gap-[5px] items-center\">\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === 1\"\n (buttonClick)=\"previousPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_left</mat-icon>\n </gn-ui-button>\n <ng-container *ngFor=\"let page of visiblePages\">\n <ng-container *ngIf=\"page === '...'\">\n <span class=\"mx-[5px]\">{{ page }}</span>\n </ng-container>\n <ng-container *ngIf=\"page !== '...'\">\n <gn-ui-button\n [type]=\"page === currentPage ? 'primary' : 'light'\"\n [disabled]=\"page === currentPage\"\n (buttonClick)=\"changePage(page)\"\n >{{ page }}</gn-ui-button\n >\n </ng-container>\n </ng-container>\n <gn-ui-button\n type=\"light\"\n [disabled]=\"currentPage === totalPages\"\n (buttonClick)=\"nextPage()\"\n extraClass=\"!px-[3px]\"\n >\n <mat-icon class=\"material-symbols-outlined\">chevron_right</mat-icon>\n </gn-ui-button>\n </div>\n</div>\n" }]
|
|
26826
|
-
}], propDecorators: { currentPage: [{
|
|
26827
|
-
type: Input
|
|
26828
|
-
}], totalPages: [{
|
|
26829
|
-
type: Input
|
|
26830
|
-
}], newCurrentPageEvent: [{
|
|
26831
|
-
type: Output
|
|
26832
|
-
}] } });
|
|
26833
|
-
|
|
26834
|
-
const DEFAULT_PARAMS = {
|
|
26835
|
-
OFFSET: '',
|
|
26836
|
-
LIMIT: '-1',
|
|
26837
|
-
FORMAT: 'json',
|
|
26838
|
-
};
|
|
26839
|
-
class RecordApiFormComponent {
|
|
26840
|
-
constructor() {
|
|
26841
|
-
this.offset$ = new BehaviorSubject('');
|
|
26842
|
-
this.limit$ = new BehaviorSubject('');
|
|
26843
|
-
this.format$ = new BehaviorSubject('');
|
|
26844
|
-
this.formatsList = [
|
|
26845
|
-
{ label: 'JSON', value: 'json' },
|
|
26846
|
-
{ label: 'CSV', value: 'csv' },
|
|
26847
|
-
];
|
|
26848
|
-
this.apiQueryUrl$ = combineLatest([this.offset$, this.limit$, this.format$]).pipe(map$2(([offset, limit, format]) => {
|
|
26849
|
-
let outputUrl;
|
|
26850
|
-
if (this.apiBaseUrl) {
|
|
26851
|
-
const url = new URL(this.apiBaseUrl);
|
|
26852
|
-
const params = { offset: offset, limit: limit, f: format };
|
|
26853
|
-
for (const [key, value] of Object.entries(params)) {
|
|
26854
|
-
if (value && value !== '0') {
|
|
26855
|
-
url.searchParams.set(key, value);
|
|
26856
|
-
}
|
|
26857
|
-
else {
|
|
26858
|
-
url.searchParams.delete(key);
|
|
26859
|
-
}
|
|
26860
|
-
}
|
|
26861
|
-
outputUrl = url.toString();
|
|
26862
|
-
}
|
|
26863
|
-
return outputUrl;
|
|
26864
|
-
}));
|
|
26865
|
-
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26866
|
-
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
26867
|
-
}
|
|
26868
|
-
set apiLink(value) {
|
|
26869
|
-
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
26870
|
-
this.resetUrl();
|
|
26871
|
-
}
|
|
26872
|
-
setOffset(value) {
|
|
26873
|
-
this.offset$.next(value);
|
|
26874
|
-
}
|
|
26875
|
-
setLimit(value) {
|
|
26876
|
-
const newLimit = value === '' ? '-1' : value;
|
|
26877
|
-
this.limit$.next(newLimit);
|
|
26878
|
-
}
|
|
26879
|
-
setFormat(value) {
|
|
26880
|
-
this.format$.next(String(value));
|
|
26881
|
-
}
|
|
26882
|
-
resetUrl() {
|
|
26883
|
-
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
26884
|
-
this.limit$.next(DEFAULT_PARAMS.LIMIT);
|
|
26885
|
-
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
26886
|
-
}
|
|
26887
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26888
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26889
|
-
}
|
|
26890
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
26891
|
-
type: Component,
|
|
26892
|
-
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
26893
|
-
}], propDecorators: { apiLink: [{
|
|
26894
|
-
type: Input
|
|
26895
|
-
}] } });
|
|
26896
|
-
|
|
26897
|
-
class ImageOverlayPreviewComponent {
|
|
26898
|
-
constructor() {
|
|
26899
|
-
this.isPlaceholderShown = new EventEmitter();
|
|
26900
|
-
}
|
|
26901
|
-
openLightbox(src) {
|
|
26902
|
-
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
26903
|
-
}
|
|
26904
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26905
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], dependencies: [{ 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: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { 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"] }] }); }
|
|
26906
|
-
}
|
|
26907
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
26908
|
-
type: Component,
|
|
26909
|
-
args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
|
|
26910
|
-
}], propDecorators: { imageUrl: [{
|
|
26911
|
-
type: Input
|
|
26912
|
-
}], isPlaceholderShown: [{
|
|
26913
|
-
type: Output
|
|
26914
|
-
}] } });
|
|
26915
|
-
|
|
26916
27144
|
class UiElementsModule {
|
|
26917
27145
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26918
27146
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -26928,7 +27156,6 @@ class UiElementsModule {
|
|
|
26928
27156
|
MetadataQualityItemComponent,
|
|
26929
27157
|
SearchResultsErrorComponent,
|
|
26930
27158
|
PaginationComponent,
|
|
26931
|
-
ThumbnailComponent,
|
|
26932
27159
|
AvatarComponent,
|
|
26933
27160
|
UserPreviewComponent,
|
|
26934
27161
|
GnUiLinkifyDirective,
|
|
@@ -26944,7 +27171,8 @@ class UiElementsModule {
|
|
|
26944
27171
|
UiInputsModule,
|
|
26945
27172
|
FormsModule,
|
|
26946
27173
|
NgOptimizedImage,
|
|
26947
|
-
MarkdownParserComponent
|
|
27174
|
+
MarkdownParserComponent,
|
|
27175
|
+
ThumbnailComponent], exports: [MetadataInfoComponent,
|
|
26948
27176
|
ContentGhostComponent,
|
|
26949
27177
|
DownloadItemComponent,
|
|
26950
27178
|
DownloadsListComponent,
|
|
@@ -26974,7 +27202,8 @@ class UiElementsModule {
|
|
|
26974
27202
|
UtilSharedModule,
|
|
26975
27203
|
RouterModule,
|
|
26976
27204
|
UiInputsModule,
|
|
26977
|
-
FormsModule
|
|
27205
|
+
FormsModule,
|
|
27206
|
+
ThumbnailComponent] }); }
|
|
26978
27207
|
}
|
|
26979
27208
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, decorators: [{
|
|
26980
27209
|
type: NgModule,
|
|
@@ -26992,6 +27221,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26992
27221
|
FormsModule,
|
|
26993
27222
|
NgOptimizedImage,
|
|
26994
27223
|
MarkdownParserComponent,
|
|
27224
|
+
ThumbnailComponent,
|
|
26995
27225
|
],
|
|
26996
27226
|
declarations: [
|
|
26997
27227
|
MetadataInfoComponent,
|
|
@@ -27007,7 +27237,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27007
27237
|
MetadataQualityItemComponent,
|
|
27008
27238
|
SearchResultsErrorComponent,
|
|
27009
27239
|
PaginationComponent,
|
|
27010
|
-
ThumbnailComponent,
|
|
27011
27240
|
AvatarComponent,
|
|
27012
27241
|
UserPreviewComponent,
|
|
27013
27242
|
GnUiLinkifyDirective,
|
|
@@ -31092,7 +31321,7 @@ class DataService {
|
|
|
31092
31321
|
}), {}),
|
|
31093
31322
|
geojson: endpoint.supportsJson(featureType.name)
|
|
31094
31323
|
? endpoint.getFeatureUrl(featureType.name, {
|
|
31095
|
-
|
|
31324
|
+
asJson: true,
|
|
31096
31325
|
outputCrs: 'EPSG:4326',
|
|
31097
31326
|
})
|
|
31098
31327
|
: null,
|
|
@@ -32428,6 +32657,99 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32428
32657
|
type: Injectable
|
|
32429
32658
|
}] });
|
|
32430
32659
|
|
|
32660
|
+
function evaluate(expression) {
|
|
32661
|
+
if (expression.match(/^\${.*}$/)) {
|
|
32662
|
+
return evaluate(expression.slice(2, -1));
|
|
32663
|
+
}
|
|
32664
|
+
const operator = expression.split('(')[0];
|
|
32665
|
+
switch (operator) {
|
|
32666
|
+
case 'dateNow':
|
|
32667
|
+
return () => new Date();
|
|
32668
|
+
default:
|
|
32669
|
+
throw new Error(`Unknown operator: ${operator}`);
|
|
32670
|
+
}
|
|
32671
|
+
}
|
|
32672
|
+
|
|
32673
|
+
class EditorService {
|
|
32674
|
+
constructor(http, apiConfiguration) {
|
|
32675
|
+
this.http = http;
|
|
32676
|
+
this.apiConfiguration = apiConfiguration;
|
|
32677
|
+
this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
|
|
32678
|
+
}
|
|
32679
|
+
// TODO: use the catalog repository instead
|
|
32680
|
+
loadRecordByUuid(uuid) {
|
|
32681
|
+
return this.http
|
|
32682
|
+
.get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
|
|
32683
|
+
responseType: 'text',
|
|
32684
|
+
headers: {
|
|
32685
|
+
Accept: 'application/xml',
|
|
32686
|
+
},
|
|
32687
|
+
})
|
|
32688
|
+
.pipe(switchMap$1((response) => findConverterForDocument(response).readRecord(response.toString())));
|
|
32689
|
+
}
|
|
32690
|
+
// returns the record as it was when saved
|
|
32691
|
+
saveRecord(record, fieldsConfig) {
|
|
32692
|
+
const savedRecord = { ...record };
|
|
32693
|
+
// run onSave processes
|
|
32694
|
+
for (const field of fieldsConfig) {
|
|
32695
|
+
if (field.onSaveProcess && field.model) {
|
|
32696
|
+
const evaluator = evaluate(field.onSaveProcess);
|
|
32697
|
+
savedRecord[field.model] = evaluator({
|
|
32698
|
+
config: field,
|
|
32699
|
+
value: record[field.model],
|
|
32700
|
+
});
|
|
32701
|
+
}
|
|
32702
|
+
}
|
|
32703
|
+
// TODO: use the catalog repository instead
|
|
32704
|
+
// TODO: use converter based on the format of the record before change
|
|
32705
|
+
return from(new Iso19139Converter().writeRecord(savedRecord)).pipe(switchMap$1((recordXml) => this.http.put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, recordXml, {
|
|
32706
|
+
headers: {
|
|
32707
|
+
'Content-Type': 'application/xml',
|
|
32708
|
+
},
|
|
32709
|
+
withCredentials: true,
|
|
32710
|
+
})), map$1(() => savedRecord));
|
|
32711
|
+
}
|
|
32712
|
+
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 }); }
|
|
32713
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
|
|
32714
|
+
}
|
|
32715
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
|
|
32716
|
+
type: Injectable,
|
|
32717
|
+
args: [{
|
|
32718
|
+
providedIn: 'root',
|
|
32719
|
+
}]
|
|
32720
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
|
|
32721
|
+
type: Optional
|
|
32722
|
+
}, {
|
|
32723
|
+
type: Inject,
|
|
32724
|
+
args: [Configuration]
|
|
32725
|
+
}] }]; } });
|
|
32726
|
+
|
|
32727
|
+
class EditorEffects {
|
|
32728
|
+
constructor() {
|
|
32729
|
+
this.actions$ = inject(Actions);
|
|
32730
|
+
this.editorService = inject(EditorService);
|
|
32731
|
+
this.store = inject(Store);
|
|
32732
|
+
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({
|
|
32733
|
+
error: error.message,
|
|
32734
|
+
})))))));
|
|
32735
|
+
this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), map$1(() => markRecordAsChanged())));
|
|
32736
|
+
}
|
|
32737
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32738
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects }); }
|
|
32739
|
+
}
|
|
32740
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, decorators: [{
|
|
32741
|
+
type: Injectable
|
|
32742
|
+
}] });
|
|
32743
|
+
|
|
32744
|
+
var WizardFieldType;
|
|
32745
|
+
(function (WizardFieldType) {
|
|
32746
|
+
WizardFieldType[WizardFieldType["TEXT"] = 0] = "TEXT";
|
|
32747
|
+
WizardFieldType[WizardFieldType["TEXT_AREA"] = 1] = "TEXT_AREA";
|
|
32748
|
+
WizardFieldType[WizardFieldType["CHIPS"] = 2] = "CHIPS";
|
|
32749
|
+
WizardFieldType[WizardFieldType["DATA_PICKER"] = 3] = "DATA_PICKER";
|
|
32750
|
+
WizardFieldType[WizardFieldType["DROPDOWN"] = 4] = "DROPDOWN";
|
|
32751
|
+
})(WizardFieldType || (WizardFieldType = {}));
|
|
32752
|
+
|
|
32431
32753
|
class WizardService {
|
|
32432
32754
|
constructor(translateService) {
|
|
32433
32755
|
this.translateService = translateService;
|
|
@@ -32511,15 +32833,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32511
32833
|
}]
|
|
32512
32834
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
32513
32835
|
|
|
32514
|
-
var WizardFieldType;
|
|
32515
|
-
(function (WizardFieldType) {
|
|
32516
|
-
WizardFieldType[WizardFieldType["TEXT"] = 0] = "TEXT";
|
|
32517
|
-
WizardFieldType[WizardFieldType["TEXT_AREA"] = 1] = "TEXT_AREA";
|
|
32518
|
-
WizardFieldType[WizardFieldType["CHIPS"] = 2] = "CHIPS";
|
|
32519
|
-
WizardFieldType[WizardFieldType["DATA_PICKER"] = 3] = "DATA_PICKER";
|
|
32520
|
-
WizardFieldType[WizardFieldType["DROPDOWN"] = 4] = "DROPDOWN";
|
|
32521
|
-
})(WizardFieldType || (WizardFieldType = {}));
|
|
32522
|
-
|
|
32523
32836
|
marker('datafeeder.month.january');
|
|
32524
32837
|
marker('datafeeder.month.february');
|
|
32525
32838
|
marker('datafeeder.month.march');
|
|
@@ -32678,6 +32991,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32678
32991
|
args: ['dropdown']
|
|
32679
32992
|
}] } });
|
|
32680
32993
|
|
|
32994
|
+
class WizardSummarizeComponent {
|
|
32995
|
+
get title() {
|
|
32996
|
+
return this.wizardService.getWizardFieldData('title') || '';
|
|
32997
|
+
}
|
|
32998
|
+
get abstract() {
|
|
32999
|
+
return this.wizardService.getWizardFieldData('abstract') || '';
|
|
33000
|
+
}
|
|
33001
|
+
get tags() {
|
|
33002
|
+
if (!this.wizardService.getWizardFieldData('tags')) {
|
|
33003
|
+
return '';
|
|
33004
|
+
}
|
|
33005
|
+
return JSON.parse(this.wizardService.getWizardFieldData('tags'))
|
|
33006
|
+
.map((t) => t.display)
|
|
33007
|
+
.join(' - ');
|
|
33008
|
+
}
|
|
33009
|
+
get createdDate() {
|
|
33010
|
+
const time = this.wizardService.getWizardFieldData('datepicker');
|
|
33011
|
+
const locale = this.translateService.currentLang;
|
|
33012
|
+
return new Date(Number(time)).toLocaleDateString(locale, {
|
|
33013
|
+
year: 'numeric',
|
|
33014
|
+
month: 'long',
|
|
33015
|
+
day: 'numeric',
|
|
33016
|
+
});
|
|
33017
|
+
}
|
|
33018
|
+
get scale() {
|
|
33019
|
+
if (!this.wizardService.getWizardFieldData('dropdown')) {
|
|
33020
|
+
return '';
|
|
33021
|
+
}
|
|
33022
|
+
const scaleValue = JSON.parse(this.wizardService.getWizardFieldData('dropdown'));
|
|
33023
|
+
return `1:${scaleValue}`;
|
|
33024
|
+
}
|
|
33025
|
+
get description() {
|
|
33026
|
+
return this.wizardService.getWizardFieldData('description') || '';
|
|
33027
|
+
}
|
|
33028
|
+
constructor(wizardService, translateService) {
|
|
33029
|
+
this.wizardService = wizardService;
|
|
33030
|
+
this.translateService = translateService;
|
|
33031
|
+
}
|
|
33032
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardSummarizeComponent, deps: [{ token: WizardService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33033
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: WizardSummarizeComponent, selector: "gn-ui-wizard-summarize", ngImport: i0, 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"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i1$3.UpperCasePipe, name: "uppercase" }] }); }
|
|
33034
|
+
}
|
|
33035
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardSummarizeComponent, decorators: [{
|
|
33036
|
+
type: Component,
|
|
33037
|
+
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"] }]
|
|
33038
|
+
}], ctorParameters: function () { return [{ type: WizardService }, { type: i1$1.TranslateService }]; } });
|
|
33039
|
+
|
|
32681
33040
|
class WizardComponent {
|
|
32682
33041
|
constructor(wizardService, translate) {
|
|
32683
33042
|
this.wizardService = wizardService;
|
|
@@ -32743,136 +33102,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32743
33102
|
args: ['wizardFields']
|
|
32744
33103
|
}] } });
|
|
32745
33104
|
|
|
32746
|
-
class WizardSummarizeComponent {
|
|
32747
|
-
get title() {
|
|
32748
|
-
return this.wizardService.getWizardFieldData('title') || '';
|
|
32749
|
-
}
|
|
32750
|
-
get abstract() {
|
|
32751
|
-
return this.wizardService.getWizardFieldData('abstract') || '';
|
|
32752
|
-
}
|
|
32753
|
-
get tags() {
|
|
32754
|
-
if (!this.wizardService.getWizardFieldData('tags')) {
|
|
32755
|
-
return '';
|
|
32756
|
-
}
|
|
32757
|
-
return JSON.parse(this.wizardService.getWizardFieldData('tags'))
|
|
32758
|
-
.map((t) => t.display)
|
|
32759
|
-
.join(' - ');
|
|
32760
|
-
}
|
|
32761
|
-
get createdDate() {
|
|
32762
|
-
const time = this.wizardService.getWizardFieldData('datepicker');
|
|
32763
|
-
const locale = this.translateService.currentLang;
|
|
32764
|
-
return new Date(Number(time)).toLocaleDateString(locale, {
|
|
32765
|
-
year: 'numeric',
|
|
32766
|
-
month: 'long',
|
|
32767
|
-
day: 'numeric',
|
|
32768
|
-
});
|
|
32769
|
-
}
|
|
32770
|
-
get scale() {
|
|
32771
|
-
if (!this.wizardService.getWizardFieldData('dropdown')) {
|
|
32772
|
-
return '';
|
|
32773
|
-
}
|
|
32774
|
-
const scaleValue = JSON.parse(this.wizardService.getWizardFieldData('dropdown'));
|
|
32775
|
-
return `1:${scaleValue}`;
|
|
32776
|
-
}
|
|
32777
|
-
get description() {
|
|
32778
|
-
return this.wizardService.getWizardFieldData('description') || '';
|
|
32779
|
-
}
|
|
32780
|
-
constructor(wizardService, translateService) {
|
|
32781
|
-
this.wizardService = wizardService;
|
|
32782
|
-
this.translateService = translateService;
|
|
32783
|
-
}
|
|
32784
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardSummarizeComponent, deps: [{ token: WizardService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32785
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: WizardSummarizeComponent, selector: "gn-ui-wizard-summarize", ngImport: i0, 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"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i1$3.UpperCasePipe, name: "uppercase" }] }); }
|
|
32786
|
-
}
|
|
32787
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: WizardSummarizeComponent, decorators: [{
|
|
32788
|
-
type: Component,
|
|
32789
|
-
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"] }]
|
|
32790
|
-
}], ctorParameters: function () { return [{ type: WizardService }, { type: i1$1.TranslateService }]; } });
|
|
32791
|
-
|
|
32792
|
-
function evaluate(expression) {
|
|
32793
|
-
if (expression.match(/^\${.*}$/)) {
|
|
32794
|
-
return evaluate(expression.slice(2, -1));
|
|
32795
|
-
}
|
|
32796
|
-
const operator = expression.split('(')[0];
|
|
32797
|
-
switch (operator) {
|
|
32798
|
-
case 'dateNow':
|
|
32799
|
-
return () => new Date();
|
|
32800
|
-
default:
|
|
32801
|
-
throw new Error(`Unknown operator: ${operator}`);
|
|
32802
|
-
}
|
|
32803
|
-
}
|
|
32804
|
-
|
|
32805
|
-
class EditorService {
|
|
32806
|
-
constructor(http, apiConfiguration) {
|
|
32807
|
-
this.http = http;
|
|
32808
|
-
this.apiConfiguration = apiConfiguration;
|
|
32809
|
-
this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
|
|
32810
|
-
}
|
|
32811
|
-
// TODO: use the catalog repository instead
|
|
32812
|
-
loadRecordByUuid(uuid) {
|
|
32813
|
-
return this.http
|
|
32814
|
-
.get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
|
|
32815
|
-
responseType: 'text',
|
|
32816
|
-
headers: {
|
|
32817
|
-
Accept: 'application/xml',
|
|
32818
|
-
},
|
|
32819
|
-
})
|
|
32820
|
-
.pipe(switchMap$1((response) => findConverterForDocument(response).readRecord(response.toString())));
|
|
32821
|
-
}
|
|
32822
|
-
// returns the record as it was when saved
|
|
32823
|
-
saveRecord(record, fieldsConfig) {
|
|
32824
|
-
const savedRecord = { ...record };
|
|
32825
|
-
// run onSave processes
|
|
32826
|
-
for (const field of fieldsConfig) {
|
|
32827
|
-
if (field.onSaveProcess && field.model) {
|
|
32828
|
-
const evaluator = evaluate(field.onSaveProcess);
|
|
32829
|
-
savedRecord[field.model] = evaluator({
|
|
32830
|
-
config: field,
|
|
32831
|
-
value: record[field.model],
|
|
32832
|
-
});
|
|
32833
|
-
}
|
|
32834
|
-
}
|
|
32835
|
-
// TODO: use the catalog repository instead
|
|
32836
|
-
// TODO: use converter based on the format of the record before change
|
|
32837
|
-
return from(new Iso19139Converter().writeRecord(savedRecord)).pipe(switchMap$1((recordXml) => this.http.put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, recordXml, {
|
|
32838
|
-
headers: {
|
|
32839
|
-
'Content-Type': 'application/xml',
|
|
32840
|
-
},
|
|
32841
|
-
withCredentials: true,
|
|
32842
|
-
})), map$1(() => savedRecord));
|
|
32843
|
-
}
|
|
32844
|
-
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 }); }
|
|
32845
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
|
|
32846
|
-
}
|
|
32847
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
|
|
32848
|
-
type: Injectable,
|
|
32849
|
-
args: [{
|
|
32850
|
-
providedIn: 'root',
|
|
32851
|
-
}]
|
|
32852
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
|
|
32853
|
-
type: Optional
|
|
32854
|
-
}, {
|
|
32855
|
-
type: Inject,
|
|
32856
|
-
args: [Configuration]
|
|
32857
|
-
}] }]; } });
|
|
32858
|
-
|
|
32859
|
-
class EditorEffects {
|
|
32860
|
-
constructor() {
|
|
32861
|
-
this.actions$ = inject(Actions);
|
|
32862
|
-
this.editorService = inject(EditorService);
|
|
32863
|
-
this.store = inject(Store);
|
|
32864
|
-
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({
|
|
32865
|
-
error: error.message,
|
|
32866
|
-
})))))));
|
|
32867
|
-
this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), map$1(() => markRecordAsChanged())));
|
|
32868
|
-
}
|
|
32869
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
32870
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects }); }
|
|
32871
|
-
}
|
|
32872
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, decorators: [{
|
|
32873
|
-
type: Injectable
|
|
32874
|
-
}] });
|
|
32875
|
-
|
|
32876
33105
|
class FeatureEditorModule {
|
|
32877
33106
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
32878
33107
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, declarations: [WizardComponent,
|
|
@@ -32922,6 +33151,222 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32922
33151
|
}]
|
|
32923
33152
|
}] });
|
|
32924
33153
|
|
|
33154
|
+
class FormFieldSimpleComponent {
|
|
33155
|
+
constructor() {
|
|
33156
|
+
this.readonly = false;
|
|
33157
|
+
this.invalid = false;
|
|
33158
|
+
this.placeholder = '';
|
|
33159
|
+
}
|
|
33160
|
+
get inputType() {
|
|
33161
|
+
switch (this.type) {
|
|
33162
|
+
case 'url':
|
|
33163
|
+
case 'text':
|
|
33164
|
+
return 'text';
|
|
33165
|
+
case 'date':
|
|
33166
|
+
return 'datetime-local';
|
|
33167
|
+
case 'number':
|
|
33168
|
+
return 'number';
|
|
33169
|
+
case 'toggle':
|
|
33170
|
+
return 'checkbox';
|
|
33171
|
+
default:
|
|
33172
|
+
return '';
|
|
33173
|
+
}
|
|
33174
|
+
}
|
|
33175
|
+
get isSelect() {
|
|
33176
|
+
return this.type === 'list';
|
|
33177
|
+
}
|
|
33178
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSimpleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33179
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldSimpleComponent, isStandalone: true, selector: "gn-ui-form-field-simple", inputs: { type: "type", control: "control", readonly: "readonly", invalid: "invalid", placeholder: "placeholder", options: "options" }, ngImport: i0, template: "<input\n *ngIf=\"!isSelect\"\n [type]=\"inputType\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n<select\n *ngIf=\"isSelect\"\n [formControl]=\"control\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.label }}\n </option>\n</select>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2$1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33180
|
+
}
|
|
33181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSimpleComponent, decorators: [{
|
|
33182
|
+
type: Component,
|
|
33183
|
+
args: [{ selector: 'gn-ui-form-field-simple', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "<input\n *ngIf=\"!isSelect\"\n [type]=\"inputType\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n<select\n *ngIf=\"isSelect\"\n [formControl]=\"control\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n>\n <option *ngFor=\"let option of options\" [ngValue]=\"option.value\">\n {{ option.label }}\n </option>\n</select>\n" }]
|
|
33184
|
+
}], propDecorators: { type: [{
|
|
33185
|
+
type: Input
|
|
33186
|
+
}], control: [{
|
|
33187
|
+
type: Input
|
|
33188
|
+
}], readonly: [{
|
|
33189
|
+
type: Input
|
|
33190
|
+
}], invalid: [{
|
|
33191
|
+
type: Input
|
|
33192
|
+
}], placeholder: [{
|
|
33193
|
+
type: Input
|
|
33194
|
+
}], options: [{
|
|
33195
|
+
type: Input
|
|
33196
|
+
}] } });
|
|
33197
|
+
|
|
33198
|
+
class FormFieldFileComponent {
|
|
33199
|
+
constructor() {
|
|
33200
|
+
this.readonly = false;
|
|
33201
|
+
this.invalid = false;
|
|
33202
|
+
this.placeholder = '';
|
|
33203
|
+
}
|
|
33204
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldFileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldFileComponent, isStandalone: true, selector: "gn-ui-form-field-file", inputs: { control: "control", readonly: "readonly", invalid: "invalid", placeholder: "placeholder" }, ngImport: i0, template: "<input\n type=\"file\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33206
|
+
}
|
|
33207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldFileComponent, decorators: [{
|
|
33208
|
+
type: Component,
|
|
33209
|
+
args: [{ selector: 'gn-ui-form-field-file', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "<input\n type=\"file\"\n [readonly]=\"readonly\"\n [formControl]=\"control\"\n [placeholder]=\"placeholder\"\n class=\"border rounded-md p-3 w-full bg-white transition-colors\"\n [ngClass]=\"{\n 'border-pink-500': invalid,\n 'border-gray-200': !invalid,\n 'text-gray-600': readonly\n }\"\n/>\n" }]
|
|
33210
|
+
}], propDecorators: { control: [{
|
|
33211
|
+
type: Input
|
|
33212
|
+
}], readonly: [{
|
|
33213
|
+
type: Input
|
|
33214
|
+
}], invalid: [{
|
|
33215
|
+
type: Input
|
|
33216
|
+
}], placeholder: [{
|
|
33217
|
+
type: Input
|
|
33218
|
+
}] } });
|
|
33219
|
+
|
|
33220
|
+
class FormFieldRichComponent {
|
|
33221
|
+
constructor() {
|
|
33222
|
+
this.placeholder = 'Votre texte ici'; //TODO: translate
|
|
33223
|
+
this.preview = false;
|
|
33224
|
+
}
|
|
33225
|
+
getButtonExtraClass() {
|
|
33226
|
+
return `${this.preview ? 'text-gray-200 bg-gray-900' : 'text-gray-900 bg-gray-200'} rounded-[1.25rem] p-[0.375rem] text-xs font-medium w-24`;
|
|
33227
|
+
}
|
|
33228
|
+
togglePreview() {
|
|
33229
|
+
this.preview = !this.preview;
|
|
33230
|
+
}
|
|
33231
|
+
handleTextContentChanged(textContent) {
|
|
33232
|
+
this.control.setValue(textContent);
|
|
33233
|
+
}
|
|
33234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldRichComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldRichComponent, isStandalone: true, selector: "gn-ui-form-field-rich", inputs: { control: "control", label: "label", hint: "hint", helperText: "helperText", placeholder: "placeholder" }, ngImport: i0, template: "<gn-ui-form-field-wrapper [label]=\"label\" [hint]=\"hint\">\n <gn-ui-button\n form-field-interaction\n [extraClass]=\"getButtonExtraClass()\"\n (buttonClick)=\"togglePreview()\"\n >\n <span class=\"material-symbols-outlined mr-1 icon-small\">{{\n preview ? 'visibility' : 'visibility_off'\n }}</span>\n {{ preview ? 'WYSIWYG' : 'Markdown' }}\n </gn-ui-button>\n <gn-ui-markdown-editor\n class=\"h-full\"\n [preview]=\"preview\"\n [helperText]=\"helperText\"\n [placeholder]=\"placeholder\"\n [textContent]=\"control.value\"\n (textContentChanged)=\"handleTextContentChanged($event)\"\n ></gn-ui-markdown-editor>\n</gn-ui-form-field-wrapper>\n", styles: [".icon-small{font-size:16px;height:16px;width:16px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: MarkdownEditorComponent, selector: "gn-ui-markdown-editor", inputs: ["preview", "helperText", "placeholder", "textContent"], outputs: ["textContentChanged"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33236
|
+
}
|
|
33237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldRichComponent, decorators: [{
|
|
33238
|
+
type: Component,
|
|
33239
|
+
args: [{ selector: 'gn-ui-form-field-rich', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
33240
|
+
CommonModule,
|
|
33241
|
+
ReactiveFormsModule,
|
|
33242
|
+
MarkdownEditorComponent,
|
|
33243
|
+
FormFieldWrapperComponent,
|
|
33244
|
+
ButtonComponent,
|
|
33245
|
+
], template: "<gn-ui-form-field-wrapper [label]=\"label\" [hint]=\"hint\">\n <gn-ui-button\n form-field-interaction\n [extraClass]=\"getButtonExtraClass()\"\n (buttonClick)=\"togglePreview()\"\n >\n <span class=\"material-symbols-outlined mr-1 icon-small\">{{\n preview ? 'visibility' : 'visibility_off'\n }}</span>\n {{ preview ? 'WYSIWYG' : 'Markdown' }}\n </gn-ui-button>\n <gn-ui-markdown-editor\n class=\"h-full\"\n [preview]=\"preview\"\n [helperText]=\"helperText\"\n [placeholder]=\"placeholder\"\n [textContent]=\"control.value\"\n (textContentChanged)=\"handleTextContentChanged($event)\"\n ></gn-ui-markdown-editor>\n</gn-ui-form-field-wrapper>\n", styles: [".icon-small{font-size:16px;height:16px;width:16px}\n"] }]
|
|
33246
|
+
}], propDecorators: { control: [{
|
|
33247
|
+
type: Input
|
|
33248
|
+
}], label: [{
|
|
33249
|
+
type: Input
|
|
33250
|
+
}], hint: [{
|
|
33251
|
+
type: Input
|
|
33252
|
+
}], helperText: [{
|
|
33253
|
+
type: Input
|
|
33254
|
+
}], placeholder: [{
|
|
33255
|
+
type: Input
|
|
33256
|
+
}] } });
|
|
33257
|
+
|
|
33258
|
+
class FormFieldObjectComponent {
|
|
33259
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldObjectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33260
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldObjectComponent, isStandalone: true, selector: "gn-ui-form-field-object", ngImport: i0, template: "<p>form-field-object works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33261
|
+
}
|
|
33262
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldObjectComponent, decorators: [{
|
|
33263
|
+
type: Component,
|
|
33264
|
+
args: [{ selector: 'gn-ui-form-field-object', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-object works!</p>\n" }]
|
|
33265
|
+
}] });
|
|
33266
|
+
|
|
33267
|
+
class FormFieldArrayComponent {
|
|
33268
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33269
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldArrayComponent, isStandalone: true, selector: "gn-ui-form-field-array", ngImport: i0, template: "<p>form-field-array works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33270
|
+
}
|
|
33271
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldArrayComponent, decorators: [{
|
|
33272
|
+
type: Component,
|
|
33273
|
+
args: [{ selector: 'gn-ui-form-field-array', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-array works!</p>\n" }]
|
|
33274
|
+
}] });
|
|
33275
|
+
|
|
33276
|
+
class FormFieldSpatialExtentComponent {
|
|
33277
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSpatialExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33278
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<p>form-field-spatial-extent works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33279
|
+
}
|
|
33280
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldSpatialExtentComponent, decorators: [{
|
|
33281
|
+
type: Component,
|
|
33282
|
+
args: [{ selector: 'gn-ui-form-field-spatial-extent', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-spatial-extent works!</p>\n" }]
|
|
33283
|
+
}] });
|
|
33284
|
+
|
|
33285
|
+
class FormFieldTemporalExtentComponent {
|
|
33286
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldTemporalExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33287
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldTemporalExtentComponent, isStandalone: true, selector: "gn-ui-form-field-temporal-extent", ngImport: i0, template: "<p>form-field-temporal-extent works!</p>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33288
|
+
}
|
|
33289
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldTemporalExtentComponent, decorators: [{
|
|
33290
|
+
type: Component,
|
|
33291
|
+
args: [{ selector: 'gn-ui-form-field-temporal-extent', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<p>form-field-temporal-extent works!</p>\n" }]
|
|
33292
|
+
}] });
|
|
33293
|
+
|
|
33294
|
+
class FormFieldComponent {
|
|
33295
|
+
set value(v) {
|
|
33296
|
+
this.formControl.setValue(v, {
|
|
33297
|
+
emitEvent: false,
|
|
33298
|
+
});
|
|
33299
|
+
}
|
|
33300
|
+
constructor() {
|
|
33301
|
+
this.formControl = new FormControl();
|
|
33302
|
+
this.valueChange = this.formControl.valueChanges;
|
|
33303
|
+
}
|
|
33304
|
+
get simpleType() {
|
|
33305
|
+
return this.config.type;
|
|
33306
|
+
}
|
|
33307
|
+
get isSimpleField() {
|
|
33308
|
+
return (this.config.type === 'text' ||
|
|
33309
|
+
this.config.type === 'number' ||
|
|
33310
|
+
this.config.type === 'date' ||
|
|
33311
|
+
this.config.type === 'list' ||
|
|
33312
|
+
this.config.type === 'url' ||
|
|
33313
|
+
this.config.type === 'toggle');
|
|
33314
|
+
}
|
|
33315
|
+
get isFileField() {
|
|
33316
|
+
return this.config.type === 'file';
|
|
33317
|
+
}
|
|
33318
|
+
get isSpatialExtentField() {
|
|
33319
|
+
return this.config.type === 'spatial_extent';
|
|
33320
|
+
}
|
|
33321
|
+
get isTemporalExtentField() {
|
|
33322
|
+
return this.config.type === 'temporal_extent';
|
|
33323
|
+
}
|
|
33324
|
+
get isArrayField() {
|
|
33325
|
+
return this.config.type === 'array';
|
|
33326
|
+
}
|
|
33327
|
+
get isObjectField() {
|
|
33328
|
+
return this.config.type === 'object';
|
|
33329
|
+
}
|
|
33330
|
+
get isFieldOk() {
|
|
33331
|
+
return !this.config.locked && !this.config.invalid;
|
|
33332
|
+
}
|
|
33333
|
+
get isFieldLocked() {
|
|
33334
|
+
return this.config.locked;
|
|
33335
|
+
}
|
|
33336
|
+
get isFieldInvalid() {
|
|
33337
|
+
return !this.config.locked && this.config.invalid;
|
|
33338
|
+
}
|
|
33339
|
+
get isAbstract() {
|
|
33340
|
+
return this.model === 'abstract';
|
|
33341
|
+
}
|
|
33342
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33343
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <div class=\"mb-2 flex flex-row\">\n <label class=\"grow\">\n <span class=\"font-medium field-label\">{{\n config.labelKey | translate\n }}</span>\n <span *ngIf=\"config.hintKey\" class=\"text-gray-900 text-sm\">\n - {{ config.hintKey | translate }}\n </span>\n </label>\n <mat-icon\n *ngIf=\"isFieldOk\"\n class=\"material-symbols-outlined text-[#c6d950] icon-ok\"\n >check_circle</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldLocked\"\n class=\"material-symbols-outlined text-blue-400 icon-locked\"\n >lock</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldInvalid\"\n class=\"material-symbols-outlined text-pink-500 icon-invalid\"\n >cancel</mat-icon\n >\n </div>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n [type]=\"simpleType\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isFileField\">\n <gn-ui-form-field-file\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-file>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isArrayField\">\n <gn-ui-form-field-array></gn-ui-form-field-array>\n </ng-container>\n <ng-container *ngIf=\"isObjectField\">\n <gn-ui-form-field-object></gn-ui-form-field-object>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtentField\">\n <gn-ui-form-field-temporal-extent></gn-ui-form-field-temporal-extent>\n </ng-container>\n <div\n *ngIf=\"isFieldInvalid && config.invalidHintKey\"\n class=\"mt-2 text-pink-500 text-sm field-invalid-hint\"\n >\n {{ config.invalidHintKey | translate }}\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldObjectComponent, selector: "gn-ui-form-field-object" }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldTemporalExtentComponent, selector: "gn-ui-form-field-temporal-extent" }, { kind: "component", type: FormFieldFileComponent, selector: "gn-ui-form-field-file", inputs: ["control", "readonly", "invalid", "placeholder"] }, { kind: "component", type: FormFieldArrayComponent, selector: "gn-ui-form-field-array" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
33344
|
+
}
|
|
33345
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormFieldComponent, decorators: [{
|
|
33346
|
+
type: Component,
|
|
33347
|
+
args: [{ selector: 'gn-ui-form-field', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
33348
|
+
FormFieldSimpleComponent,
|
|
33349
|
+
FormFieldRichComponent,
|
|
33350
|
+
FormFieldObjectComponent,
|
|
33351
|
+
FormFieldSpatialExtentComponent,
|
|
33352
|
+
FormFieldTemporalExtentComponent,
|
|
33353
|
+
FormFieldFileComponent,
|
|
33354
|
+
FormFieldArrayComponent,
|
|
33355
|
+
CommonModule,
|
|
33356
|
+
ReactiveFormsModule,
|
|
33357
|
+
TranslateModule,
|
|
33358
|
+
MatIconModule,
|
|
33359
|
+
], template: "<div class=\"flex flex-col h-full\">\n <div class=\"mb-2 flex flex-row\">\n <label class=\"grow\">\n <span class=\"font-medium field-label\">{{\n config.labelKey | translate\n }}</span>\n <span *ngIf=\"config.hintKey\" class=\"text-gray-900 text-sm\">\n - {{ config.hintKey | translate }}\n </span>\n </label>\n <mat-icon\n *ngIf=\"isFieldOk\"\n class=\"material-symbols-outlined text-[#c6d950] icon-ok\"\n >check_circle</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldLocked\"\n class=\"material-symbols-outlined text-blue-400 icon-locked\"\n >lock</mat-icon\n >\n <mat-icon\n *ngIf=\"isFieldInvalid\"\n class=\"material-symbols-outlined text-pink-500 icon-invalid\"\n >cancel</mat-icon\n >\n </div>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n [type]=\"simpleType\"\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isFileField\">\n <gn-ui-form-field-file\n [control]=\"formControl\"\n [readonly]=\"isFieldLocked\"\n [invalid]=\"isFieldInvalid\"\n ></gn-ui-form-field-file>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isArrayField\">\n <gn-ui-form-field-array></gn-ui-form-field-array>\n </ng-container>\n <ng-container *ngIf=\"isObjectField\">\n <gn-ui-form-field-object></gn-ui-form-field-object>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtentField\">\n <gn-ui-form-field-temporal-extent></gn-ui-form-field-temporal-extent>\n </ng-container>\n <div\n *ngIf=\"isFieldInvalid && config.invalidHintKey\"\n class=\"mt-2 text-pink-500 text-sm field-invalid-hint\"\n >\n {{ config.invalidHintKey | translate }}\n </div>\n</div>\n" }]
|
|
33360
|
+
}], ctorParameters: function () { return []; }, propDecorators: { model: [{
|
|
33361
|
+
type: Input
|
|
33362
|
+
}], config: [{
|
|
33363
|
+
type: Input
|
|
33364
|
+
}], value: [{
|
|
33365
|
+
type: Input
|
|
33366
|
+
}], valueChange: [{
|
|
33367
|
+
type: Output
|
|
33368
|
+
}] } });
|
|
33369
|
+
|
|
32925
33370
|
class RecordFormComponent {
|
|
32926
33371
|
constructor(facade) {
|
|
32927
33372
|
this.facade = facade;
|
|
@@ -32937,11 +33382,21 @@ class RecordFormComponent {
|
|
|
32937
33382
|
return field.config.model;
|
|
32938
33383
|
}
|
|
32939
33384
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
32940
|
-
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: "
|
|
33385
|
+
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 [model]=\"field.config.model\"\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: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
32941
33386
|
}
|
|
32942
33387
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
32943
33388
|
type: Component,
|
|
32944
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
33389
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
33390
|
+
CommonModule,
|
|
33391
|
+
FormFieldComponent,
|
|
33392
|
+
FormFieldArrayComponent,
|
|
33393
|
+
FormFieldFileComponent,
|
|
33394
|
+
FormFieldObjectComponent,
|
|
33395
|
+
FormFieldRichComponent,
|
|
33396
|
+
FormFieldSimpleComponent,
|
|
33397
|
+
FormFieldSpatialExtentComponent,
|
|
33398
|
+
FormFieldTemporalExtentComponent,
|
|
33399
|
+
], 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 [model]=\"field.config.model\"\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" }]
|
|
32945
33400
|
}], ctorParameters: function () { return [{ type: EditorFacade }]; } });
|
|
32946
33401
|
|
|
32947
33402
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -33309,5 +33764,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
33309
33764
|
* Generated bundle index. Do not edit.
|
|
33310
33765
|
*/
|
|
33311
33766
|
|
|
33312
|
-
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,
|
|
33767
|
+
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, FormFieldWrapperComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, Iso191153Converter, Iso19139Converter, 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, MarkdownEditorComponent, 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_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, downgradeImage, downsizeImage, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, 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, megabytesToBytes, 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, totalPages, updateLayer, updateRecordField };
|
|
33313
33768
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|