geonetwork-ui 2.2.0-dev.9ae0a68b → 2.2.0-dev.9f0a89f5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +28 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +83 -58
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +6 -4
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +20 -17
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +52 -23
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
- package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
- package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
- package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
- package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +23 -3
- package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
- package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
- package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +11 -1
- package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
- package/esm2022/libs/feature/search/src/index.mjs +4 -1
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +3 -3
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
- package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
- package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
- package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
- package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
- package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
- package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
- package/esm2022/libs/ui/elements/src/index.mjs +3 -1
- package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -17
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
- package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +8 -4
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +12 -5
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
- package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +12 -7
- package/esm2022/libs/ui/layout/src/index.mjs +3 -1
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
- package/esm2022/libs/ui/search/src/index.mjs +1 -2
- package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
- package/esm2022/libs/util/i18n/src/index.mjs +1 -2
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
- package/esm2022/translations/de.json +106 -96
- package/esm2022/translations/en.json +34 -24
- package/esm2022/translations/es.json +14 -4
- package/esm2022/translations/fr.json +18 -8
- package/esm2022/translations/it.json +17 -7
- package/esm2022/translations/nl.json +14 -4
- package/esm2022/translations/pt.json +14 -4
- package/fesm2022/geonetwork-ui.mjs +1371 -833
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -6
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +4 -3
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
- package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +28 -17
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
- package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
- package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
- package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/map/src/index.d.ts +1 -0
- package/libs/feature/map/src/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
- package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
- package/libs/feature/map/src/lib/feature-map.module.d.ts +15 -12
- package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +2 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
- package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/search/src/index.d.ts +3 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
- package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
- package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
- package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
- package/libs/ui/elements/src/index.d.ts +2 -0
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
- package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +10 -5
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +3 -2
- 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 +3 -2
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/inputs/src/index.d.ts +1 -0
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +13 -0
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -39
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +2 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
- package/libs/ui/search/src/index.d.ts +0 -1
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/index.d.ts +0 -1
- package/libs/util/i18n/src/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +61 -8
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +55 -9
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +225 -24
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +32 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +123 -73
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +5 -3
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
- package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +24 -21
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +115 -62
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +169 -95
- package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
- package/src/libs/common/domain/src/lib/index.ts +2 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +33 -21
- package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +50 -10
- package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
- package/src/libs/feature/map/src/index.ts +1 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
- package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
- package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
- package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
- package/src/libs/feature/map/src/lib/feature-map.module.ts +12 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
- package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
- package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +6 -2
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +16 -0
- package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
- package/src/libs/feature/search/src/index.ts +3 -0
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +3 -4
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
- package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
- package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
- package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
- package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
- package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
- package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
- package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
- package/src/libs/ui/elements/src/index.ts +2 -0
- package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +30 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +54 -54
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +2 -2
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +101 -45
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +37 -10
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.html +2 -2
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +4 -0
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +5 -1
- package/src/libs/ui/inputs/src/index.ts +1 -0
- package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.css +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +5 -2
- package/src/libs/ui/layout/src/index.ts +2 -0
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
- package/src/libs/ui/search/src/index.ts +0 -1
- package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
- package/src/libs/util/i18n/src/index.ts +0 -1
- package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
- package/tailwind.base.config.js +3 -0
- package/tailwind.base.css +2 -2
- package/translations/de.json +106 -96
- package/translations/en.json +34 -24
- package/translations/es.json +14 -4
- package/translations/fr.json +18 -8
- package/translations/it.json +17 -7
- package/translations/nl.json +14 -4
- package/translations/pt.json +14 -4
- package/translations/sk.json +14 -4
- package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
- package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
- package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
- package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
- package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
- package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
- package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
- package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
- package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
- package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
- package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
- package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
- /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
- /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
|
|
2
2
|
import format from 'date-fns/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ElementRef, ViewChildren } from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@ngx-translate/core';
|
|
8
|
-
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService
|
|
8
|
+
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
|
-
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take,
|
|
11
|
+
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
15
|
-
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject,
|
|
15
|
+
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
|
|
16
16
|
import { valid, coerce, satisfies, ltr } from 'semver';
|
|
17
17
|
import * as i1$2 from '@ngrx/store';
|
|
18
18
|
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
|
|
@@ -32,8 +32,8 @@ import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
|
|
|
32
32
|
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
33
33
|
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
34
34
|
import WMTSCapabilities from 'ol/format/WMTSCapabilities';
|
|
35
|
-
import { WmsEndpoint, sharedFetch, useCache, WfsEndpoint } from '@camptocamp/ogc-client';
|
|
36
35
|
import chroma from 'chroma-js';
|
|
36
|
+
import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
37
37
|
import { register, fromEPSGCode } from 'ol/proj/proj4';
|
|
38
38
|
import proj4 from 'proj4/dist/proj4';
|
|
39
39
|
import * as TOML from '@ltd/j-toml';
|
|
@@ -73,10 +73,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
|
|
|
73
73
|
import * as i3$2 from '@angular/material/datepicker';
|
|
74
74
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
75
75
|
import { MatInputModule } from '@angular/material/input';
|
|
76
|
+
import * as basicLightbox from 'basiclightbox';
|
|
76
77
|
import * as i1$8 from '@ngrx/effects';
|
|
77
78
|
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
78
79
|
import tippy from 'tippy.js';
|
|
79
80
|
import { valid as valid$1 } from 'geojson-validation';
|
|
81
|
+
import { Polygon } from 'ol/geom';
|
|
82
|
+
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
80
83
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
81
84
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
82
85
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -584,6 +587,20 @@ function matchMimeType(format) {
|
|
|
584
587
|
return format || null;
|
|
585
588
|
}
|
|
586
589
|
|
|
590
|
+
function getKeywordTypeFromKeywordTypeCode(typeCode) {
|
|
591
|
+
if (!typeCode)
|
|
592
|
+
return 'other';
|
|
593
|
+
switch (typeCode) {
|
|
594
|
+
case 'theme':
|
|
595
|
+
case 'place':
|
|
596
|
+
case 'temporal':
|
|
597
|
+
case 'other':
|
|
598
|
+
return typeCode;
|
|
599
|
+
default:
|
|
600
|
+
return 'other';
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
587
604
|
function extractCharacterString() {
|
|
588
605
|
return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText());
|
|
589
606
|
}
|
|
@@ -646,28 +663,32 @@ function extractStatus() {
|
|
|
646
663
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
647
664
|
}
|
|
648
665
|
// from gmd:resourceConstraints
|
|
649
|
-
function
|
|
650
|
-
|
|
651
|
-
|
|
666
|
+
function extractLegalConstraints() {
|
|
667
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
|
+
...(url && { url }),
|
|
652
669
|
text,
|
|
653
|
-
type: 'other',
|
|
654
670
|
})));
|
|
655
|
-
|
|
671
|
+
}
|
|
672
|
+
// from gmd:resourceConstraints
|
|
673
|
+
function extractSecurityConstraints() {
|
|
674
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
675
|
+
...(url && { url }),
|
|
656
676
|
text,
|
|
657
|
-
type: 'security',
|
|
658
677
|
})));
|
|
659
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
660
678
|
}
|
|
661
679
|
// from gmd:resourceConstraints
|
|
662
|
-
function
|
|
663
|
-
return pipe(
|
|
680
|
+
function extractOtherConstraints() {
|
|
681
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
682
|
+
...(url && { url }),
|
|
683
|
+
text,
|
|
684
|
+
})));
|
|
664
685
|
}
|
|
665
686
|
// from gmd:resourceConstraints
|
|
666
687
|
function extractLicenses() {
|
|
667
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
688
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
689
|
...(url && { url }),
|
|
669
690
|
text,
|
|
670
|
-
})))
|
|
691
|
+
})));
|
|
671
692
|
}
|
|
672
693
|
// from gmd:MD_Distribution
|
|
673
694
|
function extractDatasetDistributions() {
|
|
@@ -826,31 +847,55 @@ function readDatasetUpdated(rootEl) {
|
|
|
826
847
|
function readContacts(rootEl) {
|
|
827
848
|
return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
|
|
828
849
|
}
|
|
829
|
-
|
|
830
|
-
|
|
850
|
+
// from gmd:thesaurusName
|
|
851
|
+
function readThesaurus(rootEl) {
|
|
852
|
+
if (!rootEl)
|
|
853
|
+
return null;
|
|
854
|
+
const findIdentifier = findNestedElement('gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code');
|
|
855
|
+
const id = pipe(findIdentifier, extractCharacterString())(rootEl);
|
|
856
|
+
const url = pipe(findIdentifier, extractUrl())(rootEl);
|
|
857
|
+
const name = pipe(findNestedElement('gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
|
|
858
|
+
return {
|
|
859
|
+
id,
|
|
860
|
+
...(name && { name }),
|
|
861
|
+
...(url && { url }),
|
|
862
|
+
};
|
|
863
|
+
}
|
|
864
|
+
// from gmd:MD_Keywords
|
|
865
|
+
function readKeywordGroup(rootEl) {
|
|
866
|
+
const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
|
|
867
|
+
const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
|
|
868
|
+
return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
|
|
869
|
+
const label = extractCharacterString()(el);
|
|
870
|
+
return {
|
|
871
|
+
...(thesaurus ? { thesaurus } : {}),
|
|
872
|
+
label,
|
|
873
|
+
type,
|
|
874
|
+
};
|
|
875
|
+
}))(rootEl);
|
|
831
876
|
}
|
|
832
877
|
function readKeywords(rootEl) {
|
|
833
|
-
return
|
|
834
|
-
}
|
|
835
|
-
function readThemes(rootEl) {
|
|
836
|
-
return readKeywordsOfType(true)(rootEl);
|
|
878
|
+
return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
|
|
837
879
|
}
|
|
838
880
|
function readStatus(rootEl) {
|
|
839
881
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
840
882
|
}
|
|
841
883
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
842
|
-
function
|
|
843
|
-
return pipe(getConstraints, mapArray(
|
|
884
|
+
function readLegalConstraints(rootEl) {
|
|
885
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
844
886
|
}
|
|
845
|
-
function
|
|
846
|
-
return pipe(getConstraints, mapArray(
|
|
887
|
+
function readSecurityConstraints(rootEl) {
|
|
888
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
889
|
+
}
|
|
890
|
+
function readOtherConstraints(rootEl) {
|
|
891
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
847
892
|
}
|
|
848
893
|
function readLicenses(rootEl) {
|
|
849
894
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
850
895
|
}
|
|
851
896
|
// not used yet
|
|
852
897
|
function readIsoTopics(rootEl) {
|
|
853
|
-
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode',
|
|
898
|
+
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
|
|
854
899
|
}
|
|
855
900
|
function readSpatialRepresentation(rootEl) {
|
|
856
901
|
return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
|
|
@@ -1066,33 +1111,50 @@ function updateCitationDate(date, type) {
|
|
|
1066
1111
|
function appendCitationDate(date, type) {
|
|
1067
1112
|
return appendChildren(pipe(createElement('gmd:date'), createChild('gmd:CI_Date'), appendChildren(pipe(createElement('gmd:date'), writeDateTime(date)), pipe(createElement('gmd:dateType'), createChild('gmd:CI_DateTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_DateTypeCode'), addAttribute('codeListValue', type)))));
|
|
1068
1113
|
}
|
|
1069
|
-
function removeKeywords(
|
|
1070
|
-
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1114
|
+
function removeKeywords() {
|
|
1115
|
+
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')));
|
|
1116
|
+
}
|
|
1117
|
+
// returns a <gmd:thesaurusName> element
|
|
1118
|
+
function createThesaurus(thesaurus) {
|
|
1119
|
+
return pipe(createElement('gmd:thesaurusName'), createChild('gmd:CI_Citation'), appendChildren(pipe(createElement('gmd:title'), writeCharacterString(thesaurus.name || thesaurus.id)), pipe(createElement('gmd:identifier'), createChild('gmd:MD_Identifier'), appendChildren(pipe(createElement('gmd:code'), thesaurus.url
|
|
1120
|
+
? writeAnchor(thesaurus.url, thesaurus.id)
|
|
1121
|
+
: writeCharacterString(thesaurus.id))))));
|
|
1122
|
+
}
|
|
1123
|
+
function appendKeywords(keywords) {
|
|
1124
|
+
const keywordsByThesaurus = keywords.reduce((acc, keyword) => {
|
|
1125
|
+
const thesaurusId = keyword.thesaurus?.id;
|
|
1126
|
+
const type = keyword.type;
|
|
1127
|
+
let existingGroup = acc.find((group) => group[0].thesaurus
|
|
1128
|
+
? group[0].thesaurus.id === thesaurusId
|
|
1129
|
+
: group[0].type === type);
|
|
1130
|
+
if (!existingGroup) {
|
|
1131
|
+
existingGroup = [];
|
|
1132
|
+
acc.push(existingGroup);
|
|
1133
|
+
}
|
|
1134
|
+
existingGroup.push(keyword);
|
|
1135
|
+
return acc;
|
|
1136
|
+
}, []);
|
|
1137
|
+
return appendChildren(...keywordsByThesaurus.map((keywords) => pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', keywords[0].type))), keywords[0].thesaurus
|
|
1138
|
+
? appendChildren(createThesaurus(keywords[0].thesaurus))
|
|
1139
|
+
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword.label)))))));
|
|
1140
|
+
}
|
|
1141
|
+
function createConstraint(constraint, type) {
|
|
1142
|
+
if (type === 'security') {
|
|
1087
1143
|
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_SecurityConstraints'), appendChildren(pipe(createElement('gmd:classification'), createChild('gmd:MD_ClassificationCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ClassificationCode'), addAttribute('codeListValue', 'restricted')), pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1088
1144
|
}
|
|
1089
|
-
|
|
1145
|
+
else if (type === 'legal') {
|
|
1146
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
|
|
1147
|
+
}
|
|
1148
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1090
1149
|
}
|
|
1091
|
-
function
|
|
1150
|
+
function removeOtherConstraints() {
|
|
1092
1151
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1093
1152
|
}
|
|
1094
|
-
function
|
|
1095
|
-
return pipe(
|
|
1153
|
+
function removeSecurityConstraints() {
|
|
1154
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1155
|
+
}
|
|
1156
|
+
function removeLegalConstraints() {
|
|
1157
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code !== 'license')))));
|
|
1096
1158
|
}
|
|
1097
1159
|
function removeLicenses() {
|
|
1098
1160
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.some((code) => code === 'license')))));
|
|
@@ -1191,19 +1253,22 @@ function writeContacts(record, rootEl) {
|
|
|
1191
1253
|
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
|
|
1192
1254
|
}
|
|
1193
1255
|
function writeKeywords(record, rootEl) {
|
|
1194
|
-
pipe(findOrCreateIdentification(), removeKeywords(
|
|
1256
|
+
pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
|
|
1195
1257
|
}
|
|
1196
|
-
function
|
|
1197
|
-
pipe(findOrCreateIdentification(),
|
|
1198
|
-
}
|
|
1199
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1200
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1258
|
+
function writeTopics(record, rootEl) {
|
|
1259
|
+
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:topicCategory'), appendChildren(...record.topics.map((topic) => pipe(createElement('gmd:topicCategory'), createChild('gmd:MD_TopicCategoryCode'), setTextContent(topic)))))(rootEl);
|
|
1201
1260
|
}
|
|
1202
1261
|
function writeLicenses(record, rootEl) {
|
|
1203
1262
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1204
1263
|
}
|
|
1205
|
-
function
|
|
1206
|
-
pipe(findOrCreateIdentification(),
|
|
1264
|
+
function writeLegalConstraints(record, rootEl) {
|
|
1265
|
+
pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
|
|
1266
|
+
}
|
|
1267
|
+
function writeSecurityConstraints(record, rootEl) {
|
|
1268
|
+
pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
|
|
1269
|
+
}
|
|
1270
|
+
function writeOtherConstraints(record, rootEl) {
|
|
1271
|
+
pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
|
|
1207
1272
|
}
|
|
1208
1273
|
function writeUpdateFrequency(record, rootEl) {
|
|
1209
1274
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1300,13 +1365,12 @@ function toModel(xml) {
|
|
|
1300
1365
|
const recordUpdated = readRecordUpdated(rootEl);
|
|
1301
1366
|
const recordCreated = recordUpdated;
|
|
1302
1367
|
const keywords = readKeywords(rootEl);
|
|
1303
|
-
const
|
|
1304
|
-
const
|
|
1305
|
-
const
|
|
1368
|
+
const topics = readIsoTopics(rootEl);
|
|
1369
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1370
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1371
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1306
1372
|
const licenses = readLicenses(rootEl);
|
|
1307
1373
|
const overviews = readOverviews(rootEl);
|
|
1308
|
-
// not used yet
|
|
1309
|
-
const isoTopics = readIsoTopics(rootEl);
|
|
1310
1374
|
if (kind === 'dataset') {
|
|
1311
1375
|
const status = readStatus(rootEl);
|
|
1312
1376
|
const datasetCreated = readDatasetCreated(rootEl);
|
|
@@ -1329,10 +1393,11 @@ function toModel(xml) {
|
|
|
1329
1393
|
contacts,
|
|
1330
1394
|
contactsForResource: [],
|
|
1331
1395
|
keywords,
|
|
1332
|
-
|
|
1333
|
-
accessConstraints,
|
|
1334
|
-
useLimitations,
|
|
1396
|
+
topics,
|
|
1335
1397
|
licenses,
|
|
1398
|
+
legalConstraints,
|
|
1399
|
+
securityConstraints,
|
|
1400
|
+
otherConstraints,
|
|
1336
1401
|
...(datasetCreated && { datasetCreated }),
|
|
1337
1402
|
...(datasetUpdated && { datasetUpdated }),
|
|
1338
1403
|
lineage,
|
|
@@ -1356,10 +1421,11 @@ function toModel(xml) {
|
|
|
1356
1421
|
ownerOrganization,
|
|
1357
1422
|
contacts,
|
|
1358
1423
|
keywords,
|
|
1359
|
-
|
|
1360
|
-
accessConstraints,
|
|
1361
|
-
useLimitations,
|
|
1424
|
+
topics,
|
|
1362
1425
|
licenses,
|
|
1426
|
+
legalConstraints,
|
|
1427
|
+
securityConstraints,
|
|
1428
|
+
otherConstraints,
|
|
1363
1429
|
overviews,
|
|
1364
1430
|
onlineResources,
|
|
1365
1431
|
};
|
|
@@ -1384,10 +1450,12 @@ function toXml(record, originalXml) {
|
|
|
1384
1450
|
writeAbstract(record, rootEl);
|
|
1385
1451
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1386
1452
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1387
|
-
fieldChanged('
|
|
1388
|
-
fieldChanged('
|
|
1453
|
+
fieldChanged('topics') && writeTopics(record, rootEl);
|
|
1454
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1455
|
+
fieldChanged('securityConstraints') &&
|
|
1456
|
+
writeSecurityConstraints(record, rootEl);
|
|
1389
1457
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1390
|
-
fieldChanged('
|
|
1458
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1391
1459
|
if (record.kind === 'dataset') {
|
|
1392
1460
|
writeStatus(record, rootEl);
|
|
1393
1461
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -1413,6 +1481,7 @@ const selectTranslatedValue = (source, lang3) => selectFallback(selectField(sour
|
|
|
1413
1481
|
const selectTranslatedField = (source, fieldName, lang3) => selectTranslatedValue(selectField(source, fieldName), lang3);
|
|
1414
1482
|
const toDate = (field) => new Date(field);
|
|
1415
1483
|
const getFirstValue = (field) => Array.isArray(field) ? field[0] : field;
|
|
1484
|
+
const getArrayItem = (field, index) => Array.isArray(field) && field[index] !== undefined ? field[index] : null;
|
|
1416
1485
|
const getAsArray = (field) => Array.isArray(field) ? field : field !== null ? [field] : [];
|
|
1417
1486
|
const getAsUrl = (field, location = window.location.toString()) => {
|
|
1418
1487
|
// an empty string is not a valid url, even though it could be considered an empty path to the root
|
|
@@ -1453,6 +1522,31 @@ const mapContact = (sourceContact, lang3) => {
|
|
|
1453
1522
|
...(phone && { phone }),
|
|
1454
1523
|
};
|
|
1455
1524
|
};
|
|
1525
|
+
const mapKeywords = (thesauri, language) => {
|
|
1526
|
+
const keywords = [];
|
|
1527
|
+
for (const thesaurusId in thesauri) {
|
|
1528
|
+
const rawThesaurus = thesauri[thesaurusId];
|
|
1529
|
+
let thesaurus = null;
|
|
1530
|
+
if (rawThesaurus.id) {
|
|
1531
|
+
const thesaurusSource = { ...rawThesaurus };
|
|
1532
|
+
const url = getAsUrl(selectField(thesaurusSource, 'link'));
|
|
1533
|
+
const name = selectField(thesaurusSource, 'title');
|
|
1534
|
+
thesaurus = {
|
|
1535
|
+
id: rawThesaurus.id,
|
|
1536
|
+
...(name && { name }),
|
|
1537
|
+
...(url && { url }),
|
|
1538
|
+
};
|
|
1539
|
+
}
|
|
1540
|
+
for (const keyword of rawThesaurus.keywords) {
|
|
1541
|
+
keywords.push({
|
|
1542
|
+
label: selectTranslatedValue(keyword, language),
|
|
1543
|
+
type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
|
|
1544
|
+
...(thesaurus && { thesaurus }),
|
|
1545
|
+
});
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
return keywords;
|
|
1549
|
+
};
|
|
1456
1550
|
|
|
1457
1551
|
/**
|
|
1458
1552
|
* Custom HttpParameterCodec
|
|
@@ -16539,133 +16633,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
16539
16633
|
}]
|
|
16540
16634
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
16541
16635
|
|
|
16542
|
-
// IMPORTANT:
|
|
16543
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
|
|
16544
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16545
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16546
|
-
class TestTranslateLoader extends TranslateLoader {
|
|
16547
|
-
constructor(_translations = {}) {
|
|
16548
|
-
super();
|
|
16549
|
-
this._translations = _translations;
|
|
16550
|
-
}
|
|
16551
|
-
/**
|
|
16552
|
-
* Returns an {Observable} of translations for the specified language. If the
|
|
16553
|
-
* language is not recognized, an empty translations object will be returned.
|
|
16554
|
-
*
|
|
16555
|
-
* @param language the language for which the translations should be retrieved.
|
|
16556
|
-
* @returns the translations for the specified
|
|
16557
|
-
* language or an empty set of translations if the language is not recognized.
|
|
16558
|
-
*/
|
|
16559
|
-
getTranslation(language) {
|
|
16560
|
-
return of(this._translations[language] || {});
|
|
16561
|
-
}
|
|
16562
|
-
}
|
|
16563
|
-
|
|
16564
|
-
// IMPORTANT:
|
|
16565
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
|
|
16566
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16567
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16568
|
-
/**
|
|
16569
|
-
* The TranslateTestingModule provides the {TranslateModule} as well as a
|
|
16570
|
-
* {TranslateService} configured to return translations specific for the
|
|
16571
|
-
* test environment.
|
|
16572
|
-
*
|
|
16573
|
-
* @export
|
|
16574
|
-
*/
|
|
16575
|
-
class TranslateTestingModule {
|
|
16576
|
-
constructor() {
|
|
16577
|
-
this._translations = {};
|
|
16578
|
-
}
|
|
16579
|
-
static withTranslations(languageOrTranslations, translations) {
|
|
16580
|
-
const translateTestingModule = new TranslateTestingModule();
|
|
16581
|
-
if (typeof languageOrTranslations === 'string') {
|
|
16582
|
-
return translateTestingModule.withTranslations(languageOrTranslations, translations);
|
|
16583
|
-
}
|
|
16584
|
-
return translateTestingModule.withTranslations(languageOrTranslations);
|
|
16585
|
-
}
|
|
16586
|
-
get ngModule() {
|
|
16587
|
-
return TranslateTestingModule;
|
|
16588
|
-
}
|
|
16589
|
-
get providers() {
|
|
16590
|
-
const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
|
|
16591
|
-
return [
|
|
16592
|
-
{
|
|
16593
|
-
provide: TranslateService,
|
|
16594
|
-
useValue: translateService,
|
|
16595
|
-
},
|
|
16596
|
-
];
|
|
16597
|
-
}
|
|
16598
|
-
withTranslations(languageOrTranslations, translations) {
|
|
16599
|
-
if (typeof languageOrTranslations === 'string' && translations) {
|
|
16600
|
-
this.addTranslations(languageOrTranslations, translations);
|
|
16601
|
-
this._defaultLanguage = languageOrTranslations;
|
|
16602
|
-
}
|
|
16603
|
-
else if (languageOrTranslations) {
|
|
16604
|
-
Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
|
|
16605
|
-
}
|
|
16606
|
-
return this;
|
|
16607
|
-
}
|
|
16608
|
-
/**
|
|
16609
|
-
* Updates the {TranslationTestingModule} to provide a {TranslateService} that will
|
|
16610
|
-
* use the provided {TranslateCompiler} to translate the test translations.
|
|
16611
|
-
*
|
|
16612
|
-
* @example
|
|
16613
|
-
*
|
|
16614
|
-
* TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
|
|
16615
|
-
* .withCompiler(new TranslateMessageFormatCompiler());
|
|
16616
|
-
*
|
|
16617
|
-
* @param compiler the compiler to use to compile the test translations.
|
|
16618
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16619
|
-
* @memberof TranslateTestingModule
|
|
16620
|
-
*/
|
|
16621
|
-
withCompiler(compiler) {
|
|
16622
|
-
this._compiler = compiler;
|
|
16623
|
-
return this;
|
|
16624
|
-
}
|
|
16625
|
-
/**
|
|
16626
|
-
* Updates the {TranslateTestingModule} to use the provided language as the default language.
|
|
16627
|
-
* By default, the default language will be set to the first language provided.
|
|
16628
|
-
*
|
|
16629
|
-
* @example
|
|
16630
|
-
*
|
|
16631
|
-
* TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
|
|
16632
|
-
* .withTranslations('en', ENGLISH_TRANSLATIONS)
|
|
16633
|
-
* .withDefaultLanguage('en');
|
|
16634
|
-
*
|
|
16635
|
-
* @param language the new default language for translations.
|
|
16636
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16637
|
-
* @memberof TranslateTestingModule
|
|
16638
|
-
*/
|
|
16639
|
-
withDefaultLanguage(language) {
|
|
16640
|
-
this._defaultLanguage = language || this._defaultLanguage;
|
|
16641
|
-
return this;
|
|
16642
|
-
}
|
|
16643
|
-
addTranslations(language, translations) {
|
|
16644
|
-
if (!this._defaultLanguage) {
|
|
16645
|
-
this._defaultLanguage = language;
|
|
16646
|
-
}
|
|
16647
|
-
if (this._translations[language]) {
|
|
16648
|
-
this._translations[language] = {
|
|
16649
|
-
...this._translations[language],
|
|
16650
|
-
...translations,
|
|
16651
|
-
};
|
|
16652
|
-
}
|
|
16653
|
-
else {
|
|
16654
|
-
this._translations[language] = translations;
|
|
16655
|
-
}
|
|
16656
|
-
}
|
|
16657
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16658
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
|
|
16659
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
|
|
16660
|
-
}
|
|
16661
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
|
|
16662
|
-
type: NgModule,
|
|
16663
|
-
args: [{
|
|
16664
|
-
imports: [TranslateModule],
|
|
16665
|
-
exports: [TranslateModule],
|
|
16666
|
-
}]
|
|
16667
|
-
}] });
|
|
16668
|
-
|
|
16669
16636
|
var dropFile$6 = "Datei ablegen";
|
|
16670
16637
|
var next$6 = "weiter";
|
|
16671
16638
|
var previous$6 = "zurück";
|
|
@@ -16688,20 +16655,21 @@ var de = {
|
|
|
16688
16655
|
"chart.type.line": "Liniendiagramm",
|
|
16689
16656
|
"chart.type.lineSmooth": "Geglättes Liniendiagramm",
|
|
16690
16657
|
"chart.type.pie": "Kreisdiagramm",
|
|
16691
|
-
"dashboard.
|
|
16692
|
-
"dashboard.
|
|
16693
|
-
"dashboard.records.
|
|
16694
|
-
"dashboard.records.
|
|
16695
|
-
"dashboard.records.
|
|
16696
|
-
"dashboard.records.
|
|
16697
|
-
"dashboard.records.
|
|
16698
|
-
"dashboard.records.
|
|
16699
|
-
"dashboard.records.
|
|
16700
|
-
"dashboard.records.
|
|
16701
|
-
"dashboard.records.
|
|
16702
|
-
"dashboard.records.
|
|
16703
|
-
"dashboard.records.
|
|
16704
|
-
"dashboard.
|
|
16658
|
+
"dashboard.createRecord": "",
|
|
16659
|
+
"dashboard.labels.mySpace": "Mein Bereich",
|
|
16660
|
+
"dashboard.records.all": "Katalog",
|
|
16661
|
+
"dashboard.records.myDraft": "Meine Entwürfe",
|
|
16662
|
+
"dashboard.records.myLibrary": "Meine Bibliothek",
|
|
16663
|
+
"dashboard.records.myOrg": "Meine Organisation",
|
|
16664
|
+
"dashboard.records.myRecords": "Meine Datensätze",
|
|
16665
|
+
"dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
|
|
16666
|
+
"dashboard.records.search": "Suche nach \"{searchText}\"",
|
|
16667
|
+
"dashboard.records.userDetail": "Name",
|
|
16668
|
+
"dashboard.records.userEmail": "E-Mail",
|
|
16669
|
+
"dashboard.records.username": "Benutzername",
|
|
16670
|
+
"dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
|
|
16671
|
+
"dashboard.results.listMetadata": "",
|
|
16672
|
+
"dashboard.results.listResources": "",
|
|
16705
16673
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
|
|
16706
16674
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
|
|
16707
16675
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
|
|
@@ -16715,7 +16683,7 @@ var de = {
|
|
|
16715
16683
|
"datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
|
|
16716
16684
|
"datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
|
|
16717
16685
|
"datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
|
|
16718
|
-
"datafeeder.form.tags": "Wählen Sie einen oder mehrere
|
|
16686
|
+
"datafeeder.form.tags": "Wählen Sie einen oder mehrere Tage aus, die zu Ihrem Datensatz passen",
|
|
16719
16687
|
"datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
|
|
16720
16688
|
"datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
|
|
16721
16689
|
"datafeeder.month.april": "April",
|
|
@@ -16730,16 +16698,16 @@ var de = {
|
|
|
16730
16698
|
"datafeeder.month.november": "November",
|
|
16731
16699
|
"datafeeder.month.october": "Oktober",
|
|
16732
16700
|
"datafeeder.month.september": "September",
|
|
16733
|
-
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist",
|
|
16734
|
-
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz zum Veröffentlichen?",
|
|
16701
|
+
"datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.",
|
|
16702
|
+
"datafeeder.publish.illustration.title": "Ein weiterer Datensatz \n zum Veröffentlichen?",
|
|
16735
16703
|
"datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
|
|
16736
|
-
"datafeeder.publish.title": "Vielen Dank! Ihr Datensatz wird veröffentlicht",
|
|
16704
|
+
"datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
|
|
16737
16705
|
"datafeeder.publish.upload": "Jetzt hochladen",
|
|
16738
16706
|
"datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
|
|
16739
16707
|
"datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
|
|
16740
16708
|
"datafeeder.publishSuccess.mapViewer": "Kartenviewer",
|
|
16741
16709
|
"datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
|
|
16742
|
-
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! Ihr Datensatz wurde veröffentlicht",
|
|
16710
|
+
"datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
|
|
16743
16711
|
"datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
|
|
16744
16712
|
"datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
|
|
16745
16713
|
"datafeeder.summarizePage.previous": "Zurück",
|
|
@@ -16747,11 +16715,11 @@ var de = {
|
|
|
16747
16715
|
"datafeeder.summarizePage.title": "Sie sind fast fertig...",
|
|
16748
16716
|
"datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
|
|
16749
16717
|
"datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
|
|
16750
|
-
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen
|
|
16718
|
+
"datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
|
|
16751
16719
|
"datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
|
|
16752
16720
|
"datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
|
|
16753
|
-
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie:
|
|
16754
|
-
"datafeeder.upload.error.title.analysis": "Fehler
|
|
16721
|
+
"datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
|
|
16722
|
+
"datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
|
|
16755
16723
|
"datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
|
|
16756
16724
|
"datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
|
|
16757
16725
|
"datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
|
|
@@ -16759,19 +16727,19 @@ var de = {
|
|
|
16759
16727
|
"datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
|
|
16760
16728
|
"datafeeder.upload.illustration.enrichment": "Anreicherung",
|
|
16761
16729
|
"datafeeder.upload.illustration.import": "Import",
|
|
16762
|
-
"datafeeder.upload.illustration.title": "Das Hinzufügen von Daten war noch nie
|
|
16730
|
+
"datafeeder.upload.illustration.title": "Das Hinzufügen von Daten \n war noch nie so einfach",
|
|
16763
16731
|
"datafeeder.upload.illustration.validation": "Validierung",
|
|
16764
|
-
"datafeeder.upload.illustration.verification": "
|
|
16732
|
+
"datafeeder.upload.illustration.verification": "Überprüfung",
|
|
16765
16733
|
"datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
|
|
16766
16734
|
"datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
|
|
16767
16735
|
"datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
|
|
16768
16736
|
"datafeeder.upload.uploadButton": "Hochladen",
|
|
16769
|
-
"datafeeder.validation.encoding": "
|
|
16737
|
+
"datafeeder.validation.encoding": "Codierung",
|
|
16770
16738
|
"datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
|
|
16771
16739
|
"datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
|
|
16772
16740
|
"datafeeder.validation.projection": "Raumbezugssystem:",
|
|
16773
|
-
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem",
|
|
16774
|
-
"datafeeder.validation.sample.title": "Und eine
|
|
16741
|
+
"datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem aus",
|
|
16742
|
+
"datafeeder.validation.sample.title": "Und eine Beispielentität aus dem Datensatz",
|
|
16775
16743
|
"datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
|
|
16776
16744
|
"datafeeder.wizardSummarize.createdAt": "Erstellt am",
|
|
16777
16745
|
"datafeeder.wizardSummarize.scale": "Maßstab",
|
|
@@ -16781,20 +16749,20 @@ var de = {
|
|
|
16781
16749
|
"datahub.header.news": "Startseite",
|
|
16782
16750
|
"datahub.header.organisations": "Organisationen",
|
|
16783
16751
|
"datahub.header.popularRecords": "Die beliebtesten",
|
|
16784
|
-
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten
|
|
16785
|
-
"datahub.news.contact.contactus": "",
|
|
16786
|
-
"datahub.news.contact.html": "",
|
|
16787
|
-
"datahub.news.contact.title": "",
|
|
16752
|
+
"datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten meiner Organisation</div>",
|
|
16753
|
+
"datahub.news.contact.contactus": "Kontaktieren Sie uns",
|
|
16754
|
+
"datahub.news.contact.html": "<p>Brauchen Sie Daten, die derzeit nicht auf der Plattform vorhanden sind?</p><p>Unsere Teams stehen Ihnen zur Verfügung.</p>",
|
|
16755
|
+
"datahub.news.contact.title": "Ein spezielles Bedürfnis?",
|
|
16788
16756
|
"datahub.news.feed": "Nachrichtenfeed",
|
|
16789
16757
|
"datahub.news.figures": "Indikatoren",
|
|
16790
|
-
"datahub.record.addToFavorites": "",
|
|
16791
|
-
"datahub.search.back": "Zurück
|
|
16758
|
+
"datahub.record.addToFavorites": "Zu Favoriten hinzufügen",
|
|
16759
|
+
"datahub.search.back": "Zurück",
|
|
16792
16760
|
"datahub.search.filter.all": "Alle",
|
|
16793
|
-
"datahub.search.filter.generatedByWfs": "Generiert durch API",
|
|
16761
|
+
"datahub.search.filter.generatedByWfs": "Generiert durch eine API",
|
|
16794
16762
|
"datahub.search.filter.others": "Andere",
|
|
16795
16763
|
"dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
|
|
16796
16764
|
"dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
|
|
16797
|
-
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht
|
|
16765
|
+
"dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht gelesen werden: \"{ info }\"",
|
|
16798
16766
|
"dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
|
|
16799
16767
|
"dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
|
|
16800
16768
|
"domain.record.status.completed": "Abgeschlossen",
|
|
@@ -16802,18 +16770,18 @@ var de = {
|
|
|
16802
16770
|
"domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
|
|
16803
16771
|
"domain.record.status.removed": "Entfernt",
|
|
16804
16772
|
"domain.record.status.under_development": "In Erstellung",
|
|
16805
|
-
"domain.record.updateFrequency.asNeeded": "
|
|
16806
|
-
"domain.record.updateFrequency.continual": "
|
|
16773
|
+
"domain.record.updateFrequency.asNeeded": "Nach Bedarf",
|
|
16774
|
+
"domain.record.updateFrequency.continual": "Fortlaufend",
|
|
16807
16775
|
"domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
|
|
16808
|
-
"domain.record.updateFrequency.irregular": "
|
|
16776
|
+
"domain.record.updateFrequency.irregular": "Unregelmäßig",
|
|
16809
16777
|
"domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
|
|
16810
16778
|
"domain.record.updateFrequency.notPlanned": "Nicht geplant",
|
|
16811
|
-
"domain.record.updateFrequency.periodic": "
|
|
16779
|
+
"domain.record.updateFrequency.periodic": "Regelmäßig",
|
|
16812
16780
|
"domain.record.updateFrequency.unknown": "Unbekannt",
|
|
16813
16781
|
"domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
|
|
16814
16782
|
"domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
|
|
16815
16783
|
"downloads.format.unknown": "unbekannt",
|
|
16816
|
-
"downloads.wfs.featuretype.not.found": "
|
|
16784
|
+
"downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
|
|
16817
16785
|
dropFile: dropFile$6,
|
|
16818
16786
|
"externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
|
|
16819
16787
|
"facets.block.title.OrgForResource": "Organisation",
|
|
@@ -16848,14 +16816,18 @@ var de = {
|
|
|
16848
16816
|
"map.add.layer.file": "Aus einer Datei",
|
|
16849
16817
|
"map.add.layer.wfs": "Aus WFS",
|
|
16850
16818
|
"map.add.layer.wms": "Aus WMS",
|
|
16851
|
-
"map.
|
|
16852
|
-
"map.
|
|
16819
|
+
"map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
|
|
16820
|
+
"map.geocoding.placeholder": "",
|
|
16821
|
+
"map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
|
|
16822
|
+
"map.layer.add": "Hinzufügen",
|
|
16823
|
+
"map.layers.available": "Verfügbare Layer",
|
|
16853
16824
|
"map.layers.list": "Ebenen",
|
|
16854
16825
|
"map.loading.data": "Kartendaten werden geladen...",
|
|
16855
|
-
"map.loading.service": "",
|
|
16826
|
+
"map.loading.service": "Dienst wird geladen...",
|
|
16856
16827
|
"map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
|
|
16857
16828
|
"map.select.layer": "Datenquelle",
|
|
16858
|
-
"map.
|
|
16829
|
+
"map.wfs.urlInput.hint": "Geben Sie die WFS URL ein",
|
|
16830
|
+
"map.wms.urlInput.hint": "Geben Sie die WMS URL ein",
|
|
16859
16831
|
"multiselect.filter.placeholder": "Suche",
|
|
16860
16832
|
"nav.back": "Zurück",
|
|
16861
16833
|
next: next$6,
|
|
@@ -16871,58 +16843,61 @@ var de = {
|
|
|
16871
16843
|
"pagination.pageOf": "von",
|
|
16872
16844
|
previous: previous$6,
|
|
16873
16845
|
"record.action.download": "Herunterladen",
|
|
16874
|
-
"record.action.view": "
|
|
16846
|
+
"record.action.view": "Anzeigen",
|
|
16875
16847
|
"record.externalViewer.open": "In externem Kartenviewer öffnen",
|
|
16876
16848
|
"record.metadata.about": "Beschreibung",
|
|
16877
16849
|
"record.metadata.api": "API",
|
|
16878
|
-
"record.metadata.api.form.closeButton": "",
|
|
16879
|
-
"record.metadata.api.form.closeForm": "",
|
|
16880
|
-
"record.metadata.api.form.create": "",
|
|
16881
|
-
"record.metadata.api.form.customUrl": "",
|
|
16882
|
-
"record.metadata.api.form.limit": "",
|
|
16883
|
-
"record.metadata.api.form.limit.all": "",
|
|
16884
|
-
"record.metadata.api.form.offset": "",
|
|
16885
|
-
"record.metadata.api.form.openForm": "",
|
|
16886
|
-
"record.metadata.api.form.reset": "",
|
|
16887
|
-
"record.metadata.api.form.title": "",
|
|
16888
|
-
"record.metadata.api.form.type": "",
|
|
16889
|
-
"record.metadata.author": "",
|
|
16850
|
+
"record.metadata.api.form.closeButton": "Schließen",
|
|
16851
|
+
"record.metadata.api.form.closeForm": "Formular schließen",
|
|
16852
|
+
"record.metadata.api.form.create": "Ihre Anfrage erstellen",
|
|
16853
|
+
"record.metadata.api.form.customUrl": "Benutzerdefinierte URL",
|
|
16854
|
+
"record.metadata.api.form.limit": "Anzahl der Datensätze",
|
|
16855
|
+
"record.metadata.api.form.limit.all": "Alle",
|
|
16856
|
+
"record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
|
|
16857
|
+
"record.metadata.api.form.openForm": "Formular öffnen",
|
|
16858
|
+
"record.metadata.api.form.reset": "Zurücksetzen",
|
|
16859
|
+
"record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
|
|
16860
|
+
"record.metadata.api.form.type": "Ausgabeformat",
|
|
16861
|
+
"record.metadata.author": "Autor",
|
|
16890
16862
|
"record.metadata.catalog": "Katalog",
|
|
16891
16863
|
"record.metadata.contact": "Kontakt",
|
|
16892
|
-
"record.metadata.
|
|
16893
|
-
"record.metadata.details": "Details",
|
|
16864
|
+
"record.metadata.details": "Technische Informationen",
|
|
16894
16865
|
"record.metadata.download": "Downloads",
|
|
16895
|
-
"record.metadata.formats": "",
|
|
16896
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16866
|
+
"record.metadata.formats": "Formate",
|
|
16897
16867
|
"record.metadata.keywords": "Stichworte",
|
|
16898
|
-
"record.metadata.lastUpdate": "",
|
|
16868
|
+
"record.metadata.lastUpdate": "Zuletzt aktualisiert am",
|
|
16899
16869
|
"record.metadata.links": "Links",
|
|
16900
|
-
"record.metadata.noUsage": "Für diesen Datensatz sind keine
|
|
16870
|
+
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16901
16871
|
"record.metadata.origin": "Über die Daten",
|
|
16872
|
+
"record.metadata.otherConstraints": "",
|
|
16873
|
+
"record.metadata.owner": "",
|
|
16902
16874
|
"record.metadata.preview": "Vorschau",
|
|
16903
16875
|
"record.metadata.publications": "Veröffentlichungen",
|
|
16904
|
-
"record.metadata.quality": "",
|
|
16905
|
-
"record.metadata.quality.contact.failed": "",
|
|
16906
|
-
"record.metadata.quality.contact.success": "",
|
|
16907
|
-
"record.metadata.quality.description.failed": "",
|
|
16908
|
-
"record.metadata.quality.description.success": "",
|
|
16909
|
-
"record.metadata.quality.details": "",
|
|
16910
|
-
"record.metadata.quality.keywords.failed": "",
|
|
16911
|
-
"record.metadata.quality.keywords.success": "",
|
|
16912
|
-
"record.metadata.quality.legalConstraints.failed": "",
|
|
16913
|
-
"record.metadata.quality.legalConstraints.success": "",
|
|
16914
|
-
"record.metadata.quality.organisation.failed": "",
|
|
16915
|
-
"record.metadata.quality.organisation.success": "",
|
|
16916
|
-
"record.metadata.quality.title.failed": "",
|
|
16917
|
-
"record.metadata.quality.title.success": "",
|
|
16918
|
-
"record.metadata.quality.topic.failed": "",
|
|
16919
|
-
"record.metadata.quality.topic.success": "",
|
|
16920
|
-
"record.metadata.quality.updateFrequency.failed": "",
|
|
16921
|
-
"record.metadata.quality.updateFrequency.success": "",
|
|
16876
|
+
"record.metadata.quality": "Metadatenqualität",
|
|
16877
|
+
"record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
|
|
16878
|
+
"record.metadata.quality.contact.success": "Kontakt angegeben",
|
|
16879
|
+
"record.metadata.quality.description.failed": "Beschreibung nicht angegeben",
|
|
16880
|
+
"record.metadata.quality.description.success": "Beschreibung angegeben",
|
|
16881
|
+
"record.metadata.quality.details": "Details",
|
|
16882
|
+
"record.metadata.quality.keywords.failed": "Schlagwörter nicht angegeben",
|
|
16883
|
+
"record.metadata.quality.keywords.success": "Schlagwörter angegeben",
|
|
16884
|
+
"record.metadata.quality.legalConstraints.failed": "Rechtliche Beschränkungen nicht angegeben",
|
|
16885
|
+
"record.metadata.quality.legalConstraints.success": "Rechtliche Beschränkungen angegeben",
|
|
16886
|
+
"record.metadata.quality.organisation.failed": "Organisation nicht angegeben",
|
|
16887
|
+
"record.metadata.quality.organisation.success": "Organisation angegeben",
|
|
16888
|
+
"record.metadata.quality.title.failed": "Titel nicht angegeben",
|
|
16889
|
+
"record.metadata.quality.title.success": "Titel angegeben",
|
|
16890
|
+
"record.metadata.quality.topic.failed": "Thema nicht angegeben",
|
|
16891
|
+
"record.metadata.quality.topic.success": "Thema angegeben",
|
|
16892
|
+
"record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
|
|
16893
|
+
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
16922
16894
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
16923
|
-
"record.metadata.sheet": "Weitere Informationen
|
|
16895
|
+
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
16896
|
+
"record.metadata.status": "",
|
|
16924
16897
|
"record.metadata.title": "Titel",
|
|
16925
|
-
"record.metadata.
|
|
16898
|
+
"record.metadata.topics": "Kategorien",
|
|
16899
|
+
"record.metadata.type": "Geographischer Datensatz",
|
|
16900
|
+
"record.metadata.uniqueId": "Eindeutige Kennung",
|
|
16926
16901
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
16927
16902
|
"record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
|
|
16928
16903
|
"record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
|
|
@@ -16934,28 +16909,29 @@ var de = {
|
|
|
16934
16909
|
"record.was.created.time": "erstellte diesen Datensatz {time}",
|
|
16935
16910
|
records: records$6,
|
|
16936
16911
|
"results.layout.selectOne": "Layout auswählen",
|
|
16937
|
-
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{
|
|
16938
|
-
"results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie
|
|
16912
|
+
"results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
|
|
16913
|
+
"results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie es mit anderen Worten</li><li>Beschränken Sie die Suchwörter</li></ul>",
|
|
16939
16914
|
"results.records.hits.found": "{hits, plural, =0{Keine Dokumente entsprechen der angegebenen Suche.} one{1 Datensatz gefunden.} other{{hits} Datensätze gefunden.}}",
|
|
16940
|
-
"results.records.hits.selected": "",
|
|
16915
|
+
"results.records.hits.selected": "{ amount } ausgewählt",
|
|
16941
16916
|
"results.showMore": "Mehr Ergebnisse anzeigen...",
|
|
16942
|
-
"results.sortBy.dateStamp": "
|
|
16917
|
+
"results.sortBy.dateStamp": "Neueste",
|
|
16943
16918
|
"results.sortBy.popularity": "Beliebtheit",
|
|
16944
|
-
"results.sortBy.qualityScore": "",
|
|
16919
|
+
"results.sortBy.qualityScore": "Qualitätsbewertung",
|
|
16945
16920
|
"results.sortBy.relevancy": "Relevanz",
|
|
16946
16921
|
"search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
|
|
16947
16922
|
"search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
|
|
16948
|
-
"search.error.receivedError": "Ein Fehler
|
|
16923
|
+
"search.error.receivedError": "Ein Fehler ist aufgetreten",
|
|
16949
16924
|
"search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
|
|
16950
|
-
"search.field.any.placeholder": "Suche
|
|
16925
|
+
"search.field.any.placeholder": "Suche Datensätze ...",
|
|
16951
16926
|
"search.field.sortBy": "Sortieren nach:",
|
|
16952
16927
|
"search.filters.clear": "Zurücksetzen",
|
|
16953
|
-
"search.filters.contact": "
|
|
16928
|
+
"search.filters.contact": "Kontakte",
|
|
16954
16929
|
"search.filters.format": "Formate",
|
|
16955
16930
|
"search.filters.inspireKeyword": "INSPIRE-Schlüsselwort",
|
|
16956
16931
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
16957
16932
|
"search.filters.isSpatial.no": "nicht räumlich",
|
|
16958
16933
|
"search.filters.isSpatial.yes": "räumlich",
|
|
16934
|
+
"search.filters.keyword": "Schlüsselwort",
|
|
16959
16935
|
"search.filters.license": "Lizenz",
|
|
16960
16936
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
16961
16937
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -16968,13 +16944,13 @@ var de = {
|
|
|
16968
16944
|
"search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
|
|
16969
16945
|
"search.filters.maximize": "Erweitern",
|
|
16970
16946
|
"search.filters.minimize": "Minimieren",
|
|
16971
|
-
"search.filters.myRecords": "",
|
|
16972
|
-
"search.filters.myRecordsHelp": "",
|
|
16973
|
-
"search.filters.otherRecords": "",
|
|
16947
|
+
"search.filters.myRecords": "Nur meine Datensätze anzeigen",
|
|
16948
|
+
"search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Datensätze angezeigt; Datensätze, die von anderen erstellt wurden, werden nicht angezeigt.",
|
|
16949
|
+
"search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
|
|
16974
16950
|
"search.filters.publicationYear": "Veröffentlichungsjahr",
|
|
16975
16951
|
"search.filters.publisher": "Organisationen",
|
|
16976
|
-
"search.filters.representationType": "",
|
|
16977
|
-
"search.filters.resourceType": "",
|
|
16952
|
+
"search.filters.representationType": "Repräsentationstyp",
|
|
16953
|
+
"search.filters.resourceType": "Ressourcentyp",
|
|
16978
16954
|
"search.filters.standard": "Standard",
|
|
16979
16955
|
"search.filters.title": "Ergebnisse filtern",
|
|
16980
16956
|
"search.filters.topic": "Thema",
|
|
@@ -16986,6 +16962,7 @@ var de = {
|
|
|
16986
16962
|
"table.object.count": "Objekte in diesem Datensatz",
|
|
16987
16963
|
"table.select.data": "Datenquelle",
|
|
16988
16964
|
"tooltip.html.copy": "HTML kopieren",
|
|
16965
|
+
"tooltip.id.copy": "",
|
|
16989
16966
|
"tooltip.url.copy": "URL kopieren",
|
|
16990
16967
|
"tooltip.url.open": "URL öffnen",
|
|
16991
16968
|
"ui.readLess": "Weniger lesen",
|
|
@@ -17019,20 +16996,21 @@ var en = {
|
|
|
17019
16996
|
"chart.type.line": "line chart",
|
|
17020
16997
|
"chart.type.lineSmooth": "smooth line chart",
|
|
17021
16998
|
"chart.type.pie": "pie chart",
|
|
16999
|
+
"dashboard.createRecord": "New record",
|
|
17022
17000
|
"dashboard.labels.mySpace": "My space",
|
|
17023
|
-
"dashboard.records.all": "
|
|
17001
|
+
"dashboard.records.all": "Metadata records",
|
|
17024
17002
|
"dashboard.records.myDraft": "My drafts",
|
|
17025
17003
|
"dashboard.records.myLibrary": "My library",
|
|
17026
17004
|
"dashboard.records.myOrg": "Organization",
|
|
17027
17005
|
"dashboard.records.myRecords": "My Records",
|
|
17028
|
-
"dashboard.records.noRecord": "No record for this organization",
|
|
17029
|
-
"dashboard.records.noUser": "No users for this organization",
|
|
17030
17006
|
"dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
|
|
17031
17007
|
"dashboard.records.search": "Search for \"{searchText}\"",
|
|
17032
17008
|
"dashboard.records.userDetail": "Name",
|
|
17033
17009
|
"dashboard.records.userEmail": "Email",
|
|
17034
17010
|
"dashboard.records.username": "Username",
|
|
17035
17011
|
"dashboard.records.users": "{count, plural, =1{user} other{users}}",
|
|
17012
|
+
"dashboard.results.listMetadata": "Show metadata",
|
|
17013
|
+
"dashboard.results.listResources": "Show resources",
|
|
17036
17014
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
|
|
17037
17015
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
|
|
17038
17016
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
|
|
@@ -17179,6 +17157,9 @@ var en = {
|
|
|
17179
17157
|
"map.add.layer.file": "From a file",
|
|
17180
17158
|
"map.add.layer.wfs": "From WFS",
|
|
17181
17159
|
"map.add.layer.wms": "From WMS",
|
|
17160
|
+
"map.addFromFile.placeholder": "Click or drop a file here",
|
|
17161
|
+
"map.geocoding.placeholder": "Search for a place",
|
|
17162
|
+
"map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
|
|
17182
17163
|
"map.layer.add": "Add",
|
|
17183
17164
|
"map.layers.available": "Available Layers",
|
|
17184
17165
|
"map.layers.list": "Layers",
|
|
@@ -17186,6 +17167,7 @@ var en = {
|
|
|
17186
17167
|
"map.loading.service": "Loading service...",
|
|
17187
17168
|
"map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
|
|
17188
17169
|
"map.select.layer": "Data source",
|
|
17170
|
+
"map.wfs.urlInput.hint": "Enter WFS service URL",
|
|
17189
17171
|
"map.wms.urlInput.hint": "Enter WMS service URL",
|
|
17190
17172
|
"multiselect.filter.placeholder": "Search",
|
|
17191
17173
|
"nav.back": "Back",
|
|
@@ -17220,44 +17202,47 @@ var en = {
|
|
|
17220
17202
|
"record.metadata.author": "Author",
|
|
17221
17203
|
"record.metadata.catalog": "Catalog",
|
|
17222
17204
|
"record.metadata.contact": "Contact",
|
|
17223
|
-
"record.metadata.
|
|
17224
|
-
"record.metadata.details": "Details",
|
|
17205
|
+
"record.metadata.details": "Technical information",
|
|
17225
17206
|
"record.metadata.download": "Downloads",
|
|
17226
17207
|
"record.metadata.formats": "Formats",
|
|
17227
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17228
17208
|
"record.metadata.keywords": "Keywords",
|
|
17229
17209
|
"record.metadata.lastUpdate": "Last updated on",
|
|
17230
17210
|
"record.metadata.links": "Links",
|
|
17231
17211
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17232
17212
|
"record.metadata.origin": "About the data",
|
|
17213
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17214
|
+
"record.metadata.owner": "Catalog of origin",
|
|
17233
17215
|
"record.metadata.preview": "Preview",
|
|
17234
17216
|
"record.metadata.publications": "publications",
|
|
17235
17217
|
"record.metadata.quality": "Metadata Quality",
|
|
17236
|
-
"record.metadata.quality.contact.failed": "Contact is not
|
|
17237
|
-
"record.metadata.quality.contact.success": "Contact is
|
|
17238
|
-
"record.metadata.quality.description.failed": "Description is not
|
|
17239
|
-
"record.metadata.quality.description.success": "Description is
|
|
17218
|
+
"record.metadata.quality.contact.failed": "Contact is not specified",
|
|
17219
|
+
"record.metadata.quality.contact.success": "Contact is specified",
|
|
17220
|
+
"record.metadata.quality.description.failed": "Description is not specified",
|
|
17221
|
+
"record.metadata.quality.description.success": "Description is specified",
|
|
17240
17222
|
"record.metadata.quality.details": "Details",
|
|
17241
|
-
"record.metadata.quality.keywords.failed": "Keywords are not
|
|
17242
|
-
"record.metadata.quality.keywords.success": "Keywords are
|
|
17243
|
-
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not
|
|
17244
|
-
"record.metadata.quality.legalConstraints.success": "Legal constraints are
|
|
17245
|
-
"record.metadata.quality.organisation.failed": "Organisation is not
|
|
17246
|
-
"record.metadata.quality.organisation.success": "Organisation is
|
|
17247
|
-
"record.metadata.quality.title.failed": "Title is not
|
|
17248
|
-
"record.metadata.quality.title.success": "Title is
|
|
17249
|
-
"record.metadata.quality.topic.failed": "Topic is not
|
|
17250
|
-
"record.metadata.quality.topic.success": "Topic is
|
|
17251
|
-
"record.metadata.quality.updateFrequency.failed": "Update frequency is not
|
|
17252
|
-
"record.metadata.quality.updateFrequency.success": "Update frequency is
|
|
17223
|
+
"record.metadata.quality.keywords.failed": "Keywords are not specified",
|
|
17224
|
+
"record.metadata.quality.keywords.success": "Keywords are specified",
|
|
17225
|
+
"record.metadata.quality.legalConstraints.failed": "Legal constraints are not specified",
|
|
17226
|
+
"record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
|
|
17227
|
+
"record.metadata.quality.organisation.failed": "Organisation is not specified",
|
|
17228
|
+
"record.metadata.quality.organisation.success": "Organisation is specified",
|
|
17229
|
+
"record.metadata.quality.title.failed": "Title is not specified",
|
|
17230
|
+
"record.metadata.quality.title.success": "Title is specified",
|
|
17231
|
+
"record.metadata.quality.topic.failed": "Topic is not specified",
|
|
17232
|
+
"record.metadata.quality.topic.success": "Topic is specified",
|
|
17233
|
+
"record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
|
|
17234
|
+
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
17253
17235
|
"record.metadata.related": "Related records",
|
|
17254
|
-
"record.metadata.sheet": "
|
|
17236
|
+
"record.metadata.sheet": "Original metadata",
|
|
17237
|
+
"record.metadata.status": "Status",
|
|
17255
17238
|
"record.metadata.title": "Title",
|
|
17239
|
+
"record.metadata.topics": "Categories",
|
|
17256
17240
|
"record.metadata.type": "Geographical dataset",
|
|
17241
|
+
"record.metadata.uniqueId": "Unique Identifier",
|
|
17257
17242
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17258
17243
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17259
17244
|
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17260
|
-
"record.metadata.usage": "
|
|
17245
|
+
"record.metadata.usage": "License and Conditions",
|
|
17261
17246
|
"record.more.details": "Read more",
|
|
17262
17247
|
"record.tab.chart": "Chart",
|
|
17263
17248
|
"record.tab.data": "Table",
|
|
@@ -17287,6 +17272,7 @@ var en = {
|
|
|
17287
17272
|
"search.filters.isSpatial": "Is spatial data",
|
|
17288
17273
|
"search.filters.isSpatial.no": "non spatial",
|
|
17289
17274
|
"search.filters.isSpatial.yes": "spatial",
|
|
17275
|
+
"search.filters.keyword": "Keyword",
|
|
17290
17276
|
"search.filters.license": "License",
|
|
17291
17277
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
17292
17278
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17317,6 +17303,7 @@ var en = {
|
|
|
17317
17303
|
"table.object.count": "objects in this dataset",
|
|
17318
17304
|
"table.select.data": "Data source",
|
|
17319
17305
|
"tooltip.html.copy": "Copy HTML",
|
|
17306
|
+
"tooltip.id.copy": "Copy unique identifier",
|
|
17320
17307
|
"tooltip.url.copy": "Copy URL",
|
|
17321
17308
|
"tooltip.url.open": "Open URL",
|
|
17322
17309
|
"ui.readLess": "Read less",
|
|
@@ -17350,20 +17337,21 @@ var es = {
|
|
|
17350
17337
|
"chart.type.line": "gráfico de líneas",
|
|
17351
17338
|
"chart.type.lineSmooth": "gráfico de líneas suave",
|
|
17352
17339
|
"chart.type.pie": "gráfico circular",
|
|
17340
|
+
"dashboard.createRecord": "",
|
|
17353
17341
|
"dashboard.labels.mySpace": "Mi espacio",
|
|
17354
17342
|
"dashboard.records.all": "Catálogo",
|
|
17355
17343
|
"dashboard.records.myDraft": "Mis borradores",
|
|
17356
17344
|
"dashboard.records.myLibrary": "Mi biblioteca",
|
|
17357
17345
|
"dashboard.records.myOrg": "Organización",
|
|
17358
17346
|
"dashboard.records.myRecords": "Mis Registros",
|
|
17359
|
-
"dashboard.records.noRecord": "",
|
|
17360
|
-
"dashboard.records.noUser": "",
|
|
17361
17347
|
"dashboard.records.publishedRecords": "",
|
|
17362
17348
|
"dashboard.records.search": "Buscar \"{searchText}\"",
|
|
17363
17349
|
"dashboard.records.userDetail": "",
|
|
17364
17350
|
"dashboard.records.userEmail": "",
|
|
17365
17351
|
"dashboard.records.username": "",
|
|
17366
17352
|
"dashboard.records.users": "",
|
|
17353
|
+
"dashboard.results.listMetadata": "",
|
|
17354
|
+
"dashboard.results.listResources": "",
|
|
17367
17355
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
17368
17356
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
17369
17357
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -17510,6 +17498,9 @@ var es = {
|
|
|
17510
17498
|
"map.add.layer.file": "",
|
|
17511
17499
|
"map.add.layer.wfs": "",
|
|
17512
17500
|
"map.add.layer.wms": "",
|
|
17501
|
+
"map.addFromFile.placeholder": "",
|
|
17502
|
+
"map.geocoding.placeholder": "",
|
|
17503
|
+
"map.help.addFromFile": "",
|
|
17513
17504
|
"map.layer.add": "",
|
|
17514
17505
|
"map.layers.available": "",
|
|
17515
17506
|
"map.layers.list": "",
|
|
@@ -17517,6 +17508,7 @@ var es = {
|
|
|
17517
17508
|
"map.loading.service": "",
|
|
17518
17509
|
"map.navigation.message": "",
|
|
17519
17510
|
"map.select.layer": "",
|
|
17511
|
+
"map.wfs.urlInput.hint": "",
|
|
17520
17512
|
"map.wms.urlInput.hint": "",
|
|
17521
17513
|
"multiselect.filter.placeholder": "",
|
|
17522
17514
|
"nav.back": "",
|
|
@@ -17551,16 +17543,16 @@ var es = {
|
|
|
17551
17543
|
"record.metadata.author": "",
|
|
17552
17544
|
"record.metadata.catalog": "",
|
|
17553
17545
|
"record.metadata.contact": "",
|
|
17554
|
-
"record.metadata.createdOn": "",
|
|
17555
17546
|
"record.metadata.details": "",
|
|
17556
17547
|
"record.metadata.download": "",
|
|
17557
17548
|
"record.metadata.formats": "",
|
|
17558
|
-
"record.metadata.isOpenData": "",
|
|
17559
17549
|
"record.metadata.keywords": "",
|
|
17560
17550
|
"record.metadata.lastUpdate": "",
|
|
17561
17551
|
"record.metadata.links": "",
|
|
17562
17552
|
"record.metadata.noUsage": "",
|
|
17563
17553
|
"record.metadata.origin": "",
|
|
17554
|
+
"record.metadata.otherConstraints": "",
|
|
17555
|
+
"record.metadata.owner": "",
|
|
17564
17556
|
"record.metadata.preview": "",
|
|
17565
17557
|
"record.metadata.publications": "",
|
|
17566
17558
|
"record.metadata.quality": "",
|
|
@@ -17583,8 +17575,11 @@ var es = {
|
|
|
17583
17575
|
"record.metadata.quality.updateFrequency.success": "",
|
|
17584
17576
|
"record.metadata.related": "",
|
|
17585
17577
|
"record.metadata.sheet": "",
|
|
17578
|
+
"record.metadata.status": "",
|
|
17586
17579
|
"record.metadata.title": "",
|
|
17580
|
+
"record.metadata.topics": "",
|
|
17587
17581
|
"record.metadata.type": "",
|
|
17582
|
+
"record.metadata.uniqueId": "",
|
|
17588
17583
|
"record.metadata.updateFrequency": "",
|
|
17589
17584
|
"record.metadata.updateStatus": "",
|
|
17590
17585
|
"record.metadata.updatedOn": "",
|
|
@@ -17618,6 +17613,7 @@ var es = {
|
|
|
17618
17613
|
"search.filters.isSpatial": "",
|
|
17619
17614
|
"search.filters.isSpatial.no": "",
|
|
17620
17615
|
"search.filters.isSpatial.yes": "",
|
|
17616
|
+
"search.filters.keyword": "",
|
|
17621
17617
|
"search.filters.license": "",
|
|
17622
17618
|
"search.filters.license.cc-by": "",
|
|
17623
17619
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -17648,6 +17644,7 @@ var es = {
|
|
|
17648
17644
|
"table.object.count": "",
|
|
17649
17645
|
"table.select.data": "",
|
|
17650
17646
|
"tooltip.html.copy": "",
|
|
17647
|
+
"tooltip.id.copy": "",
|
|
17651
17648
|
"tooltip.url.copy": "",
|
|
17652
17649
|
"tooltip.url.open": "",
|
|
17653
17650
|
"ui.readLess": "",
|
|
@@ -17681,20 +17678,21 @@ var fr = {
|
|
|
17681
17678
|
"chart.type.line": "ligne",
|
|
17682
17679
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17683
17680
|
"chart.type.pie": "camembert",
|
|
17681
|
+
"dashboard.createRecord": "",
|
|
17684
17682
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17685
17683
|
"dashboard.records.all": "Catalogue",
|
|
17686
17684
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
17687
17685
|
"dashboard.records.myLibrary": "Ma bibliothèque",
|
|
17688
17686
|
"dashboard.records.myOrg": "Mon organisation",
|
|
17689
17687
|
"dashboard.records.myRecords": "Mes fiches publiées",
|
|
17690
|
-
"dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
|
|
17691
|
-
"dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
|
|
17692
17688
|
"dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
|
|
17693
17689
|
"dashboard.records.search": "Résultats pour \"{searchText}\"",
|
|
17694
17690
|
"dashboard.records.userDetail": "Nom",
|
|
17695
17691
|
"dashboard.records.userEmail": "Email",
|
|
17696
17692
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17697
17693
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17694
|
+
"dashboard.results.listMetadata": "",
|
|
17695
|
+
"dashboard.results.listResources": "",
|
|
17698
17696
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17699
17697
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17700
17698
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17776,7 +17774,7 @@ var fr = {
|
|
|
17776
17774
|
"datahub.header.popularRecords": "Les plus appréciées",
|
|
17777
17775
|
"datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
|
|
17778
17776
|
"datahub.news.contact.contactus": "Contactez-nous",
|
|
17779
|
-
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont
|
|
17777
|
+
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont là pour vous répondre.</p>",
|
|
17780
17778
|
"datahub.news.contact.title": "Un besoin spécifique ?",
|
|
17781
17779
|
"datahub.news.feed": "Fil d'activité",
|
|
17782
17780
|
"datahub.news.figures": "Quelques chiffres",
|
|
@@ -17841,6 +17839,9 @@ var fr = {
|
|
|
17841
17839
|
"map.add.layer.file": "",
|
|
17842
17840
|
"map.add.layer.wfs": "",
|
|
17843
17841
|
"map.add.layer.wms": "",
|
|
17842
|
+
"map.addFromFile.placeholder": "",
|
|
17843
|
+
"map.geocoding.placeholder": "",
|
|
17844
|
+
"map.help.addFromFile": "",
|
|
17844
17845
|
"map.layer.add": "",
|
|
17845
17846
|
"map.layers.available": "",
|
|
17846
17847
|
"map.layers.list": "",
|
|
@@ -17848,6 +17849,7 @@ var fr = {
|
|
|
17848
17849
|
"map.loading.service": "",
|
|
17849
17850
|
"map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
|
|
17850
17851
|
"map.select.layer": "Source de données",
|
|
17852
|
+
"map.wfs.urlInput.hint": "",
|
|
17851
17853
|
"map.wms.urlInput.hint": "",
|
|
17852
17854
|
"multiselect.filter.placeholder": "Rechercher",
|
|
17853
17855
|
"nav.back": "Retour",
|
|
@@ -17882,16 +17884,16 @@ var fr = {
|
|
|
17882
17884
|
"record.metadata.author": "Auteur",
|
|
17883
17885
|
"record.metadata.catalog": "Catalogue",
|
|
17884
17886
|
"record.metadata.contact": "Contact",
|
|
17885
|
-
"record.metadata.
|
|
17886
|
-
"record.metadata.details": "Détails",
|
|
17887
|
+
"record.metadata.details": "Informations techniques",
|
|
17887
17888
|
"record.metadata.download": "Téléchargements",
|
|
17888
17889
|
"record.metadata.formats": "Formats",
|
|
17889
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17890
17890
|
"record.metadata.keywords": "Mots clés",
|
|
17891
17891
|
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17892
17892
|
"record.metadata.links": "Liens",
|
|
17893
17893
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17894
17894
|
"record.metadata.origin": "À propos des données",
|
|
17895
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17896
|
+
"record.metadata.owner": "Catalogue d'origine",
|
|
17895
17897
|
"record.metadata.preview": "Aperçu",
|
|
17896
17898
|
"record.metadata.publications": "données",
|
|
17897
17899
|
"record.metadata.quality": "Qualité des métadonnées",
|
|
@@ -17913,13 +17915,16 @@ var fr = {
|
|
|
17913
17915
|
"record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
|
|
17914
17916
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17915
17917
|
"record.metadata.related": "Voir aussi",
|
|
17916
|
-
"record.metadata.sheet": "
|
|
17918
|
+
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17919
|
+
"record.metadata.status": "",
|
|
17917
17920
|
"record.metadata.title": "Titre",
|
|
17921
|
+
"record.metadata.topics": "Catégories",
|
|
17918
17922
|
"record.metadata.type": "Donnée géographique",
|
|
17923
|
+
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17919
17924
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17920
17925
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17921
17926
|
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17922
|
-
"record.metadata.usage": "
|
|
17927
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17923
17928
|
"record.more.details": "Détails",
|
|
17924
17929
|
"record.tab.chart": "Graphique",
|
|
17925
17930
|
"record.tab.data": "Tableau",
|
|
@@ -17949,6 +17954,7 @@ var fr = {
|
|
|
17949
17954
|
"search.filters.isSpatial": "Données spatiales",
|
|
17950
17955
|
"search.filters.isSpatial.no": "non-géolocalisées",
|
|
17951
17956
|
"search.filters.isSpatial.yes": "géolocalisées",
|
|
17957
|
+
"search.filters.keyword": "Mot-clé",
|
|
17952
17958
|
"search.filters.license": "Licence",
|
|
17953
17959
|
"search.filters.license.cc-by": "cc-by",
|
|
17954
17960
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -17979,6 +17985,7 @@ var fr = {
|
|
|
17979
17985
|
"table.object.count": "enregistrements dans ces données",
|
|
17980
17986
|
"table.select.data": "Source de données",
|
|
17981
17987
|
"tooltip.html.copy": "Copier le HTML",
|
|
17988
|
+
"tooltip.id.copy": "Copier l'identifiant unique",
|
|
17982
17989
|
"tooltip.url.copy": "Copier l'URL",
|
|
17983
17990
|
"tooltip.url.open": "Ouvrir l'URL",
|
|
17984
17991
|
"ui.readLess": "Réduire",
|
|
@@ -18012,20 +18019,21 @@ var it = {
|
|
|
18012
18019
|
"chart.type.line": "grafico a linee",
|
|
18013
18020
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
18014
18021
|
"chart.type.pie": "grafico a torta",
|
|
18022
|
+
"dashboard.createRecord": "",
|
|
18015
18023
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
18016
18024
|
"dashboard.records.all": "Catalogo",
|
|
18017
18025
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
18018
18026
|
"dashboard.records.myLibrary": "La mia biblioteca",
|
|
18019
18027
|
"dashboard.records.myOrg": "La mia organizzazione",
|
|
18020
18028
|
"dashboard.records.myRecords": "I miei dati",
|
|
18021
|
-
"dashboard.records.noRecord": "Nessun dati per questa organizzazione",
|
|
18022
|
-
"dashboard.records.noUser": "Nessun utente per questa organizzazione",
|
|
18023
18029
|
"dashboard.records.publishedRecords": "dati pubblicati",
|
|
18024
18030
|
"dashboard.records.search": "Risultati per \"{searchText}\"",
|
|
18025
18031
|
"dashboard.records.userDetail": "Nome",
|
|
18026
18032
|
"dashboard.records.userEmail": "Email",
|
|
18027
18033
|
"dashboard.records.username": "Nome utente",
|
|
18028
18034
|
"dashboard.records.users": "utenti",
|
|
18035
|
+
"dashboard.results.listMetadata": "",
|
|
18036
|
+
"dashboard.results.listResources": "",
|
|
18029
18037
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
18030
18038
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
18031
18039
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18172,6 +18180,9 @@ var it = {
|
|
|
18172
18180
|
"map.add.layer.file": "Da un file",
|
|
18173
18181
|
"map.add.layer.wfs": "Da un WFS",
|
|
18174
18182
|
"map.add.layer.wms": "Da un WMS",
|
|
18183
|
+
"map.addFromFile.placeholder": "",
|
|
18184
|
+
"map.geocoding.placeholder": "",
|
|
18185
|
+
"map.help.addFromFile": "",
|
|
18175
18186
|
"map.layer.add": "",
|
|
18176
18187
|
"map.layers.available": "",
|
|
18177
18188
|
"map.layers.list": "Layers",
|
|
@@ -18179,6 +18190,7 @@ var it = {
|
|
|
18179
18190
|
"map.loading.service": "",
|
|
18180
18191
|
"map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
|
|
18181
18192
|
"map.select.layer": "Sorgente dati",
|
|
18193
|
+
"map.wfs.urlInput.hint": "",
|
|
18182
18194
|
"map.wms.urlInput.hint": "",
|
|
18183
18195
|
"multiselect.filter.placeholder": "Cerca",
|
|
18184
18196
|
"nav.back": "Indietro",
|
|
@@ -18213,16 +18225,16 @@ var it = {
|
|
|
18213
18225
|
"record.metadata.author": "Autore",
|
|
18214
18226
|
"record.metadata.catalog": "Catalogo",
|
|
18215
18227
|
"record.metadata.contact": "Contatto",
|
|
18216
|
-
"record.metadata.
|
|
18217
|
-
"record.metadata.details": "Dettagli",
|
|
18228
|
+
"record.metadata.details": "Informazioni tecniche",
|
|
18218
18229
|
"record.metadata.download": "Download",
|
|
18219
18230
|
"record.metadata.formats": "Formati",
|
|
18220
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18221
18231
|
"record.metadata.keywords": "Parole chiave",
|
|
18222
18232
|
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18223
18233
|
"record.metadata.links": "Collegamenti",
|
|
18224
18234
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18225
18235
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18236
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18237
|
+
"record.metadata.owner": "Catalogo originale",
|
|
18226
18238
|
"record.metadata.preview": "Anteprima",
|
|
18227
18239
|
"record.metadata.publications": "pubblicazioni",
|
|
18228
18240
|
"record.metadata.quality": "Qualità dei metadati",
|
|
@@ -18244,13 +18256,16 @@ var it = {
|
|
|
18244
18256
|
"record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
|
|
18245
18257
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18246
18258
|
"record.metadata.related": "Vedi anche",
|
|
18247
|
-
"record.metadata.sheet": "
|
|
18259
|
+
"record.metadata.sheet": "Origine del metadata",
|
|
18260
|
+
"record.metadata.status": "",
|
|
18248
18261
|
"record.metadata.title": "Titolo",
|
|
18262
|
+
"record.metadata.topics": "Categorie",
|
|
18249
18263
|
"record.metadata.type": "Dati geografici",
|
|
18264
|
+
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18250
18265
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18251
18266
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18252
18267
|
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18253
|
-
"record.metadata.usage": "
|
|
18268
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18254
18269
|
"record.more.details": "Dettagli",
|
|
18255
18270
|
"record.tab.chart": "Grafico",
|
|
18256
18271
|
"record.tab.data": "Tabella",
|
|
@@ -18280,6 +18295,7 @@ var it = {
|
|
|
18280
18295
|
"search.filters.isSpatial": "Dati spaziali",
|
|
18281
18296
|
"search.filters.isSpatial.no": "Non geolocalizzati",
|
|
18282
18297
|
"search.filters.isSpatial.yes": "Geolocalizzati",
|
|
18298
|
+
"search.filters.keyword": "Parola chiave",
|
|
18283
18299
|
"search.filters.license": "Licenza",
|
|
18284
18300
|
"search.filters.license.cc-by": "cc-by",
|
|
18285
18301
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18310,6 +18326,7 @@ var it = {
|
|
|
18310
18326
|
"table.object.count": "record in questi dati",
|
|
18311
18327
|
"table.select.data": "Sorgente dati",
|
|
18312
18328
|
"tooltip.html.copy": "Copiare il HTML",
|
|
18329
|
+
"tooltip.id.copy": "Copiare l'identificatore unico",
|
|
18313
18330
|
"tooltip.url.copy": "Copiare l'URL",
|
|
18314
18331
|
"tooltip.url.open": "Aprire l'URL",
|
|
18315
18332
|
"ui.readLess": "Ridurre",
|
|
@@ -18343,20 +18360,21 @@ var nl = {
|
|
|
18343
18360
|
"chart.type.line": "lijndiagram",
|
|
18344
18361
|
"chart.type.lineSmooth": "glad lijndiagram",
|
|
18345
18362
|
"chart.type.pie": "cirkeldiagram",
|
|
18363
|
+
"dashboard.createRecord": "",
|
|
18346
18364
|
"dashboard.labels.mySpace": "Mijn ruimte",
|
|
18347
18365
|
"dashboard.records.all": "Catalogus",
|
|
18348
18366
|
"dashboard.records.myDraft": "Mijn concepten",
|
|
18349
18367
|
"dashboard.records.myLibrary": "Mijn bibliotheek",
|
|
18350
18368
|
"dashboard.records.myOrg": "Organisatie",
|
|
18351
18369
|
"dashboard.records.myRecords": "Mijn Records",
|
|
18352
|
-
"dashboard.records.noRecord": "",
|
|
18353
|
-
"dashboard.records.noUser": "",
|
|
18354
18370
|
"dashboard.records.publishedRecords": "",
|
|
18355
18371
|
"dashboard.records.search": "Zoeken naar \"{searchText}\"",
|
|
18356
18372
|
"dashboard.records.userDetail": "",
|
|
18357
18373
|
"dashboard.records.userEmail": "",
|
|
18358
18374
|
"dashboard.records.username": "",
|
|
18359
18375
|
"dashboard.records.users": "",
|
|
18376
|
+
"dashboard.results.listMetadata": "",
|
|
18377
|
+
"dashboard.results.listResources": "",
|
|
18360
18378
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18361
18379
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18362
18380
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18503,6 +18521,9 @@ var nl = {
|
|
|
18503
18521
|
"map.add.layer.file": "",
|
|
18504
18522
|
"map.add.layer.wfs": "",
|
|
18505
18523
|
"map.add.layer.wms": "",
|
|
18524
|
+
"map.addFromFile.placeholder": "",
|
|
18525
|
+
"map.geocoding.placeholder": "",
|
|
18526
|
+
"map.help.addFromFile": "",
|
|
18506
18527
|
"map.layer.add": "",
|
|
18507
18528
|
"map.layers.available": "",
|
|
18508
18529
|
"map.layers.list": "",
|
|
@@ -18510,6 +18531,7 @@ var nl = {
|
|
|
18510
18531
|
"map.loading.service": "",
|
|
18511
18532
|
"map.navigation.message": "",
|
|
18512
18533
|
"map.select.layer": "",
|
|
18534
|
+
"map.wfs.urlInput.hint": "",
|
|
18513
18535
|
"map.wms.urlInput.hint": "",
|
|
18514
18536
|
"multiselect.filter.placeholder": "",
|
|
18515
18537
|
"nav.back": "",
|
|
@@ -18544,16 +18566,16 @@ var nl = {
|
|
|
18544
18566
|
"record.metadata.author": "",
|
|
18545
18567
|
"record.metadata.catalog": "",
|
|
18546
18568
|
"record.metadata.contact": "",
|
|
18547
|
-
"record.metadata.createdOn": "",
|
|
18548
18569
|
"record.metadata.details": "",
|
|
18549
18570
|
"record.metadata.download": "",
|
|
18550
18571
|
"record.metadata.formats": "",
|
|
18551
|
-
"record.metadata.isOpenData": "",
|
|
18552
18572
|
"record.metadata.keywords": "",
|
|
18553
18573
|
"record.metadata.lastUpdate": "",
|
|
18554
18574
|
"record.metadata.links": "",
|
|
18555
18575
|
"record.metadata.noUsage": "",
|
|
18556
18576
|
"record.metadata.origin": "",
|
|
18577
|
+
"record.metadata.otherConstraints": "",
|
|
18578
|
+
"record.metadata.owner": "",
|
|
18557
18579
|
"record.metadata.preview": "",
|
|
18558
18580
|
"record.metadata.publications": "",
|
|
18559
18581
|
"record.metadata.quality": "",
|
|
@@ -18576,8 +18598,11 @@ var nl = {
|
|
|
18576
18598
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18577
18599
|
"record.metadata.related": "",
|
|
18578
18600
|
"record.metadata.sheet": "",
|
|
18601
|
+
"record.metadata.status": "",
|
|
18579
18602
|
"record.metadata.title": "",
|
|
18603
|
+
"record.metadata.topics": "",
|
|
18580
18604
|
"record.metadata.type": "",
|
|
18605
|
+
"record.metadata.uniqueId": "",
|
|
18581
18606
|
"record.metadata.updateFrequency": "",
|
|
18582
18607
|
"record.metadata.updateStatus": "",
|
|
18583
18608
|
"record.metadata.updatedOn": "",
|
|
@@ -18611,6 +18636,7 @@ var nl = {
|
|
|
18611
18636
|
"search.filters.isSpatial": "",
|
|
18612
18637
|
"search.filters.isSpatial.no": "",
|
|
18613
18638
|
"search.filters.isSpatial.yes": "",
|
|
18639
|
+
"search.filters.keyword": "",
|
|
18614
18640
|
"search.filters.license": "",
|
|
18615
18641
|
"search.filters.license.cc-by": "",
|
|
18616
18642
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18641,6 +18667,7 @@ var nl = {
|
|
|
18641
18667
|
"table.object.count": "",
|
|
18642
18668
|
"table.select.data": "",
|
|
18643
18669
|
"tooltip.html.copy": "",
|
|
18670
|
+
"tooltip.id.copy": "",
|
|
18644
18671
|
"tooltip.url.copy": "",
|
|
18645
18672
|
"tooltip.url.open": "",
|
|
18646
18673
|
"ui.readLess": "",
|
|
@@ -18674,20 +18701,21 @@ var pt = {
|
|
|
18674
18701
|
"chart.type.line": "gráfico de linha",
|
|
18675
18702
|
"chart.type.lineSmooth": "gráfico de linha suave",
|
|
18676
18703
|
"chart.type.pie": "gráfico de pizza",
|
|
18704
|
+
"dashboard.createRecord": "",
|
|
18677
18705
|
"dashboard.labels.mySpace": "Meu espaço",
|
|
18678
18706
|
"dashboard.records.all": "Catálogo",
|
|
18679
18707
|
"dashboard.records.myDraft": "Meus rascunhos",
|
|
18680
18708
|
"dashboard.records.myLibrary": "Minha biblioteca",
|
|
18681
18709
|
"dashboard.records.myOrg": "Organização",
|
|
18682
18710
|
"dashboard.records.myRecords": "Meus Registros",
|
|
18683
|
-
"dashboard.records.noRecord": "",
|
|
18684
|
-
"dashboard.records.noUser": "",
|
|
18685
18711
|
"dashboard.records.publishedRecords": "",
|
|
18686
18712
|
"dashboard.records.search": "Buscar por \"{searchText}\"",
|
|
18687
18713
|
"dashboard.records.userDetail": "",
|
|
18688
18714
|
"dashboard.records.userEmail": "",
|
|
18689
18715
|
"dashboard.records.username": "",
|
|
18690
18716
|
"dashboard.records.users": "",
|
|
18717
|
+
"dashboard.results.listMetadata": "",
|
|
18718
|
+
"dashboard.results.listResources": "",
|
|
18691
18719
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18692
18720
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18693
18721
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18834,6 +18862,9 @@ var pt = {
|
|
|
18834
18862
|
"map.add.layer.file": "",
|
|
18835
18863
|
"map.add.layer.wfs": "",
|
|
18836
18864
|
"map.add.layer.wms": "",
|
|
18865
|
+
"map.addFromFile.placeholder": "",
|
|
18866
|
+
"map.geocoding.placeholder": "",
|
|
18867
|
+
"map.help.addFromFile": "",
|
|
18837
18868
|
"map.layer.add": "",
|
|
18838
18869
|
"map.layers.available": "",
|
|
18839
18870
|
"map.layers.list": "",
|
|
@@ -18841,6 +18872,7 @@ var pt = {
|
|
|
18841
18872
|
"map.loading.service": "",
|
|
18842
18873
|
"map.navigation.message": "",
|
|
18843
18874
|
"map.select.layer": "",
|
|
18875
|
+
"map.wfs.urlInput.hint": "",
|
|
18844
18876
|
"map.wms.urlInput.hint": "",
|
|
18845
18877
|
"multiselect.filter.placeholder": "",
|
|
18846
18878
|
"nav.back": "",
|
|
@@ -18875,16 +18907,16 @@ var pt = {
|
|
|
18875
18907
|
"record.metadata.author": "",
|
|
18876
18908
|
"record.metadata.catalog": "",
|
|
18877
18909
|
"record.metadata.contact": "",
|
|
18878
|
-
"record.metadata.createdOn": "",
|
|
18879
18910
|
"record.metadata.details": "",
|
|
18880
18911
|
"record.metadata.download": "",
|
|
18881
18912
|
"record.metadata.formats": "",
|
|
18882
|
-
"record.metadata.isOpenData": "",
|
|
18883
18913
|
"record.metadata.keywords": "",
|
|
18884
18914
|
"record.metadata.lastUpdate": "",
|
|
18885
18915
|
"record.metadata.links": "",
|
|
18886
18916
|
"record.metadata.noUsage": "",
|
|
18887
18917
|
"record.metadata.origin": "",
|
|
18918
|
+
"record.metadata.otherConstraints": "",
|
|
18919
|
+
"record.metadata.owner": "",
|
|
18888
18920
|
"record.metadata.preview": "",
|
|
18889
18921
|
"record.metadata.publications": "",
|
|
18890
18922
|
"record.metadata.quality": "",
|
|
@@ -18907,8 +18939,11 @@ var pt = {
|
|
|
18907
18939
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18908
18940
|
"record.metadata.related": "",
|
|
18909
18941
|
"record.metadata.sheet": "",
|
|
18942
|
+
"record.metadata.status": "",
|
|
18910
18943
|
"record.metadata.title": "",
|
|
18944
|
+
"record.metadata.topics": "",
|
|
18911
18945
|
"record.metadata.type": "",
|
|
18946
|
+
"record.metadata.uniqueId": "",
|
|
18912
18947
|
"record.metadata.updateFrequency": "",
|
|
18913
18948
|
"record.metadata.updateStatus": "",
|
|
18914
18949
|
"record.metadata.updatedOn": "",
|
|
@@ -18942,6 +18977,7 @@ var pt = {
|
|
|
18942
18977
|
"search.filters.isSpatial": "",
|
|
18943
18978
|
"search.filters.isSpatial.no": "",
|
|
18944
18979
|
"search.filters.isSpatial.yes": "",
|
|
18980
|
+
"search.filters.keyword": "",
|
|
18945
18981
|
"search.filters.license": "",
|
|
18946
18982
|
"search.filters.license.cc-by": "",
|
|
18947
18983
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18972,6 +19008,7 @@ var pt = {
|
|
|
18972
19008
|
"table.object.count": "",
|
|
18973
19009
|
"table.select.data": "",
|
|
18974
19010
|
"tooltip.html.copy": "",
|
|
19011
|
+
"tooltip.id.copy": "",
|
|
18975
19012
|
"tooltip.url.copy": "",
|
|
18976
19013
|
"tooltip.url.open": "",
|
|
18977
19014
|
"ui.readLess": "",
|
|
@@ -19049,8 +19086,8 @@ class Gn4FieldMapper {
|
|
|
19049
19086
|
},
|
|
19050
19087
|
cl_topic: (output, source) => ({
|
|
19051
19088
|
...output,
|
|
19052
|
-
|
|
19053
|
-
...(output.
|
|
19089
|
+
topics: [
|
|
19090
|
+
...(output.topics || []),
|
|
19054
19091
|
...getAsArray(selectField(source, 'cl_topic')).map((topic) => selectTranslatedValue(topic, this.lang3)),
|
|
19055
19092
|
],
|
|
19056
19093
|
}),
|
|
@@ -19105,31 +19142,22 @@ class Gn4FieldMapper {
|
|
|
19105
19142
|
catalogUuid: selectFallback(selectField(source, 'sourceCatalogue'), 'no title'),
|
|
19106
19143
|
}, output);
|
|
19107
19144
|
},
|
|
19108
|
-
|
|
19145
|
+
allKeywords: (output, source) => ({
|
|
19109
19146
|
...output,
|
|
19110
|
-
keywords:
|
|
19147
|
+
keywords: mapKeywords(selectField(source, 'allKeywords'), this.lang3),
|
|
19111
19148
|
}),
|
|
19112
19149
|
inspireTheme: (output, source) => ({
|
|
19113
19150
|
...output,
|
|
19114
|
-
|
|
19115
|
-
...(output.
|
|
19151
|
+
topics: [
|
|
19152
|
+
...(output.topics || []),
|
|
19116
19153
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19117
19154
|
],
|
|
19118
19155
|
}),
|
|
19119
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19120
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19121
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19122
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19123
|
-
licenseObject: (output, source) => (
|
|
19124
|
-
...output,
|
|
19125
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19126
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19127
|
-
return {
|
|
19128
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19129
|
-
...(link ? { link } : {}),
|
|
19130
|
-
};
|
|
19131
|
-
}),
|
|
19132
|
-
}),
|
|
19156
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19157
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19158
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19159
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19160
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19133
19161
|
lineageObject: (output, source) => ({
|
|
19134
19162
|
...output,
|
|
19135
19163
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19155,33 +19183,78 @@ class Gn4FieldMapper {
|
|
|
19155
19183
|
kind,
|
|
19156
19184
|
};
|
|
19157
19185
|
},
|
|
19186
|
+
geom: (output, source) => {
|
|
19187
|
+
const geoms = getAsArray(selectField(source, 'geom'));
|
|
19188
|
+
const shapes = getAsArray(selectField(source, 'shape'));
|
|
19189
|
+
const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
|
|
19190
|
+
const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
|
|
19191
|
+
return {
|
|
19192
|
+
...output,
|
|
19193
|
+
spatialExtents: [
|
|
19194
|
+
...spatialExtents,
|
|
19195
|
+
...geoms.map((geom, index) => {
|
|
19196
|
+
const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
|
|
19197
|
+
const geometry = shapes[index] ?? geom;
|
|
19198
|
+
return {
|
|
19199
|
+
...(description !== null ? { description } : null),
|
|
19200
|
+
geometry,
|
|
19201
|
+
};
|
|
19202
|
+
}),
|
|
19203
|
+
],
|
|
19204
|
+
};
|
|
19205
|
+
},
|
|
19206
|
+
resourceTemporalDateRange: (output, source) => {
|
|
19207
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
|
|
19208
|
+
return {
|
|
19209
|
+
...output,
|
|
19210
|
+
temporalExtents: ranges.map((range) => {
|
|
19211
|
+
const start = selectField(range, 'gte');
|
|
19212
|
+
const end = selectField(range, 'lte');
|
|
19213
|
+
return {
|
|
19214
|
+
...(start !== null ? { start: toDate(start) } : null),
|
|
19215
|
+
...(end !== null ? { end: toDate(end) } : null),
|
|
19216
|
+
};
|
|
19217
|
+
}),
|
|
19218
|
+
};
|
|
19219
|
+
},
|
|
19158
19220
|
};
|
|
19159
19221
|
this.genericField = (output) => output;
|
|
19160
|
-
this.constraintField = (
|
|
19161
|
-
|
|
19162
|
-
|
|
19163
|
-
|
|
19164
|
-
|
|
19165
|
-
|
|
19166
|
-
|
|
19167
|
-
|
|
19168
|
-
|
|
19169
|
-
|
|
19170
|
-
|
|
19171
|
-
|
|
19172
|
-
|
|
19173
|
-
|
|
19174
|
-
|
|
19175
|
-
|
|
19176
|
-
|
|
19177
|
-
|
|
19178
|
-
|
|
19179
|
-
|
|
19180
|
-
|
|
19181
|
-
|
|
19182
|
-
|
|
19183
|
-
}
|
|
19184
|
-
|
|
19222
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19223
|
+
let outputField;
|
|
19224
|
+
switch (type) {
|
|
19225
|
+
case 'license':
|
|
19226
|
+
outputField = 'licenses';
|
|
19227
|
+
break;
|
|
19228
|
+
case 'legal':
|
|
19229
|
+
outputField = 'legalConstraints';
|
|
19230
|
+
break;
|
|
19231
|
+
case 'security':
|
|
19232
|
+
outputField = 'securityConstraints';
|
|
19233
|
+
break;
|
|
19234
|
+
case 'other':
|
|
19235
|
+
outputField = 'otherConstraints';
|
|
19236
|
+
break;
|
|
19237
|
+
}
|
|
19238
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19239
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19240
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19241
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19242
|
+
return {
|
|
19243
|
+
text,
|
|
19244
|
+
...(url ? { url } : {}),
|
|
19245
|
+
};
|
|
19246
|
+
}));
|
|
19247
|
+
const result = {
|
|
19248
|
+
...output,
|
|
19249
|
+
[outputField]: outputArray,
|
|
19250
|
+
};
|
|
19251
|
+
// avoid legal constraints being duplicates of licenses
|
|
19252
|
+
if ('legalConstraints' in result &&
|
|
19253
|
+
(type === 'legal' || type === 'license')) {
|
|
19254
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19255
|
+
}
|
|
19256
|
+
return result;
|
|
19257
|
+
};
|
|
19185
19258
|
this.mapLink = (sourceLink) => {
|
|
19186
19259
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19187
19260
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19229,17 +19302,6 @@ class Gn4FieldMapper {
|
|
|
19229
19302
|
extras: { ...(output.extras || {}), ...value },
|
|
19230
19303
|
});
|
|
19231
19304
|
}
|
|
19232
|
-
getConstraintsType(indexField) {
|
|
19233
|
-
switch (indexField) {
|
|
19234
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19235
|
-
return 'legal';
|
|
19236
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19237
|
-
return 'security';
|
|
19238
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19239
|
-
default:
|
|
19240
|
-
return 'other';
|
|
19241
|
-
}
|
|
19242
|
-
}
|
|
19243
19305
|
getMappingFn(fieldName) {
|
|
19244
19306
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19245
19307
|
}
|
|
@@ -19301,14 +19363,16 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19301
19363
|
recordUpdated: null,
|
|
19302
19364
|
ownerOrganization: null,
|
|
19303
19365
|
licenses: [],
|
|
19366
|
+
legalConstraints: [],
|
|
19367
|
+
securityConstraints: [],
|
|
19368
|
+
otherConstraints: [],
|
|
19304
19369
|
contacts: [],
|
|
19305
19370
|
contactsForResource: [],
|
|
19306
|
-
accessConstraints: [],
|
|
19307
19371
|
keywords: [],
|
|
19308
|
-
|
|
19309
|
-
useLimitations: [],
|
|
19372
|
+
topics: [],
|
|
19310
19373
|
spatialExtents: [],
|
|
19311
19374
|
temporalExtents: [],
|
|
19375
|
+
overviews: [],
|
|
19312
19376
|
};
|
|
19313
19377
|
const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
|
|
19314
19378
|
return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
|
|
@@ -20073,11 +20137,18 @@ class OrganizationsFromMetadataService {
|
|
|
20073
20137
|
if (!allContactOrgs.length)
|
|
20074
20138
|
return of(record);
|
|
20075
20139
|
const ownerOrganization = allContactOrgs[0];
|
|
20076
|
-
|
|
20140
|
+
// read the owner group as well to have a fallback logo
|
|
20141
|
+
const groupId = selectField(source, 'groupOwner');
|
|
20142
|
+
const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
|
|
20143
|
+
return group.id === Number(groupId);
|
|
20144
|
+
})));
|
|
20145
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
|
|
20077
20146
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
20147
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
|
|
20078
20148
|
return {
|
|
20079
20149
|
...record,
|
|
20080
20150
|
ownerOrganization: {
|
|
20151
|
+
logoUrl,
|
|
20081
20152
|
...ownerOrganization,
|
|
20082
20153
|
...recordOrganisation,
|
|
20083
20154
|
},
|
|
@@ -20342,36 +20413,23 @@ class SelectionService {
|
|
|
20342
20413
|
this.selectedRecordsIdentifiers$.next(filtered);
|
|
20343
20414
|
}
|
|
20344
20415
|
selectRecords(records) {
|
|
20345
|
-
const newIds =
|
|
20346
|
-
|
|
20347
|
-
newIds.push(record.uniqueIdentifier);
|
|
20348
|
-
});
|
|
20349
|
-
const apiResponse = this.selectionsApi.add(BUCKET_ID, newIds);
|
|
20350
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20416
|
+
const newIds = records.map((record) => record.uniqueIdentifier);
|
|
20417
|
+
this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
|
|
20351
20418
|
this.addIdsToSelected(newIds);
|
|
20352
|
-
})
|
|
20419
|
+
});
|
|
20353
20420
|
}
|
|
20354
20421
|
deselectRecords(records) {
|
|
20355
|
-
const idsToBeRemoved =
|
|
20356
|
-
|
|
20357
|
-
idsToBeRemoved.push(record.uniqueIdentifier);
|
|
20358
|
-
});
|
|
20359
|
-
const apiResponse = this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved);
|
|
20360
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20422
|
+
const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
|
|
20423
|
+
this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
|
|
20361
20424
|
this.removeIdsFromSelected(idsToBeRemoved);
|
|
20362
|
-
}), map$2(() => undefined));
|
|
20363
|
-
}
|
|
20364
|
-
clearSelection() {
|
|
20365
|
-
const currentSelectedResponse = this.selectionsApi.get(BUCKET_ID);
|
|
20366
|
-
let currentSelection;
|
|
20367
|
-
this.subscription = currentSelectedResponse.subscribe((value) => {
|
|
20368
|
-
currentSelection = [...value];
|
|
20369
20425
|
});
|
|
20370
|
-
|
|
20371
|
-
|
|
20372
|
-
|
|
20426
|
+
}
|
|
20427
|
+
async clearSelection() {
|
|
20428
|
+
const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
|
|
20429
|
+
const currentSelection = Array.from(response);
|
|
20430
|
+
this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
|
|
20373
20431
|
this.removeIdsFromSelected(currentSelection);
|
|
20374
|
-
})
|
|
20432
|
+
});
|
|
20375
20433
|
}
|
|
20376
20434
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, deps: [{ token: SelectionsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20377
20435
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
@@ -20401,12 +20459,21 @@ class Gn4PlatformMapper {
|
|
|
20401
20459
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
20402
20460
|
return { ...apiUser, id: id.toString() };
|
|
20403
20461
|
}
|
|
20404
|
-
thesaurusFromApi(thesaurus) {
|
|
20462
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
20405
20463
|
return thesaurus.map((keyword) => {
|
|
20406
|
-
|
|
20464
|
+
let key = keyword.uri;
|
|
20465
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
20466
|
+
if (key.indexOf('@@@') > -1) {
|
|
20467
|
+
key = key.split('@@@')[1];
|
|
20468
|
+
}
|
|
20469
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
20470
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
20471
|
+
? keyword.definitions[lang3]
|
|
20472
|
+
: keyword.definition;
|
|
20407
20473
|
return {
|
|
20408
|
-
key
|
|
20409
|
-
label
|
|
20474
|
+
key,
|
|
20475
|
+
label,
|
|
20476
|
+
description,
|
|
20410
20477
|
};
|
|
20411
20478
|
});
|
|
20412
20479
|
}
|
|
@@ -20419,13 +20486,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
20419
20486
|
|
|
20420
20487
|
const minApiVersion = '4.2.2';
|
|
20421
20488
|
class Gn4PlatformService {
|
|
20422
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
|
|
20489
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
20423
20490
|
this.siteApiService = siteApiService;
|
|
20424
20491
|
this.meApi = meApi;
|
|
20425
20492
|
this.usersApi = usersApi;
|
|
20426
20493
|
this.mapper = mapper;
|
|
20427
20494
|
this.toolsApiService = toolsApiService;
|
|
20428
20495
|
this.registriesApiService = registriesApiService;
|
|
20496
|
+
this.langService = langService;
|
|
20429
20497
|
this.type = 'GeoNetwork';
|
|
20430
20498
|
this.keyTranslations$ = this.toolsApiService
|
|
20431
20499
|
.getTranslationsPackage1('gnui')
|
|
@@ -20439,6 +20507,11 @@ class Gn4PlatformService {
|
|
|
20439
20507
|
throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
|
|
20440
20508
|
}
|
|
20441
20509
|
}), shareReplay(1));
|
|
20510
|
+
/**
|
|
20511
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
20512
|
+
* @private
|
|
20513
|
+
*/
|
|
20514
|
+
this.thesauri = {};
|
|
20442
20515
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
20443
20516
|
this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
20444
20517
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
@@ -20465,19 +20538,36 @@ class Gn4PlatformService {
|
|
|
20465
20538
|
return this.users$;
|
|
20466
20539
|
}
|
|
20467
20540
|
translateKey(key) {
|
|
20541
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
20542
|
+
if (key.match(/^https?:\/\//)) {
|
|
20543
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
20544
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
20545
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
|
|
20546
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
|
|
20547
|
+
for (const item of thesaurus) {
|
|
20548
|
+
if (item.key === key)
|
|
20549
|
+
return item.label;
|
|
20550
|
+
}
|
|
20551
|
+
return key;
|
|
20552
|
+
}));
|
|
20553
|
+
}
|
|
20468
20554
|
return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
|
|
20469
20555
|
}
|
|
20470
|
-
|
|
20471
|
-
|
|
20472
|
-
.
|
|
20473
|
-
|
|
20556
|
+
getThesaurusByUri(uri) {
|
|
20557
|
+
if (this.thesauri[uri]) {
|
|
20558
|
+
return this.thesauri[uri];
|
|
20559
|
+
}
|
|
20560
|
+
this.thesauri[uri] = this.registriesApiService
|
|
20561
|
+
.searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
|
|
20562
|
+
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
20563
|
+
return this.thesauri[uri];
|
|
20474
20564
|
}
|
|
20475
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20565
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20476
20566
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
20477
20567
|
}
|
|
20478
20568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
20479
20569
|
type: Injectable
|
|
20480
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
|
|
20570
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
20481
20571
|
|
|
20482
20572
|
function provideGn4() {
|
|
20483
20573
|
return [
|
|
@@ -20689,6 +20779,8 @@ const defaultMapOptions = {
|
|
|
20689
20779
|
};
|
|
20690
20780
|
const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
|
|
20691
20781
|
|
|
20782
|
+
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
20783
|
+
|
|
20692
20784
|
var MapContextLayerTypeEnum;
|
|
20693
20785
|
(function (MapContextLayerTypeEnum) {
|
|
20694
20786
|
MapContextLayerTypeEnum["XYZ"] = "xyz";
|
|
@@ -21064,9 +21156,15 @@ const FORMATS = {
|
|
|
21064
21156
|
color: '#328556',
|
|
21065
21157
|
mimeTypes: ['x-gis/x-shapefile'],
|
|
21066
21158
|
},
|
|
21159
|
+
gml: {
|
|
21160
|
+
extensions: ['gml'],
|
|
21161
|
+
priority: 5,
|
|
21162
|
+
color: '#c92bce',
|
|
21163
|
+
mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
|
|
21164
|
+
},
|
|
21067
21165
|
kml: {
|
|
21068
21166
|
extensions: ['kml', 'kmz'],
|
|
21069
|
-
priority:
|
|
21167
|
+
priority: 6,
|
|
21070
21168
|
color: '#348009',
|
|
21071
21169
|
mimeTypes: [
|
|
21072
21170
|
'application/vnd.google-earth.kml+xml',
|
|
@@ -21075,34 +21173,40 @@ const FORMATS = {
|
|
|
21075
21173
|
},
|
|
21076
21174
|
gpkg: {
|
|
21077
21175
|
extensions: ['gpkg', 'geopackage'],
|
|
21078
|
-
priority:
|
|
21176
|
+
priority: 7,
|
|
21079
21177
|
color: '#ea79ba',
|
|
21080
21178
|
mimeTypes: ['application/geopackage+sqlite3'],
|
|
21081
21179
|
},
|
|
21082
21180
|
zip: {
|
|
21083
21181
|
extensions: ['zip', 'tar.gz'],
|
|
21084
|
-
priority:
|
|
21182
|
+
priority: 8,
|
|
21085
21183
|
color: '#f2bb3a',
|
|
21086
21184
|
mimeTypes: ['application/zip', 'application/x-zip'],
|
|
21087
21185
|
},
|
|
21088
21186
|
pdf: {
|
|
21089
21187
|
extensions: ['pdf'],
|
|
21090
|
-
priority:
|
|
21188
|
+
priority: 9,
|
|
21091
21189
|
color: '#db544a',
|
|
21092
21190
|
mimeTypes: ['application/pdf'],
|
|
21093
21191
|
},
|
|
21094
21192
|
jpg: {
|
|
21095
21193
|
extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
|
|
21096
|
-
priority:
|
|
21194
|
+
priority: 9,
|
|
21097
21195
|
color: '#673ab7',
|
|
21098
21196
|
mimeTypes: ['image/jpg'],
|
|
21099
21197
|
},
|
|
21100
21198
|
svg: {
|
|
21101
21199
|
extensions: ['svg'],
|
|
21102
|
-
priority:
|
|
21200
|
+
priority: 10,
|
|
21103
21201
|
color: '#d98294',
|
|
21104
21202
|
mimeTypes: ['image/svg+xml'],
|
|
21105
21203
|
},
|
|
21204
|
+
dxf: {
|
|
21205
|
+
extensions: ['dxf'],
|
|
21206
|
+
priority: 11,
|
|
21207
|
+
color: '#de630b',
|
|
21208
|
+
mimeTypes: ['application/x-dxf', 'image/x-dxf'],
|
|
21209
|
+
},
|
|
21106
21210
|
};
|
|
21107
21211
|
function getFormatPriority(linkFormat) {
|
|
21108
21212
|
for (const format in FORMATS) {
|
|
@@ -21119,14 +21223,18 @@ function getFormatPriority(linkFormat) {
|
|
|
21119
21223
|
function getLinkPriority(link) {
|
|
21120
21224
|
return getFormatPriority(getFileFormat(link));
|
|
21121
21225
|
}
|
|
21122
|
-
function
|
|
21123
|
-
|
|
21124
|
-
|
|
21125
|
-
|
|
21126
|
-
|
|
21226
|
+
function getFileFormatFromServiceOutput(serviceOutput) {
|
|
21227
|
+
function formatMatcher(format) {
|
|
21228
|
+
const output = serviceOutput.toLowerCase();
|
|
21229
|
+
return (format.extensions.some((extension) => output.includes(extension)) ||
|
|
21230
|
+
format.mimeTypes.some((mimeType) => output.includes(mimeType)));
|
|
21231
|
+
}
|
|
21232
|
+
for (const formatName in FORMATS) {
|
|
21233
|
+
if (formatMatcher(FORMATS[formatName])) {
|
|
21234
|
+
return formatName;
|
|
21127
21235
|
}
|
|
21128
21236
|
}
|
|
21129
|
-
return
|
|
21237
|
+
return null;
|
|
21130
21238
|
}
|
|
21131
21239
|
function getFileFormat(link) {
|
|
21132
21240
|
if ('mimeType' in link) {
|
|
@@ -21267,72 +21375,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21267
21375
|
}]
|
|
21268
21376
|
}] });
|
|
21269
21377
|
|
|
21270
|
-
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
21271
|
-
|
|
21272
|
-
class MapUtilsWMSService {
|
|
21273
|
-
constructor(proxy) {
|
|
21274
|
-
this.proxy = proxy;
|
|
21275
|
-
}
|
|
21276
|
-
getCapabilities(layer) {
|
|
21277
|
-
return from(new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady());
|
|
21278
|
-
}
|
|
21279
|
-
getLayerFull(layer) {
|
|
21280
|
-
return this.getCapabilities(layer).pipe(map$1((endpoint) => endpoint.getLayerByName(layer.name)));
|
|
21281
|
-
}
|
|
21282
|
-
getLayerLonLatBBox(layer) {
|
|
21283
|
-
return this.getLayerFull(layer).pipe(switchMap$1((wmsLayerFull) => from(this.getLonLatBBox(wmsLayerFull))));
|
|
21284
|
-
}
|
|
21285
|
-
async getLonLatBBox(wmsLayerFull) {
|
|
21286
|
-
const { boundingBoxes } = wmsLayerFull;
|
|
21287
|
-
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21288
|
-
if (lonLatCRS) {
|
|
21289
|
-
return boundingBoxes[lonLatCRS];
|
|
21290
|
-
}
|
|
21291
|
-
else {
|
|
21292
|
-
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21293
|
-
register(proj4);
|
|
21294
|
-
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21295
|
-
proj4.defs(availableEPSGCode, proj);
|
|
21296
|
-
const bboxWithFiniteNumbers = [
|
|
21297
|
-
parseFloat(boundingBoxes[availableEPSGCode][0]),
|
|
21298
|
-
parseFloat(boundingBoxes[availableEPSGCode][1]),
|
|
21299
|
-
parseFloat(boundingBoxes[availableEPSGCode][2]),
|
|
21300
|
-
parseFloat(boundingBoxes[availableEPSGCode][3]),
|
|
21301
|
-
];
|
|
21302
|
-
const extent = transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21303
|
-
return extent;
|
|
21304
|
-
}
|
|
21305
|
-
}
|
|
21306
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21307
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, providedIn: 'root' }); }
|
|
21308
|
-
}
|
|
21309
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, decorators: [{
|
|
21310
|
-
type: Injectable,
|
|
21311
|
-
args: [{
|
|
21312
|
-
providedIn: 'root',
|
|
21313
|
-
}]
|
|
21314
|
-
}], ctorParameters: function () { return [{ type: ProxyService }]; } });
|
|
21315
|
-
|
|
21316
21378
|
const FEATURE_PROJECTION = 'EPSG:3857';
|
|
21317
21379
|
const DATA_PROJECTION = 'EPSG:4326';
|
|
21380
|
+
const GEOJSON = new GeoJSON();
|
|
21318
21381
|
class MapUtilsService {
|
|
21319
|
-
constructor(http,
|
|
21382
|
+
constructor(http, proxy) {
|
|
21320
21383
|
this.http = http;
|
|
21321
|
-
this.
|
|
21384
|
+
this.proxy = proxy;
|
|
21322
21385
|
this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
|
|
21323
|
-
|
|
21386
|
+
return GEOJSON.readFeatures(featureCollection, {
|
|
21324
21387
|
featureProjection,
|
|
21325
21388
|
dataProjection,
|
|
21326
21389
|
});
|
|
21327
|
-
return olFeatures;
|
|
21328
21390
|
};
|
|
21329
21391
|
}
|
|
21330
21392
|
createEmptyMap() {
|
|
21331
|
-
|
|
21393
|
+
return new Map$1({
|
|
21332
21394
|
controls: [],
|
|
21333
21395
|
pixelRatio: 1,
|
|
21334
21396
|
});
|
|
21335
|
-
return map;
|
|
21336
21397
|
}
|
|
21337
21398
|
isWMSLayer(layer) {
|
|
21338
21399
|
return (layer.getSource() instanceof TileWMS ||
|
|
@@ -21347,8 +21408,7 @@ class MapUtilsService {
|
|
|
21347
21408
|
...source.getParams(),
|
|
21348
21409
|
INFO_FORMAT: 'application/json',
|
|
21349
21410
|
};
|
|
21350
|
-
|
|
21351
|
-
return url;
|
|
21411
|
+
return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
|
|
21352
21412
|
}
|
|
21353
21413
|
getVectorFeaturesFromClick(olMap, event) {
|
|
21354
21414
|
const features = [];
|
|
@@ -21376,45 +21436,63 @@ class MapUtilsService {
|
|
|
21376
21436
|
/**
|
|
21377
21437
|
* Will emit `null` if no extent could be computed
|
|
21378
21438
|
*/
|
|
21379
|
-
getLayerExtent(layer) {
|
|
21380
|
-
let
|
|
21439
|
+
async getLayerExtent(layer) {
|
|
21440
|
+
let latLonExtent;
|
|
21381
21441
|
if (layer &&
|
|
21382
21442
|
layer.type === 'geojson' &&
|
|
21383
21443
|
'data' in layer &&
|
|
21384
21444
|
typeof layer.data === 'object' &&
|
|
21385
21445
|
layer.data.features[0] &&
|
|
21386
21446
|
layer.data.features[0].geometry) {
|
|
21387
|
-
|
|
21388
|
-
.readFeatures(
|
|
21447
|
+
latLonExtent = new GeoJSON()
|
|
21448
|
+
.readFeatures(layer.data)
|
|
21389
21449
|
.map((feature) => feature.getGeometry())
|
|
21390
21450
|
.filter((geom) => !!geom)
|
|
21391
|
-
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)
|
|
21451
|
+
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
|
|
21392
21452
|
}
|
|
21393
21453
|
else if (layer && layer.type === 'wms') {
|
|
21394
|
-
|
|
21454
|
+
latLonExtent = await this.getWmsLayerExtent(layer);
|
|
21395
21455
|
}
|
|
21396
21456
|
else if (layer && layer.type === 'wmts') {
|
|
21397
21457
|
if (layer.extent) {
|
|
21398
|
-
|
|
21458
|
+
latLonExtent = layer.extent;
|
|
21399
21459
|
}
|
|
21400
21460
|
else {
|
|
21401
|
-
return
|
|
21461
|
+
return layer.options.tileGrid.getExtent();
|
|
21402
21462
|
}
|
|
21403
21463
|
}
|
|
21404
21464
|
else {
|
|
21405
|
-
return
|
|
21465
|
+
return null;
|
|
21406
21466
|
}
|
|
21407
|
-
|
|
21408
|
-
|
|
21409
|
-
|
|
21410
|
-
|
|
21467
|
+
if (!latLonExtent || isEmpty(latLonExtent)) {
|
|
21468
|
+
return null;
|
|
21469
|
+
}
|
|
21470
|
+
return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21411
21471
|
}
|
|
21412
|
-
|
|
21413
|
-
const
|
|
21414
|
-
|
|
21415
|
-
|
|
21416
|
-
|
|
21417
|
-
|
|
21472
|
+
async getWmsLayerExtent(layer) {
|
|
21473
|
+
const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
|
|
21474
|
+
const { boundingBoxes } = endpoint.getLayerByName(layer.name);
|
|
21475
|
+
if (!Object.keys(boundingBoxes).length) {
|
|
21476
|
+
return null;
|
|
21477
|
+
}
|
|
21478
|
+
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21479
|
+
if (lonLatCRS) {
|
|
21480
|
+
return boundingBoxes[lonLatCRS].map(parseFloat);
|
|
21481
|
+
}
|
|
21482
|
+
else {
|
|
21483
|
+
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21484
|
+
register(proj4);
|
|
21485
|
+
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21486
|
+
const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
|
|
21487
|
+
return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21488
|
+
}
|
|
21489
|
+
}
|
|
21490
|
+
getWmtsLayerFromCapabilities(link) {
|
|
21491
|
+
const getCapabilitiesUrl = new URL(link.url, window.location.toString());
|
|
21492
|
+
getCapabilitiesUrl.searchParams.set('SERVICE', 'WMTS');
|
|
21493
|
+
getCapabilitiesUrl.searchParams.set('REQUEST', 'GetCapabilities');
|
|
21494
|
+
return from(fetch(getCapabilitiesUrl.toString())
|
|
21495
|
+
.then(async function (response) {
|
|
21418
21496
|
if (!response.ok) {
|
|
21419
21497
|
throw new Error(`WMTS GetCapabilities HTTP request failed with code ${response.status} and body:
|
|
21420
21498
|
${await response.text()}`);
|
|
@@ -21463,7 +21541,18 @@ ${e.stack || e.message || e}`);
|
|
|
21463
21541
|
])
|
|
21464
21542
|
.getArray());
|
|
21465
21543
|
}
|
|
21466
|
-
|
|
21544
|
+
getRecordExtent(record) {
|
|
21545
|
+
if (!('spatialExtents' in record)) {
|
|
21546
|
+
return null;
|
|
21547
|
+
}
|
|
21548
|
+
// transform an array of geojson geometries into a bbox
|
|
21549
|
+
const totalExtent = record.spatialExtents.reduce((prev, curr) => {
|
|
21550
|
+
const geom = GEOJSON.readGeometry(curr.geometry);
|
|
21551
|
+
return extend(prev, geom.getExtent());
|
|
21552
|
+
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
21553
|
+
return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21554
|
+
}
|
|
21555
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, deps: [{ token: i1.HttpClient }, { token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21467
21556
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
21468
21557
|
}
|
|
21469
21558
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
|
|
@@ -21471,7 +21560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21471
21560
|
args: [{
|
|
21472
21561
|
providedIn: 'root',
|
|
21473
21562
|
}]
|
|
21474
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type:
|
|
21563
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
|
|
21475
21564
|
function dragPanCondition(event) {
|
|
21476
21565
|
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
21477
21566
|
if (!dragPanCondition) {
|
|
@@ -22546,6 +22635,7 @@ const DEFAULT_VIEW = {
|
|
|
22546
22635
|
center: [0, 15],
|
|
22547
22636
|
zoom: 2,
|
|
22548
22637
|
};
|
|
22638
|
+
const WFS_MAX_FEATURES = 10000;
|
|
22549
22639
|
class MapContextService {
|
|
22550
22640
|
constructor(mapUtils, styleService) {
|
|
22551
22641
|
this.mapUtils = mapUtils;
|
|
@@ -22555,6 +22645,9 @@ class MapContextService {
|
|
|
22555
22645
|
if (mapConfig) {
|
|
22556
22646
|
mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
|
|
22557
22647
|
}
|
|
22648
|
+
else {
|
|
22649
|
+
mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
|
|
22650
|
+
}
|
|
22558
22651
|
if (!mapContext.view?.extent &&
|
|
22559
22652
|
(!mapContext.view?.center || !mapContext.view?.zoom)) {
|
|
22560
22653
|
mapContext.view = this.getFallbackView(mapConfig);
|
|
@@ -22604,6 +22697,7 @@ class MapContextService {
|
|
|
22604
22697
|
urlObj.searchParams.set('typename', layerModel.name);
|
|
22605
22698
|
urlObj.searchParams.set('srsname', 'EPSG:3857');
|
|
22606
22699
|
urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
|
|
22700
|
+
urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
|
|
22607
22701
|
return urlObj.toString();
|
|
22608
22702
|
},
|
|
22609
22703
|
strategy: bbox,
|
|
@@ -22664,6 +22758,11 @@ class MapContextService {
|
|
|
22664
22758
|
}
|
|
22665
22759
|
return view;
|
|
22666
22760
|
}
|
|
22761
|
+
addDefaultBaselayerContext(layers) {
|
|
22762
|
+
return layers.includes(DEFAULT_BASELAYER_CONTEXT)
|
|
22763
|
+
? layers
|
|
22764
|
+
: [DEFAULT_BASELAYER_CONTEXT, ...layers];
|
|
22765
|
+
}
|
|
22667
22766
|
mergeMapConfigWithContext(mapContext, mapConfig) {
|
|
22668
22767
|
return {
|
|
22669
22768
|
...mapContext,
|
|
@@ -23151,6 +23250,7 @@ class ThumbnailComponent {
|
|
|
23151
23250
|
constructor(optionalPlaceholderUrl) {
|
|
23152
23251
|
this.optionalPlaceholderUrl = optionalPlaceholderUrl;
|
|
23153
23252
|
this.fit = 'cover';
|
|
23253
|
+
this.placeholderShown = new EventEmitter();
|
|
23154
23254
|
this.placeholderUrl = this.optionalPlaceholderUrl || DEFAULT_PLACEHOLDER;
|
|
23155
23255
|
this.images = [];
|
|
23156
23256
|
}
|
|
@@ -23186,6 +23286,7 @@ class ThumbnailComponent {
|
|
|
23186
23286
|
setNewSrcImage(image) {
|
|
23187
23287
|
this.imgFit = image.fit;
|
|
23188
23288
|
this.imgUrl = image.url;
|
|
23289
|
+
this.placeholderShown.emit(this.isPlaceholder);
|
|
23189
23290
|
}
|
|
23190
23291
|
setPlaceholder() {
|
|
23191
23292
|
this.setNewSrcImage({ url: this.placeholderUrl, fit: 'scale-down' });
|
|
@@ -23208,11 +23309,11 @@ class ThumbnailComponent {
|
|
|
23208
23309
|
}
|
|
23209
23310
|
}
|
|
23210
23311
|
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 }); }
|
|
23211
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23312
|
+
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 }); }
|
|
23212
23313
|
}
|
|
23213
23314
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
|
|
23214
23315
|
type: Component,
|
|
23215
|
-
args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
|
|
23316
|
+
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" }]
|
|
23216
23317
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
23217
23318
|
type: Optional
|
|
23218
23319
|
}, {
|
|
@@ -23228,11 +23329,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23228
23329
|
}], containerElement: [{
|
|
23229
23330
|
type: ViewChild,
|
|
23230
23331
|
args: ['containerElement']
|
|
23332
|
+
}], placeholderShown: [{
|
|
23333
|
+
type: Output
|
|
23231
23334
|
}] } });
|
|
23232
23335
|
|
|
23233
23336
|
class RecordPreviewCardComponent extends RecordPreviewComponent {
|
|
23234
23337
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23235
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23338
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23236
23339
|
}
|
|
23237
23340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
|
|
23238
23341
|
type: Component,
|
|
@@ -23241,7 +23344,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23241
23344
|
|
|
23242
23345
|
class RecordPreviewListComponent extends RecordPreviewComponent {
|
|
23243
23346
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23244
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">, </span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23347
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">, </span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23245
23348
|
}
|
|
23246
23349
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
|
|
23247
23350
|
type: Component,
|
|
@@ -23338,8 +23441,7 @@ class MetadataQualityComponent {
|
|
|
23338
23441
|
: this.calculatedQualityScore;
|
|
23339
23442
|
}
|
|
23340
23443
|
get calculatedQualityScore() {
|
|
23341
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23342
|
-
this.items.length);
|
|
23444
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23343
23445
|
}
|
|
23344
23446
|
showMenu() {
|
|
23345
23447
|
this.isMenuShown = true;
|
|
@@ -23357,7 +23459,7 @@ class MetadataQualityComponent {
|
|
|
23357
23459
|
this.items = [];
|
|
23358
23460
|
this.add('title', !!this.metadata?.title);
|
|
23359
23461
|
this.add('description', !!this.metadata?.abstract);
|
|
23360
|
-
this.add('topic', this.metadata?.
|
|
23462
|
+
this.add('topic', this.metadata?.topics?.length > 0);
|
|
23361
23463
|
this.add('keywords', this.metadata?.keywords?.length > 0);
|
|
23362
23464
|
this.add('legalConstraints', this.metadata?.legalConstraints?.length > 0);
|
|
23363
23465
|
this.add('organisation', !!contact?.organization);
|
|
@@ -23389,7 +23491,7 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
|
|
|
23389
23491
|
this.elementRef = elementRef;
|
|
23390
23492
|
}
|
|
23391
23493
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23392
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23494
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23393
23495
|
}
|
|
23394
23496
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
|
|
23395
23497
|
type: Component,
|
|
@@ -23407,7 +23509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23407
23509
|
|
|
23408
23510
|
class RecordPreviewTitleComponent extends RecordPreviewComponent {
|
|
23409
23511
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23410
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23512
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23411
23513
|
}
|
|
23412
23514
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
|
|
23413
23515
|
type: Component,
|
|
@@ -23447,7 +23549,7 @@ class RecordPreviewFeedComponent extends RecordPreviewComponent {
|
|
|
23447
23549
|
return this.timeFormat.format(this.record.recordCreated, Date.now());
|
|
23448
23550
|
}
|
|
23449
23551
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, deps: [{ token: i0.ElementRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23450
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23552
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23451
23553
|
}
|
|
23452
23554
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
|
|
23453
23555
|
type: Component,
|
|
@@ -23780,6 +23882,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23780
23882
|
args: ['contentDiv']
|
|
23781
23883
|
}] } });
|
|
23782
23884
|
|
|
23885
|
+
class CopyTextButtonComponent {
|
|
23886
|
+
constructor() {
|
|
23887
|
+
this.displayText = true;
|
|
23888
|
+
this.rows = 1;
|
|
23889
|
+
}
|
|
23890
|
+
copyText(event) {
|
|
23891
|
+
navigator.clipboard.writeText(this.text);
|
|
23892
|
+
event.target.blur();
|
|
23893
|
+
}
|
|
23894
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23895
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\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]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\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.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23896
|
+
}
|
|
23897
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
23898
|
+
type: Component,
|
|
23899
|
+
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\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]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
23900
|
+
}], propDecorators: { text: [{
|
|
23901
|
+
type: Input
|
|
23902
|
+
}], tooltipText: [{
|
|
23903
|
+
type: Input
|
|
23904
|
+
}], displayText: [{
|
|
23905
|
+
type: Input
|
|
23906
|
+
}], rows: [{
|
|
23907
|
+
type: Input
|
|
23908
|
+
}] } });
|
|
23909
|
+
|
|
23910
|
+
class MarkdownParserComponent {
|
|
23911
|
+
get parsedMarkdown() {
|
|
23912
|
+
return marked.parse(this.textContent);
|
|
23913
|
+
}
|
|
23914
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23915
|
+
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 }); }
|
|
23916
|
+
}
|
|
23917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23918
|
+
type: Component,
|
|
23919
|
+
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"] }]
|
|
23920
|
+
}], propDecorators: { textContent: [{
|
|
23921
|
+
type: Input
|
|
23922
|
+
}] } });
|
|
23923
|
+
|
|
23783
23924
|
class ContentGhostComponent {
|
|
23784
23925
|
constructor() {
|
|
23785
23926
|
this.ghostClass = '';
|
|
@@ -23934,36 +24075,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23934
24075
|
args: ['container']
|
|
23935
24076
|
}] } });
|
|
23936
24077
|
|
|
23937
|
-
class MarkdownParserComponent {
|
|
23938
|
-
get parsedMarkdown() {
|
|
23939
|
-
return marked.parse(this.textContent);
|
|
23940
|
-
}
|
|
23941
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23942
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /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 /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /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 /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 /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23943
|
-
}
|
|
23944
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23945
|
-
type: Component,
|
|
23946
|
-
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /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 /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /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 /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 /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"] }]
|
|
23947
|
-
}], propDecorators: { textContent: [{
|
|
23948
|
-
type: Input
|
|
23949
|
-
}] } });
|
|
23950
|
-
|
|
23951
24078
|
class MetadataInfoComponent {
|
|
23952
24079
|
constructor() {
|
|
23953
24080
|
this.keyword = new EventEmitter();
|
|
23954
24081
|
}
|
|
23955
24082
|
get hasUsage() {
|
|
23956
24083
|
return (this.metadata.extras?.isOpenData === true ||
|
|
23957
|
-
this.metadata.
|
|
23958
|
-
|
|
24084
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
24085
|
+
this.legalConstraints.length > 0) ||
|
|
24086
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
24087
|
+
this.otherConstraints.length > 0) ||
|
|
24088
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
23959
24089
|
}
|
|
23960
|
-
get
|
|
24090
|
+
get legalConstraints() {
|
|
23961
24091
|
let array = [];
|
|
23962
|
-
if (this.metadata.
|
|
23963
|
-
array = array.concat(this.metadata.
|
|
24092
|
+
if (this.metadata.legalConstraints?.length) {
|
|
24093
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
23964
24094
|
}
|
|
23965
|
-
|
|
23966
|
-
|
|
24095
|
+
return array;
|
|
24096
|
+
}
|
|
24097
|
+
get otherConstraints() {
|
|
24098
|
+
let array = [];
|
|
24099
|
+
if (this.metadata.otherConstraints?.length) {
|
|
24100
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24101
|
+
}
|
|
24102
|
+
return array;
|
|
24103
|
+
}
|
|
24104
|
+
get licenses() {
|
|
24105
|
+
let array = [];
|
|
24106
|
+
if (this.metadata.licenses?.length) {
|
|
24107
|
+
array = array.concat(this.metadata.licenses
|
|
24108
|
+
.filter((c) => c.text)
|
|
24109
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
23967
24110
|
}
|
|
23968
24111
|
return array;
|
|
23969
24112
|
}
|
|
@@ -23986,11 +24129,11 @@ class MetadataInfoComponent {
|
|
|
23986
24129
|
this.keyword.emit(keyword);
|
|
23987
24130
|
}
|
|
23988
24131
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23989
|
-
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: "<
|
|
24132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [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 class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.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 *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</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: "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 }); }
|
|
23990
24133
|
}
|
|
23991
24134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
23992
24135
|
type: Component,
|
|
23993
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<
|
|
24136
|
+
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [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 class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.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 *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</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"] }]
|
|
23994
24137
|
}], propDecorators: { metadata: [{
|
|
23995
24138
|
type: Input
|
|
23996
24139
|
}], incomplete: [{
|
|
@@ -24059,11 +24202,11 @@ class ButtonComponent {
|
|
|
24059
24202
|
propagateToDocumentOnly(event);
|
|
24060
24203
|
}
|
|
24061
24204
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24062
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host
|
|
24205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24063
24206
|
}
|
|
24064
24207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
24065
24208
|
type: Component,
|
|
24066
|
-
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host
|
|
24209
|
+
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
|
|
24067
24210
|
}], propDecorators: { type: [{
|
|
24068
24211
|
type: Input
|
|
24069
24212
|
}], disabled: [{
|
|
@@ -24138,40 +24281,15 @@ class DownloadsListComponent {
|
|
|
24138
24281
|
return link.type === 'service' && link.accessServiceProtocol === 'wfs';
|
|
24139
24282
|
}
|
|
24140
24283
|
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 }); }
|
|
24141
|
-
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
|
|
24284
|
+
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 }); }
|
|
24142
24285
|
}
|
|
24143
24286
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
|
|
24144
24287
|
type: Component,
|
|
24145
|
-
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
|
|
24288
|
+
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" }]
|
|
24146
24289
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
|
|
24147
24290
|
type: Input
|
|
24148
24291
|
}] } });
|
|
24149
24292
|
|
|
24150
|
-
class CopyTextButtonComponent {
|
|
24151
|
-
constructor() {
|
|
24152
|
-
this.displayText = true;
|
|
24153
|
-
this.rows = 1;
|
|
24154
|
-
}
|
|
24155
|
-
copyText(event) {
|
|
24156
|
-
navigator.clipboard.writeText(this.text);
|
|
24157
|
-
event.target.blur();
|
|
24158
|
-
}
|
|
24159
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24160
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\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]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\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.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24161
|
-
}
|
|
24162
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
|
|
24163
|
-
type: Component,
|
|
24164
|
-
args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\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]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
|
|
24165
|
-
}], propDecorators: { text: [{
|
|
24166
|
-
type: Input
|
|
24167
|
-
}], tooltipText: [{
|
|
24168
|
-
type: Input
|
|
24169
|
-
}], displayText: [{
|
|
24170
|
-
type: Input
|
|
24171
|
-
}], rows: [{
|
|
24172
|
-
type: Input
|
|
24173
|
-
}] } });
|
|
24174
|
-
|
|
24175
24293
|
class ApiCardComponent {
|
|
24176
24294
|
constructor() {
|
|
24177
24295
|
this.currentlyActive = false;
|
|
@@ -24368,11 +24486,11 @@ class CarouselComponent {
|
|
|
24368
24486
|
this.emblaApi.scrollTo(stepIndex);
|
|
24369
24487
|
}
|
|
24370
24488
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24371
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container
|
|
24489
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24372
24490
|
}
|
|
24373
24491
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
|
|
24374
24492
|
type: Component,
|
|
24375
|
-
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container
|
|
24493
|
+
args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
|
|
24376
24494
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
|
|
24377
24495
|
type: Input
|
|
24378
24496
|
}], stepsContainerClass: [{
|
|
@@ -24416,6 +24534,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24416
24534
|
}]
|
|
24417
24535
|
}] });
|
|
24418
24536
|
|
|
24537
|
+
class InteractiveTableColumnComponent {
|
|
24538
|
+
constructor() {
|
|
24539
|
+
this.grow = false;
|
|
24540
|
+
this.sortable = false;
|
|
24541
|
+
this.activeSort = null;
|
|
24542
|
+
this.sortChange = new EventEmitter();
|
|
24543
|
+
}
|
|
24544
|
+
handleSortChange() {
|
|
24545
|
+
this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
|
|
24546
|
+
this.sortChange.emit(this.activeSort);
|
|
24547
|
+
}
|
|
24548
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24549
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableColumnComponent, isStandalone: true, selector: "gn-ui-interactive-table-column", inputs: { grow: "grow", sortable: "sortable", activeSort: "activeSort" }, outputs: { sortChange: "sortChange" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "cell", first: true, predicate: ["cell"], descendants: true }], ngImport: i0, template: "<span>empty</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24550
|
+
}
|
|
24551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
|
|
24552
|
+
type: Component,
|
|
24553
|
+
args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
|
|
24554
|
+
}], propDecorators: { header: [{
|
|
24555
|
+
type: ContentChild,
|
|
24556
|
+
args: ['header']
|
|
24557
|
+
}], cell: [{
|
|
24558
|
+
type: ContentChild,
|
|
24559
|
+
args: ['cell']
|
|
24560
|
+
}], grow: [{
|
|
24561
|
+
type: Input
|
|
24562
|
+
}], sortable: [{
|
|
24563
|
+
type: Input
|
|
24564
|
+
}], activeSort: [{
|
|
24565
|
+
type: Input
|
|
24566
|
+
}], sortChange: [{
|
|
24567
|
+
type: Output
|
|
24568
|
+
}] } });
|
|
24569
|
+
|
|
24570
|
+
class InteractiveTableComponent {
|
|
24571
|
+
constructor() {
|
|
24572
|
+
this.items = [];
|
|
24573
|
+
this.itemClick = new EventEmitter();
|
|
24574
|
+
}
|
|
24575
|
+
get gridStyle() {
|
|
24576
|
+
return {
|
|
24577
|
+
'grid-template-columns': this.columns
|
|
24578
|
+
.map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
|
|
24579
|
+
.join(' '),
|
|
24580
|
+
};
|
|
24581
|
+
}
|
|
24582
|
+
handleRowClick(item) {
|
|
24583
|
+
this.itemClick.emit(item);
|
|
24584
|
+
}
|
|
24585
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24586
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items" }, outputs: { itemClick: "itemClick" }, queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"], 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: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24587
|
+
}
|
|
24588
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
24589
|
+
type: Component,
|
|
24590
|
+
args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, InteractiveTableColumnComponent, MatIconModule], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"] }]
|
|
24591
|
+
}], propDecorators: { columns: [{
|
|
24592
|
+
type: ContentChildren,
|
|
24593
|
+
args: [InteractiveTableColumnComponent]
|
|
24594
|
+
}], items: [{
|
|
24595
|
+
type: Input
|
|
24596
|
+
}], itemClick: [{
|
|
24597
|
+
type: Output
|
|
24598
|
+
}] } });
|
|
24599
|
+
|
|
24419
24600
|
class LinkCardComponent {
|
|
24420
24601
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24421
24602
|
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 }); }
|
|
@@ -24429,11 +24610,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24429
24610
|
|
|
24430
24611
|
class RelatedRecordCardComponent {
|
|
24431
24612
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24432
|
-
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]
|
|
24613
|
+
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.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$5.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 }); }
|
|
24433
24614
|
}
|
|
24434
24615
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
|
|
24435
24616
|
type: Component,
|
|
24436
|
-
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]
|
|
24617
|
+
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" }]
|
|
24437
24618
|
}], propDecorators: { record: [{
|
|
24438
24619
|
type: Input
|
|
24439
24620
|
}] } });
|
|
@@ -24461,11 +24642,11 @@ class MetadataContactComponent {
|
|
|
24461
24642
|
this.organizationClick.emit(this.shownOrganization);
|
|
24462
24643
|
}
|
|
24463
24644
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24464
|
-
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
|
|
24645
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24465
24646
|
}
|
|
24466
24647
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24467
24648
|
type: Component,
|
|
24468
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24649
|
+
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
24469
24650
|
}], propDecorators: { metadata: [{
|
|
24470
24651
|
type: Input
|
|
24471
24652
|
}], organizationClick: [{
|
|
@@ -24869,11 +25050,11 @@ class DropdownMultiselectComponent {
|
|
|
24869
25050
|
this.setFocus();
|
|
24870
25051
|
}
|
|
24871
25052
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24872
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
25053
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24873
25054
|
}
|
|
24874
25055
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24875
25056
|
type: Component,
|
|
24876
|
-
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
25057
|
+
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
24877
25058
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24878
25059
|
type: Input
|
|
24879
25060
|
}], choices: [{
|
|
@@ -25027,11 +25208,11 @@ class TextAreaComponent {
|
|
|
25027
25208
|
this.rawChange.next(value);
|
|
25028
25209
|
}
|
|
25029
25210
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25030
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25211
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25031
25212
|
}
|
|
25032
25213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
25033
25214
|
type: Component,
|
|
25034
|
-
args: [{ selector: 'gn-ui-text-area', template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25215
|
+
args: [{ selector: 'gn-ui-text-area', standalone: true, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25035
25216
|
}], propDecorators: { value: [{
|
|
25036
25217
|
type: Input
|
|
25037
25218
|
}], placeholder: [{
|
|
@@ -25132,11 +25313,11 @@ class AutocompleteComponent {
|
|
|
25132
25313
|
}
|
|
25133
25314
|
}
|
|
25134
25315
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25135
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25316
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\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: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { 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"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25136
25317
|
}
|
|
25137
25318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
25138
25319
|
type: Component,
|
|
25139
|
-
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25320
|
+
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
|
|
25140
25321
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
25141
25322
|
type: Input
|
|
25142
25323
|
}], action: [{
|
|
@@ -25301,11 +25482,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25301
25482
|
|
|
25302
25483
|
class NavigationButtonComponent {
|
|
25303
25484
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25304
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30
|
|
25485
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25305
25486
|
}
|
|
25306
25487
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
25307
25488
|
type: Component,
|
|
25308
|
-
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30
|
|
25489
|
+
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
|
|
25309
25490
|
}], propDecorators: { label: [{
|
|
25310
25491
|
type: Input
|
|
25311
25492
|
}], icon: [{
|
|
@@ -25512,11 +25693,11 @@ class CheckboxComponent {
|
|
|
25512
25693
|
this.changed.emit(this.checked);
|
|
25513
25694
|
}
|
|
25514
25695
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25515
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25696
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25516
25697
|
}
|
|
25517
25698
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
25518
25699
|
type: Component,
|
|
25519
|
-
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25700
|
+
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
|
|
25520
25701
|
}], propDecorators: { type: [{
|
|
25521
25702
|
type: Input
|
|
25522
25703
|
}], checked: [{
|
|
@@ -25571,14 +25752,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25571
25752
|
args: [{ selector: 'gn-ui-date-range-picker', template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
25572
25753
|
}] });
|
|
25573
25754
|
|
|
25755
|
+
class EditableLabelDirective {
|
|
25756
|
+
constructor(el, renderer) {
|
|
25757
|
+
this.el = el;
|
|
25758
|
+
this.renderer = renderer;
|
|
25759
|
+
this.editableLabelChanged = new EventEmitter();
|
|
25760
|
+
}
|
|
25761
|
+
ngAfterViewInit() {
|
|
25762
|
+
if (this.gnUiEditableLabel !== false) {
|
|
25763
|
+
const appendedInput = this.renderer.createElement('input');
|
|
25764
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
25765
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
25766
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
25767
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
25768
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
25769
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
25770
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
25771
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
25772
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
25773
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
25774
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
25775
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
25776
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
25777
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
25778
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
25779
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
25780
|
+
});
|
|
25781
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
25782
|
+
}
|
|
25783
|
+
}
|
|
25784
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25785
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
|
|
25786
|
+
}
|
|
25787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25788
|
+
type: Directive,
|
|
25789
|
+
args: [{
|
|
25790
|
+
selector: '[gnUiEditableLabel]',
|
|
25791
|
+
standalone: true,
|
|
25792
|
+
}]
|
|
25793
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25794
|
+
type: Output
|
|
25795
|
+
}], gnUiEditableLabel: [{
|
|
25796
|
+
type: Input
|
|
25797
|
+
}] } });
|
|
25798
|
+
|
|
25574
25799
|
class UiInputsModule {
|
|
25575
25800
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25576
25801
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
25577
25802
|
AutocompleteComponent,
|
|
25578
|
-
ButtonComponent,
|
|
25579
25803
|
TextInputComponent,
|
|
25580
25804
|
DragAndDropFileInputComponent,
|
|
25581
|
-
TextAreaComponent,
|
|
25582
25805
|
ChipsInputComponent,
|
|
25583
25806
|
NavigationButtonComponent,
|
|
25584
25807
|
StarToggleComponent,
|
|
@@ -25610,7 +25833,10 @@ class UiInputsModule {
|
|
|
25610
25833
|
MatFormFieldModule,
|
|
25611
25834
|
MatInputModule,
|
|
25612
25835
|
MatDatepickerModule,
|
|
25613
|
-
MatNativeDateModule
|
|
25836
|
+
MatNativeDateModule,
|
|
25837
|
+
EditableLabelDirective,
|
|
25838
|
+
TextAreaComponent,
|
|
25839
|
+
ButtonComponent], exports: [DropdownSelectorComponent,
|
|
25614
25840
|
AutocompleteComponent,
|
|
25615
25841
|
ButtonComponent,
|
|
25616
25842
|
TextInputComponent,
|
|
@@ -25626,7 +25852,8 @@ class UiInputsModule {
|
|
|
25626
25852
|
CopyTextButtonComponent,
|
|
25627
25853
|
CheckboxComponent,
|
|
25628
25854
|
SearchInputComponent,
|
|
25629
|
-
DateRangePickerComponent
|
|
25855
|
+
DateRangePickerComponent,
|
|
25856
|
+
EditableLabelDirective] }); }
|
|
25630
25857
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25631
25858
|
TranslateModule.forChild(),
|
|
25632
25859
|
NgxDropzoneModule,
|
|
@@ -25651,10 +25878,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25651
25878
|
declarations: [
|
|
25652
25879
|
DropdownSelectorComponent,
|
|
25653
25880
|
AutocompleteComponent,
|
|
25654
|
-
ButtonComponent,
|
|
25655
25881
|
TextInputComponent,
|
|
25656
25882
|
DragAndDropFileInputComponent,
|
|
25657
|
-
TextAreaComponent,
|
|
25658
25883
|
ChipsInputComponent,
|
|
25659
25884
|
NavigationButtonComponent,
|
|
25660
25885
|
StarToggleComponent,
|
|
@@ -25692,6 +25917,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25692
25917
|
MatInputModule,
|
|
25693
25918
|
MatDatepickerModule,
|
|
25694
25919
|
MatNativeDateModule,
|
|
25920
|
+
EditableLabelDirective,
|
|
25921
|
+
TextAreaComponent,
|
|
25922
|
+
ButtonComponent,
|
|
25695
25923
|
],
|
|
25696
25924
|
exports: [
|
|
25697
25925
|
DropdownSelectorComponent,
|
|
@@ -25711,6 +25939,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25711
25939
|
CheckboxComponent,
|
|
25712
25940
|
SearchInputComponent,
|
|
25713
25941
|
DateRangePickerComponent,
|
|
25942
|
+
EditableLabelDirective,
|
|
25714
25943
|
],
|
|
25715
25944
|
}]
|
|
25716
25945
|
}] });
|
|
@@ -25810,7 +26039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25810
26039
|
|
|
25811
26040
|
const DEFAULT_PARAMS = {
|
|
25812
26041
|
OFFSET: '',
|
|
25813
|
-
LIMIT: '',
|
|
26042
|
+
LIMIT: '-1',
|
|
25814
26043
|
FORMAT: 'json',
|
|
25815
26044
|
};
|
|
25816
26045
|
class RecordApiFormComponent {
|
|
@@ -25839,6 +26068,8 @@ class RecordApiFormComponent {
|
|
|
25839
26068
|
}
|
|
25840
26069
|
return outputUrl;
|
|
25841
26070
|
}));
|
|
26071
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26072
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25842
26073
|
}
|
|
25843
26074
|
set apiLink(value) {
|
|
25844
26075
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25848,10 +26079,11 @@ class RecordApiFormComponent {
|
|
|
25848
26079
|
this.offset$.next(value);
|
|
25849
26080
|
}
|
|
25850
26081
|
setLimit(value) {
|
|
25851
|
-
|
|
26082
|
+
const newLimit = value === '' ? '-1' : value;
|
|
26083
|
+
this.limit$.next(newLimit);
|
|
25852
26084
|
}
|
|
25853
26085
|
setFormat(value) {
|
|
25854
|
-
this.format$.next(value);
|
|
26086
|
+
this.format$.next(String(value));
|
|
25855
26087
|
}
|
|
25856
26088
|
resetUrl() {
|
|
25857
26089
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25859,15 +26091,34 @@ class RecordApiFormComponent {
|
|
|
25859
26091
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25860
26092
|
}
|
|
25861
26093
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25862
|
-
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 (
|
|
26094
|
+
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 }); }
|
|
25863
26095
|
}
|
|
25864
26096
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25865
26097
|
type: Component,
|
|
25866
|
-
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 (
|
|
26098
|
+
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"] }]
|
|
25867
26099
|
}], propDecorators: { apiLink: [{
|
|
25868
26100
|
type: Input
|
|
25869
26101
|
}] } });
|
|
25870
26102
|
|
|
26103
|
+
class ImageOverlayPreviewComponent {
|
|
26104
|
+
constructor() {
|
|
26105
|
+
this.isPlaceholderShown = new EventEmitter();
|
|
26106
|
+
}
|
|
26107
|
+
openLightbox(src) {
|
|
26108
|
+
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
26109
|
+
}
|
|
26110
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26111
|
+
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"] }] }); }
|
|
26112
|
+
}
|
|
26113
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
26114
|
+
type: Component,
|
|
26115
|
+
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" }]
|
|
26116
|
+
}], propDecorators: { imageUrl: [{
|
|
26117
|
+
type: Input
|
|
26118
|
+
}], isPlaceholderShown: [{
|
|
26119
|
+
type: Output
|
|
26120
|
+
}] } });
|
|
26121
|
+
|
|
25871
26122
|
class UiElementsModule {
|
|
25872
26123
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25873
26124
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
|
|
@@ -25890,7 +26141,7 @@ class UiElementsModule {
|
|
|
25890
26141
|
PaginationButtonsComponent,
|
|
25891
26142
|
MaxLinesComponent,
|
|
25892
26143
|
RecordApiFormComponent,
|
|
25893
|
-
|
|
26144
|
+
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
25894
26145
|
MatIconModule,
|
|
25895
26146
|
MatTooltipModule,
|
|
25896
26147
|
UiWidgetsModule,
|
|
@@ -25898,7 +26149,8 @@ class UiElementsModule {
|
|
|
25898
26149
|
RouterModule,
|
|
25899
26150
|
UiInputsModule,
|
|
25900
26151
|
FormsModule,
|
|
25901
|
-
NgOptimizedImage
|
|
26152
|
+
NgOptimizedImage,
|
|
26153
|
+
MarkdownParserComponent], exports: [MetadataInfoComponent,
|
|
25902
26154
|
ContentGhostComponent,
|
|
25903
26155
|
DownloadItemComponent,
|
|
25904
26156
|
DownloadsListComponent,
|
|
@@ -25915,8 +26167,10 @@ class UiElementsModule {
|
|
|
25915
26167
|
AvatarComponent,
|
|
25916
26168
|
UserPreviewComponent,
|
|
25917
26169
|
PaginationButtonsComponent,
|
|
26170
|
+
MaxLinesComponent,
|
|
25918
26171
|
RecordApiFormComponent,
|
|
25919
|
-
MarkdownParserComponent
|
|
26172
|
+
MarkdownParserComponent,
|
|
26173
|
+
ImageOverlayPreviewComponent] }); }
|
|
25920
26174
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
|
|
25921
26175
|
MatIconModule,
|
|
25922
26176
|
MatTooltipModule,
|
|
@@ -25943,6 +26197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25943
26197
|
UiInputsModule,
|
|
25944
26198
|
FormsModule,
|
|
25945
26199
|
NgOptimizedImage,
|
|
26200
|
+
MarkdownParserComponent,
|
|
25946
26201
|
],
|
|
25947
26202
|
declarations: [
|
|
25948
26203
|
MetadataInfoComponent,
|
|
@@ -25965,7 +26220,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25965
26220
|
PaginationButtonsComponent,
|
|
25966
26221
|
MaxLinesComponent,
|
|
25967
26222
|
RecordApiFormComponent,
|
|
25968
|
-
|
|
26223
|
+
ImageOverlayPreviewComponent,
|
|
25969
26224
|
],
|
|
25970
26225
|
exports: [
|
|
25971
26226
|
MetadataInfoComponent,
|
|
@@ -25985,149 +26240,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25985
26240
|
AvatarComponent,
|
|
25986
26241
|
UserPreviewComponent,
|
|
25987
26242
|
PaginationButtonsComponent,
|
|
26243
|
+
MaxLinesComponent,
|
|
25988
26244
|
RecordApiFormComponent,
|
|
25989
26245
|
MarkdownParserComponent,
|
|
26246
|
+
ImageOverlayPreviewComponent,
|
|
25990
26247
|
],
|
|
25991
26248
|
}]
|
|
25992
26249
|
}] });
|
|
25993
26250
|
|
|
25994
|
-
class RecordTableComponent {
|
|
25995
|
-
constructor() {
|
|
25996
|
-
this.selectedRecords = [];
|
|
25997
|
-
this.records = [];
|
|
25998
|
-
this.recordClick = new EventEmitter();
|
|
25999
|
-
this.recordsSelect = new EventEmitter();
|
|
26000
|
-
this.recordsDeselect = new EventEmitter();
|
|
26001
|
-
this.sortByChange = new EventEmitter();
|
|
26002
|
-
}
|
|
26003
|
-
dateToString(date) {
|
|
26004
|
-
return date?.toLocaleDateString(undefined, {
|
|
26005
|
-
year: 'numeric',
|
|
26006
|
-
month: 'long',
|
|
26007
|
-
day: 'numeric',
|
|
26008
|
-
timeZone: 'UTC',
|
|
26009
|
-
});
|
|
26010
|
-
}
|
|
26011
|
-
getStatus(isPublishedToAll) {
|
|
26012
|
-
return isPublishedToAll ? 'published' : 'not published';
|
|
26013
|
-
}
|
|
26014
|
-
formatUserInfo(userInfo) {
|
|
26015
|
-
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
26016
|
-
if (infos && infos.length === 4) {
|
|
26017
|
-
return `${infos[2]} ${infos[1]}`;
|
|
26018
|
-
}
|
|
26019
|
-
return undefined;
|
|
26020
|
-
}
|
|
26021
|
-
getRecordFormats(record) {
|
|
26022
|
-
if (record.kind === 'service' || !('distributions' in record)) {
|
|
26023
|
-
return [];
|
|
26024
|
-
}
|
|
26025
|
-
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
26026
|
-
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
26027
|
-
return formats;
|
|
26028
|
-
}
|
|
26029
|
-
getBadgeColor(format) {
|
|
26030
|
-
return getBadgeColor(format);
|
|
26031
|
-
}
|
|
26032
|
-
getOrderForColumn(col) {
|
|
26033
|
-
if (!this.sortBy) {
|
|
26034
|
-
return null;
|
|
26035
|
-
}
|
|
26036
|
-
let order = null;
|
|
26037
|
-
const sortedArray = Array.isArray(this.sortBy[0])
|
|
26038
|
-
? this.sortBy
|
|
26039
|
-
: [this.sortBy];
|
|
26040
|
-
sortedArray.forEach((sortedCol) => {
|
|
26041
|
-
if (sortedCol[1] === col) {
|
|
26042
|
-
order = sortedCol[0];
|
|
26043
|
-
}
|
|
26044
|
-
});
|
|
26045
|
-
return order;
|
|
26046
|
-
}
|
|
26047
|
-
setSortBy(col) {
|
|
26048
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26049
|
-
let newOrder;
|
|
26050
|
-
if (sortOrder) {
|
|
26051
|
-
newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
|
26052
|
-
}
|
|
26053
|
-
else {
|
|
26054
|
-
newOrder = 'asc';
|
|
26055
|
-
}
|
|
26056
|
-
this.sortByChange.emit([newOrder, col]);
|
|
26057
|
-
this.sortBy = [newOrder, col];
|
|
26058
|
-
}
|
|
26059
|
-
isSortedBy(col, order) {
|
|
26060
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26061
|
-
return sortOrder === order;
|
|
26062
|
-
}
|
|
26063
|
-
isChecked(record) {
|
|
26064
|
-
if (this.selectedRecords.includes(record.uniqueIdentifier)) {
|
|
26065
|
-
return true;
|
|
26066
|
-
}
|
|
26067
|
-
return false;
|
|
26068
|
-
}
|
|
26069
|
-
handleRecordSelectedChange(selected, record) {
|
|
26070
|
-
if (!selected) {
|
|
26071
|
-
this.recordsDeselect.emit([record]);
|
|
26072
|
-
this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
|
|
26073
|
-
}
|
|
26074
|
-
else {
|
|
26075
|
-
this.recordsSelect.emit([record]);
|
|
26076
|
-
this.selectedRecords.push(record.uniqueIdentifier);
|
|
26077
|
-
}
|
|
26078
|
-
}
|
|
26079
|
-
selectAll() {
|
|
26080
|
-
if (this.isAllSelected()) {
|
|
26081
|
-
this.recordsDeselect.emit(this.records);
|
|
26082
|
-
this.selectedRecords = [];
|
|
26083
|
-
}
|
|
26084
|
-
else {
|
|
26085
|
-
this.recordsSelect.emit(this.records);
|
|
26086
|
-
this.selectedRecords = this.records.map((record) => {
|
|
26087
|
-
return record.uniqueIdentifier;
|
|
26088
|
-
});
|
|
26089
|
-
}
|
|
26090
|
-
}
|
|
26091
|
-
isAllSelected() {
|
|
26092
|
-
if (this.selectedRecords.length === this.records.length) {
|
|
26093
|
-
const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
|
|
26094
|
-
if (allRecords.length === this.records.length) {
|
|
26095
|
-
return true;
|
|
26096
|
-
}
|
|
26097
|
-
}
|
|
26098
|
-
return false;
|
|
26099
|
-
}
|
|
26100
|
-
isSomeSelected() {
|
|
26101
|
-
if (this.selectedRecords.length > 0 &&
|
|
26102
|
-
this.selectedRecords.length < this.records.length) {
|
|
26103
|
-
return true;
|
|
26104
|
-
}
|
|
26105
|
-
return false;
|
|
26106
|
-
}
|
|
26107
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26108
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\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: "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: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
26109
|
-
}
|
|
26110
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
|
|
26111
|
-
type: Component,
|
|
26112
|
-
args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
|
|
26113
|
-
}], propDecorators: { selectedRecords: [{
|
|
26114
|
-
type: Input
|
|
26115
|
-
}], records: [{
|
|
26116
|
-
type: Input
|
|
26117
|
-
}], totalHits: [{
|
|
26118
|
-
type: Input
|
|
26119
|
-
}], sortBy: [{
|
|
26120
|
-
type: Input
|
|
26121
|
-
}], recordClick: [{
|
|
26122
|
-
type: Output
|
|
26123
|
-
}], recordsSelect: [{
|
|
26124
|
-
type: Output
|
|
26125
|
-
}], recordsDeselect: [{
|
|
26126
|
-
type: Output
|
|
26127
|
-
}], sortByChange: [{
|
|
26128
|
-
type: Output
|
|
26129
|
-
}] } });
|
|
26130
|
-
|
|
26131
26251
|
class UiSearchModule {
|
|
26132
26252
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26133
26253
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
|
|
@@ -26140,8 +26260,7 @@ class UiSearchModule {
|
|
|
26140
26260
|
ResultsHitsNumberComponent,
|
|
26141
26261
|
ResultsListItemComponent,
|
|
26142
26262
|
RecordPreviewFeedComponent,
|
|
26143
|
-
RecordPreviewRowComponent,
|
|
26144
|
-
RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26263
|
+
RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26145
26264
|
FacetsModule$1,
|
|
26146
26265
|
FormsModule,
|
|
26147
26266
|
ReactiveFormsModule,
|
|
@@ -26152,7 +26271,8 @@ class UiSearchModule {
|
|
|
26152
26271
|
UiElementsModule,
|
|
26153
26272
|
MatIconModule,
|
|
26154
26273
|
MatCheckboxModule,
|
|
26155
|
-
RouterLink
|
|
26274
|
+
RouterLink,
|
|
26275
|
+
InteractiveTableComponent], exports: [RecordPreviewListComponent,
|
|
26156
26276
|
RecordPreviewCardComponent,
|
|
26157
26277
|
RecordPreviewTextComponent,
|
|
26158
26278
|
RecordPreviewTitleComponent,
|
|
@@ -26162,8 +26282,7 @@ class UiSearchModule {
|
|
|
26162
26282
|
RecordPreviewComponent,
|
|
26163
26283
|
ResultsHitsNumberComponent,
|
|
26164
26284
|
RecordPreviewFeedComponent,
|
|
26165
|
-
RecordPreviewRowComponent
|
|
26166
|
-
RecordTableComponent] }); }
|
|
26285
|
+
RecordPreviewRowComponent] }); }
|
|
26167
26286
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
|
|
26168
26287
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
26169
26288
|
], imports: [CommonModule,
|
|
@@ -26178,7 +26297,8 @@ class UiSearchModule {
|
|
|
26178
26297
|
UiInputsModule,
|
|
26179
26298
|
UiElementsModule,
|
|
26180
26299
|
MatIconModule,
|
|
26181
|
-
MatCheckboxModule,
|
|
26300
|
+
MatCheckboxModule,
|
|
26301
|
+
InteractiveTableComponent, FacetsModule$1] }); }
|
|
26182
26302
|
}
|
|
26183
26303
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
|
|
26184
26304
|
type: NgModule,
|
|
@@ -26195,7 +26315,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26195
26315
|
ResultsListItemComponent,
|
|
26196
26316
|
RecordPreviewFeedComponent,
|
|
26197
26317
|
RecordPreviewRowComponent,
|
|
26198
|
-
RecordTableComponent,
|
|
26199
26318
|
],
|
|
26200
26319
|
imports: [
|
|
26201
26320
|
CommonModule,
|
|
@@ -26212,6 +26331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26212
26331
|
MatIconModule,
|
|
26213
26332
|
MatCheckboxModule,
|
|
26214
26333
|
RouterLink,
|
|
26334
|
+
InteractiveTableComponent,
|
|
26215
26335
|
],
|
|
26216
26336
|
exports: [
|
|
26217
26337
|
RecordPreviewListComponent,
|
|
@@ -26225,7 +26345,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26225
26345
|
ResultsHitsNumberComponent,
|
|
26226
26346
|
RecordPreviewFeedComponent,
|
|
26227
26347
|
RecordPreviewRowComponent,
|
|
26228
|
-
RecordTableComponent,
|
|
26229
26348
|
],
|
|
26230
26349
|
providers: [
|
|
26231
26350
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
@@ -26784,6 +26903,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
|
|
|
26784
26903
|
const getError = createSelector(getSearchStateSearch, (state) => state.error);
|
|
26785
26904
|
const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
|
|
26786
26905
|
|
|
26906
|
+
// this geometry will be used to filter & boost results accordingly
|
|
26907
|
+
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
26908
|
+
|
|
26787
26909
|
class SearchFacade {
|
|
26788
26910
|
constructor(store, filterGeometry) {
|
|
26789
26911
|
this.store = store;
|
|
@@ -26888,6 +27010,7 @@ class SearchFacade {
|
|
|
26888
27010
|
this.store.dispatch(new SetFilters({}, this.searchId));
|
|
26889
27011
|
this.store.dispatch(new SetSortBy([], this.searchId));
|
|
26890
27012
|
this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
|
|
27013
|
+
return this;
|
|
26891
27014
|
}
|
|
26892
27015
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade, deps: [{ token: i1$2.Store }, { token: FILTER_GEOMETRY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
26893
27016
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
|
|
@@ -27272,8 +27395,11 @@ class FuzzySearchComponent {
|
|
|
27272
27395
|
this.searchService.updateFilters({ any });
|
|
27273
27396
|
}
|
|
27274
27397
|
}
|
|
27275
|
-
handleInputCleared() {
|
|
27276
|
-
this.
|
|
27398
|
+
async handleInputCleared() {
|
|
27399
|
+
const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
|
|
27400
|
+
if (currentSearchFilters.any) {
|
|
27401
|
+
this.searchService.updateFilters({ any: '' });
|
|
27402
|
+
}
|
|
27277
27403
|
}
|
|
27278
27404
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27279
27405
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: AutocompleteComponent, descendants: true }], ngImport: i0, template: "<gn-ui-autocomplete\n [placeholder]=\"'search.field.any.placeholder' | translate\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n (inputSubmitted)=\"handleInputSubmission($event)\"\n (inputCleared)=\"handleInputCleared()\"\n [value]=\"searchInputValue$ | async\"\n [clearOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "autoFocus", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -27353,6 +27479,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27353
27479
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
27354
27480
|
}] }]; } });
|
|
27355
27481
|
|
|
27482
|
+
// expects the replacement key ${uuid}
|
|
27483
|
+
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27484
|
+
|
|
27356
27485
|
class FavoriteStarComponent {
|
|
27357
27486
|
set record(value) {
|
|
27358
27487
|
this.record_ = value;
|
|
@@ -27436,11 +27565,11 @@ class FavoriteStarComponent {
|
|
|
27436
27565
|
});
|
|
27437
27566
|
}
|
|
27438
27567
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27439
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row
|
|
27568
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
27440
27569
|
}
|
|
27441
27570
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
|
|
27442
27571
|
type: Component,
|
|
27443
|
-
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row
|
|
27572
|
+
args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
|
|
27444
27573
|
}], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
|
|
27445
27574
|
type: Input
|
|
27446
27575
|
}], record: [{
|
|
@@ -27614,9 +27743,11 @@ class SearchEffects {
|
|
|
27614
27743
|
// I could not get this to work (maybe a bug in rxjs?)
|
|
27615
27744
|
switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
|
|
27616
27745
|
if (!state.params.useSpatialFilter || !this.filterGeometry$) {
|
|
27617
|
-
return of([state, favorites,
|
|
27746
|
+
return of([state, favorites, undefined]);
|
|
27618
27747
|
}
|
|
27619
27748
|
return this.filterGeometry$.pipe(tap$2((geom) => {
|
|
27749
|
+
if (!geom)
|
|
27750
|
+
return;
|
|
27620
27751
|
try {
|
|
27621
27752
|
const trace = valid$1(geom, true);
|
|
27622
27753
|
if (trace?.length > 0) {
|
|
@@ -27628,7 +27759,7 @@ class SearchEffects {
|
|
|
27628
27759
|
throw new Error();
|
|
27629
27760
|
}
|
|
27630
27761
|
}), map$1((geom) => [state, favorites, geom]), catchError((e) => {
|
|
27631
|
-
return of([state, favorites,
|
|
27762
|
+
return of([state, favorites, undefined]);
|
|
27632
27763
|
}));
|
|
27633
27764
|
}), switchMap$1(([state, favorites, geometry]) => {
|
|
27634
27765
|
const { currentPage, pageSize, sort } = state.params;
|
|
@@ -27727,10 +27858,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27727
27858
|
class AbstractSearchField {
|
|
27728
27859
|
}
|
|
27729
27860
|
class SimpleSearchField {
|
|
27730
|
-
constructor(esFieldName, order = 'asc',
|
|
27861
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27731
27862
|
this.esFieldName = esFieldName;
|
|
27732
|
-
this.order = order;
|
|
27733
27863
|
this.injector = injector;
|
|
27864
|
+
this.order = order;
|
|
27865
|
+
this.orderType = orderType;
|
|
27734
27866
|
this.repository = this.injector.get(RecordsRepositoryInterface);
|
|
27735
27867
|
// FIXME: this is required to register runtime fields; abstract this as well
|
|
27736
27868
|
this.esService = this.injector.get(ElasticsearchService);
|
|
@@ -27741,12 +27873,12 @@ class SimpleSearchField {
|
|
|
27741
27873
|
type: 'terms',
|
|
27742
27874
|
field: this.esFieldName,
|
|
27743
27875
|
limit: 1000,
|
|
27744
|
-
sort: [this.order,
|
|
27876
|
+
sort: [this.order, this.orderType],
|
|
27745
27877
|
},
|
|
27746
27878
|
};
|
|
27747
27879
|
}
|
|
27748
27880
|
async getBucketLabel(bucket) {
|
|
27749
|
-
return bucket.term;
|
|
27881
|
+
return bucket.term.toString();
|
|
27750
27882
|
}
|
|
27751
27883
|
getAvailableValues() {
|
|
27752
27884
|
return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
|
|
@@ -27774,9 +27906,13 @@ class SimpleSearchField {
|
|
|
27774
27906
|
return of(values);
|
|
27775
27907
|
}
|
|
27776
27908
|
}
|
|
27777
|
-
class
|
|
27778
|
-
constructor() {
|
|
27779
|
-
super(
|
|
27909
|
+
class TranslatedSearchField extends SimpleSearchField {
|
|
27910
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27911
|
+
super(esFieldName, injector, order, orderType);
|
|
27912
|
+
this.esFieldName = esFieldName;
|
|
27913
|
+
this.injector = injector;
|
|
27914
|
+
this.order = order;
|
|
27915
|
+
this.orderType = orderType;
|
|
27780
27916
|
this.platformService = this.injector.get(PlatformServiceInterface);
|
|
27781
27917
|
}
|
|
27782
27918
|
async getTranslation(key) {
|
|
@@ -27786,26 +27922,36 @@ class KeySearchField extends SimpleSearchField {
|
|
|
27786
27922
|
return (await this.getTranslation(bucket.term)) || bucket.term;
|
|
27787
27923
|
}
|
|
27788
27924
|
getAvailableValues() {
|
|
27925
|
+
if (this.orderType === 'count')
|
|
27926
|
+
return super.getAvailableValues();
|
|
27789
27927
|
// sort values by alphabetical order
|
|
27790
27928
|
return super
|
|
27791
27929
|
.getAvailableValues()
|
|
27792
27930
|
.pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
|
|
27793
27931
|
}
|
|
27794
27932
|
}
|
|
27795
|
-
|
|
27796
|
-
|
|
27797
|
-
|
|
27798
|
-
|
|
27933
|
+
/**
|
|
27934
|
+
* This search field will either target the `.default` field, or a specific `.langxyz` field according
|
|
27935
|
+
* to the defined METADATA_LANGUAGE token
|
|
27936
|
+
* The provided ES field name should not include any prefix such as `.langeng`
|
|
27937
|
+
*/
|
|
27938
|
+
class MultilingualSearchField extends SimpleSearchField {
|
|
27939
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27940
|
+
super(esFieldName, injector, order, orderType);
|
|
27941
|
+
this.esFieldName = esFieldName;
|
|
27942
|
+
this.injector = injector;
|
|
27943
|
+
this.order = order;
|
|
27944
|
+
this.orderType = orderType;
|
|
27799
27945
|
this.langService = this.injector.get(LangService);
|
|
27800
|
-
this.
|
|
27801
|
-
|
|
27802
|
-
|
|
27803
|
-
|
|
27804
|
-
|
|
27805
|
-
}
|
|
27806
|
-
|
|
27807
|
-
|
|
27808
|
-
|
|
27946
|
+
this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
|
|
27947
|
+
// note: we're excluding the metadata language "current" value because that would produce
|
|
27948
|
+
// permalinks that might not work for different users
|
|
27949
|
+
if (this.searchLanguage && this.searchLanguage !== 'current') {
|
|
27950
|
+
this.esFieldName += `.lang${this.searchLanguage}`;
|
|
27951
|
+
}
|
|
27952
|
+
else {
|
|
27953
|
+
this.esFieldName += '.default';
|
|
27954
|
+
}
|
|
27809
27955
|
}
|
|
27810
27956
|
}
|
|
27811
27957
|
class FullTextSearchField {
|
|
@@ -27825,7 +27971,7 @@ marker('search.filters.isSpatial.yes');
|
|
|
27825
27971
|
marker('search.filters.isSpatial.no');
|
|
27826
27972
|
class IsSpatialSearchField extends SimpleSearchField {
|
|
27827
27973
|
constructor(injector) {
|
|
27828
|
-
super('isSpatial', 'asc'
|
|
27974
|
+
super('isSpatial', injector, 'asc');
|
|
27829
27975
|
this.translateService = this.injector.get(TranslateService);
|
|
27830
27976
|
this.esService.registerRuntimeField('isSpatial', `String result = 'no';
|
|
27831
27977
|
String formats = doc.format.join('|').toLowerCase();
|
|
@@ -27875,7 +28021,7 @@ marker('search.filters.license.unknown');
|
|
|
27875
28021
|
// Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
|
|
27876
28022
|
class LicenseSearchField extends SimpleSearchField {
|
|
27877
28023
|
constructor(injector) {
|
|
27878
|
-
super('license', 'asc'
|
|
28024
|
+
super('license', injector, 'asc');
|
|
27879
28025
|
this.translateService = this.injector.get(TranslateService);
|
|
27880
28026
|
this.esService.registerRuntimeField('license', `String raw = '';
|
|
27881
28027
|
if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
|
|
@@ -27959,7 +28105,7 @@ class OrganizationSearchField {
|
|
|
27959
28105
|
}
|
|
27960
28106
|
class OwnerSearchField extends SimpleSearchField {
|
|
27961
28107
|
constructor(injector) {
|
|
27962
|
-
super('owner', 'asc'
|
|
28108
|
+
super('owner', injector, 'asc');
|
|
27963
28109
|
}
|
|
27964
28110
|
getAvailableValues() {
|
|
27965
28111
|
return of([]);
|
|
@@ -27968,6 +28114,7 @@ class OwnerSearchField extends SimpleSearchField {
|
|
|
27968
28114
|
|
|
27969
28115
|
marker('search.filters.format');
|
|
27970
28116
|
marker('search.filters.inspireKeyword');
|
|
28117
|
+
marker('search.filters.keyword');
|
|
27971
28118
|
marker('search.filters.isSpatial');
|
|
27972
28119
|
marker('search.filters.license');
|
|
27973
28120
|
marker('search.filters.publicationYear');
|
|
@@ -27985,13 +28132,14 @@ class FieldsService {
|
|
|
27985
28132
|
this.injector = injector;
|
|
27986
28133
|
this.fields = {
|
|
27987
28134
|
publisher: new OrganizationSearchField(this.injector),
|
|
27988
|
-
format: new SimpleSearchField('format', 'asc'
|
|
27989
|
-
resourceType: new
|
|
27990
|
-
representationType: new
|
|
27991
|
-
publicationYear: new SimpleSearchField('publicationYearForResource', 'desc'
|
|
27992
|
-
topic: new
|
|
27993
|
-
inspireKeyword: new
|
|
27994
|
-
|
|
28135
|
+
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
28136
|
+
resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
|
|
28137
|
+
representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
|
|
28138
|
+
publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
|
|
28139
|
+
topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
|
|
28140
|
+
inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
|
|
28141
|
+
keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
|
|
28142
|
+
documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
|
|
27995
28143
|
isSpatial: new IsSpatialSearchField(this.injector),
|
|
27996
28144
|
q: new FullTextSearchField(),
|
|
27997
28145
|
license: new LicenseSearchField(this.injector),
|
|
@@ -28065,10 +28213,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28065
28213
|
type: Input
|
|
28066
28214
|
}] } });
|
|
28067
28215
|
|
|
28068
|
-
// this geometry will be used to filter & boost results accordingly
|
|
28069
|
-
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
28070
|
-
// expects the replacement key ${uuid}
|
|
28071
|
-
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
28072
28216
|
class FeatureSearchModule {
|
|
28073
28217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28074
28218
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
|
|
@@ -28167,6 +28311,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28167
28311
|
}]
|
|
28168
28312
|
}] });
|
|
28169
28313
|
|
|
28314
|
+
class ResultsTableComponent {
|
|
28315
|
+
constructor(searchFacade, searchService, selectionService) {
|
|
28316
|
+
this.searchFacade = searchFacade;
|
|
28317
|
+
this.searchService = searchService;
|
|
28318
|
+
this.selectionService = selectionService;
|
|
28319
|
+
this.recordClick = new EventEmitter();
|
|
28320
|
+
this.records$ = this.searchFacade.results$;
|
|
28321
|
+
this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
|
|
28322
|
+
}
|
|
28323
|
+
dateToString(date) {
|
|
28324
|
+
return date?.toLocaleDateString(undefined, {
|
|
28325
|
+
year: 'numeric',
|
|
28326
|
+
month: 'long',
|
|
28327
|
+
day: 'numeric',
|
|
28328
|
+
timeZone: 'UTC',
|
|
28329
|
+
});
|
|
28330
|
+
}
|
|
28331
|
+
getStatus(isPublishedToAll) {
|
|
28332
|
+
return isPublishedToAll ? 'published' : 'not published';
|
|
28333
|
+
}
|
|
28334
|
+
getRecordFormats(record) {
|
|
28335
|
+
if (record.kind === 'service' || !('distributions' in record)) {
|
|
28336
|
+
return [];
|
|
28337
|
+
}
|
|
28338
|
+
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
28339
|
+
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
28340
|
+
return formats;
|
|
28341
|
+
}
|
|
28342
|
+
formatUserInfo(userInfo) {
|
|
28343
|
+
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
28344
|
+
if (infos && infos.length === 4) {
|
|
28345
|
+
return `${infos[2]} ${infos[1]}`;
|
|
28346
|
+
}
|
|
28347
|
+
return undefined;
|
|
28348
|
+
}
|
|
28349
|
+
getBadgeColor(format) {
|
|
28350
|
+
return getBadgeColor(format);
|
|
28351
|
+
}
|
|
28352
|
+
handleRecordClick(item) {
|
|
28353
|
+
this.recordClick.emit(item);
|
|
28354
|
+
}
|
|
28355
|
+
setSortBy(col, order) {
|
|
28356
|
+
this.searchService.setSortBy([order, col]);
|
|
28357
|
+
}
|
|
28358
|
+
isSortedBy(col) {
|
|
28359
|
+
return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
|
|
28360
|
+
const sortArray = Array.isArray(sortOrder[0])
|
|
28361
|
+
? sortOrder
|
|
28362
|
+
: [sortOrder];
|
|
28363
|
+
for (const sort of sortArray) {
|
|
28364
|
+
if (sort[1] === col) {
|
|
28365
|
+
return sort[0];
|
|
28366
|
+
}
|
|
28367
|
+
}
|
|
28368
|
+
return null;
|
|
28369
|
+
}));
|
|
28370
|
+
}
|
|
28371
|
+
isChecked(record) {
|
|
28372
|
+
return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
|
|
28373
|
+
return selectedRecords.includes(record.uniqueIdentifier);
|
|
28374
|
+
}));
|
|
28375
|
+
}
|
|
28376
|
+
handleRecordSelectedChange(selected, record) {
|
|
28377
|
+
if (!selected) {
|
|
28378
|
+
this.selectionService.deselectRecords([record]);
|
|
28379
|
+
}
|
|
28380
|
+
else {
|
|
28381
|
+
this.selectionService.selectRecords([record]);
|
|
28382
|
+
}
|
|
28383
|
+
}
|
|
28384
|
+
async toggleSelectAll() {
|
|
28385
|
+
const records = await firstValueFrom(this.records$);
|
|
28386
|
+
if (await firstValueFrom(this.isAllSelected())) {
|
|
28387
|
+
this.selectionService.deselectRecords(records);
|
|
28388
|
+
}
|
|
28389
|
+
else {
|
|
28390
|
+
this.selectionService.selectRecords(records);
|
|
28391
|
+
}
|
|
28392
|
+
}
|
|
28393
|
+
isAllSelected() {
|
|
28394
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28395
|
+
return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28396
|
+
}));
|
|
28397
|
+
}
|
|
28398
|
+
isSomeSelected() {
|
|
28399
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28400
|
+
const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28401
|
+
const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28402
|
+
return !allSelected && someSelected;
|
|
28403
|
+
}));
|
|
28404
|
+
}
|
|
28405
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28406
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
|
|
28407
|
+
}
|
|
28408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
28409
|
+
type: Component,
|
|
28410
|
+
args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
|
|
28411
|
+
CommonModule,
|
|
28412
|
+
UiInputsModule,
|
|
28413
|
+
InteractiveTableComponent,
|
|
28414
|
+
InteractiveTableColumnComponent,
|
|
28415
|
+
MatIconModule,
|
|
28416
|
+
TranslateModule,
|
|
28417
|
+
], template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
|
|
28418
|
+
}], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
|
|
28419
|
+
type: Output
|
|
28420
|
+
}] } });
|
|
28421
|
+
|
|
28170
28422
|
class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
28171
28423
|
get mapLinks() {
|
|
28172
28424
|
return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
|
|
@@ -28201,7 +28453,7 @@ class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
|
28201
28453
|
return getLinkLabel(link);
|
|
28202
28454
|
}
|
|
28203
28455
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, deps: [{ token: i0.ElementRef }, { token: LinkClassifierService }, { token: MapFacade }, { token: MapUtilsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28204
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28456
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28205
28457
|
}
|
|
28206
28458
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, decorators: [{
|
|
28207
28459
|
type: Component,
|
|
@@ -28296,6 +28548,157 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28296
28548
|
args: [{ selector: 'gn-ui-add-layer-from-wms', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n" }]
|
|
28297
28549
|
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28298
28550
|
|
|
28551
|
+
const INVALID_FILE_FORMAT_ERROR_MESSAGE = 'Invalid file format';
|
|
28552
|
+
class AddLayerFromFileComponent {
|
|
28553
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28554
|
+
this.mapFacade = mapFacade;
|
|
28555
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28556
|
+
this.errorMessage = null;
|
|
28557
|
+
this.successMessage = null;
|
|
28558
|
+
this.loading = false;
|
|
28559
|
+
this.acceptedMimeType = ['.geojson'];
|
|
28560
|
+
this.maxFileSize = 5000000;
|
|
28561
|
+
}
|
|
28562
|
+
async handleFileChange(file) {
|
|
28563
|
+
if (!file) {
|
|
28564
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28565
|
+
return;
|
|
28566
|
+
}
|
|
28567
|
+
if (file.size > this.maxFileSize) {
|
|
28568
|
+
this.displayMessage('File size exceeds the limit of 5MB', 'error');
|
|
28569
|
+
return;
|
|
28570
|
+
}
|
|
28571
|
+
await this.addLayer(file);
|
|
28572
|
+
}
|
|
28573
|
+
async addLayer(file) {
|
|
28574
|
+
this.errorMessage = null;
|
|
28575
|
+
this.loading = true;
|
|
28576
|
+
try {
|
|
28577
|
+
if (!this.isFileFormatValid(file)) {
|
|
28578
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28579
|
+
return;
|
|
28580
|
+
}
|
|
28581
|
+
const fileExtension = this.getFileExtension(file);
|
|
28582
|
+
switch (fileExtension) {
|
|
28583
|
+
case 'geojson':
|
|
28584
|
+
await this.addGeoJsonLayer(file);
|
|
28585
|
+
break;
|
|
28586
|
+
default:
|
|
28587
|
+
this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
|
|
28588
|
+
break;
|
|
28589
|
+
}
|
|
28590
|
+
}
|
|
28591
|
+
catch (error) {
|
|
28592
|
+
const err = error;
|
|
28593
|
+
this.displayMessage('Error loading file: ' + err.message, 'error');
|
|
28594
|
+
}
|
|
28595
|
+
finally {
|
|
28596
|
+
this.loading = false;
|
|
28597
|
+
}
|
|
28598
|
+
}
|
|
28599
|
+
addGeoJsonLayer(file) {
|
|
28600
|
+
return new Promise((resolve, reject) => {
|
|
28601
|
+
try {
|
|
28602
|
+
const reader = new FileReader();
|
|
28603
|
+
reader.onload = () => {
|
|
28604
|
+
const result = reader.result;
|
|
28605
|
+
const title = file.name.split('.').slice(0, -1).join('.');
|
|
28606
|
+
const layerToAdd = {
|
|
28607
|
+
type: 'geojson',
|
|
28608
|
+
data: result,
|
|
28609
|
+
};
|
|
28610
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: title });
|
|
28611
|
+
this.displayMessage('File successfully added to map', 'success');
|
|
28612
|
+
resolve();
|
|
28613
|
+
};
|
|
28614
|
+
reader.onerror = reject;
|
|
28615
|
+
reader.readAsText(file);
|
|
28616
|
+
}
|
|
28617
|
+
catch (error) {
|
|
28618
|
+
reject(error);
|
|
28619
|
+
}
|
|
28620
|
+
});
|
|
28621
|
+
}
|
|
28622
|
+
isFileFormatValid(file) {
|
|
28623
|
+
const fileExtension = this.getFileExtension(file);
|
|
28624
|
+
return this.acceptedMimeType.includes(`.${fileExtension}`);
|
|
28625
|
+
}
|
|
28626
|
+
getFileExtension(file) {
|
|
28627
|
+
return file.name.split('.').pop();
|
|
28628
|
+
}
|
|
28629
|
+
displayMessage(message, type) {
|
|
28630
|
+
if (type === 'success') {
|
|
28631
|
+
this.successMessage = message;
|
|
28632
|
+
}
|
|
28633
|
+
else if (type === 'error') {
|
|
28634
|
+
this.errorMessage = message;
|
|
28635
|
+
}
|
|
28636
|
+
setTimeout(() => {
|
|
28637
|
+
this.successMessage = null;
|
|
28638
|
+
this.errorMessage = null;
|
|
28639
|
+
this.changeDetectorRef.detectChanges();
|
|
28640
|
+
}, 5000);
|
|
28641
|
+
}
|
|
28642
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28643
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file", ngImport: i0, template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DragAndDropFileInputComponent, selector: "gn-ui-drag-and-drop-file-input", inputs: ["placeholder", "accept"], outputs: ["fileChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28644
|
+
}
|
|
28645
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, decorators: [{
|
|
28646
|
+
type: Component,
|
|
28647
|
+
args: [{ selector: 'gn-ui-add-layer-from-file', template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n" }]
|
|
28648
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28649
|
+
|
|
28650
|
+
class AddLayerFromWfsComponent {
|
|
28651
|
+
constructor(mapFacade, changeDetectorRef) {
|
|
28652
|
+
this.mapFacade = mapFacade;
|
|
28653
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
28654
|
+
this.wfsUrl = '';
|
|
28655
|
+
this.loading = false;
|
|
28656
|
+
this.layers = [];
|
|
28657
|
+
this.wfsEndpoint = null;
|
|
28658
|
+
this.urlChange = new Subject();
|
|
28659
|
+
this.errorMessage = null;
|
|
28660
|
+
}
|
|
28661
|
+
ngOnInit() {
|
|
28662
|
+
this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
|
|
28663
|
+
}
|
|
28664
|
+
async loadLayers() {
|
|
28665
|
+
this.errorMessage = null;
|
|
28666
|
+
try {
|
|
28667
|
+
this.loading = true;
|
|
28668
|
+
if (this.wfsUrl.trim() === '') {
|
|
28669
|
+
this.layers = [];
|
|
28670
|
+
return;
|
|
28671
|
+
}
|
|
28672
|
+
this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
|
|
28673
|
+
this.layers = this.wfsEndpoint.getFeatureTypes();
|
|
28674
|
+
console.log(this.layers);
|
|
28675
|
+
}
|
|
28676
|
+
catch (error) {
|
|
28677
|
+
const err = error;
|
|
28678
|
+
this.layers = [];
|
|
28679
|
+
this.errorMessage = 'Error loading layers: ' + err.message;
|
|
28680
|
+
}
|
|
28681
|
+
finally {
|
|
28682
|
+
this.loading = false;
|
|
28683
|
+
this.changeDetectorRef.markForCheck();
|
|
28684
|
+
}
|
|
28685
|
+
}
|
|
28686
|
+
addLayer(layer) {
|
|
28687
|
+
const layerToAdd = {
|
|
28688
|
+
name: layer.name,
|
|
28689
|
+
url: this.wfsUrl.toString(),
|
|
28690
|
+
type: MapContextLayerTypeEnum.WFS,
|
|
28691
|
+
};
|
|
28692
|
+
this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
|
|
28693
|
+
}
|
|
28694
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28695
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\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: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28696
|
+
}
|
|
28697
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
|
|
28698
|
+
type: Component,
|
|
28699
|
+
args: [{ selector: 'gn-ui-add-layer-from-wfs', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n" }]
|
|
28700
|
+
}], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
|
|
28701
|
+
|
|
28299
28702
|
class LayersPanelComponent {
|
|
28300
28703
|
constructor(mapFacade) {
|
|
28301
28704
|
this.mapFacade = mapFacade;
|
|
@@ -28305,11 +28708,11 @@ class LayersPanelComponent {
|
|
|
28305
28708
|
this.mapFacade.removeLayer(index);
|
|
28306
28709
|
}
|
|
28307
28710
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28308
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3
|
|
28711
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$3.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
28309
28712
|
}
|
|
28310
28713
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
|
|
28311
28714
|
type: Component,
|
|
28312
|
-
args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3
|
|
28715
|
+
args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n" }]
|
|
28313
28716
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28314
28717
|
|
|
28315
28718
|
class MapEffects {
|
|
@@ -28342,6 +28745,121 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28342
28745
|
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
|
|
28343
28746
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28344
28747
|
|
|
28748
|
+
const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
|
|
28749
|
+
class GeocodingService {
|
|
28750
|
+
constructor(provider) {
|
|
28751
|
+
this.provider = provider;
|
|
28752
|
+
}
|
|
28753
|
+
query(text) {
|
|
28754
|
+
let queryObservable;
|
|
28755
|
+
switch (this.provider[0]) {
|
|
28756
|
+
case 'geoadmin':
|
|
28757
|
+
queryObservable = from(queryGeoadmin(text, this.provider[1]));
|
|
28758
|
+
break;
|
|
28759
|
+
case 'geonames':
|
|
28760
|
+
queryObservable = from(queryGeonames(text, this.provider[1]));
|
|
28761
|
+
break;
|
|
28762
|
+
case 'data-gouv-fr':
|
|
28763
|
+
queryObservable = from(queryDataGouvFr(text, this.provider[1]));
|
|
28764
|
+
break;
|
|
28765
|
+
default:
|
|
28766
|
+
return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
|
|
28767
|
+
}
|
|
28768
|
+
return queryObservable.pipe(catchError((error) => throwError(error)));
|
|
28769
|
+
}
|
|
28770
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, deps: [{ token: GEOCODING_PROVIDER }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28771
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
|
|
28772
|
+
}
|
|
28773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
|
|
28774
|
+
type: Injectable,
|
|
28775
|
+
args: [{
|
|
28776
|
+
providedIn: 'root',
|
|
28777
|
+
}]
|
|
28778
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
28779
|
+
type: Inject,
|
|
28780
|
+
args: [GEOCODING_PROVIDER]
|
|
28781
|
+
}] }]; } });
|
|
28782
|
+
|
|
28783
|
+
class GeocodingComponent {
|
|
28784
|
+
constructor(mapManager, geocodingService) {
|
|
28785
|
+
this.mapManager = mapManager;
|
|
28786
|
+
this.geocodingService = geocodingService;
|
|
28787
|
+
this.searchText = '';
|
|
28788
|
+
this.results = [];
|
|
28789
|
+
this.searchTextChanged = new Subject();
|
|
28790
|
+
this.destroy$ = new Subject();
|
|
28791
|
+
this.errorMessage = null;
|
|
28792
|
+
this.searchTextChanged
|
|
28793
|
+
.pipe(debounceTime(300), switchMap$1((searchText) => {
|
|
28794
|
+
return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
|
|
28795
|
+
this.errorMessage =
|
|
28796
|
+
'An error occurred while searching. Please try again.';
|
|
28797
|
+
console.error(error);
|
|
28798
|
+
return [];
|
|
28799
|
+
}));
|
|
28800
|
+
}), takeUntil(this.destroy$))
|
|
28801
|
+
.subscribe((results) => {
|
|
28802
|
+
this.results = results;
|
|
28803
|
+
});
|
|
28804
|
+
}
|
|
28805
|
+
ngOnDestroy() {
|
|
28806
|
+
this.destroy$.next();
|
|
28807
|
+
this.destroy$.complete();
|
|
28808
|
+
}
|
|
28809
|
+
onSearchChange(searchText) {
|
|
28810
|
+
if (!searchText) {
|
|
28811
|
+
this.clearSearch();
|
|
28812
|
+
return;
|
|
28813
|
+
}
|
|
28814
|
+
else {
|
|
28815
|
+
this.searchTextChanged.next(searchText);
|
|
28816
|
+
}
|
|
28817
|
+
}
|
|
28818
|
+
clearSearch() {
|
|
28819
|
+
this.searchText = '';
|
|
28820
|
+
this.results = [];
|
|
28821
|
+
this.errorMessage = null;
|
|
28822
|
+
}
|
|
28823
|
+
zoomToLocation(result) {
|
|
28824
|
+
const map = this.mapManager.map;
|
|
28825
|
+
const view = map.getView();
|
|
28826
|
+
const geometry = result.geom;
|
|
28827
|
+
if (geometry.type === 'Point') {
|
|
28828
|
+
this.zoomToPoint(geometry.coordinates, view);
|
|
28829
|
+
}
|
|
28830
|
+
else if (geometry.type === 'Polygon') {
|
|
28831
|
+
this.zoomToPolygon(geometry.coordinates, view);
|
|
28832
|
+
}
|
|
28833
|
+
else {
|
|
28834
|
+
console.error(`Unsupported geometry type: ${geometry.type}`);
|
|
28835
|
+
}
|
|
28836
|
+
}
|
|
28837
|
+
zoomToPoint(pointCoords, view) {
|
|
28838
|
+
const transformedCoords = fromLonLat(pointCoords);
|
|
28839
|
+
view.setCenter(transformedCoords);
|
|
28840
|
+
view.setZoom(12);
|
|
28841
|
+
}
|
|
28842
|
+
zoomToPolygon(polygonCoords, view) {
|
|
28843
|
+
const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
|
|
28844
|
+
const polygon = new Polygon([transformedCoords]);
|
|
28845
|
+
view.fit(polygon, {
|
|
28846
|
+
duration: 100,
|
|
28847
|
+
maxZoom: 12,
|
|
28848
|
+
});
|
|
28849
|
+
}
|
|
28850
|
+
onEnterPress() {
|
|
28851
|
+
if (this.results && this.results.length > 0) {
|
|
28852
|
+
this.zoomToLocation(this.results[0]);
|
|
28853
|
+
}
|
|
28854
|
+
}
|
|
28855
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, deps: [{ token: MapManagerService }, { token: GeocodingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28856
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: GeocodingComponent, selector: "gn-ui-geocoding", ngImport: i0, template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\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: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28857
|
+
}
|
|
28858
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
|
|
28859
|
+
type: Component,
|
|
28860
|
+
args: [{ selector: 'gn-ui-geocoding', template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n" }]
|
|
28861
|
+
}], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
|
|
28862
|
+
|
|
28345
28863
|
class FeatureMapModule {
|
|
28346
28864
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28347
28865
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, declarations: [MapContextComponent,
|
|
@@ -28350,7 +28868,10 @@ class FeatureMapModule {
|
|
|
28350
28868
|
AddLayerFromCatalogComponent,
|
|
28351
28869
|
MapContainerComponent,
|
|
28352
28870
|
AddLayerRecordPreviewComponent,
|
|
28353
|
-
AddLayerFromWmsComponent
|
|
28871
|
+
AddLayerFromWmsComponent,
|
|
28872
|
+
AddLayerFromFileComponent,
|
|
28873
|
+
AddLayerFromWfsComponent,
|
|
28874
|
+
GeocodingComponent], imports: [CommonModule,
|
|
28354
28875
|
UiMapModule,
|
|
28355
28876
|
UiLayoutModule,
|
|
28356
28877
|
MatIconModule,
|
|
@@ -28361,13 +28882,18 @@ class FeatureMapModule {
|
|
|
28361
28882
|
MapInstanceDirective,
|
|
28362
28883
|
LayersPanelComponent,
|
|
28363
28884
|
AddLayerFromCatalogComponent,
|
|
28364
|
-
MapContainerComponent
|
|
28885
|
+
MapContainerComponent,
|
|
28886
|
+
GeocodingComponent] }); }
|
|
28365
28887
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, providers: [
|
|
28366
28888
|
{
|
|
28367
28889
|
provide: FEATURE_MAP_OPTIONS,
|
|
28368
28890
|
useValue: defaultMapOptions,
|
|
28369
28891
|
},
|
|
28370
28892
|
MapFacade,
|
|
28893
|
+
{
|
|
28894
|
+
provide: GEOCODING_PROVIDER,
|
|
28895
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28896
|
+
},
|
|
28371
28897
|
], imports: [CommonModule,
|
|
28372
28898
|
UiMapModule,
|
|
28373
28899
|
UiLayoutModule,
|
|
@@ -28391,6 +28917,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28391
28917
|
MapContainerComponent,
|
|
28392
28918
|
AddLayerRecordPreviewComponent,
|
|
28393
28919
|
AddLayerFromWmsComponent,
|
|
28920
|
+
AddLayerFromFileComponent,
|
|
28921
|
+
AddLayerFromWfsComponent,
|
|
28922
|
+
GeocodingComponent,
|
|
28394
28923
|
],
|
|
28395
28924
|
exports: [
|
|
28396
28925
|
MapContextComponent,
|
|
@@ -28398,6 +28927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28398
28927
|
LayersPanelComponent,
|
|
28399
28928
|
AddLayerFromCatalogComponent,
|
|
28400
28929
|
MapContainerComponent,
|
|
28930
|
+
GeocodingComponent,
|
|
28401
28931
|
],
|
|
28402
28932
|
imports: [
|
|
28403
28933
|
CommonModule,
|
|
@@ -28418,6 +28948,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28418
28948
|
useValue: defaultMapOptions,
|
|
28419
28949
|
},
|
|
28420
28950
|
MapFacade,
|
|
28951
|
+
{
|
|
28952
|
+
provide: GEOCODING_PROVIDER,
|
|
28953
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28954
|
+
},
|
|
28421
28955
|
],
|
|
28422
28956
|
}]
|
|
28423
28957
|
}] });
|
|
@@ -28512,7 +29046,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28512
29046
|
...state,
|
|
28513
29047
|
chartConfig,
|
|
28514
29048
|
})), on(close, (state) => {
|
|
28515
|
-
// eslint-disable-next-line
|
|
29049
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28516
29050
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28517
29051
|
return stateWithoutMd;
|
|
28518
29052
|
}));
|
|
@@ -29779,15 +30313,16 @@ class DataService {
|
|
|
29779
30313
|
// Pour DL toutes les données
|
|
29780
30314
|
return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
|
|
29781
30315
|
...wfsLink,
|
|
30316
|
+
type: 'download',
|
|
29782
30317
|
url: new URL(urls[format]),
|
|
29783
|
-
mimeType: getMimeTypeForFormat(
|
|
30318
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29784
30319
|
}))));
|
|
29785
30320
|
}
|
|
29786
30321
|
getDownloadLinksFromEsriRest(esriRestLink) {
|
|
29787
30322
|
return ['json', 'geojson'].map((format) => ({
|
|
29788
30323
|
...esriRestLink,
|
|
29789
30324
|
url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
|
|
29790
|
-
mimeType: getMimeTypeForFormat(
|
|
30325
|
+
mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
|
|
29791
30326
|
}));
|
|
29792
30327
|
}
|
|
29793
30328
|
readAsGeoJson(link) {
|
|
@@ -30181,12 +30716,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30181
30716
|
}] } });
|
|
30182
30717
|
|
|
30183
30718
|
class MapViewComponent {
|
|
30184
|
-
constructor(mdViewFacade, mapManager, mapUtils, dataService,
|
|
30719
|
+
constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
|
|
30185
30720
|
this.mdViewFacade = mdViewFacade;
|
|
30186
30721
|
this.mapManager = mapManager;
|
|
30187
30722
|
this.mapUtils = mapUtils;
|
|
30188
30723
|
this.dataService = dataService;
|
|
30189
|
-
this.proxy = proxy;
|
|
30190
30724
|
this.featureInfo = featureInfo;
|
|
30191
30725
|
this.changeRef = changeRef;
|
|
30192
30726
|
this.styleService = styleService;
|
|
@@ -30221,7 +30755,7 @@ class MapViewComponent {
|
|
|
30221
30755
|
return of([]);
|
|
30222
30756
|
}), finalize(() => (this.loading = false)));
|
|
30223
30757
|
}));
|
|
30224
|
-
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
|
|
30758
|
+
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
|
|
30225
30759
|
console.warn(error); // FIXME: report this to the user somehow
|
|
30226
30760
|
return of(undefined);
|
|
30227
30761
|
}), map$1((extent) => ({
|
|
@@ -30229,7 +30763,18 @@ class MapViewComponent {
|
|
|
30229
30763
|
view: {
|
|
30230
30764
|
extent,
|
|
30231
30765
|
},
|
|
30232
|
-
})), tap$1(() => this.resetSelection()))))
|
|
30766
|
+
})), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
30767
|
+
if (context.view.extent)
|
|
30768
|
+
return context;
|
|
30769
|
+
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
30770
|
+
return {
|
|
30771
|
+
...context,
|
|
30772
|
+
view: {
|
|
30773
|
+
...context.view,
|
|
30774
|
+
extent,
|
|
30775
|
+
},
|
|
30776
|
+
};
|
|
30777
|
+
}));
|
|
30233
30778
|
}
|
|
30234
30779
|
ngOnDestroy() {
|
|
30235
30780
|
this.subscription.unsubscribe();
|
|
@@ -30282,13 +30827,13 @@ class MapViewComponent {
|
|
|
30282
30827
|
selectLinkToDisplay(link) {
|
|
30283
30828
|
this.selectedLinkIndex$.next(link);
|
|
30284
30829
|
}
|
|
30285
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token:
|
|
30830
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30286
30831
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30287
30832
|
}
|
|
30288
30833
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
30289
30834
|
type: Component,
|
|
30290
30835
|
args: [{ selector: 'gn-ui-map-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
|
|
30291
|
-
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type:
|
|
30836
|
+
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
|
|
30292
30837
|
|
|
30293
30838
|
class DataViewComponent {
|
|
30294
30839
|
constructor(mdViewFacade) {
|
|
@@ -30371,7 +30916,7 @@ class OrganisationPreviewComponent {
|
|
|
30371
30916
|
this.clickedOrganisation.emit(this.organisation);
|
|
30372
30917
|
}
|
|
30373
30918
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30374
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30919
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ 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"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30375
30920
|
}
|
|
30376
30921
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
|
|
30377
30922
|
type: Component,
|
|
@@ -30455,11 +31000,11 @@ class LanguageSwitcherComponent {
|
|
|
30455
31000
|
this.translate.use(value);
|
|
30456
31001
|
}
|
|
30457
31002
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30458
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center
|
|
31003
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
|
|
30459
31004
|
}
|
|
30460
31005
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
30461
31006
|
type: Component,
|
|
30462
|
-
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center
|
|
31007
|
+
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
30463
31008
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30464
31009
|
type: Optional
|
|
30465
31010
|
}, {
|
|
@@ -30740,13 +31285,6 @@ class MyOrgService {
|
|
|
30740
31285
|
constructor(platformService, orgService) {
|
|
30741
31286
|
this.platformService = platformService;
|
|
30742
31287
|
this.orgService = orgService;
|
|
30743
|
-
this.myOrgDataSubject = new BehaviorSubject({
|
|
30744
|
-
orgName: '',
|
|
30745
|
-
logoUrl: '',
|
|
30746
|
-
recordCount: 0,
|
|
30747
|
-
userCount: 0,
|
|
30748
|
-
userList: [],
|
|
30749
|
-
});
|
|
30750
31288
|
this.myOrgData$ = combineLatest([
|
|
30751
31289
|
this.platformService.getMe(),
|
|
30752
31290
|
this.platformService.getUsers(),
|
|
@@ -30765,7 +31303,7 @@ class MyOrgService {
|
|
|
30765
31303
|
userList,
|
|
30766
31304
|
userCount,
|
|
30767
31305
|
};
|
|
30768
|
-
}));
|
|
31306
|
+
}), shareReplay(1));
|
|
30769
31307
|
}
|
|
30770
31308
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
30771
31309
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
|
|
@@ -31458,11 +31996,11 @@ class RecordFormComponent {
|
|
|
31458
31996
|
return field.config.model;
|
|
31459
31997
|
}
|
|
31460
31998
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31461
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31999
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31462
32000
|
}
|
|
31463
32001
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31464
32002
|
type: Component,
|
|
31465
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
32003
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
31466
32004
|
}], ctorParameters: function () { return [{ type: EditorService }]; } });
|
|
31467
32005
|
|
|
31468
32006
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -31830,5 +32368,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
31830
32368
|
* Generated bundle index. Do not edit.
|
|
31831
32369
|
*/
|
|
31832
32370
|
|
|
31833
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService,
|
|
32371
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
|
|
31834
32372
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|